/*
 * 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.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;
}

#undocked-title-area {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    height: var(--undocked-title-area-height);
    background-image: linear-gradient(to bottom, hsl(0, 0%, 92%), hsl(0, 0%, 87%));
    box-shadow: inset hsla(0, 0%, 100%, 0.5) 0 1px 1px;
}

body.docked #undocked-title-area {
    display: none;
}

body.window-inactive #undocked-title-area {
    background-color: hsl(0, 0%, 96%);
    background-image: none;
}

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(--undocked-title-area-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%;
}

#layout-measurement-container {
    position: absolute;
    visibility: hidden;
    pointer-events: none;
}

.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: 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;
}

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

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

.navigation-item-help > .navigation-bar > .item {
    height: 100%;
    padding: 0 4px !important;
    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);
}

body[dir=rtl] [dir=ltr] .go-to-arrow {
    transform: revert;
}

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

:focus .selected .go-to-arrow:active,
.selected:focus .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%);
}

.reference-page-link {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    width: 20px;
    height: 20px;
    font-size: 14px;
    line-height: 18px;
    color: var(--text-color);
    text-decoration: none;
    background-color: var(--button-background-color);
    border: var(--stroke-width) solid var(--border-color);
    border-radius: 50%;
    box-shadow: 0 var(--stroke-width) 1px var(--border-color);
    cursor: default;

    --stroke-width: 0.5px;
}

.reference-page-link:active {
    background-color: var(--button-background-color-active);
}

@media (-webkit-device-pixel-ratio: 1) {
    .reference-page-link {
        -webkit-padding-start: 1px;

        --stroke-width: 1px;
    }
}

@media (prefers-color-scheme: dark) {
    .reference-page-link {
        border: var(--stroke-width) solid hsl(0, 0%, 20%);
        box-shadow: 0 var(--stroke-width) 1px hsl(0, 0%, 20%);
    }

    .reference-page-link:active {
        background-color: hsl(0, 0%, 50%);
    }
}

@keyframes tab-bar-console-item-pulse {
    50% { opacity: 0.6; }
}

.tab-bar > .navigation-bar :matches(.console-warnings, .console-errors):not(.disabled).pulsing {
    animation-name: tab-bar-console-item-pulse;
    animation-duration: 0.75s;
}

.device-settings-content {
    position: relative;
    padding: 0 4px;
}

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

.device-settings-content > table > 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;
}

.device-settings-content > .reference-page-link-container {
    position: absolute;
    bottom: 0.5em;
}

body[dir=ltr] .device-settings-content > .reference-page-link-container {
    right: 0.5em;
}

body[dir=rtl] .device-settings-content > .reference-page-link-container {
    left: 0.5em;
}

@media (prefers-color-scheme: dark) {
    #undocked-title-area {
        background-image: linear-gradient(to bottom, hsl(0, 0%, 26%), hsl(0, 0%, 23%));
        box-shadow: none;
    }

    body.window-inactive #undocked-title-area {
        background-color: var(--background-color);
    }

    .go-to-arrow {
        filter: invert();
    }

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

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

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