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

:root {
    --clr-bg: #faf9f7;
    --clr-surface: #fff;
    --clr-text: #1a1a1a;
    --clr-muted: #666;
    --clr-accent: #b5451b;
    --clr-border: #ddd;
    --radius: 0.5rem;
    --space: 1.25rem;
}

body {
    font-family: "Cormorant Garamond", "Georgia", serif;
    font-size: 1.25rem;
    line-height: 1.6;
    color: var(--clr-text);
    background: var(--clr-bg);
    padding: var(--space);
    max-width: 32rem;
    margin-inline: auto;
    font-variant-numeric: oldstyle-nums;
}

a {
    color: var(--clr-accent);
}

header {
    text-align: center;
    padding-block: 0 2.5rem;

    h1 {
        font-size: 5.2rem;
        font-weight: 600;
        letter-spacing: 0.05em;
        text-transform: uppercase;
        line-height: 1;

        @media (max-width: 32rem) {
            font-size: 3rem;
        }
    }

    p {
        font-size: 1.8rem;
        letter-spacing: 0.05em;
        color: var(--clr-muted);
        margin-top: 0.75rem;

        @media (max-width: 32rem) {
            font-size: 1.3rem;
        }
    }
}

main > section {
    img {
        display: block;
        width: 100%;
        border-radius: var(--radius);
    }

    > p {
        margin-top: var(--space);
    }

    aside {
        margin-top: var(--space);
        font-style: italic;
    }

    .has-detail {
        label {
            color: var(--clr-accent);
            text-decoration: underline;
            cursor: pointer;
        }

        .detail {
            display: none;
            font-style: italic;
        }

        input:checked ~ .detail {
            display: inline;
        }
    }

    + form {
        margin-top: 2rem;
    }
}

form {
    small {
        color: var(--clr-muted);
    }

    hr {
        border: none;
        border-top: 1px solid var(--clr-border);
        margin-block: 1.5rem;
    }

    > fieldset {
        all: unset;
        display: contents;

        > div + div {
            margin-top: 0.75rem;
        }

        &:disabled {
            display: block;
            pointer-events: none;
            animation: 1.5s ease-in-out infinite pulse;
        }
    }

    .field-row {
        display: flex;
        flex-direction: column;
        gap: 0.75rem;

        @media (min-width: 36rem) {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 1rem;
        }
    }

    label:has(+ input, + select, + textarea) {
        display: block;
        margin-bottom: 0.25rem;
    }

    :is(
        input:not(
            [type="checkbox"],
            [type="file"],
            [type="hidden"],
            .validity-anchor
        ),
        select,
        textarea
    ) {
        display: block;
        width: 100%;
        padding: 0.5rem 0.75rem;
        font: inherit;
        border: 1px solid var(--clr-border);
        border-radius: var(--radius);
        background: var(--clr-surface);

        &::placeholder {
            color: #bbb;
        }

        &:focus-visible {
            outline: 2px solid var(--clr-accent);
            outline-offset: 1px;
        }
    }

    textarea {
        min-height: 4rem;
        resize: vertical;
    }

    label:has(input[type="checkbox"]) {
        display: flex;
        gap: 0.5rem;
        align-items: baseline;
        cursor: pointer;
    }

    input[type="checkbox"] {
        accent-color: var(--clr-accent);
        flex-shrink: 0;
        margin-top: 0.2rem;
    }

    .sub-items {
        display: none;
        width: 100%;
        margin-top: 0.5rem;
        padding-left: 1.5rem;
    }

    label:has(input[type="checkbox"]:checked) ~ .sub-items {
        display: flex;
        flex-wrap: wrap;
        gap: 0.5rem;
        align-items: baseline;
    }

    button[type="submit"] {
        display: block;
        width: 100%;
        margin-top: 2rem;
        padding: 0.75rem;
        font: inherit;
        font-weight: 700;
        letter-spacing: 0.04em;
        color: #fff;
        background: var(--clr-accent);
        border: none;
        border-radius: var(--radius);
        cursor: pointer;

        &:hover {
            filter: brightness(1.1);
        }

        &:active {
            filter: brightness(0.95);
        }
    }
}

@keyframes pulse {
    0%,
    100% {
        opacity: 1;
    }
    50% {
        opacity: 0.4;
    }
}

.portrait-field {
    text-align: center;

    > div,
    > div > button {
        margin-top: 0.75rem;
    }

    button {
        padding: 0.5rem 1.5rem;
        font: inherit;
        background: transparent;
        color: var(--clr-accent);
        border: 1px solid var(--clr-accent);
        border-radius: var(--radius);
        cursor: pointer;

        &:hover {
            background: var(--clr-accent);
            color: #fff;
        }
    }

    .validity-anchor {
        display: block;
        height: 1px;
        padding: 0;
        border: 0;
        opacity: 0.01;
        pointer-events: none;
    }

    > div > img {
        display: block;
        width: 200px;
        height: 200px;
        margin-inline: auto;
        border-radius: 50%;
        object-fit: cover;
    }
}

#timeslot-checkboxes {
    table {
        width: 100%;
        margin-top: 0.5rem;
        border-collapse: collapse;
    }

    :is(th, td) {
        padding: 0.15rem 0.5rem;
        text-align: center;

        * {
            margin: auto;
        }
    }

    td:first-child {
        text-align: left;
        font-weight: 600;
        padding-right: 1rem;
    }
}

@media (min-width: 60rem) {
    body {
        max-width: 60rem;
        padding: 2rem 3rem;
    }

    main {
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 3rem;
        align-items: start;
    }

    main > section {
        position: sticky;
        top: 2rem;

        + form {
            margin-top: 0;
        }
    }

    header h1 {
        font-size: 6rem;
    }
}
