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

.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); }
}

.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;
}

.profile-text-view {
    padding: 10px;
    overflow: auto;
    margin: 0;
    user-select: text;
    cursor: text;
}
