/*
 * 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 {
    flex: auto;
    position: relative;
}

.profile-view .data-grid table.data {
    background: white;
}

.profile-view .data-grid tr:not(.selected) .highlight {
    background-color: rgb(255, 230, 179);
}

.profile-view .data-grid tr:hover td:not(.bottom-filler-td) {
    background-color: rgba(0, 0, 0, 0.1);
}

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

.profile-view .data-grid div.profile-multiple-values {
    float: right;
}

.profile-view .data-grid span.percent-column {
    color: #999;
    width: 50px;
    display: inline-block;
}

.profile-view .data-grid tr.selected span {
    color: inherit;
}

.profiles-toolbar {
    background-color: var(--toolbar-bg-color);
    border-bottom: 1px solid #ccc;
    flex-shrink: 0;
}

.profiles-tree-sidebar {
    flex: auto;
    overflow: hidden;
}

.profiles-sidebar-tree-box {
    overflow-y: auto;
}

.profile-view {
    display: flex;
    overflow: hidden;
}

.profile-view .data-grid {
    border: none;
    flex: auto;
}

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

.profile-node-file {
    float: right;
    color: gray;
}

.profile-warn-marker {
    vertical-align: -1px;
    margin-right: 2px;
}

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

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


.profile-launcher-view {
    overflow: auto;
}

.profile-launcher-view-content {
    padding: 10px 16px;
}

.profile-launcher-view-content h1 {
    font-size: 15px;
    font-weight: normal;
    padding: 6px 0;
    margin: 0 0 5px 0;
}

.profile-launcher-view-content [is=dt-radio] {
    font-size: 13px;
}

.profile-launcher-control {
    align-items: flex-start;
    flex-wrap: wrap;
    margin-top: 10px;
    margin-right: 6px;
}

.profile-launcher-control button {
    min-width: 110px;
}

.profile-launcher-target-list {
    width: 100%;
    height: 150px;
    margin-bottom: 10px;
    border: 1px solid #ddd;
}

.profile-launcher-target {
    align-items: baseline;
}

.profile-launcher-target > * {
    flex: 0 0 auto;
    margin-right: 8px;
}

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

.profile-launcher-view-content p [is=dt-checkbox] {
    display: flex;
}

.profile-launcher-view-content button.running {
    color: hsl(0, 100%, 58%);
}

.profile-launcher-view-content button.running:hover {
    color: hsl(0, 100%, 42%);
}

body.inactive .profile-launcher-view-content button.running:not(.toolbar-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 span[is=dt-icon-label] {
    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;
}

.profile-launcher-button {
    min-width: 120px;
    height: 28px;
    margin: 8px 16px 8px 0;
}

.cpu-profile-flame-chart-overview-container {
    overflow: hidden;
    position: absolute;
    top: 0;
    width: 100%;
    height: 80px;
}

#cpu-profile-flame-chart-overview-container {
    border-bottom: 1px solid rgba(0, 0, 0, 0.3);
}

.cpu-profile-flame-chart-overview-canvas {
    position: absolute;
    top: 20px;
    left: 0;
    right: 0;
    bottom: 0;
}

#cpu-profile-flame-chart-overview-grid .resources-dividers-label-bar {
    pointer-events: auto;
}

.cpu-profile-flame-chart-overview-pane {
    flex: 0 0 80px !important;
}
