/*
 * 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 label {
    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 label {
    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 label[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;
}
