@charset "UTF-8";

@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap");
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&display=swap");

/* just whacked stuff together from various sites... */

/* csfc styling */
:root {
    --line-height: 1.5; /* in accordance to accessibility standards */
    --font-family: "IBM Plex Serif", serif;
    --primary-colour: #263bb5;
    --secondary-colour: #5826b5;
    --tertiary-colour: #2682b5;

    --primary-colour-hover: #152061;
    --secondary-colour-hover: #2f1561;
    --tertiary-colour-hover: #154661;

    --nav-link-colour: #ffffff;
    --nav-link-colour-hover: #e0e6ff;

    --control-radius: 4px;
    --control-border-width: 2px;
    --button-font-colour: #ffffff;
    --border-focus: #0288d1;

    --disabled-bg: #e0e0e0;
    --disabled-text: #666666;
    --error-colour: #d32f2f;
    --text-colour: #000000;
}

* {
    line-height: var(--line-height);
    font-family: var(--font-family);
}

*,
*::before,
*::after {
    box-sizing: border-box;
}

body {
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.site-header {
    background-color: var(--primary-colour);
    color: #ffffff;
    padding: 0.75rem 1.5rem;
}

.nav-container {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 1rem;
    max-width: 50rem;
    margin: 0 auto;
    padding: 0.75rem 1.5rem;
}

.nav-links {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 1.5rem;
    list-style-type: none;
    margin: 0;
    padding: 0;
}

.nav-links a {
    color: var(--nav-link-colour);
    text-decoration: underline;
    font-weight: 500;
    font-size: 14pt;
    padding: 0.25rem 0.5rem;
}

.nav-links a:hover {
    color: var(--nav-link-colour-hover);
}

.site-header a:focus-visible {
    outline: 3px solid var(--nav-link-colour);
    outline-offset: 3px;
    border-radius: 2px;
}

/* main page stuff */
main {
    max-width: 50rem;
    margin: 0 auto;
    padding: 2rem 1rem;
    width: 100%;
    flex-grow: 1;
}

h1 {
    font-weight: 500;
    font-size: 3rem;
}

h2 {
    font-weight: 500;
}

h3 {
    font-weight: 500;
    font-style: italic;
}

body {
    font-weight: 300;
    font-size: 14pt;
}

a {
    font-weight: 500;
    color: var(--secondary-colour);
}

a:hover {
    color: var(--secondary-colour-hover);
}

a:focus-visible {
    border-color: var(--border-focus);
}

/* buttons! */
button,
input[type="submit"],
input[type="reset"],
input[type="button"],
.button {
    font-size: 1rem;
    font-weight: 300;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.65rem 1.25rem;
    min-height: 2.75rem;
    background-color: var(--primary-colour);
    font-family: var(--font-family);
    color: var(--button-font-colour);
    border: var(--control-border-width) solid var(--primary-colour);
    border-radius: var(--control-radius);
    cursor: pointer;
    text-decoration: none;
    transition:
        background-color 0.2s ease,
        border-color 0.2s ease,
        transform 0.1s ease;
}

button:hover,
input[type="submit"]:hover {
    background-color: var(--primary-colour-hover);
    border-color: var(--primary-colour-hover);
}

button:active,
input[type="submit"]:active {
    transform: translateY(1px);
}

button.button-outline {
    background-color: transparent;
    color: var(--primary-colour);
    border-color: var(--primary-colour);
}
button.button-outline:hover {
    background-color: var(--primary-colour);
    color: #ffffff;
}

button:focus-visible,
input:focus-visible {
    outline: 3px solid var(--border-focus);
    outline-offset: 3px;
}

button:disabled,
input[type="submit"]:disabled {
    background-color: var(--disabled-bg);
    border-color: var(--disabled-bg);
    color: var(--disabled-text);
    cursor: not-allowed;
    opacity: 0.7;
}

/* forms */
.form-group {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin-bottom: 1.25rem;
}

label {
    font-weight: 300;
    font-size: 0.95rem;
    color: var(--text-colour);
}

input[type="text"],
input[type="email"],
input[type="number"],
input[type="password"],
select,
textarea {
    font-family: var(--font-family);
    font-size: 1rem;
    padding: 0.65rem 0.85rem;
    color: var(--text-colour);
    border: var(--control-border-width) solid var(--primary-colour);
    border-radius: var(--control-radius);
    width: 100%;
    box-sizing: border-box;
    appearance: none;
}

input:focus-visible,
select:focus-visible,
textarea:focus-visible {
    border-color: var(--primary-colour);
    outline: 3px solid var(--border-focus);
    outline-offset: 1px;
}

input[aria-invalid="true"],
select[aria-invalid="true"],
textarea[aria-invalid="true"] {
    border-color: var(--error-colour) !important;
}

input[aria-invalid="true"]:focus-visible {
    outline-color: var(--error-colour);
}

input[type="checkbox"],
input[type="radio"] {
    appearance: none;
    -webkit-appearance: none;
    width: 1.35rem;
    height: 1.35rem;
    margin: 0;
    border: var(--control-border-width) solid var(--primary-colour);
    background-color: var(--bg-colour);
    display: inline-grid;
    place-content: center;
    cursor: pointer;
    vertical-align: middle;
}

input[type="checkbox"] {
    border-radius: var(--control-radius);
}

input[type="radio"] {
    border-radius: 50%;
}

input[type="checkbox"]::before {
    content: "";
    width: 0.7rem;
    height: 0.7rem;
    transform: scale(0);
    transition: 60ms transform ease-in-out;
    background-color: var(--primary-colour);
    clip-path: polygon(14% 44%, 0 65%, 50% 100%, 100% 16%, 80% 0%, 43% 62%);
}

input[type="radio"]::before {
    content: "";
    width: 0.6rem;
    height: 0.6rem;
    border-radius: 50%;
    transform: scale(0);
    transition: 60ms transform ease-in-out;
    background-color: var(--primary-colour);
}

input[type="checkbox"]:checked::before,
input[type="radio"]:checked::before {
    transform: scale(1);
}

input[type="checkbox"]:focus-visible,
input[type="radio"]:focus-visible {
    outline: 3px solid var(--primary-colour);
    outline-offset: 3px;
}

input[type="checkbox"]:disabled,
input[type="radio"]:disabled {
    border-color: var(--disabled-text);
    background-color: var(--disabled-bg);
    cursor: not-allowed;
}

.choice-label {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    font-size: 1rem;
    cursor: pointer;
    margin-bottom: 0.5rem;
    margin-left: 0.1rem;
}

.radio-fieldset {
    border: var(--control-border-width) solid var(--primary-colour);
    border-radius: var(--control-radius);
    padding: 1rem;
    margin-bottom: 1.5rem;
}

.radio-fieldset legend {
    font-weight: 300;
    padding: 0 0.5rem;
    color: var(--text-colour);
}

/* hr */

hr {
    color: var(--primary-colour);
}

/* article */

article {
    border-left: 2px solid var(--primary-colour);
    padding-left: 1rem;
}

/* footer */

footer {
    background-color: var(--primary-colour);
    color: #ffffff;
    padding: 1.5rem 1rem;
    margin-top: 3rem;
    text-align: center;
    margin: 0;
    font-size: 1rem;
    line-height: 1.5;
    font-weight: 400;
}

footer a {
    color: var(--nav-link-colour);
    text-decoration: underline;
    margin-left: 1rem;
}
footer a:hover {
    color: var(--nav-link-colour-hover);
}

footer a:focus-visible {
    outline: 3px solid var(--nav-link-colour);
    outline-offset: 3px;
    border-radius: 2px;
}

code {
    font-family: "IBM Plex Mono", monospace;
}
