/*
 * Copyright (c) 2014 The Chromium Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

.elements-disclosure {
    width: 100%;
    display: inline-block;
    line-height: normal;
}

.elements-disclosure li {
    /** Keep margin-left & padding-left in sync with ElementsTreeElements.updateDecorators **/
    padding: 0 0 0 14px;
    margin-top: 1px;
    margin-left: -2px;
    word-wrap: break-word;
    position: relative;
    min-height: 15px;
    line-height: 15px;
}

.elements-disclosure li.parent {
    /** Keep it in sync with ElementsTreeElements.updateDecorators **/
    margin-left: -13px;
}

.elements-disclosure li .selected-hint:before {
    font-style: italic;
    content: " == $0";
    opacity: 0;
    position: absolute;
    white-space: pre;
}

.elements-disclosure li.selected .selected-hint:before {
    opacity: 0.6;
    color: var(--selection-inactive-fg-color);
}

.elements-disclosure li.selected:focus .selected-hint:before {
    color: var(--selection-fg-color);
}

.elements-disclosure li.parent::before {
    box-sizing: border-box;
}

.elements-disclosure li.parent::before {
    -webkit-user-select: none;
    -webkit-mask-image: url(Images/treeoutlineTriangles.png);
    -webkit-mask-size: 32px 24px;
    content: '\00a0\00a0';
    color: transparent;
    text-shadow: none;
    margin-right: -3px;
}

.elements-disclosure li.always-parent::before {
    visibility: hidden;
}

@media (-webkit-min-device-pixel-ratio: 1.1) {
.elements-disclosure li.parent::before {
    -webkit-mask-image: url(Images/treeoutlineTriangles_2x.png);
}
} /* media */

.elements-disclosure li.parent::before {
    -webkit-mask-position: 0 0;
    background-color: #727272;
}

.elements-disclosure li .selection {
    display: none;
    z-index: -1;
}

.elements-disclosure li.hovered:not(.selected) .selection {
    display: block;
    left: 3px;
    right: 3px;
    background-color: rgba(56, 121, 217, 0.1);
    border-radius: 5px;
}

.elements-disclosure li.parent.expanded::before {
    -webkit-mask-position: -16px 0;
}

.elements-disclosure li.selected .selection {
    display: block;
    background-color: var(--selection-inactive-bg-color);
}

.elements-disclosure ol {
    list-style-type: none;
    /** Keep it in sync with ElementsTreeElements.updateDecorators **/
    -webkit-padding-start: 12px;
    margin: 0;
}

.elements-disclosure ol.children {
    display: none;
}

.elements-disclosure ol.children.expanded {
    display: block;
}

.elements-disclosure li .webkit-html-tag.close {
    margin-left: -12px;
}

.elements-disclosure > ol {
    position: relative;
    margin: 0;
    cursor: default;
    min-width: 100%;
    min-height: 100%;
    padding-left: 2px;
}

.elements-disclosure ol li.selected:focus {
    color: var(--selection-fg-color);
}

.elements-disclosure ol li.parent.selected:focus::before {
    background-color: var(--selection-fg-color);
}

.elements-disclosure ol li.selected:focus * {
    color: inherit;
}

.elements-disclosure ol li.selected:focus .selection {
    background-color: var(--selection-bg-color);
}

.elements-tree-outline ol.shadow-root-depth-4 {
    background-color: rgba(0, 0, 0, 0.04);
}

.elements-tree-outline ol.shadow-root-depth-3 {
    background-color: rgba(0, 0, 0, 0.03);
}

.elements-tree-outline ol.shadow-root-depth-2 {
    background-color: rgba(0, 0, 0, 0.02);
}

.elements-tree-outline ol.shadow-root-depth-1 {
    background-color: rgba(0, 0, 0, 0.01);
}

.elements-tree-outline ol.shadow-root-deep {
    background-color: transparent;
}

.elements-tree-editor {
    box-shadow: var(--drop-shadow);
    margin-right: 4px;
}

.elements-disclosure li.elements-drag-over .selection {
    display: block;
    margin-top: -2px;
    border-top: 2px solid var(--selection-bg-color);
}

.elements-disclosure li.in-clipboard .highlight {
    outline: 1px dotted darkgrey;
}

.CodeMirror {
    background-color: white;
    height: 300px !important;
}

.CodeMirror-lines {
    padding: 0;
}

.CodeMirror pre {
    padding: 0;
}

button, input, select {
  font-family: inherit;
  font-size: inherit;
}

.editing {
    box-shadow: var(--drop-shadow);
    background-color: white;
    text-overflow: clip !important;
    padding-left: 2px;
    margin-left: -2px;
    padding-right: 2px;
    margin-right: -2px;
    margin-bottom: -1px;
    padding-bottom: 1px;
    opacity: 1.0 !important;
}

.editing,
.editing * {
    color: #222 !important;
    text-decoration: none !important;
}

.editing br {
    display: none;
}

.elements-gutter-decoration {
    position: absolute;
    left: 2px;
    margin-top: 2px;
    height: 9px;
    width: 9px;
    border-radius: 5px;
    border: 1px solid orange;
    background-color: orange;
    cursor: pointer;
}

.elements-gutter-decoration.elements-has-decorated-children {
    opacity: 0.5;
}

.add-attribute {
    margin-left: 1px;
    margin-right: 1px;
    white-space: nowrap;
}

.elements-tree-nowrap, .elements-tree-nowrap .li {
    white-space: pre !important;
}

.elements-disclosure .elements-tree-nowrap li {
    word-wrap: normal;
}

/* DOM update highlight */
@-webkit-keyframes dom-update-highlight-animation {
    from {
        background-color: rgb(158, 54, 153);
        color: white;
    }
    80% {
        background-color: rgb(245, 219, 244);
        color: inherit;
    }
    to {
        background-color: inherit;
    }
}

@-webkit-keyframes dom-update-highlight-animation-dark {
    from {
        background-color: rgb(158, 54, 153);
        color: white;
    }
    80% {
        background-color: #333;
        color: inherit;
    }
    to {
        background-color: inherit;
    }
}

.dom-update-highlight {
    -webkit-animation: dom-update-highlight-animation 1.4s 1 cubic-bezier(0, 0, 0.2, 1);
    border-radius: 2px;
}

:host-context(.-theme-with-dark-background) .dom-update-highlight {
    -webkit-animation: dom-update-highlight-animation-dark 1.4s 1 cubic-bezier(0, 0, 0.2, 1);
}

.elements-disclosure.single-node li {
    padding-left: 2px;
}

.elements-tree-shortcut-title {
    color: rgb(87, 87, 87);
}

ol:hover > li > .elements-tree-shortcut-link {
    display: initial;
}

.elements-tree-shortcut-link {
    color: rgb(87, 87, 87);
    display: none;
}

ol li.selected:focus .webkit-html-tag-name,
ol li.selected:focus .webkit-html-close-tag-name,
ol li.selected:focus .webkit-html-attribute-value,
ol li.selected:focus .devtools-link {
    color: var(--selection-fg-color);
}

.elements-disclosure .gutter-container {
    position: absolute;
    top: 0;
    left: 0;
    cursor: pointer;
    width: 15px;
    height: 15px;
}

.gutter-menu-icon {
    display: none;
    transform: rotate(-90deg) scale(0.8);
    background-color: white;
    position: relative;
    left: -7px;
    top: -3px;
}

.elements-disclosure li.selected .gutter-container:not(.has-decorations) .gutter-menu-icon {
    display: block;
}

/** Guide line */
li.selected {
    z-index: 0;
}

li.hovered:not(.always-parent) + ol.children, .elements-tree-outline ol.shadow-root, li.selected:not(.always-parent) + ol.children {
    margin-left: 5px;
    -webkit-padding-start: 6px;
    border-width: 1px;
    border-left-style: solid;
}

li.hovered:not(.always-parent) + ol.children:not(.shadow-root) {
    border-color: hsla(0,0%,0%,0.1);
}

.elements-tree-outline ol.shadow-root {
    border-color: hsla(0,0%,80%,1);
}

li.selected:not(.always-parent) + ol.children {
    border-color: hsla(216,68%,80%,1) !important;
}
