/*
 * Copyright (C) 2013-2017 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGE.
 */

* {
    box-sizing: border-box;
}

:root {
    color-scheme: light dark;
}

summary {
    outline: none;
}

summary::-webkit-details-marker {
    color: hsl(0, 0%, 55%);
}

body {
    font-family: -webkit-system-font, sans-serif;
    font-size: 11px;

    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;

    padding: 0;
    margin: 0;

    overflow: hidden;

    -webkit-user-select: none;
    -webkit-user-drag: none;

    cursor: default;

    -webkit-font-smoothing: subpixel-antialiased;

    background-color: var(--background-color-content);
}

body.docked.bottom {
    border-top: 1px solid var(--border-color);
}

body.docked.right {
    border-left: 1px solid var(--border-color);
}

body.docked.left {
    border-right: 1px solid var(--border-color);
}

#docked-resizer {
    display: none;

    z-index: var(--z-index-resizer);
}

body.docked #docked-resizer {
    display: block;

    position: absolute;
    top: 0;
}

body.docked.bottom #docked-resizer {
    left: 0;
    right: 0;
    height: 3px;

    cursor: row-resize;
}

body.docked.right #docked-resizer {
    left: 0;
    bottom: 0;
    width: 3px;

    cursor: col-resize;
}

body.docked.left #docked-resizer {
    right: 0;
    bottom: 0;
    width: 3px;

    cursor: col-resize;
}

body.docked.bottom #toolbar {
    cursor: row-resize;
}

body.docked.bottom #toolbar .item:not(.flexible-space) {
    cursor: default;
}

input[type=range] {
    -webkit-appearance: none;
}

input[type=range]::-webkit-slider-thumb {
    margin-top: -7px;
}

input[type=range]::-webkit-slider-runnable-track {
    height: 1px;
    margin-top: 1px;
    background-color: var(--selected-background-color);
}

#main {
    position: absolute;
    top: calc(var(--toolbar-height) + var(--tab-bar-height));
    left: 0;
    right: 0;
    bottom: 0;

    display: flex;
    flex-direction: column;

    background-color: var(--background-color-content);

    /* The position and z-index are needed to make negative z-index work in the DOM tree. */
    z-index: 0;
}

#navigation-sidebar {
    width: 300px;
    height: 100%;
}

body.docked:matches(.right, .left) #navigation-sidebar.collapsed > .resizer {
    pointer-events: none;
}

#content {
    display: flex;
    height: 100%; /* This reduces paint areas when typing in the console. http://webkit.org/b/145324 */
    flex: 1;
}

#tab-browser {
    flex: 1;
}

#details-sidebar {
    width: 300px;
    height: 100%;
}

.message-text-view {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: var(--z-index-popover);
    min-height: -webkit-min-content;
    white-space: pre-wrap;
    text-align: center;
    font-size: 13px;
    color: var(--text-color-gray-medium);
}

.message-text-view > .message {
    display: inline-block;
    padding: 15px;
    font-size: var(--message-text-view-font-size);
}

.message-text-view > .message + button {
    margin-bottom: 15px;
}

.message-text-view .navigation-item-help {
    display: block;
    line-height: 22px;
}

.message-text-view .navigation-item-help .navigation-bar {
    display: inline-flex;
    height: 20px;
    padding: 0 4px;
    border-bottom: none;
    vertical-align: -3px;
}

.message-text-view .navigation-item-help .navigation-bar > .item {
    height: 100%;
    padding: 0 4px;
    font-size: 11px;
    border-radius: 4px;
    border: solid 1px var(--border-color);
}

.message-text-view.error {
    color: var(--error-text-color);
}

.resource-link {
    display: block;
}

.resource-link + .resource-link {
    margin-top: 2px;
}

.resource-link,
.go-to-link {
    color: var(--link-text-color);
    text-decoration: underline;
    cursor: pointer;
    -webkit-user-select: none;
}

.go-to-link:not(.dont-float) {
    max-width: 100%;
    -webkit-margin-start: 5px;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;
}

body[dir=ltr] .go-to-link:not(.dont-float) {
    float: right;
}

body[dir=rtl] .go-to-link:not(.dont-float) {
    float: left;
}

.go-to-arrow {
    -webkit-appearance: none;

    padding: 0;
    margin: 0;
    border: none;

    background-color: transparent;
    background-image: url(../Images/GoToArrow.svg#normal);
    background-repeat: no-repeat;
    background-position: center;
    background-size: 10px 10px;

    width: 16px;
    height: 16px;

 /* Workaround: for text boxes overlapping float:right. Give go-to arrows a z-index to ensure they are clickable.
    <rdar://problem/11536832> Cannot access content view from Instruments navigator if name of file is truncated */
    position: relative;
    z-index: 1;
}

.go-to-arrow:active {
    background-image: url(../Images/GoToArrow.svg#active);
}

body[dir=rtl] .go-to-arrow {
    transform: scaleX(-1);
}

:focus .selected .go-to-arrow {
    background-image: url(../Images/GoToArrow.svg#selected);
}

:focus .selected .go-to-arrow:active {
    background-image: url(../Images/GoToArrow.svg#selected-active);
}

.search-settings {
    display: inline-block;
    margin: 0;
    padding: 0;
    background-color: transparent;
    border: none;
    -webkit-appearance: none;
}

.search-settings > .glyph {
    width: 16px;
    height: 16px;
    color: var(--glyph-color);
}

.search-settings:active > .glyph {
    color: var(--glyph-color-pressed);
}

.search-settings.active > .glyph {
    color: var(--glyph-color-active);
}

.search-settings:active.active > .glyph {
    color: var(--glyph-color-active-pressed);
}

.hidden {
    display: none !important;
}

.expand-list-button {
    -webkit-appearance: none;
    text-decoration: underline;
    background-color: transparent;
    padding: 0;
    margin: 0;
    border: 0;
    cursor: pointer;
    color: black;
}

.node-link {
    text-decoration: underline;
    cursor: pointer;
}

.node-link-list, .node-link-list li:not([hidden]) {
    display: block;
    margin: 0;
    padding: 0;
    line-height: 1.2;
}

.node-link-list li {
    margin: 0 0 0.4em;
}

.node-link-list li:last-child {
    margin: 0;
}

.value-with-clarification .clarification {
    color: hsl(0, 0%, 40%);
}

.bouncy-highlight {
    position: absolute;
    z-index: var(--z-index-highlight);

    box-shadow: inset hsl(50, 91%, 76%) 0 -1px 0, hsl(52, 56%, 60%) 0 1px 1px, hsla(0, 0%, 0%, 0.33) 0 1px 2px 1px;

    background-color: hsl(54, 93%, 70%);
    color: black !important;

    padding: 2px 4px;
    margin-top: -2px;
    margin-left: -4px;

    -webkit-user-select: none;
    pointer-events: none;

    animation-name: bouncy-highlight-animation;
    animation-duration: 750ms;
    animation-timing-function: ease-in-out;

    opacity: 0;
}

@keyframes bouncy-highlight-animation {
    0% {
        transform: scale(1);
        opacity: 1;
    }

    12.5% {
        transform: scale(1.25);
    }

    25% {
        transform: scale(1);
    }

    62.5% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

:matches(img, canvas).show-grid {
    background-color: var(--checkerboard-light-square);
    background-image: linear-gradient(315deg, transparent 75%, var(--checkerboard-dark-square) 75%),
                      linear-gradient(45deg, transparent 75%, var(--checkerboard-dark-square) 75%),
                      linear-gradient(315deg, var(--checkerboard-dark-square) 25%, transparent 25%),
                      linear-gradient(45deg, var(--checkerboard-dark-square) 25%, transparent 25%);
    background-size: 20px 20px;
    background-position: 10px 10px, 10px 0px, 0 0, 0 10px;

    --checkerboard-light-square: transparent;
    --checkerboard-dark-square: hsl(0, 0%, 95%);
}

.device-settings-content {
    padding: 0 4px;
    border-collapse: separate;
    border-spacing: 4px 8px;
}

.device-settings-content > tr > td:first-child {
    text-align: end;
    vertical-align: top;
}

.device-settings-content .container {
    display: flex;
}

.device-settings-content .container > * + * {
    -webkit-margin-start: 8px;
}

.device-settings-content .column {
    display: flex;
    flex-direction: column;
}

.device-settings-content .user-agent select {
    display: block;
    margin: -2px 0 0;
}

.device-settings-content .user-agent input {
    display: block;
    width: 100%;
    margin: 6px 0 0;
}

.device-settings-content label + label {
    margin-top: 4px;
}


.device-settings-content label > input {
    margin: 0;
    -webkit-margin-start: 0.5px;
    -webkit-margin-end: 4px;
}

@media (prefers-color-scheme: dark) {
    .go-to-arrow {
        filter: invert();
    }

    :focus .selected .go-to-arrow {
        filter: unset;
    }

    .expand-list-button {
        color: inherit;
    }

    :matches(img, canvas).show-grid {
        --checkerboard-light-square: white;
        --checkerboard-dark-square: hsl(0, 0%, 80%);
    }
}
