/*
 * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
 * Copyright (C) 2009 Anthony Ricaud <rik@webkit.org>
 *
 * 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.
 * 3.  Neither the name of Apple Computer, Inc. ("Apple") 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 APPLE 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 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.
 */

.scripts-pause-on-exceptions-status-bar-item .glyph {
    -webkit-mask-position: -256px 0;
}

.scripts-pause-on-exceptions-status-bar-item.toggled-all .glyph {
    background-color: rgb(66, 129, 235);
}

.scripts-pause-on-exceptions-status-bar-item.toggled-uncaught .glyph {
    background-color: purple;
}

.scripts-toggle-pretty-print-status-bar-item .glyph {
    -webkit-mask-position: -256px -24px;
}

.scripts-toggle-pretty-print-status-bar-item.toggled .glyph {
    background-color: rgb(66, 129, 235);
}

.evaluate-snippet-status-bar-item .glyph {
    -webkit-mask-position: -64px -48px;
}

.evaluate-snippet-status-bar-item.toggled .glyph {
    background-color: rgb(66, 129, 235);
}

#scripts-debug-toolbar {
    position: relative;
    margin-top: -1px;
    height: 24px;
    border-bottom: 1px solid rgb(202, 202, 202);
}

#scripts-editor-toolbar {
    position: relative;
    margin-top: -1px;
    height: 24px;
}

#scripts-status-bar .status-bar-item img {
    margin-top: 2px;
}

#scripts-debug-toolbar .glyph {
    opacity: 0.8;
}

.scripts-run-snippet .glyph {
    -webkit-mask-position: -64px -48px;
}

.scripts-pause .glyph {
    -webkit-mask-position: -32px -72px;
}

.scripts-pause.toggled-on .glyph {
    -webkit-mask-position: 0 -72px;
}

.scripts-step-over .glyph {
    -webkit-mask-position: -128px -72px;
}

.scripts-step-into .glyph {
    -webkit-mask-position: -64px -72px;
}

.scripts-step-out .glyph {
    -webkit-mask-position: -96px -72px;
}

.scripts-toggle-breakpoints.toggled-on .glyph {
    -webkit-mask-position: -32px 0;
}

.scripts-toggle-breakpoints .glyph {
    -webkit-mask-position: 0 -24px;
}

#scripts-debugger-status {
    position: absolute;
    line-height: 24px;
    top: 0;
    right: 8px;
}

.status-bar-item.scripts-navigator-show-hide-button,
.status-bar-item.scripts-debugger-show-hide-button {
    opacity: 0.7;
}

button.status-bar-item.scripts-navigator-show-hide-button {
    left: 0;
}

button.status-bar-item.scripts-navigator-show-hide-button.toggled-overlay {
    left: auto;
    right: 15px;
}

.scripts-views-container {
    position: absolute;
    top: 23px;
    right: 0;
    bottom: 0;
    left: 0;
}

.script-view {
    display: none;
    overflow: hidden;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}

.script-view.visible {
    display: block;
}

.dedicated-worker-item {
    margin: 5px 0 5px 1px;
}

#shared-workers-list {
    margin: 5px 0 5px 20px;
    font-style:italic;
}

#pause-workers-checkbox > input {
    position: relative;
    top: 2px;
}

#scripts-editor-container-tabbed-pane .tabbed-pane-header {
    background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#F5F5F5), to(#E5E5E5));
}

#scripts-editor-container-tabbed-pane .tabbed-pane-header-contents {
    margin-left: 20px;
    margin-right: 36px;
}

#scripts-editor-container-tabbed-pane .tabbed-pane-header-tab {
    border-bottom: 1px solid #BBB;
}

.function-location-link {
    float: right;
    margin-left: 10px;
}

.function-popover-title {
    border-bottom: 1px solid #AAA;
    margin-bottom: 3px;
    padding-bottom: 2px;
}

.function-popover-title .function-name {
    font-weight: bold;
}

button.status-bar-item.scripts-debugger-show-hide-button {
    right: 15px;
}

.split-view-horizontal button.status-bar-item.scripts-debugger-show-hide-button,
.split-view-horizontal #scripts-debug-sidebar-resizer-widget {
    display: none;
}

button.status-bar-item.scripts-debugger-show-hide-button.toggled-left {
    right: 0;
}

div.sidebar-pane-stack#scripts-debug-sidebar-contents,
#scripts-sidebar-stack-pane {
    top: 23px;
    overflow: auto;
}

.workers-list > li {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    margin-left: 1em;
    font-size: 12px;
}

a.worker-item {
    color: rgb(33%, 33%, 33%);
    cursor: pointer;
    text-decoration: none;
}

a.worker-item:hover {
    color: rgb(15%, 15%, 15%);
}

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

.tabbed-pane-placeholder {
    font-size: 14px;
    text-align: center;
    margin-top: 20px;
    text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;
}

.tabbed-pane-header-tab-icon {
    width: 13px;
    height: 10px;
    margin-top: 3px;
    float: left;
    display: block;
    margin-right: 1px;
}

.editor-container-unsaved-committed-changes-icon {
    background-image: url(Images/statusbarButtonGlyphs.png);
    background-size: 320px 120px;
    background-position: -202px -107px;
}
