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

.style-declaration-section {
    display: flex;
    flex-direction: column;

    padding: 3px;
}

.style-declaration-section.locked {
    background-color: hsl(0, 0%, 97%);
}

.style-declaration-section:not(.locked) {
    background-color: white;
    border-top-color: hsla(0, 0%, 0%, 0.2);
}

.style-declaration-section.last-in-group {
    margin-bottom: 10px;

    border-bottom: 1px solid hsla(0, 0%, 0%, 0.3);
}

.style-declaration-section + .style-declaration-section {
    border-top: 1px solid hsla(0, 0%, 0%, 0.15);
}

.style-declaration-section:last-child {
    margin-bottom: 0 !important;
}

.style-declaration-section > .header {
    position: relative;
    font-size: 11px;
    line-height: 12px;

    --style-declaration-section-header-padding-start: 25px;
    --style-declaration-section-header-padding-end: 5px;
}

.style-declaration-section > .header {
    padding: 4px var(--style-declaration-section-header-padding-end) 3px var(--style-declaration-section-header-padding-start);
}

.style-declaration-section.locked > .header > .locked-icon {
    width: 8px;
    height: 10px;
    content: url(../Images/Locked.svg);
}

.style-declaration-section.locked > .header > .locked-icon {
    float: right;
    margin-left: 5px;
}

.style-declaration-section > .header > .icon {
    position: absolute;
    top: 2px;
    left: 4px;
    width: 16px;
    height: 16px;
}

.style-declaration-section > .header > .icon.toggle-able:hover {
    filter: brightness(0.9);
}

.style-declaration-section > .header > .icon.toggle-able:active {
    filter: brightness(0.8);
}

.style-declaration-section:not(.invalid-selector).rule-disabled > .header > .icon {
    opacity: 0.5;
}

.style-declaration-section > .header > textarea {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    padding: 0;
    font-family: Menlo, monospace;
    color: black;
    background: transparent;
    border: none;
    outline: none;
    opacity: 0;
    resize: none;
    -webkit-appearance: none;

    --style-declaration-section-header-textarea-margin-start: var(--style-declaration-section-header-padding-start);
    --style-declaration-section-header-textarea-margin-end: var(--style-declaration-section-header-padding-end);
}

.style-declaration-section > .header > textarea {
    margin: 4px var(--style-declaration-section-header-textarea-margin-end) 3px var(--style-declaration-section-header-textarea-margin-start);
}

.style-declaration-section > .header > textarea:focus {
    opacity: 1;
}

.style-declaration-section > .header > textarea:focus + .selector {
    opacity: 0;
}

.style-declaration-section > .header > .selector {
    font-family: Menlo, monospace;
    color: hsl(0, 0%, 50%);
    word-wrap: break-word;
}

.style-declaration-section:matches(.locked, .selector-locked) > .header > .selector {
    -webkit-user-select: text;
}

.style-declaration-section > .header > .selector > .matched {
    color: black;
}

.style-declaration-section > .header > .origin {
    position: relative;
    z-index: 1;

    line-height: 10px;

    color: hsl(0, 0%, 50%);

    word-wrap: break-word;
    white-space: nowrap;
}

.style-declaration-section > .header > .origin a {
    white-space: normal;
}

.style-declaration-section > .header > .origin > .go-to-link {
    color: inherit !important;
}

.style-declaration-section.invalid-selector > .header > .icon {
    top: 4px;
    left: 6px;
    width: 12px;
    height: 12px;
    content: url(../Images/Error.svg);
}

.style-declaration-section.invalid-selector > .header > .selector,
.style-declaration-section.invalid-selector > .header > .selector > * {
    color: red;
}

@media (-webkit-min-device-pixel-ratio: 2) {
    .style-declaration-section,
    .sidebar > .panel.details.css-style > .content > .pseudo-classes {
        border-width: 0.5px !important;
    }
}
