:root {
    --text-color: #f2d774;
    --text-link-color: #f7e7b0;
    --text-link-hover-color: #f0c332;
    --bg-gradient-color-1: #2b2a33;
    --bg-gradient-color-1-dim: #3d3c49;
    --bg-gradient-color-1-light: #70707e;
    --bg-gradient-color-2: #f0c332;
}

body {
    padding: 0;
    margin: 0;

    font-family: 'Roboto', sans-serif;
    color: var(--text-color);

    background-color: var(--bg-gradient-color-1);
}

h2 {
    font-size: 25px;
}

h3 {
    font-size: 18px;
}

button {
    color: var(--text-link-color);
    font-weight: bold;
    font-size: 14px;

    background-color: var(--bg-gradient-color-1);
    border: 2px solid var(--bg-gradient-color-1-light);
    border-radius: 14px;
    padding: 4px 8px;
}

button:hover {
    color: var(--text-link-hover-color);
    background-color: var(--bg-gradient-color-1-dim);
    cursor: pointer;
}

button:active {
    color: var(--bg-gradient-color-1-dim);
    background-color: var(--text-color);
}

input {
    color: white;
    font-weight: bold;
    text-align: center;

    background: var(--bg-gradient-color-1);
    border: 2px solid var(--bg-gradient-color-1-light);
    border-radius: 4px;
}

a {
    font-weight: bold;
    text-decoration: none;

    /* Color text and SVGs within link tags. */
    color: var(--text-link-color);
    fill: var(--text-link-color);
}

a img {
    /* This filter configuration matches the colour #f7e7b0 (--text-link-color)
       by https://angel-rs.github.io/css-color-filter-generator */
    filter: brightness(0) saturate(100%) invert(86%) sepia(22%) saturate(1102%) hue-rotate(338deg) brightness(110%) contrast(90%);
}

a:hover {
    color: var(--text-link-hover-color);
    fill: var(--text-link-hover-color);
}

a:hover img {
    /* This filter configuration matches the colour #f0c332 (--text-link-hover-color)
       by https://angel-rs.github.io/css-color-filter-generator */
    filter: brightness(0) saturate(100%) invert(65%) sepia(49%) saturate(572%) hue-rotate(8deg) brightness(107%) contrast(98%);
}

/* Hides the annoying text cursor when using the nav menu. */
nav {
    margin-top: 20px;
    cursor: default;
}

nav a {
    font-size: 16px;

    background-color: var(--bg-gradient-color-1);
    border-radius: 14px;
    padding: 4px 8px;

    border: 2px solid var(--bg-gradient-color-1-light);
}

nav a:hover {
    background-color: var(--bg-gradient-color-1-dim);
}

nav a:active {
    color: var(--bg-gradient-color-1-dim);
    background-color: var(--text-color);
}

nav .active {
    border-color: var(--text-color);
}

header {
    text-align: center;
}

/* Page Title */
header h1 {
    font-size: 55px;
    margin-bottom: 8px;
}

header hr {
    margin-top: -10px;
    border: 1px solid var(--bg-gradient-color-1-light);
    border-radius: 100px;
}

header img {
    position: relative;
    left: 230px;
    bottom: 100px;
    margin-bottom: -90px;
    rotate: 10deg;
}

@media only screen and (max-width: 557px) {
    header .title-logo {
        width: 60px;
        height: 60px;
        left: 200px;
        bottom: 120px;
    }
}

.center-all {
    text-align: center;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -80%);
}

.error-text {
    text-align: center;
    margin: 60px 0;
}

.main-container {
    min-height: 100vh;
    display: flex;
    flex-direction: column;

    max-width: 50rem;
    margin-left: auto;
    margin-right: auto;
}

footer {
    text-align: right;
}

@media only screen and (max-width: 50rem) {
    .main-container {
        margin-left: 5%;
        margin-right: 5%;
    }
}

/* TODO: Consider trying a different animation, like a wheel or persistent bar, just something constantly visible,
         this one could trick the user into think its done early during the normal coloured periods, leaving them in
         suspense. */
.loading-indicator {
    background: linear-gradient(to right,
    var(--bg-gradient-color-1) 30%,
    var(--bg-gradient-color-1-light) 40%,
    var(--bg-gradient-color-1-light) 60%,
    var(--bg-gradient-color-1) 70%
    );

    background-size: 2000% auto;
    animation: loading-animation 1500ms linear infinite;
    animation-delay: 200ms;
}

/* As this overrides the background of the button, we need to handle the hold down state. */
.loading-indicator:active {
    background: linear-gradient(to right,
    var(--text-color) 30%,
    var(--bg-gradient-color-1-light) 40%,
    var(--bg-gradient-color-1-light) 60%,
    var(--text-color) 70%
    );

    background-size: 2000% auto;
    animation: loading-animation 1500ms linear infinite;
    animation-delay: 200ms;
}

@keyframes loading-animation {
    to {
        background-position: 100% center;
    }
}

.bg-glow {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: -1;

    background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 600%);
    animation: background-glow-animation 2s linear infinite;
}

@keyframes background-glow-animation {
    0% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 600%);
    }
    5.8% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 575%);
    }
    11.6% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 560%);
    }
    17.4% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 540%);
    }
    23.2% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 510%);
    }
    29% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 470%);
    }
    34.8% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 445%);
    }
    40.6% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 420%);
    }
    46.4% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 405%);
    }
    52.2% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 410%);
    }
    58% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 420%);
    }
    63.8% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 450%);
    }
    69.6% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 500%);
    }
    75.4% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 510%);
    }
    81.2% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 550%);
    }
    87% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 560%);
    }
    92.8% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 580%);
    }
    96.2% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 590%);
    }
    100% {
        background-image: linear-gradient(to bottom right, var(--bg-gradient-color-1), var(--bg-gradient-color-2) 600%);
    }
}