:root {
    --background-color: #eee;
    --border-color: #bbb;
    --border-focus-color: #333;
    --border-hover-color: #999;
    --border-light-color: #dfdfdf;
    --box-shadow: 0 2px 8px 2px rgba(0, 0, 0, 0.05);
    --brightness-hover: 0.82;
    --color: #222;
    --input-background-color: #fafafa;
    --logo-color: #111;
    --logo-background-color: #fff;
    --secondary-color: #888;
    --section-background-color: #e0e0e0;
    --section-border-color: #d9d9d9;
    --selection-color: #fff;

    --content-padding: 0.88rem;
    --content-width: 640px;
    --font-monospace: Roboto Mono, ui-monospace, monospace;
    --font-sans-serif: Public Sans, ui-sans-serif, sans-serif;
    --font-serif: Roboto Slab, ui-serif, serif;
    --opacity: 0.5;
    --text-padding: 1.5rem;

    @media (prefers-color-scheme: dark) {
        --background-color: #111;
        --border-color: #333;
        --border-focus-color: #fff;
        --border-hover-color: #555;
        --border-light-color: #1f1f1f;
        --box-shadow: 0 2px 8px 2px rgba(0, 0, 0, 0.2);
        --brightness-hover: 1.15;
        --color: #fff;
        --input-background-color: #1b1b1b;
        --logo-color: #111;
        --logo-background-color: #eee;
        --secondary-color: #686868;
        --section-background-color: #1d1d1d;
        --section-border-color: #1f1f1f;
        --selection-color: #000;
    }

    @media (max-width: 640px) {
        --content-width: 460px;
        --text-padding: 1rem;
    }
}

* {
    box-sizing: border-box;
    line-height: 1;
    margin: 0;
    transition: all 88ms ease-in-out;
}

::selection {
    background-color: var(--color);
    color: var(--selection-color);
}

body {
    background-color: var(--background-color);
    color: var(--color);
    font-family: var(--font-sans-serif);
    font-size: 16px;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    font-synthesis: none;
    font-weight: 400;
    min-height: 100dvh;
    text-rendering: optimizeLegibility;
}

a {
    color: inherit;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.3rem;

    &:focus,
    &:hover {
        text-decoration-line: none;
    }

    @media (max-width: 640px) {
        text-underline-offset: 0.22rem;
    }
}

b,
strong {
    font-weight: 664;
}

blockquote {
    border-left: 0.18rem solid var(--color);
    font-style: italic;
    padding-left: var(--content-padding);
}

code,
pre {
    background-color: var(--section-background-color);
    font-family: var(--font-monospace);
}

h1,
h2,
h3,
h4,
h5,
h6 {
    font-weight: 488;
    font-family: var(--font-serif);
    line-height: 1.2;
    padding-top: var(--content-padding);
}

h1 {
    font-size: 2.33rem;
}

h2 {
    font-size: 2.22rem;
}

h3 {
    font-size: 1.88rem;
}

h4 {
    font-size: 1.66rem;
}

h5 {
    font-size: 1.33rem;
}

h6 {
    font-size: 1.11rem;
}

li,
math,
p {
    font-size: 1.3rem;
    line-height: 1.5;
}

li + li {
    margin-top: var(--content-padding);
}

math[display="block"] {
    margin-top: var(--text-padding);
}

pre {
    border-radius: 0.5rem;
    overflow: scroll;
    padding: var(--content-padding);
}

@media (max-width: 640px) {
    h1 {
        font-size: 1.88rem;
    }

    h2 {
        font-size: 1.66rem;
    }

    h3 {
        font-size: 1.44rem;
    }

    h4 {
        font-size: 1.22rem;
    }

    h5 {
        font-size: 0.99rem;
    }

    h6 {
        font-size: 0.77rem;
    }

    li,
    math,
    p {
        font-size: 1rem;
    }

    li + li {
        margin-top: calc(var(--content-padding) * 0.8);
    }

    ol,
    ul {
        padding-left: 1rem;
    }
}

.page.dictionary {
    .tabs {
        .alphabetical {
            a {
                font-weight: 432;
                text-decoration-line: none;

                &:focus,
                &:hover {
                    text-decoration-line: underline;
                }
            }

            .alphabet {
                display: flex;
                flex-wrap: wrap;
                justify-content: space-between;

                a {
                    font-size: 1.1rem;
                }
            }

            .letter {
                .terms {
                    display: flex;
                    flex-wrap: wrap;
                    gap: var(--text-padding);
                    padding: var(--content-padding) 0;

                    a {
                        font-size: 1.3rem;
                    }
                }
            }
        }
    }

    @media (max-width: 640px) {
        .tabs .alphabetical:has(input[type="radio"]:checked) {
            display: flex;
            justify-content: space-between;
            flex-flow: row-reverse;
            gap: var(--content-padding);

            .alphabet {
                align-items: center;
                flex-direction: column;
                gap: var(--content-padding);

                a {
                    font-size: 0.92rem;
                }
            }

            .letter {
                h2 {
                    padding: 0;
                }

                .terms a {
                    font-size: 1rem;
                }
            }
        }
    }
}

.article {
    display: grid;
    grid: auto / 1fr var(--content-width) 1fr;
    place-items: start center;

    > header,
    > article,
    > footer {
        grid-column: 2/3;
        max-width: var(--content-width);
    }

    > header {
        grid-row: 1;
        width: 100%;
    }

    article {
        padding: 0 var(--content-padding) var(--content-padding);
        width: 100%;

        > * {
            margin-top: var(--text-padding);
        }

        > h1,
        > h2,
        > h3,
        > h4,
        > h5,
        > h6 {
            margin-top: calc(var(--text-padding) * 1.5);
        }

        header {
            display: grid;
            gap: var(--content-padding);
            margin-top: 0;

            h1 {
                padding-top: 0;
            }
        }

        section {
            background-color: var(--section-background-color);
            border-radius: 0.5rem;
            border: 1px solid var(--section-border-color);
            padding: var(--content-padding);
        }
    }

    aside {
        grid-row: 1/4;
        place-self: stretch;
    }

    .tags {
        display: flex;
        gap: calc(var(--content-padding) * 1.5);

        + * {
            padding-top: var(--content-padding);
        }

        a {
            font-weight: 432;
            text-decoration-line: none;

            &:focus,
            &:hover {
                text-decoration-line: underline;
            }
        }
    }

    @media (max-width: 1000px) {
        grid: auto-flow / auto;

        > header,
        > article,
        > footer {
            grid-column: 1;
        }

        .sidebar-left,
        .sidebar-right {
            display: none;
        }
    }

    @media (max-width: 640px) {
        .tags {
            gap: var(--content-padding);
        }

        .metadata {
            font-size: 0.84rem;
        }
    }
}

body:has(.page) {
    display: grid;
    place-items: start center;
}

.page {
    display: grid;
    grid: min-content min-content 1fr / auto;
    height: 100%;
    max-width: var(--content-width);
    padding: 0 var(--content-padding) 0;
    width: 100%;

    .header,
    .footer {
        padding-left: 0;
        padding-right: 0;
    }

    main {
        display: grid;
        gap: var(--text-padding);
    }

    .footer {
        padding-top: calc(var(--content-padding) + var(--text-padding) * 2);
    }

    h1 {
        padding-top: 0;
    }

    .tabs {
        h2 {
            margin-top: calc(var(--text-padding) * 1.5);
        }
    }
}

.home {
    .newsletter-subscribe {
        padding-top: var(--content-padding);
    }

    .social-icons {
        padding-top: 0.3rem;
    }
}

.tag-link {
    font-size: 1.3rem;
    font-weight: 432;
    text-decoration-line: none;

    &:focus,
    &:hover {
        text-decoration-line: underline;
    }

    .count {
        font-size: 1.1rem;
    }

    @media (max-width: 640px) {
        font-size: 1rem;

        .count {
            font-size: 0.92rem;
        }
    }
}

.tabs {
    &:has(input[id="tab-1"]:checked) label[for="tab-1"],
    &:has(input[id="tab-2"]:checked) label[for="tab-2"],
    &:has(input[id="tab-3"]:checked) label[for="tab-3"] {
        border-bottom-color: var(--border-focus-color);
        border-bottom-width: 2px;
        color: var(--color);
        font-weight: 488;
    }

    .labels {
        display: grid;
        grid: auto / auto-flow;

        display: grid;
        grid-auto-columns: 1fr;
        grid-auto-flow: column;

        > * {
            overflow: hidden;
        }

        label {
            border-bottom: 1px solid var(--border-color);
            color: var(--secondary-color);
            cursor: pointer;
            font-size: 1.1rem;
            font-weight: 400;
            padding: var(--content-padding);
            text-align: center;

            &:hover {
                filter: brightness(var(--brightness-hover));
            }
        }
    }

    .tab-content {
        display: none;

        &:has(input[type="radio"]:checked) {
            display: grid;
            gap: var(--text-padding);
            padding: var(--text-padding) 0;
        }

        &.tags:has(input[type="radio"]:checked) {
            display: flex;
            flex-wrap: wrap;
        }

        input[type="radio"] {
            display: none;
        }
    }

    @media (max-width: 640px) {
        .labels {
            label {
                font-size: 0.92rem;
            }
        }
    }
}

.table-of-contents {
    .opened {
        display: none;
    }

    .closed {
        display: inline-block;
    }

    &[open] {
        .opened {
            display: inline-block;
        }

        .closed {
            display: none;
        }
    }

    summary {
        align-items: center;
        cursor: pointer;
        display: flex;
        font-family: var(--font-serif);
        font-size: 1.1rem;
        font-weight: 488;
        gap: 0.33rem;
        list-style: none;
        width: fit-content;

        &:hover {
            text-decoration-line: underline;
            text-decoration-thickness: 1px;
            text-underline-offset: 0.3rem;
        }

        &::marker,
        &::-webkit-details-marker {
            display: none;
        }

        svg {
            width: 0.88rem;
        }
    }

    section {
        margin-top: var(--content-padding);

        ul {
            padding-left: var(--content-padding);
        }

        li {
            font-size: 1rem;

            + li {
                margin-top: calc(var(--content-padding) * 0.8);
            }
        }
    }

    .h3 {
        margin-left: calc(var(--text-padding) * 1);
    }

    .h4 {
        margin-left: calc(var(--text-padding) * 2);
    }

    .h5 {
        margin-left: calc(var(--text-padding) * 3);
    }

    .h6 {
        margin-left: calc(var(--text-padding) * 4);
    }

    @media (max-width: 640px) {
        summary {
            font-size: 0.92rem;

            svg {
                width: 0.8rem;
            }
        }

        section li {
            font-size: 0.84rem;

            + li {
                margin-top: calc(var(--content-padding) * 0.6);
            }
        }
    }
}

.article article .table-of-contents {
    margin-top: calc(var(--content-padding) + var(--text-padding));
}

.social-icons {
    display: grid;
    gap: 1.4rem;
    grid: auto / auto-flow;
    place-content: center;

    a.icon {
        color: inherit;
        height: 1.8rem;

        &:focus,
        &:hover {
            transform: scale(1.2);
        }

        svg {
            height: 100%;
        }
    }

    @media (max-width: 640px) {
        gap: 1.2rem;

        a.icon {
            height: 1.4rem;
        }
    }
}

iframe {
    border-radius: 0.5rem !important;
    box-shadow: var(--box-shadow) !important;
    display: grid;
    margin: var(--text-padding) auto 0 !important;

    &.instagram-media {
        border: none !important;
        min-width: unset !important;
    }

    &.youtube {
        aspect-ratio: 16/9;
        width: 100%;
    }

    &.instagram-media,
    &.youtube-short {
        aspect-ratio: 9/16;
        width: 50%;

        @media (max-width: 640px) {
            width: 80%;
        }
    }
}

.newsletter-subscribe {
    display: flex;
    gap: 0.8rem;
    place-self: stretch;
    position: relative;

    > * {
        border-radius: 0.5rem;
        box-shadow: var(--box-shadow);
        height: 3.2rem;
    }

    input {
        background-color: var(--input-background-color);
        border: 1px solid var(--border-color);
        color: inherit;
        font-family: var(--font-monospace);
        font-size: 1rem;
        padding: 0 1rem;
        width: 100%;

        &::placeholder {
            color: var(--color);
            opacity: var(--opacity);
        }

        &:hover:enabled {
            border-color: var(--border-hover-color);
        }

        &:focus:enabled {
            border-color: var(--border-focus-color);
            outline: 1px solid var(--border-focus-color);
        }

        &:disabled {
            opacity: var(--opacity);
        }
    }

    button {
        background-color: var(--color);
        border: 2px solid var(--color);
        color: var(--selection-color);
        cursor: pointer;
        font-family: var(--font-serif);
        font-size: 1.26rem;
        font-weight: 488;
        outline: 3px solid transparent;
        width: 50%;

        &:hover:enabled,
        &:focus:enabled {
            border-color: var(--selection-color);
            outline-color: var(--color);
        }

        &:disabled {
            background-color: var(--input-background-color);
            color: var(--color);
            cursor: default;
            opacity: var(--opacity);
        }

        &::selection {
            background-color: var(--selection-color);
            color: var(--color);
        }
    }

    .subscribed {
        box-shadow: unset;
        font-style: italic;
        padding: 0.1rem 0.4rem 0;
        position: absolute;
        text-align: center;
        visibility: hidden;
        width: 100%;
    }

    @media (max-width: 640px) {
        flex-direction: column;
        gap: 0.6rem;

        > * {
            height: 3.14rem;
            padding: 0.84rem;
        }

        input {
            padding: 0 0.8rem;
        }

        button {
            width: 100%;
        }

        .subscribed {
            top: 2.2rem;
        }
    }
}

.logo {
    --logo-size: 4rem;

    background-color: var(--logo-background-color);
    border: 1px solid var(--border-color);
    border-radius: 100%;
    box-shadow: var(--box-shadow);
    color: var(--logo-color);
    height: var(--logo-size);
    padding: 0.74rem;
    transition: transform 600ms;
    width: var(--logo-size);

    svg {
        margin-top: 0.1rem;
        overflow: visible;
    }

    @media (max-width: 640px) {
        --logo-size: 3rem;

        padding: 0.55rem;

        svg {
            margin-top: 0.06rem;
        }
    }
}

.header {
    align-items: center;
    display: flex;
    justify-content: space-between;
    margin: var(--text-padding) 0;
    padding: var(--content-padding);

    a.logo-link {
        display: grid;
        font-family: var(--font-serif);
        font-size: 1.66rem;
        font-weight: 444;
        gap: 0.66rem;
        grid: auto / auto-flow;
        place-content: start;
        place-items: center;
        text-decoration: none;
    }

    nav {
        display: flex;
        gap: var(--text-padding);

        a {
            text-decoration-line: none;

            &:focus,
            &:hover {
                text-decoration-line: underline;
            }
        }
    }

    @media (max-width: 640px) {
        a.logo-link {
            gap: 0.44rem;
            font-size: 1.44rem;
        }

        nav a {
            font-size: 0.84rem;
        }
    }
}

.hash {
    font-weight: 400;
}

.footer {
    display: grid;
    gap: var(--text-padding);
    grid: auto / auto-flow;
    place-self: end center;
    padding: calc(var(--content-padding) + var(--text-padding))
        var(--content-padding) var(--content-padding);

    a {
        text-decoration-line: none;

        &:focus,
        &:hover {
            text-decoration-line: underline;
        }
    }

    @media (max-width: 640px) {
        place-items: center;
        place-self: end center;

        a {
            font-size: 0.84rem;
        }
    }
}

.article-preview {
    &,
    > a {
        display: grid;
        gap: var(--content-padding);
    }

    > a {
        text-decoration-line: none;

        &:focus,
        &:hover {
            .title {
                text-decoration-line: underline;
                text-decoration-thickness: 1px;
                text-underline-offset: 0.3rem;
            }
        }
    }

    .title {
        font-size: 2.33rem;
        padding: 0;
    }

    .metadata {
        font-family: var(--font-sans-serif);
        font-size: 1rem;
        font-weight: 400;
    }

    nav {
        display: flex;
        flex-wrap: wrap;
        gap: var(--content-padding);

        a {
            font-weight: 432;
            text-decoration-line: none;

            &:focus,
            &:hover {
                text-decoration-line: underline;
            }
        }
    }

    @media (max-width: 640px) {
        .title {
            font-size: 1.88rem;
        }

        nav,
        .metadata {
            font-size: 0.84rem;
        }
    }
}

.affiliate-disclosure {
    color: var(--secondary-color);
    font-size: 0.9rem;
    padding: var(--content-padding);

    @media (max-width: 640px) {
        font-size: 0.7rem;
    }
}
