/*
 * Copyright (C) 2019-2020 Apple Inc. All rights reserved.
 *
 * 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.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. 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 INC. 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.
 */

.timeline-view.cpu {
    overflow: auto !important;
}

.timeline-view.cpu > .content .subtitle {
    font-family: -webkit-system-font, sans-serif;
    font-size: 14px;
}

.timeline-view.cpu > .content .subtitle > .info {
    display: inline-block;
    width: 15px;
    height: 15px;
    margin-inline-start: 7px;
    font-size: 12px;
    color: var(--gray-foreground-color);
    background-color: var(--gray-background-color);
    border-radius: 50%;
}

.energy-info-popover-content {
    width: 275px;
    padding: 0 5px;
    -webkit-hyphens: auto;
}

.timeline-view.cpu > .content > .details {
    position: relative;
}

.timeline-view.cpu > .content > .details > .timeline-ruler {
    position: absolute;
    top: 5px;
    bottom: 0;
    right: 0;
    left: 0;
    inset-inline: 150px 0;
}

.timeline-view.cpu > .content > .details > .subtitle,
.timeline-view.cpu > .content > .details > details > .subtitle {
    padding: 0 10px 10px;
    border-bottom: 1px solid var(--border-color);
}

.timeline-view.cpu > .content > .details > details > .subtitle.threads {
    position: relative;
    z-index: calc(var(--timeline-marker-z-index) + 1);
    padding-top: 10px;
    background-color: var(--background-color-content);
}

.timeline-view.cpu > .content > .overview {
    display: flex;
    justify-content: center;
    padding: 10px;
}

.timeline-view.cpu > .content > .overview:not(:last-child) {
    margin-bottom: 10px;
    border-bottom: 1px solid var(--border-color);
}

.timeline-view.cpu > .content > .overview > .chart {
    width: 420px;
    text-align: center;
}

.timeline-view.cpu > .content > .overview > .chart > .subtitle {
    margin-bottom: 1em;
}

.timeline-view.cpu > .content > .overview > .chart > .container {
    display: flex;
    justify-content: center;
}

.timeline-view.cpu > .content > .overview > .divider {
    margin: 0 5px;
    border-inline-end: 1px solid var(--border-color);
}

.timeline-view.cpu > .content > .overview .samples,
.timeline-view.cpu > .content > .overview .legend .size {
    margin: auto;
    color: var(--text-color-secondary);
}

.timeline-view.cpu > .content > .overview .legend {
    padding-inline-start: 20px;
    text-align: start;
    -webkit-user-select: text;
}

.timeline-view.cpu > .content > .overview .legend .row {
    display: flex;
}

.timeline-view.cpu > .content > .overview .legend .row + .row {
    margin-top: 4px;
}

.timeline-view.cpu > .content > .overview .legend .swatch {
    width: 1em;
    height: 1em;
    margin-top: 1px;
    margin-inline-end: 8px;
}

.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-javascript {
    border: 1px solid var(--cpu-javascript-stroke-color);
    background-color: var(--cpu-javascript-fill-color);
}

.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-style {
    border: 1px solid var(--cpu-style-stroke-color);
    background-color: var(--cpu-style-fill-color);
}

.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-layout {
    border: 1px solid var(--cpu-layout-stroke-color);
    background-color: var(--cpu-layout-fill-color);
}

.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-paint {
    border: 1px solid var(--cpu-paint-stroke-color);
    background-color: var(--cpu-paint-fill-color);
}

.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-idle {
    stroke: var(--cpu-idle-stroke-color);
    fill: var(--cpu-idle-fill-color);
}

.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-javascript {
    stroke: var(--cpu-javascript-stroke-color);
    fill: var(--cpu-javascript-fill-color);
}

.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-style {
    stroke: var(--cpu-style-stroke-color);
    fill: var(--cpu-style-fill-color);
}

.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-layout {
    stroke: var(--cpu-layout-stroke-color);
    fill: var(--cpu-layout-fill-color);
}

.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-paint {
    stroke: var(--cpu-paint-stroke-color);
    fill: var(--cpu-paint-fill-color);
}

.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) svg > path {
    fill: var(--cpu-other-thread-fill-color);
    stroke: var(--cpu-other-thread-stroke-color);
}

.timeline-view.cpu .main-thread svg > path,
.timeline-view.cpu svg > path.main-thread-usage {
    fill: var(--cpu-main-thread-fill-color);
    stroke: var(--cpu-main-thread-stroke-color);
}

.timeline-view.cpu .worker-thread svg > path,
.timeline-view.cpu svg > path.worker-thread-usage {
    fill: var(--cpu-worker-thread-fill-color);
    stroke: var(--cpu-worker-thread-stroke-color);
}

.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) .markers {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    pointer-events: none;
}

.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) .markers > div {
    position: absolute;
    z-index: 10;
    width: 100%;
    height: 1px;
    text-align: end;
    background-color: var(--graph-line-color);
}

body[dir=rtl] .timeline-view.cpu :matches(.area-chart, .stacked-area-chart) .markers > div {
    transform: scaleX(-1);
}

.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) .markers > div > .label {
    padding: 2px;
    font-size: 8px;
    color: var(--text-color-secondary);
    background-color: var(--background-color-content);
}

.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) circle {
    r: 3;
    fill: var(--cpu-overlay-color);
}

.timeline-view.cpu .timeline-ruler > .markers > .marker.timestamp {
    color: var(--cpu-overlay-color);
    opacity: 0.8;
    pointer-events: none;
}

.timeline-view.cpu .timeline-ruler > .markers > .marker.timestamp::after {
    display: none;
}

.timeline-view.cpu .gauge-chart .low {
    --gauge-chart-path-fill-color: var(--cpu-low-color);
    --gauge-chart-path-stroke-color: var(--cpu-low-color);
}

.timeline-view.cpu .gauge-chart .medium {
    --gauge-chart-path-fill-color: var(--cpu-medium-color);
    --gauge-chart-path-stroke-color: var(--cpu-medium-color);
}

.timeline-view.cpu .gauge-chart .high {
    --gauge-chart-path-fill-color: var(--cpu-high-color);
    --gauge-chart-path-stroke-color: var(--cpu-high-color);
}

.timeline-view.cpu .gauge-chart {
    --gauge-chart-needle-fill-color: hsla(0, 0%, 36%, 0.85);
    --gauge-chart-needle-stroke-color: hsla(0, 0%, 36%, 0.85);
}

.timeline-view.cpu .energy {
    color: hsla(0, 0%, var(--foreground-lightness), 0.85);
}

.timeline-view.cpu .energy .energy-impact {
    min-width: 140px;
    margin-top: 15px;
    font-size: 3em;
    color: var(--text-color-secondary);
}

.timeline-view.cpu .energy .energy-impact.low {
    color: var(--cpu-low-color);
}

.timeline-view.cpu .energy .energy-impact.medium {
    color: var(--cpu-medium-color);
}

.timeline-view.cpu .energy .energy-impact.high {
    color: var(--cpu-high-color);
}

.timeline-view.cpu .energy .energy-impact-number {
    font-size: 14px;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats {
    padding: 0 5px;
    white-space: nowrap;
    -webkit-user-select: text;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table {
    overflow: hidden;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table > tr > th {
    text-align: end;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table > tr > td.number {
    min-width: 25px;
    padding: 0px 2px;
    text-align: end;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table > tr > td.label {
    text-align: start;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .show-more {
    cursor: pointer;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .unknown {
    color: var(--link-text-color);
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter-clear {
    display: inline-block;
    width: 13px;
    height: 13px;
    font-size: 12px;
    color: var(--gray-foreground-color);
    background-color: var(--gray-background-color);
    border-radius: 50%;
    line-height: 12px;
    text-align: center;
    cursor: pointer;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter {
    padding: 0 6px 1px;
    font-size: 10px;
    background-color: hsl(0, 0%, 85%);
    border: 1px solid transparent;
    border-radius: 3px;
    cursor: pointer;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table :matches(.filter, .filter-clear):hover {
    opacity: 0.7;
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter.active {
    color: var(--selected-foreground-color);
    background-color: var(--selected-background-color);
}

.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter.active + .filter.active {
    margin-inline-start: 3px;
}

@media (prefers-color-scheme: dark) {
    .timeline-view.cpu .gauge-chart:not(.empty) > svg > polygon.needle {
        fill: hsla(0, 0%, var(--foreground-lightness), 0.85);
        stroke: hsla(0, 0%, var(--foreground-lightness), 0.85);
    }

    .timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter {
        background-color: hsl(0, 0%, 33%);
    }
}
