/*
 * 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.
 */
/* Outer harness */
html,
body {
    min-height: 100%;
}

body {
    background-color: hsl(0, 0%, 95%);

    font-family: "Helvetica Neue", Helvetica, Verdana, sans-serif;
    font-size: 15px;

    cursor: default;

    -webkit-user-select: none;
}

body.showing-intro,
body.showing-results {
    background-color: hsl(35, 100%, 100%);
    background-image: url(crystal.svg), url(lines.svg);
    background-size: auto 225%, auto 100%;
    background-repeat: no-repeat;

    animation: background-fade 1s ease-in 1s, background-color 60s linear infinite 2s;
    animation-play-state: paused;

    will-change: background-color;
}

body.showing-test-container {
    overflow: hidden;
}

body.images-loaded {
    animation-play-state: running;
}

@media screen and (min-width: 667px) {
    body {
        font-size: 24px;
    }

    body.showing-intro,
    body.showing-results {
        background-size: 200% 100%, 150% auto;
    }
}

@media screen and (min-width: 1025px) {
    body.showing-intro,
    body.showing-results {
        background-size: 150% 100%, 150% auto;
    }
}

::selection {
    background-color: black;
    color: white;
}

.hidden {
    display: none;
}

section {
    display: none;
}

section.selected {
    display: block;
}

.logo {
    position: relative;
}

.logo svg {
    width: 350px;
    height: 88px;

    max-width: 100%;

    color: hsl(35, 100%, 50%);

    animation: foreground-color 60s linear infinite 2s;
    animation-play-state: paused;

    will-change: color;
}

.logo div {
    transform: skewX(-10deg);
    margin-left: 1em;
}

body.images-loaded .logo svg {
    animation-play-state: running;
}

@media screen and (min-width: 667px) {
    .logo svg {
        width: 525px;
        height: 130px;
        padding-left: .4em;
    }

    .logo div {
        position: absolute;
        left: 360px;
        bottom: 0.2em;
        font-size: 75%;
    }
}

section .body {
    margin: 2em 1em 0;
    max-width: 350px;
}

section .body p {
    margin: 1em 0;
    line-height: 1.5em;

    -webkit-user-select: text;
    cursor: text;
}

@media screen and (min-width: 667px) {
    section .body {
        margin-left: 2.5em;
        max-width: 500px;
        transform: skewX(-10deg);
    }

    section button {
        transform: none;
    }
}

button {
    background-color: hsl(35, 100%, 50%);
    color: white;

    padding: 0.25em;
    margin: 1.5em -0.25em 0 0;

    min-width: 50%;

    border: none;

    font-family: inherit;
    font-size: inherit;

    transform: skewX(-10deg);

    transition: 100ms filter ease-in-out;

    animation: background-color 60s linear infinite 2s;
    animation-play-state: paused;

    will-change: background-color;
}

body.images-loaded button {
    animation-play-state: running;
}

button:hover {
    filter: brightness(115%);
}

button:active {
    filter: brightness(130%);
}

button:disabled {
    opacity: 0.5;
    filter: none !important;
}

@media print {
    button {
        display: none;
    }
}

.portrait-orientation-check {
    display: none;
}

@media screen and (max-device-width: 1025px) and (orientation: portrait) {
    .portrait-orientation-check {
        display: block;
    }
}

@media screen and (max-device-width: 1025px) and (orientation: portrait) {
    .landscape-orientation-check {
        /* This keeps the button color animation in sync with page, while display: none does not. */
        visibility: hidden;
    }
}

@keyframes background-fade {
    100% {
        background-color: hsl(35, 100%, 50%);
    }
}

@keyframes background-color {
    0%, 10% {
        background-color: hsl(35, 100%, 50%);
    }

    12%, 20% {
        background-color: hsl(75, 100%, 30%);
    }

    22%, 30% {
        background-color: hsl(115, 100%, 30%);
    }

    32%, 40% {
        background-color: hsl(155, 100%, 30%);
    }

    42%, 50% {
        background-color: hsl(195, 100%, 30%);
    }

    52%, 60% {
        background-color: hsl(235, 100%, 30%);
    }

    62%, 70% {
        background-color: hsl(275, 100%, 30%);
    }

    72%, 80% {
        background-color: hsl(315, 100%, 30%);
    }

    82%, 90% {
        background-color: hsl(355, 100%, 30%);
    }

    92%, 100% {
        background-color: hsl(395, 100%, 50%);
    }
}

@keyframes foreground-color {
    0%, 10% {
        color: hsl(35, 100%, 50%);
    }

    12%, 20% {
        color: hsl(75, 100%, 30%);
    }

    22%, 30% {
        color: hsl(115, 100%, 30%);
    }

    32%, 40% {
        color: hsl(155, 100%, 30%);
    }

    42%, 50% {
        color: hsl(195, 100%, 30%);
    }

    52%, 60% {
        color: hsl(235, 100%, 30%);
    }

    62%, 70% {
        color: hsl(275, 100%, 30%);
    }

    72%, 80% {
        color: hsl(315, 100%, 30%);
    }

    82%, 90% {
        color: hsl(355, 100%, 30%);
    }

    92%, 100% {
        color: hsl(395, 100%, 50%);
    }
}

/* Intro section, About page */

#intro, #about {
    padding: 2em;
}

#intro {
    opacity: 0;
    transition: opacity 500ms ease-in;
}

body.images-loaded #intro {
    opacity: 1;
}

#about .body {
    transform: none;
    margin: 0;
    max-width: initial;
}

#about li {
    line-height: 1.5em;
}

#about button {
    padding: .75em 2em;
    margin: 1.5em auto 0;
    min-width: initial;
    transform: skewX(-10deg);
}

@media screen and (min-width: 667px) {
    #about .body {
        font-size: .7em;
        margin: 1em;
    }

    #about ol, #about ul {
        padding-left: 3em;
    }
}


#intro a, #about a,
#intro a:visited, #about a:visited {
    color: black;
}

/* Running test section */

.frame-container {
    position: absolute;

    top: 50%;
    left: 50%;
}

.frame-container > iframe {
    width: 100%;
    height: 100%;

    border: 0;
    margin: 0;
}

body.small .frame-container {
    width: 568px;
    height: 320px;
    margin-left: -284px;
    margin-top: -160px;
}

body.medium .frame-container {
    width: 900px;
    height: 600px;
    margin-left: -450px;
    margin-top: -300px;
}

body.large .frame-container {
    width: 1600px;
    height: 800px;
    margin-left: -800px;
    margin-top: -400px;
}

/* Results section */

#results {
    padding: 2em;
}

#results .body {
    -webkit-user-select: text;
}

#results .score-container {
    padding-bottom: 2em;
}

#results .table-container {
    position: relative;
}

#results .table-container > div {
    margin-left: 40%;
}

#results .score {
    font-size: 5em;
    font-weight: bold;
    font-style: italic;
    line-height: 1;
    margin: 0;
}

#results .confidence {
    font-size: 2em;
    font-style: italic;
    line-height: 1;
    margin: 0;
    text-indent: 1.75em;
    color: hsl(0, 0%, 40%);
    padding-bottom: .3em;
}

#results table {
    border-spacing: 0;
    margin: 0;
    padding: 0;
    min-width: 25%;
}

#results table td,
#results table th {
    padding: 0.25em;
}

#results table td.suites-separator {
    padding: 0;
}

#results table tr:nth-child(even) {
    background-color: hsla(0, 0%, 0%, 0.05);
}

#results #results-header {
    top: 0;
    left: 0;
    width: 40%;
    position: absolute;
}

#results #results-score {
    float: left;
}

#results #results-data span {
    font-size: .75em;
    color: hsl(0, 0%, 40%);
}

#results #results-header td,
#results #results-header th {
    text-align: right;
    padding-right: 1em !important;
    padding-left: 0.5em !important;
}

#results #results-score td,
#results #results-score th {
    text-align: left;
    padding-right: 0.5em !important;
}

#results #results-score td {
    cursor: text;
}

@media screen and (min-width: 667px) {
    #results .score,
    #results .confidence {
        font-style: normal;
    }
}

.detail span {
    display: none;
}

body.small .detail .small,
body.medium .detail .medium,
body.large .detail .large {
    display: initial;
}

#overlay {
    position: fixed;

    top: 0;
    left: 0;
    bottom: 0;
    right: 0;

    background: hsla(0, 0%, 100%, 0.9);
}

@supports (-webkit-backdrop-filter: blur(10px)) {
    #overlay {
        background: hsla(0, 0%, 100%, 0.7);
        -webkit-backdrop-filter: blur(20px);
    }
}

#overlay > div {
    position: absolute;

    width: 500px;
    height: 500px;

    margin-top: -250px;
    margin-left: -250px;

    top: 50%;
    left: 50%;
}

#overlay > div div {
    overflow: scroll;

    font-size: 12px;
    -webkit-user-select: text;
    cursor: text;

    max-height: 250px;

    border: 1px solid hsla(0, 0%, 0%, 0.1);
    padding: 1em;
}
