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

/* Profiler Style */

#profile-views {
    position: absolute;
    top: 0;
    right: 0;
    left: 0;
    bottom: 0;
}

.status-bar-items {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 200px;
    overflow: hidden;
    border-left: 1px solid rgb(184, 184, 184);
    margin-left: -1px;
}

.profile-launcher-view-tree-item > .icon {
    width: 4px !important;
    visibility: hidden;
}

.profile-sidebar-tree-item .icon {
    content: url(Images/profileIcon.png);
}

.profile-sidebar-tree-item.small .icon {
    content: url(Images/profileSmallIcon.png);
}

.profile-group-sidebar-tree-item .icon {
    content: url(Images/profileGroupIcon.png);
}

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

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

.profile-view .data-grid {
    border: none;
    height: 100%;
}

.profile-view .data-grid th.average-column {
    text-align: center;
}

.profile-view .data-grid td.average-column {
    text-align: right;
}

.profile-view .data-grid th.self-column {
    text-align: center;
}

.profile-view .data-grid td.self-column {
    text-align: right;
}

.profile-view .data-grid th.total-column {
    text-align: center;
}

.profile-view .data-grid td.total-column {
    text-align: right;
}

.profile-view .data-grid .calls-column {
    text-align: center;
}

.profile-node-file {
    float: right;
    color: gray;
    margin-top: -1px;
}

.data-grid tr.selected .profile-node-file {
    color: rgb(33%, 33%, 33%);
}

.data-grid:focus tr.selected .profile-node-file {
    color: white;
}

.percent-time-status-bar-item .glyph {
    -webkit-mask-position: -192px -24px;
}

.focus-profile-node-status-bar-item .glyph {
    -webkit-mask-position: -96px 0;
}

.exclude-profile-node-status-bar-item .glyph {
    -webkit-mask-position: -128px 0;
}

.reset-profile-status-bar-item .glyph {
    -webkit-mask-position: 0 0;
}

.garbage-collect-status-bar-item .glyph {
    -webkit-mask-position: -128px -24px;
}

.profile-launcher-view-content {
    padding: 0 16px;
    text-align: left;
}

.control-profiling {
    -webkit-align-self: flex-start;
}

.profile-launcher-view-content h1 {
    padding: 15px 0 10px;
}

.panel-enabler-view.profile-launcher-view form {
    padding: 0;
    font-size: 13px;
    width: 100%;
}

.panel-enabler-view.profile-launcher-view label {
    margin: 0;
}

.profile-launcher-view-content p {
    color: grey;
    margin-top: 1px;
    margin-left: 22px;
}

.panel-enabler-view.profile-launcher-view button:not(.status-bar-item) {
    color: rgb(6, 6, 6);
    margin: 0 0 16px;
}

.profile-launcher-view-content button.running:not(.status-bar-item) {
    color: red;
}

body.inactive .profile-launcher-view-content button.running:not(.status-bar-item) {
    color: rgb(220, 130, 130);
}

.highlighted-row {
    -webkit-animation: "row_highlight" 2s 0s;
}

@-webkit-keyframes row_highlight {
    from {background-color: rgba(255, 255, 120, 1); }
    to { background-color: rgba(255, 255, 120, 0); }
}

.profile-canvas-decoration .warning-icon-small {
    margin-right: 4px;
}
.profile-canvas-decoration {
    color: red;
    margin: -14px 0 13px 22px;
    padding-left: 14px;
}

.profile-canvas-decoration button {
    margin: 0 0 0 10px !important;
}
