/*
 * Copyright (C) 2013 Google 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:
 *
 *     * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 *     * 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.
 *     * Neither the name of Google Inc. nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 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 THE COPYRIGHT
 * OWNER OR 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.
 */

#sources-panel-sources-view {
    flex: auto;
    position: relative;
}

#sources-panel-sources-view .sources-toolbar {
    display: flex;
    flex: 0 0 27px;
    background-color: var(--toolbar-bg-color);
    border-top: var(--divider-border);
    overflow: hidden;
    z-index: 0;
}

.sources-toolbar .toolbar {
    cursor: default;
}

.sources-toolbar-spacer {
    flex: auto;
    pointer-events: none;
}

.source-frame-debugger-script {
    background-color: rgba(255, 255, 194, 0.5);
}

.-theme-with-dark-background .source-frame-debugger-script {
    background-color: #444;
}

.source-frame-breakpoint-condition {
    z-index: 30;
    padding: 4px;
    background-color: #e6e6e6;
    border-radius: 7px;
    border: 2px solid #bababa;
    width: 90%;
    pointer-events: auto;
}

.source-frame-breakpoint-message {
    background-color: transparent;
    font-weight: normal;
    text-align: left;
    text-shadow: none;
    color: rgb(85, 85, 85);
    cursor: default;
    margin: 0 0 2px 0;
}

#source-frame-breakpoint-condition {
    margin: 0;
    border: 1px inset rgb(190, 190, 190) !important;
    width: 100%;
    box-shadow: none !important;
    outline: none !important;
}

@-webkit-keyframes source-frame-value-update-highlight-animation {
    from {
        background-color: inherit;
        color: inherit;
    }
    10% {
        background-color: rgb(158, 54, 153);
        color: white;
    }
    to {
        background-color: inherit;
        color: inherit;
    }
}

.source-frame-value-update-highlight {
    -webkit-animation: source-frame-value-update-highlight-animation 0.8s 1 cubic-bezier(0, 0, 0.2, 1);
    border-radius: 2px;
}

.diff-entry-insert .diff-marker {
    border-left: 4px solid hsla(144, 55%, 37%, 1);
}

.diff-entry-insert .CodeMirror-gutter-background {
    background-color: hsla(144,55%,49%,.2);
}

.diff-entry-modify .diff-marker {
    border-left: 4px solid #9C27B0;
}

.diff-entry-modify .CodeMirror-gutter-background {
    background-color: rgba(186,104,200,0.2);
}

.diff-entry-delete .diff-marker {
    width: 0;
    height: 0;
    border-top: 6px solid transparent;
    border-bottom: 6px solid transparent;
    border-left: 6px solid #D32F2F;
    position: relative;
    top: 6px;
    cursor: pointer;
    left: 0px;
}

.diff-entry-delete .CodeMirror-gutter-background {
    border-bottom: 2px solid #D32F2F;
}

.CodeMirror-gutter-diff {
    width: 4px;
}

.highlight-line-modification {
    animation: source-line-modification-background-fadeout 0.4s 0s;
    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}

.highlight-line-modification span {
    animation: source-line-modification-foreground-fadeout 0.4s 0s;
    animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
}

@keyframes source-line-modification-background-fadeout {
    from { background-color: rgba(158, 54, 153, 0.5); }
    50% { background-color: rgba(158, 54, 153, 0.5); }
    90% { background-color: rgba(158, 54, 153, 0); }
    to { background-color: transparent; }
}

@keyframes source-line-modification-foreground-fadeout {
    from { color: white; }
    50% { color: white; }
    90% { color: initial; }
    to { color: initial; }
}
