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

:root {
    --color-primary: #34AADC;
    --color-secondary: #86D9FF;
    --text-color-inverse: white;
    --text-color-primary: black;
    --text-color-secondary: #555555;
    --text-color-tertiary: #444444;
    --text-color-subtle: #6c6c71;
    --text-color-very-subtle: #8E8E93;
    --heading-color: #2C98D1;
    --link-hover-color: #0086BF;
    --button-color-primary: rgb(52, 170, 220);
    --error-text-color: #d24a59;
    --benchmark-heading-color: rgb(183, 183, 183);
    --benchmark-error-text-color: #ff8686;
    --benchmark-done-result-color: #4A4A4A;
    --gap: 3rem;
    --width: 200px;
}

html,
svg text {
    font-family: "Helvetica Neue", Helvetica, Verdana, sans-serif;
    font-size: 62.5%;
    font-synthesis: none;
    height: 100vh;
}

body {
    display: flex;
    flex-direction: column;
    gap: var(--gap);
    margin: 0;
    font-size: 1.6rem;
    font-weight: 400;
    line-height: 1.4;
    background-repeat: no-repeat;
    background-position: center -5vw;
    background-size: 100vw;
    padding-bottom: 0px;
    background-image: url('clouds.svg');
    overflow-y: hidden;
    height: 100%;
}

.overflow-scroll {
    overflow-y: auto;
}

.overflow-visible {
    overflow: visible;
}


::selection {
    background-color: var(--color-primary);
    color: var(--text-color-inverse);
}

main {
    display: flex;
    flex-direction: column;
    gap: var(--gap);
    margin: 0 auto;
    padding: 0 var(--gap);
    max-width: 1180px;
    text-align: center;
    flex: 1;
    overflow: hidden;
}

main p {
    margin: 0;
}

img {
    -webkit-user-drag: none;
    user-select: none;
}

.logo {
    box-sizing: border-box;
    width: 100%;
    user-select: none;
    perspective: 600;
}

.logo .logo-image {
    display: block;
    box-sizing: border-box;
    background-repeat: no-repeat;
    background-position: center;
    background-image: url('JetStream3Logo.svg');
    color: transparent;
    animation: swingin 350ms ease-out forwards;
    will-change: transform, opacity;
    height: 75px;
}

#jetstreams {
    background-image: url('jetstreams.svg');
    background-repeat: no-repeat;
    background-size: contain;
    background-position: center;
    padding: 2rem 0;
    margin: -2rem 0;
}

#jetstreams svg {
    width: 100%;
    max-height: 120px;
}

#magic {
    position: absolute;
    top: -900px;
    left: -900px;
    width: 300px;
    height: 300px;
    display: none;
}

.summary {
    text-align: center;
}

.summary:empty {
    display: none;
}

article,
.summary {
    max-width: 70rem;
    margin: 0 auto 0 auto;
    opacity: 0;
    animation: fadein 0.5s ease-in-out forwards;
    animation-delay: 200ms;
}

article {
    display: flex;
    flex-direction: column;
    gap: var(--gap);
}
h1 {
    color: var(--text-color-primary);
    text-align: center;
    margin-bottom: 0;
}


h2,
h3,
h4,
h5,
h6 {
    color: var(--heading-color);
    text-align: left;
}


h4,
h5,
h6 {
    margin-bottom: 0;
}

p {
    text-align: left;
    color: var(--text-color-secondary);
}

h5,
h6 {
    font-size: 1.6rem;
}

h6 {
    color: var(--text-color-tertiary);
}

dt {
    margin-top: 10px;
    font-weight: bold;
    text-align: left;
}

dd {
    text-align: left;
    padding: 10px 20px;
    margin: 0;
}

a:link,
a:visited {
    color: var(--color-primary);
}

a:hover,
a:active {
    color: var(--link-hover-color);
}

#status label,
a.button {
    display: inline-block;
    font-weight: 500;
    text-decoration: none;
    font-size: 2rem;
    background-color: var(--button-color-primary);
    background-image: linear-gradient(180deg, rgba(134, 217, 255, 1) -80%, rgb(52, 170, 220) 100%);
    color: var(--text-color-inverse);
    border: 1px solid var(--button-color-primary);
    border-radius: 2px;
    padding: 0.3rem 0.3rem 0.5rem;
    text-align: center;
    width: var(--width);
    -webkit-touch-callout: none;
    user-select: none;
}

a.button {
    animation: fadein 500ms ease-in forwards, scaledown 500ms ease-in forwards;
    opacity: 0;
}

#status label,
.button:hover {
    background-image: none;
}

#status.loading {
    position: absolute;
    top: 0;
    left: 0;
    margin: 48vh 0 0;
    width: 100%;
    line-height: 1.2;
    font-size: 4rem;
    font-style: italic;
    font-weight: 500;
    letter-spacing: -0.10rem;
    color: transparent;
    background-image: linear-gradient(132deg, #96E5FF 0%, #96E5FF 2%, #86D9FF 42%, #8BDAFF 84%, #96E5FF 98%, #96E5FF 100%);
    -webkit-background-clip: text;
    background-repeat: no-repeat;
    -webkit-touch-callout: none;
    user-select: none;
}

#status.error {
    max-width: 70rem;
    margin: 0 auto 1rem;
}

.error h2,
.error p {
    color: var(--error-text-color);
    margin-bottom: 0;
    text-align: center;
    font-weight: 500;
}

.error h2 {
    font-size: 5rem;
    letter-spacing: -0.1rem;
    line-height: 1;
}

#result-summary:empty {
    display: none;
}

#result-summary {
    margin-top: 20px;
}

#result-summary label {
    color: var(--text-color-subtle);
}

#result-summary .score {
    font-weight: bold;
    font-size: 4rem;
    line-height: 1;
    color: var(--color-primary);
    font-weight: 500;
}

.benchmark .plot svg {
    display: inline-block;
    vertical-align: middle;
}

#result-summary .score .interval {
    display: block;
    font-weight: normal;
}

#results {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    gap: var(--gap);
    margin: 0 calc(var(--gap) * -1) 0 calc(-var(--gap) * -1);
    animation: fadein 500ms ease-out forwards;
    opacity: 0;
    overflow-y: auto;
    flex: 1;
    padding-bottom: var(--gap);
    box-sizing: border-box;
}

.benchmark {
    position: relative;
    flex: 1;
    max-width: 20%;
    min-width: var(--width);
    text-align: left;
    color: var(--text-color-very-subtle);
    font-size: 1.6rem;
    scroll-margin-top: 20vh;
    scroll-margin-bottom: 20vh;
}

.benchmark .result.detail {
    display: none;
}
.details .benchmark .result.detail {
    display: inline-block;
}

.benchmark h4,
.benchmark .result,
.benchmark label,
.benchmark .plot {
    color: transparent;
    background: linear-gradient(160deg, rgba(249, 249, 249, 1) 0%, rgba(238, 238, 238, 1) 100%);
    border-radius: 3px;
}

.benchmark h3 {
    color: var(--benchmark-heading-color);
}

.benchmark-running h4,
.benchmark-running .result,
.benchmark-running label,
.benchmark-running .plot {
    color: var(--color-secondary);
    background-color: var(--color-secondary);
    background-image: none;
}


.benchmark-done h3,
.benchmark-done h4,
.benchmark-done .result,
.benchmark-done label,
.benchmark-done .plot {
    background-color: transparent;
    background-image: none;
    -webkit-touch-callout: revert;
    user-select: text;
}

.benchmark-error h4,
.benchmark-error .result,
.benchmark-error label,
.benchmark-error .plot {
    color: var(--benchmark-error-text-color);
    background-color: var(--benchmark-error-text-color);
    background-image: none;
}

.benchmark-error h3 {
    color: var(--benchmark-error-text-color);
}

.benchmark h3 {
    font-weight: 400;
    font-size: 1.6rem;
    margin: 0;
}

.benchmark-running h3 {
    background-color: transparent;
    background-image: none;
    color: var(--color-primary);
}

.benchmark-done h3 {
    color: var(--text-color-subtle);
}

.benchmark a.info {
    display: inline-block;
    width: 1.5rem;
    height: 1.5rem;
    border-radius: 100%;
    background-color: var(--benchmark-heading-color);
    color: var(--text-color-inverse) !important;
    user-select: none;
    text-align: center;
    vertical-align: middle;
    font-style: italic;
    font-weight: bold;
    font-family: 'Times New Roman', Times, serif;
    line-height: 1.6rem;
    margin-top: -0.2rem;

}

.benchmark-running a.info {
    background-color: var(--color-primary);
}

.benchmark-done a.info {
    background-color: var(--text-color-subtle);
}

.benchmark h3 a,
.benchmark h3 a:link,
.benchmark h3 a:active,
.benchmark h3 a:hover,
.benchmark h3 a:visited {
    color: inherit;
    text-decoration: none;
}

.benchmark-done h3 a:hover {
    color: var(--color-primary);
    text-decoration: underline;
}

.benchmark h4 {
    margin: 0.3rem 0;
    line-height: 1;
    font-weight: 400;
    font-size: 2.4rem;
}

.benchmark-done h4 {
    color: var(--color-primary);
    background-color: none;
}

.benchmark p,
.benchmark-done p {
    margin: 0;
}

.benchmark .result {
    display: inline-block;
    margin-right: 1.6rem;
    line-height: 1.3;
    font-size: 1.3rem;
    font-weight: bold;
}

#result-summary .benchmark {
    text-align: center;
    max-width: 100%;
    margin: 0;
    margin-left: 1.6rem;
}

.benchmark-done .result {
    color: var(--benchmark-done-result-color);
}

.benchmark label {
    display: block;
}

.benchmark-done label {
    color: var(--text-color-very-subtle);
    font-weight: 400;
}

dt:target {
    background-color: var(--color-secondary);
    color: var(--text-color-inverse);
    padding-left: 10px;
    border-radius: 5px;
}

.plot svg circle {
    fill: var(--color-primary);
    opacity: 0.8;
}

@keyframes fadein {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

@keyframes scaledown {
    from {
        transform: scale(1.3, 1.3);
    }

    to {
        transform: scale(1, 1);
    }
}

@keyframes shine {
    0% {
        background-position: -1200px center;
    }

    100% {
        background-position: 100vw center;
    }
}

@keyframes swingin {
    from {
        opacity: 0;
        transform: rotateY(-85deg) translateZ(200px);
    }

    to {
        opacity: 1;
        transform: rotateY(0deg) translateZ(0px);
    }
}

@media (max-width: 415px) {
    body {
        background-position: center 4rem;
    }

    .logo .logo-image {
        height: 60px;
    }

    #jetstreams {
        background-size: 200%;
    }
}
