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

@font-face {
    font-family: 'Noto Serif KR';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('/fonts/NotoSerifKR-500.woff2') format('woff2');
}

@font-face {
    font-family: 'Noto Serif KR';
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url('/fonts/NotoSerifKR-700.woff2') format('woff2');
}

:root {
    --bg: #FAF9FC;
    --ink: #211A2E;
    --ink-soft: #5B5468;
    --violet: #673AB7;
    --violet-deep: #4A2A86;
    --gold: #B8862E;
    --code-bg: #2d2d2d;
    --card: #FFFFFF;
    --border: #E4DFEE;
}

body {
    font-family: sans-serif;
    color: var(--ink);
    margin: 0;
    padding: 0;
    background-color: var(--bg);
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

h1, h2, h3 {
    font-family: 'Noto Serif KR', serif;
}

a {
    color: var(--violet);
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
}

.site-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem;
    padding: 1rem 2rem;
    background: var(--card);
    border-bottom: 1px solid var(--border);
}

.site-header__brand {
    font-weight: 700;
    font-size: 1.1rem;
    color: var(--violet);
}

.site-header__nav a {
    margin-left: 1.2rem;
    color: var(--ink-soft);
    font-size: 0.95rem;
}

.site-header__nav a:hover {
    color: var(--violet);
    text-decoration: none;
}

.site-header__nav a.site-header__link--active {
    color: var(--violet);
    font-weight: 500;
}

.site-header__toggle {
    display: none;
    background: none;
    border: none;
    font-size: 1.4rem;
    line-height: 1;
    color: var(--ink);
    cursor: pointer;
    padding: 0.2rem 0.4rem;
}

@media (max-width: 640px) {
    .site-header__toggle {
        display: block;
    }

    .site-header__nav {
        display: none;
        flex-basis: 100%;
        flex-direction: column;
    }

    .site-header__nav.site-header__nav--open {
        display: flex;
    }

    .site-header__nav a {
        margin-left: 0;
        padding: 0.7rem 0.2rem;
        border-top: 1px solid var(--border);
    }
}

.page-main {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    padding: 2rem 1rem;
}

.page-main--wide {
    justify-content: flex-start;
}

.error-card {
    background: var(--card);
    border: 1px solid var(--border);
    border-radius: 6px;
    text-align: center;
    width: 400px;
}

.site-footer {
    text-align: center;
    padding: 1.25rem 1rem;
    color: var(--ink-soft);
    font-size: 0.8rem;
}

.site-footer__link {
    color: var(--ink-soft);
    text-decoration: underline;
}

pre {
    background: var(--code-bg);
    color: #f1f1f1;
    padding: 1rem;
    border-radius: 6px;
    text-align: left;
    font-size: 0.85rem;
    line-height: 1.5;
    white-space: pre-wrap;
    overflow-wrap: break-word;
}

pre code {
    background: none;
    padding: 0;
    color: inherit;
}

code {
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, monospace;
    background: #eee;
    padding: 2px 5px;
    border-radius: 4px;
}

.code-block {
    position: relative;
}

.code-block__copy-btn {
    position: absolute;
    top: 0.5rem;
    right: 0.5rem;
    background: #3f3f3f;
    color: #f1f1f1;
    border: 1px solid #5a5a5a;
    border-radius: 4px;
    padding: 3px 10px;
    font-size: 0.75rem;
    cursor: pointer;
    font-family: sans-serif;
    opacity: 0;
    transition: opacity 0.15s ease;
}

.code-block:hover .code-block__copy-btn,
.code-block:focus-within .code-block__copy-btn {
    opacity: 1;
}

.code-block__copy-btn--active {
    opacity: 1;
}

.code-block__copy-btn:hover {
    background: #525252;
}

.code-block__copy-btn:disabled {
    cursor: default;
}

@media (hover: none) {
    .code-block__copy-btn {
        opacity: 1;
    }
}