@font-face {
    font-family: "Lora Variable";
    font-style: normal;
    font-display: swap;
    font-weight: 400 700;
    src: url(https://cdn.jsdelivr.net/fontsource/fonts/lora:vf@latest/latin-wght-normal.woff2) format("woff2-variations");
    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

@font-face {
    font-family: "Roboto Variable";
    font-style: normal;
    font-display: swap;
    font-weight: 100 900;
    src: url(https://cdn.jsdelivr.net/fontsource/fonts/roboto:vf@latest/latin-wght-normal.woff2) format("woff2-variations");
    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

@font-face {
    font-family: "JetBrains Mono Variable";
    font-style: normal;
    font-display: swap;
    font-weight: 100 800;
    src: url(https://cdn.jsdelivr.net/fontsource/fonts/jetbrains-mono:vf@latest/latin-wght-normal.woff2) format("woff2-variations");
    unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

:root {
    --color-a: 242 237 230;
    --color-b: 26 5 194;
    --font-title: "Lora Variable", serif;
    --font-body: "Roboto Variable", sans-serif;
    --font-mono: "JetBrains Mono Variable", mono;
}

@layer reset universal utility;

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

    button,
    input {
        font-family: inherit;
        font-weight: inherit;
        font-size: inherit;
    }
}

@layer universal {
    h1 {
        margin: 16px 0;
        font-family: var(--font-title);
        font-size: 34px;
        font-weight: 500;
        line-height: 44px;
    }

    h2 {
        margin: 16px 0;
        font-family: var(--font-title);
        font-size: 24px;
        font-weight: 500;
        line-height: 34px;
    }

    h3 {
        margin: 16px 0;
        font-family: var(--font-title);
        font-size: 22px;
        font-weight: 500;
        line-height: 32px;
    }

    h4 {
        margin: 16px 0;
        font-family: var(--font-title);
        font-size: 20px;
        font-weight: 500;
        line-height: 30px;
    }

    h5 {
        margin: 16px 0;
        font-family: var(--font-title);
        font-size: 16px;
        font-weight: 500;
        line-height: 26px;
    }

    p {
        margin: 16px 0;
        font-size: 14px;
        font-weight: 400;
        line-height: 24px;
    }

    a {
        font-family: var(--font-body);
        font-size: 14px;
        font-weight: 400;
        color: currentColor;
    }
    a:hover {
        text-decoration: none;
    }

    code {
        font-family: var(--font-mono);
        font-size: 13px;
    }

    body {
        margin: 0;
        padding: 16px;
        font-family: var(--font-body);
        background: rgba(var(--color-a) / 1);
        color: rgba(var(--color-b) / 1);
    }
    body:has(dialog:open) {
        overflow-y: hidden;
    }

    header,
    main {
        margin: 0 auto;
        max-width: 800px;
        background: rgba(var(--color-a) / 1);
        color: rgba(var(--color-b) / 1);
        border: 1px solid rgba(var(--color-b) / 1);
        border-radius: 3px;
        overflow: hidden;
    }

    header {
        margin-bottom: 16px;
    }

    nav {
        background: rgba(var(--color-b) / 1);
        color: rgba(var(--color-a) / 1);
    }
    nav ul {
        padding: 16px 24px;
        margin: 0;
        display: flex;
        flex-direction: row;
        gap: 16px;
        font-size: 14px;
    }
    nav ul li {
        list-style: none;
    }

    .block {
        padding: 16px 24px;
        display: block;
        background: rgba(var(--color-a) / 1);
        color: rgba(var(--color-b) / 1);
    }
    .block:has(+ .block) {
        border-bottom: 1px solid rgba(var(--color-b) / 1);
    }

    .block img {
        max-width: 100%;
        max-height: 400px;
        height: auto;
        display: block;
    }

    .block.image img {
        margin: 0 auto;
        max-height: none;
    }

    .block.notice {
        padding: 8px 24px;
        font-size: 14px;
        font-weight: 500;
        background: rgba(var(--color-b) / 1);
        color: rgba(var(--color-a) / 1);
    }

    .block.code {
        background: rgba(var(--color-b) / 1);
        color: rgba(var(--color-a) / 1);
    }
    .block.code pre {
        margin: 0;
        padding: 16px 24px;
        max-width: 100%;
        overflow-x: auto;
    }

    .block.latest-song {
        --background-image: transparent;

        display: grid;
        grid-template-columns: 80px 1fr;
        gap: 16px;
        align-items: center;

        position: relative;

        color: rgba(var(--color-b) / 1);

        overflow: hidden;
    }
    .block.latest-song p {
        margin: 0;
        z-index: +1;
    }
    .block.latest-song img {
        max-width: 100%;
        max-height: 100%;
        aspect-ratio: 1/1;
        z-index: +1;
    }
    .block.latest-song::before {
        content: "";

        position: absolute;
        inset: -16px;

        background-image: linear-gradient(to right, rgb(var(--color-a) / 0.9), rgb(var(--color-a) / 0.4)), var(--background-image);
        background-size: cover;
        background-position: center;
        background-repeat: no-repeat;

        filter: blur(2px);
    }

    @media screen and (max-width: 540px) {
        .block.latest-song {
            grid-template-columns: 1fr;
            grid-auto-rows: 80px 1fr;
            align-items: start;
        }
    }

    .blog code {
        padding: 2px 4px;
        background: rgba(var(--color-b) / 1);
        color: rgba(var(--color-a) / 1);
        border-radius: 4px;
    }
    .blog pre {
        margin: 8px -24px;
        padding: 16px 24px;
        max-width: calc(100% + 48px);
        background: rgba(var(--color-b) / 1);
        color: rgba(var(--color-a) / 1);
        overflow-x: auto;
    }
    .blog pre code {
        padding: 0;
        background: transparent;
    }
    .blog hr {
        border: none;
        border-bottom: 1px solid rgba(var(--color-b) / 1);
    }
    .blog ul,
    .blog ol {
        padding-left: 24px;
        font-size: 14px;
        line-height: 24px;
    }

    .chat-history {
        margin: 0;
        padding: 16px 24px;
        height: 300px;
        border-bottom: 1px solid rgba(var(--color-b) / 1);
        overflow-y: auto;
    }
    .chat-history li {
        max-width: 100%;
        line-height: 24px;
        font-size: 14px;
        word-wrap: break-word;
        list-style: none;
        overflow: hidden;
    }

    .message-box {
        padding: 16px 24px;
        position: relative;
        display: grid;
        grid-template-columns: 1fr auto;
        gap: 24px;
        align-content: center;
    }

    .composer {
        position: relative;
    }
    .composer input {
        padding: 0;
        height: 30px;
        width: 100%;
        outline: none;
        background: transparent;
        color: rgba(var(--color-b) / 1);
        border: none;
        border-bottom: 1px solid rgba(var(--color-b) / 1);
    }
    .composer input::placeholder {
        color: rgba(var(--color-b) / 1);
    }
    .composer::after {
        content: "";
        height: 2px;
        width: 0;
        position: absolute;
        bottom: 0;
        left: 50%;
        background: rgba(var(--color-b) / 1);
        transition-duration: 0.2s;
        transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
    }
    .composer:has(input:focus)::after,
    .composer:has(input:not(:placeholder-shown))::after {
        left: 0;
        width: 100%;
    }

    .submit-message {
        padding: 0;
        width: 52px;
        height: 32px;
        display: grid;
        place-content: center;
        background: rgba(var(--color-b) / 1);
        color: rgba(var(--color-a) / 1);
        border: none;
        border-radius: 9999px;
        cursor: pointer;
    }

    .image-grid {
        position: relative;
        display: grid;
        grid-template-columns: 1fr 1fr 1fr 1fr;
        gap: 24px;
    }
    .image-grid button {
        padding: 0;
        background: transparent;
        border: none;
        border-radius: 0;
        cursor: pointer;
        position: relative;
    }
    .image-grid button img {
        width: 100%;
        aspect-ratio: 1/1;
        object-fit: contain;
    }

    @media screen and (max-width: 740px) {
        .image-grid {
            grid-template-columns: 1fr 1fr 1fr;
        }
    }

    .fullscreen-view {
        padding: 0;
        background: transparent;
        border: none;
    }
    .fullscreen-view img {
        max-width: 90vh;
        max-height: 90vh;
        width: 100%;
        height: 100%;
        display: block;
    }
}

@layer utility {
    .no-margin {
        margin: 0;
    }

    .no-padding {
        padding: 0;
    }

    .no-vertical-padding {
        padding-top: 0;
        padding-bottom: 0;
    }

    .text-center {
        text-align: center;
    }
}
