/*
 * Copyright (C) 2013 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.
 */

.sidebar > .panel.navigation.debugger > .content {
    top: var(--navigation-bar-height);
}

.sidebar > .panel.navigation.debugger > .navigation-bar {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
}

.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-breakpoints {
    fill: none;
    stroke: var(--glyph-color);
}
.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-breakpoints.activated {
    fill: var(--glyph-color-active);
    stroke: var(--glyph-color-active);
}

.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-pause-resume {
    fill: none;
    stroke: var(--glyph-color);
}
.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-pause-resume.activated {
    stroke: var(--glyph-color-active);
}

.sidebar > .panel.navigation.debugger .warning-banner {
    text-align: center;
    font-size: 11px;

    padding: 11px 6px;
    margin-bottom: 6px;

    border-bottom: 1px solid var(--border-color);
    background-color: hsl(50, 100%, 94%);
}

.sidebar > .panel.navigation.debugger .tree-outline.single-thread > .item.thread {
    display: none;
}

.sidebar > .panel.navigation.debugger .tree-outline.single-thread {
    --tree-outline-single-thread-margin-start: -10px;
}

body[dir=ltr] .sidebar > .panel.navigation.debugger .tree-outline.single-thread {
    margin-left: var(--tree-outline-single-thread-margin-start);
}

body[dir=rtl] .sidebar > .panel.navigation.debugger .tree-outline.single-thread {
    margin-right: var(--tree-outline-single-thread-margin-start);
}

.sidebar > .panel.navigation.debugger .warning-banner > a {
    text-decoration: underline;
    cursor: pointer;
}

.sidebar > .panel.navigation.debugger .details-section {
    font-size: 11px;
}

.sidebar > .panel.navigation.debugger .details-section.paused-reason.collapsed > .header > .options {
    display: block;
}

.sidebar > .panel.navigation.debugger .details-section > .content {
    display: block;
}

.sidebar > .panel.navigation.debugger .details-section.collapsed > .content {
    display: none;
}

.sidebar > .panel.navigation.debugger .details-section > .content > .group {
    display: block;
}

.sidebar > .panel.navigation.debugger .details-section.scripts:not(.collapsed) {
    border-bottom: none;
}

.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node .titles {
    top: 3px;
    font-family: Menlo, monospace;
}

.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node .icon {
    content: url(../Images/DOMElement.svg);
}

.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node:not(:hover, .selected) .status .go-to-arrow {
    display: none;
}

.sidebar > .panel.navigation.debugger .details-section.xhr-breakpoints .item.breakpoint .subtitle {
    font-family: Menlo, monospace;
}
