/*
 * Copyright (C) 2018 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.
 */

.content-view-container > .content-view.audit-test-case > header {
    position: sticky;
    top: -1px;
    z-index: var(--z-index-header);
    margin-top: -1px;
    background-color: var(--audit-test-header-background-color);
    border-top: 1px solid var(--border-color);
    -webkit-backdrop-filter: blur(20px);
}

.content-view-container > .content-view.audit-test-case > section > :not(.message-text-view):first-child {
    margin-top: var(--audit-test-vertical-space);
}

.content-view.audit-test-case > header {
    -webkit-padding-end: calc(var(--audit-test-horizontal-space) / 2);
}

.content-view.audit-test-case > header h1 {
    display: flex;
    align-items: center;
}

.content-view.audit-test-case > header h1 > img {
    width: 1em;
    height: 1em;
    min-width: 16px;
    min-height: 16px;
    -webkit-margin-end: 0.25em;
}

.content-view.audit-test-case > header > .metadata {
    display: flex;
    align-items: center;
    text-align: end;
}

.content-view.audit-test-case > header > .metadata > .source {
    -webkit-margin-end: 3px;
}

.content-view.audit-test-case > header > .metadata > .source > time {
    display: block;
    font-style: italic;
    white-space: nowrap;
}

.content-view.audit-test-case > header > .metadata > .source > a {
    display: block;
}

.content-view.audit-test-case > header > .metadata > .duration {
    display: inline-block;
    min-width: var(--metadata-width);
    -webkit-margin-start: var(--audit-test-horizontal-space);
    font-size: 12px;
    text-align: center;
    font-weight: bold;
}

.content-view.audit-test-case > section > :not(.message-text-view) {
    margin-right: var(--audit-test-horizontal-space);
    margin-left: var(--audit-test-horizontal-space);
}

.content-view.audit-test-case > section > :not(.message-text-view):last-child {
    margin-bottom: var(--audit-test-vertical-space);
}

.content-view.audit-test-case > section > :not(.message-text-view) + :not(.message-text-view) {
    margin-top: var(--audit-test-vertical-space);
}

.content-view.audit-test-case > section h1 {
    margin-bottom: 4px;
}

.content-view.audit-test-case > section table {
    width: 100%;
    border-collapse: collapse;
}

.content-view.audit-test-case > section table > tr + tr > td {
    padding-top: 2px;
}

.content-view.audit-test-case > section table > tr > td > :not(.tree-outline) {
    -webkit-user-select: text;
}

.content-view.audit-test-case > section table > tr > td:first-child {
    font-family: -webkit-system-font, sans-serif;
    font-size: 11px;
    font-variant-numeric: tabular-nums;
    text-align: end;
    vertical-align: top;
    color: var(--console-secondary-text-color);
}

.content-view.audit-test-case > section > .dom-nodes > table > tr > td:first-child {
    position: relative;
    top: -1px;
}

.content-view.audit-test-case > section table > tr > td + td {
    width: 100%;
}

.content-view.audit-test-case > section .CodeMirror {
    width: 100%;
    height: auto;
}

.content-view.audit-test-case > section .mark {
    background-color: hsla(53, 83%, 53%, 0.2);
    border-bottom: 1px solid hsl(47, 82%, 60%);
}
