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

.spreadsheet-style-declaration-editor {
    position: relative;
    clear: both;
}

.spreadsheet-style-declaration-editor .property {
    padding-right: var(--css-declaration-horizontal-padding);
    padding-left: calc(var(--css-declaration-horizontal-padding) + 17px);
}

.spreadsheet-style-declaration-editor .property:not(.disabled) .name {
    color: var(--syntax-highlight-boolean-color);
}

.spreadsheet-style-declaration-editor .property:not(.disabled) .value {
    color: black;
}

.spreadsheet-style-declaration-editor :matches(.name, .value).editing {
    outline: 1px solid white !important;
    box-shadow: 0 1px 2px 1px hsla(0, 0%, 0%, 0.6);
    margin-bottom: 0 !important;
    padding-bottom: 0 !important;
}

.spreadsheet-style-declaration-editor .value.editing {
    display: inline-block;
    position: relative;
    z-index: 1;
    max-width: 100%;
}

.spreadsheet-style-declaration-editor.no-properties {
    display: none;
}

.spreadsheet-style-declaration-editor .property-toggle {
    visibility: hidden;
    position: absolute;
    left: calc(var(--css-declaration-horizontal-padding) + 1px);
    width: 10px;
    height: 10px;
    margin: 0;
}

.spreadsheet-css-declaration:matches(:hover, :focus) .property:not(:matches(.invalid-name, .invalid-value)) .property-toggle,
.spreadsheet-style-declaration-editor .property.disabled .property-toggle {
    visibility: visible;
}

.spreadsheet-style-declaration-editor .property.disabled {
    color: var(--syntax-highlight-comment-color) !important;
}

.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > * {
    text-decoration: line-through;
    -webkit-text-decoration-color: hsla(0, 0%, 0%, 0.6);
}

.spreadsheet-style-declaration-editor .property.invalid-name:not(.disabled) .content > * {
    -webkit-text-decoration-color: hsla(0, 100%, 50%, 0.5);
}

.spreadsheet-style-declaration-editor .property.invalid-value:not(.disabled) .content .value {
    text-decoration: line-through;
    -webkit-text-decoration-color: hsla(0, 100%, 50%, 0.5);
}

.spreadsheet-style-declaration-editor .property.has-warning {
    background-color: hsl(51, 87%, 93%);
}

.spreadsheet-style-declaration-editor .property .warning {
    display: none;
}

.spreadsheet-style-declaration-editor .property.has-warning .warning {
    position: absolute;
    right: 0;
    display: inline-block;
    width: calc(20px + var(--css-declaration-horizontal-padding));
    height: 13px;

    background-image: url(../Images/Warning.svg);
    background-color: hsl(43, 97%, 84%);
    background-repeat: no-repeat;
    background-size: 9px;
    background-position-y: center;
    background-position-x: 7px;

    -webkit-clip-path: polygon(0% 50%, 6px 0%, 100% 0%, 100% 100%, 6px 100%);
}

.spreadsheet-style-declaration-editor .property.not-inherited .content > * {
    opacity: 0.5;
}

.spreadsheet-style-declaration-editor .completion-hint {
    color: hsl(0, 0%, 50%) !important;
}

.spreadsheet-style-declaration-editor .property.highlighted {
    animation: style-property-highlight 2s;
}

@keyframes style-property-highlight {
    from { background-color: yellow; }
}

.spreadsheet-style-declaration-editor .property:not(.disabled) .token-link {
    color: var(--syntax-highlight-link-color);
}

.spreadsheet-style-declaration-editor .property:not(.disabled) .token-string {
    color: var(--syntax-highlight-string-color);
}

.meta-key-pressed .spreadsheet-css-declaration:not(.locked) :matches(.name, .value):not(.editing):hover {
    color: blue !important;
    text-decoration: underline !important;
    cursor: pointer !important;
    -webkit-text-stroke-width: 0 !important;
}

.spreadsheet-style-declaration-editor .property:not(.disabled) .token-comment {
    color: var(--syntax-highlight-comment-color);
}
