/* Generated by build/css_bundle.py — 由 assets/css/ 模块合并，请勿直接编辑。 */

/* ==== assets/css/fonts.css ==== */
/*
 * LXGW Bright 不再在此处声明：
 * - 字体子集由 build/font_subset.py 生成：Light 300 全站字符、Medium 700 仅粗体字符，
 *   规则见 assets/fonts/lxgw/subset.css（style.css 中 @import 引入）。
 * - 分包回退由 cn-font-split 生成：Light 见 assets/fonts/lxgw/light/result.css，
 *   Medium 见 assets/fonts/lxgw/medium/result.css。
 * 源文件 LXGWBright-Light.ttf / LXGWBright-Medium.ttf 保留在 assets/fonts/ 作为备份。
 */

@font-face {
    font-family: "Inconsolata";
    src: url("/assets/fonts/Inconsolata-VF.woff2") format("woff2");
    font-weight: 275 900;
    font-style: normal;
}

@font-face {
    font-family: "Cormorant Garamond";
    src: url("/assets/fonts/CormorantGaramond-Light.woff2") format("woff2");
    font-weight: 300;
    font-style: normal;
}

/* ==== assets/css/variables.css ==== */
:root {
    --bg-primary: #ffffff;
    --bg-sidebar: #F6F6F6;
    --bg-inline-code: var(--bg-sidebar);
    --bg-header: #FFFFFF;
    --border-list: #ddd;
    --text-primary: #000;
    --text-nav: #000;
    --text-body: #000;
    --text-muted: #808080;
    --text-link: #999;
    --cyan: #4aa9c5;
    --text-sidebar-hover: var(--cyan);
    --bg-code: #f5f5f5;
    --text-code: #1a1a1a;
    --callout-abstract: var(--cyan);
    --callout-note: #6b9fff;
    --callout-warning: #ff9800;
    --callout-tip: #4caf50;
    --callout-info: #2196f3;
    --callout-todo: #9c27b0;
    --callout-success: #4caf50;
    --callout-fail: #f44336;
    --callout-question: #ff9800;
    --callout-bg: #f8f9fa;
    --bg-highlight: #C2EAF0;

    /* 竖屏汉堡菜单布局：头像 < 标题 < 链接的纵向节奏 */
    --menu-avatar-top: 4rem;
    --menu-title-top: 11rem;
    --menu-links-top: 15rem;
    --menu-close-top: 0.5rem;
    --menu-close-right: 0.75rem;
    --bar-height: 32px; /* 顶栏内容高度近似值，用于 main 顶部留白 */
}

@media (prefers-color-scheme: dark) {
    :root {
        --bg-primary: #111111;
        --bg-sidebar: #111111;
        --bg-inline-code: var(--bg-code);
        --bg-header: #111111;
        --border-list: #222;
        --text-primary: #eeeeee;
        --text-nav: #eeeeee;
        --text-body: #eeeeee;
        --text-muted: #808080;
        --text-link: #666;
        --cyan: #4aa9c5;
        --text-sidebar-hover: var(--cyan);
        --bg-code: #222222;
        --text-code: #d4d4d4;
        --callout-abstract: var(--cyan);
        --callout-note: #6b9fff;
        --callout-warning: #ff9800;
        --callout-tip: #66bb6a;
        --callout-info: #42a5f5;
        --callout-todo: #ab47bc;
        --callout-success: #66bb6a;
        --callout-fail: #ef5350;
        --callout-question: #ffa726;
        --callout-bg: #1a1a1a;
        --bg-highlight: #3D150F;
    }
}

/* ==== assets/css/prism.css ==== */
@media (prefers-color-scheme: dark) {
    .codehilite .c1 { color: #7c7c7c; font-style: italic; }
    .codehilite .sd { color: #7c7c7c; font-style: italic; }

    .codehilite .k,
    .codehilite .kd,
    .codehilite .kc,
    .codehilite .kp,
    .codehilite .kr,
    .codehilite .kt { color: #ff79c6; }

    .codehilite .nb { color: #f1fa8c; }

    .codehilite .nf,
    .codehilite .na,
    .codehilite .nc { color: #50fa7b; }

    .codehilite .o,
    .codehilite .ow { color: #ff79c6; }

    .codehilite .p { color: #f8f8f2; }

    .codehilite .n,
    .codehilite .nx,
    .codehilite .nd,
    .codehilite .ni,
    .codehilite .ne,
    .codehilite .nn,
    .codehilite .no,
    .codehilite .nv { color: #f8f8f2; }

    .codehilite .s,
    .codehilite .s2,
    .codehilite .sa,
    .codehilite .sb,
    .codehilite .sc,
    .codehilite .se,
    .codehilite .sh,
    .codehilite .si,
    .codehilite .sr,
    .codehilite .ss,
    .codehilite .sx,
    .codehilite .dl { color: #f1fa8c; }

    .codehilite .m,
    .codehilite .mb,
    .codehilite .mf,
    .codehilite .mh,
    .codehilite .mi,
    .codehilite .mo { color: #bd93f9; }

    .codehilite .err { color: #f44336; }
}

/* ==== assets/css/base.css ==== */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    height: 100%;
    background-color: var(--bg-primary);
    scroll-behavior: smooth;
}

body {
    min-height: 100vh;
    background-color: var(--bg-primary);
    font-family:
        "LXGW Bright Subset",
        "LXGW Bright",
        -apple-system,
        "Noto Sans SC",
        "PingFang SC",
        "Microsoft YaHei",
        sans-serif;
    color: var(--text-primary);
    display: flex;
    flex-direction: column;
}

a:focus-visible,
.nav-toggle-btn:focus-visible {
    outline: 2px solid var(--text-sidebar-hover);
    outline-offset: 2px;
}

@keyframes fade-in {
    from { opacity: 0; }
    to   { opacity: 1; }
}

@media (prefers-reduced-motion: no-preference) {
    main {
        animation: fade-in 0.45s ease-out 0.04s both;
    }

    /* 页面/文章标题与日期行：随 main 同步淡入 */
    main .page-title,
    main p.page-desc,
    main .article-title,
    main .post-date {
        animation: fade-in 0.45s ease-out 0.04s both;
    }

    /* 汇总列表与文章正文 */
    main .link-list,
    main .link-list p.article-date,
    main h2, main h3, main h4, main h5, main h6,
    main p, main ul, main table, main ol, main pre, main blockquote {
        animation: fade-in 0.45s ease-out 0.08s both;
    }

    footer {
        animation: fade-in 0.45s ease-out 0.24s both;
    }
}

/* ==== assets/css/header.css ==== */
/* 跨文档章节切换过渡：同源页面自动生效，不支持时静默回退为瞬时跳转 */
@view-transition {
    navigation: auto;
}

/* 关闭整页默认 cross-fade：仅让章节下划线参与过渡，页面主体瞬时切换 */
:root {
    view-transition-name: none;
}

.header-bar {
    display: contents;
}

.current-section,
.nav-toggle-btn,
.nav-toggle {
    display: none;
}

header {
    width: 200px;
    min-width: 200px;
    height: 100vh;
    position: fixed;
    top: 0;
    left: 0;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
    padding: 3rem 2rem 2rem;
    background-color: var(--bg-header);
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
}

.header-bar > a {
    text-decoration: none;
    color: inherit;
    transition: color 0.15s ease;
}

.header-bar > a:hover {
    color: var(--text-sidebar-hover);
}

.header-bar > a.avatar {
    width: 80px;
    height: 80px;
    display: flex;
    justify-content: center;
    align-items: center;
}

header img {
    width: 80px;
    height: 80px;
    border-radius: 50%;
    object-fit: cover;
    display: block;
    transition: box-shadow 0.2s ease;
}

header img:hover {
    box-shadow: 0 0 0 2px var(--text-sidebar-hover);
}

.site-title {
    font-size: 1.5rem;
    margin-top: 1.25rem;
    margin-bottom: 1.25rem;
    text-align: center;
    width: 100%;
}

header nav {
    display: flex;
    flex-direction: column;
    gap: 2rem;
}

header nav a {
    text-decoration: none;
    color: var(--text-nav);
    font-size: 1rem;
    padding: 0.25rem 0;
    text-align: left;
    position: relative;
    align-self: flex-start;
    white-space: nowrap;
    transition: color 0.15s ease;
}

header nav a::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 1px;
    background-color: var(--text-sidebar-hover);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 0.2s ease;
}

header nav a:hover {
    color: var(--text-sidebar-hover);
}

header nav a:hover::after,
header nav a.nav-current::after {
    transform: scaleX(1);
}

header nav a.nav-current::after {
    background-color: var(--text-nav);
}

header nav a.nav-current:hover {
    color: var(--text-sidebar-hover);
}

header nav a.nav-current:hover::after {
    background-color: var(--text-sidebar-hover);
}

/* ── 章节切换动效：旧章节下划线按移动方向消散（上移自中间向两端，下移自两端向中间） ── */

/*
 * 按章节区分名称，避免新旧横线被浏览器当作同一元素平移。
 * 仅桌面/短视口（宽度 > 800px）参与：竖屏导航是全屏覆盖层，
 * visibility: hidden 不会让名字失效，会导致菜单关闭后横线残留。
 */
@media (min-width: 801px) {
    header nav a.nav-current[href$="index.html"]::after {
        view-transition-name: nav-line-domus;
    }

    header nav a.nav-current[href$="pages/sylvae.html"]::after {
        view-transition-name: nav-line-sylvae;
    }

    header nav a.nav-current[href$="pages/scripta.html"]::after {
        view-transition-name: nav-line-scripta;
    }

    header nav a.nav-current[href$="pages/transcripta.html"]::after {
        view-transition-name: nav-line-transcripta;
    }

    header nav a.nav-current[href$="pages/commentarii.html"]::after {
        view-transition-name: nav-line-commentarii;
    }

    header nav a.nav-current[href$="pages/archivum.html"]::after {
        view-transition-name: nav-line-archivum;
    }

    header nav a.nav-current[href$="pages/amici.html"]::after {
        view-transition-name: nav-line-amici;
    }

    header nav a.nav-current[href$="pages/deme.html"]::after {
        view-transition-name: nav-line-deme;
    }
}

/* 中间透明带宽度：0% 完整显示，50% 完全消失 */
@property --nav-line-gap {
    syntax: "<percentage>";
    inherits: false;
    initial-value: 0%;
}

/* 中间→两端：中心透明带渐宽，横线向两端消散 */
@keyframes nav-line-open {
    from {
        --nav-line-gap: 0%;
    }

    to {
        --nav-line-gap: 50%;
    }
}

/* 两端→中间：整体向中心收缩消失 */
@keyframes nav-line-shrink {
    from {
        transform: scaleX(1);
    }

    to {
        transform: scaleX(0);
    }
}

/*
 * 方向自适应：目标页由 <html data-section> 标识（旧线快照的样式由目标页决定）。
 * 导航顺序：domus 0 · sylvae 1 · scripta 2 · transcripta 3
 *           commentarii 4 · archivum 5 · amici 6 · de-me 7
 */

/* 向上移动（源在目标下方，序号更大）：旧线自中间向两端消散 */
html[data-section="domus"]::view-transition-old(nav-line-sylvae),
html[data-section="domus"]::view-transition-old(nav-line-scripta),
html[data-section="domus"]::view-transition-old(nav-line-transcripta),
html[data-section="domus"]::view-transition-old(nav-line-commentarii),
html[data-section="domus"]::view-transition-old(nav-line-archivum),
html[data-section="domus"]::view-transition-old(nav-line-amici),
html[data-section="domus"]::view-transition-old(nav-line-deme),
html[data-section="sylvae"]::view-transition-old(nav-line-scripta),
html[data-section="sylvae"]::view-transition-old(nav-line-transcripta),
html[data-section="sylvae"]::view-transition-old(nav-line-commentarii),
html[data-section="sylvae"]::view-transition-old(nav-line-archivum),
html[data-section="sylvae"]::view-transition-old(nav-line-amici),
html[data-section="sylvae"]::view-transition-old(nav-line-deme),
html[data-section="scripta"]::view-transition-old(nav-line-transcripta),
html[data-section="scripta"]::view-transition-old(nav-line-commentarii),
html[data-section="scripta"]::view-transition-old(nav-line-archivum),
html[data-section="scripta"]::view-transition-old(nav-line-amici),
html[data-section="scripta"]::view-transition-old(nav-line-deme),
html[data-section="transcripta"]::view-transition-old(nav-line-commentarii),
html[data-section="transcripta"]::view-transition-old(nav-line-archivum),
html[data-section="transcripta"]::view-transition-old(nav-line-amici),
html[data-section="transcripta"]::view-transition-old(nav-line-deme),
html[data-section="commentarii"]::view-transition-old(nav-line-archivum),
html[data-section="commentarii"]::view-transition-old(nav-line-amici),
html[data-section="commentarii"]::view-transition-old(nav-line-deme),
html[data-section="archivum"]::view-transition-old(nav-line-amici),
html[data-section="archivum"]::view-transition-old(nav-line-deme),
html[data-section="amici"]::view-transition-old(nav-line-deme) {
    --nav-line-gap: 0%;
    -webkit-mask-image: linear-gradient(
        90deg,
        #000 0 calc(50% - var(--nav-line-gap)),
        transparent calc(50% - var(--nav-line-gap)) calc(50% + var(--nav-line-gap)),
        #000 calc(50% + var(--nav-line-gap)) 100%
    );
    mask-image: linear-gradient(
        90deg,
        #000 0 calc(50% - var(--nav-line-gap)),
        transparent calc(50% - var(--nav-line-gap)) calc(50% + var(--nav-line-gap)),
        #000 calc(50% + var(--nav-line-gap)) 100%
    );
    animation: nav-line-open 0.25s ease both;
    mix-blend-mode: normal;
}

/* 向下移动（源在目标上方，序号更小）：旧线自两端向中间收缩 */
html[data-section="sylvae"]::view-transition-old(nav-line-domus),
html[data-section="scripta"]::view-transition-old(nav-line-domus),
html[data-section="scripta"]::view-transition-old(nav-line-sylvae),
html[data-section="transcripta"]::view-transition-old(nav-line-domus),
html[data-section="transcripta"]::view-transition-old(nav-line-sylvae),
html[data-section="transcripta"]::view-transition-old(nav-line-scripta),
html[data-section="commentarii"]::view-transition-old(nav-line-domus),
html[data-section="commentarii"]::view-transition-old(nav-line-sylvae),
html[data-section="commentarii"]::view-transition-old(nav-line-scripta),
html[data-section="commentarii"]::view-transition-old(nav-line-transcripta),
html[data-section="archivum"]::view-transition-old(nav-line-domus),
html[data-section="archivum"]::view-transition-old(nav-line-sylvae),
html[data-section="archivum"]::view-transition-old(nav-line-scripta),
html[data-section="archivum"]::view-transition-old(nav-line-transcripta),
html[data-section="archivum"]::view-transition-old(nav-line-commentarii),
html[data-section="amici"]::view-transition-old(nav-line-domus),
html[data-section="amici"]::view-transition-old(nav-line-sylvae),
html[data-section="amici"]::view-transition-old(nav-line-scripta),
html[data-section="amici"]::view-transition-old(nav-line-transcripta),
html[data-section="amici"]::view-transition-old(nav-line-commentarii),
html[data-section="amici"]::view-transition-old(nav-line-archivum),
html[data-section="de-me"]::view-transition-old(nav-line-domus),
html[data-section="de-me"]::view-transition-old(nav-line-sylvae),
html[data-section="de-me"]::view-transition-old(nav-line-scripta),
html[data-section="de-me"]::view-transition-old(nav-line-transcripta),
html[data-section="de-me"]::view-transition-old(nav-line-commentarii),
html[data-section="de-me"]::view-transition-old(nav-line-archivum),
html[data-section="de-me"]::view-transition-old(nav-line-amici) {
    animation: nav-line-shrink 0.25s ease both;
    transform-origin: center;
    mix-blend-mode: normal;
}

/* 新章节横线不加动效（悬停本就会显示），直接呈现 */
::view-transition-new(nav-line-domus),
::view-transition-new(nav-line-sylvae),
::view-transition-new(nav-line-scripta),
::view-transition-new(nav-line-transcripta),
::view-transition-new(nav-line-commentarii),
::view-transition-new(nav-line-archivum),
::view-transition-new(nav-line-amici),
::view-transition-new(nav-line-deme) {
    animation: none;
    mix-blend-mode: normal;
}

@media (prefers-reduced-motion: reduce) {
    ::view-transition-old(*),
    ::view-transition-new(*),
    ::view-transition-group(*) {
        animation: none !important;
    }
}

@media (min-width: 801px) {
    header::after {
        content: "";
        position: absolute;
        top: 2.5%;
        right: 0;
        height: 95%;
        border-right: 1px solid var(--text-muted);
    }

    header nav a.nav-title-link,
    header nav a.avatar {
        display: none;
    }

    header nav a {
        align-self: center;
        text-align: center;
    }

    header nav a::after {
        transform-origin: center;
    }
}

/* 短视口桌面模式：侧栏改为随页面整体滚动（不再固定），底部导航可全部露出 */
@media (min-width: 801px) and (max-height: 680px) {
    header {
        position: absolute;
        top: 0;
        left: 0;
        height: auto;
    }
}

/* ==== assets/css/menu.css ==== */
/* 竖屏汉堡菜单覆盖层（随 header.css 之后加载，仅 max-width: 800px 生效） */

@media (max-width: 800px) {
    /* 菜单打开时隐藏顶栏，关闭按钮移入菜单内部 */
    header:has(.nav-toggle:checked) .header-bar {
        display: none;
    }

    /* 菜单右上角关闭按钮 */
    header nav .nav-toggle-btn {
        position: absolute;
        top: var(--menu-close-top);
        right: var(--menu-close-right);
        padding: 0.1rem 0.3rem;
    }

    /* 菜单头像：置于顶部，随菜单内容滚动 */
    header nav a.avatar {
        position: absolute;
        top: var(--menu-avatar-top);
        left: 50%;
        transform: translateX(-50%);
        width: 80px;
        height: 80px;
        justify-content: center;
        padding: 0;
    }

    header nav a.avatar::after {
        display: none;
    }

    header nav a.avatar img {
        width: 80px;
        height: 80px;
    }

    /* 菜单站点标题：夹在头像与链接之间 */
    header nav a.nav-title-link {
        position: absolute;
        top: var(--menu-title-top);
        left: 50%;
        transform: translateX(-50%);
        width: fit-content;
        margin: 0;
        padding: 0;
        justify-content: center;
    }

    header nav a.nav-title-link::after {
        display: none;
    }

    header nav a.nav-title-link .site-title {
        font-size: 1.4rem;
        margin: 0;
        width: auto;
    }

    /* 菜单覆盖层本体：全屏、可滚动、淡入淡出 */
    .nav-toggle:checked ~ nav,
    .nav-toggle:not(:checked) ~ nav {
        display: flex;
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100vh;
        height: 100dvh;
        overflow-y: auto;
        overscroll-behavior: contain;
        -webkit-overflow-scrolling: touch;
        flex-direction: column;
        align-items: center;
        justify-content: flex-start;
        gap: 2.5rem;
        background-color: var(--bg-primary);
        z-index: 99;
        margin: 0;
        padding: var(--menu-links-top) 2rem 5rem;
        border: none;
    }

    .nav-toggle:checked ~ nav {
        visibility: visible;
        opacity: 1;
        pointer-events: auto;
        transition: opacity 0.2s ease;
    }

    .nav-toggle:not(:checked) ~ nav {
        visibility: hidden;
        opacity: 0;
        pointer-events: none;
        transition: opacity 0.2s ease, visibility 0s linear 0.2s;
    }

    /* 菜单章节链接 */
    header nav a {
        display: flex;
        flex-direction: column;
        align-items: center;
        gap: 0.15rem;
        font-size: 1rem;
        padding: 0;
        text-align: center;
        align-self: auto;
    }

    header nav a::after {
        transform-origin: center;
    }
}

/* ==== assets/css/main.css ==== */
main {
    flex: 1;
    margin-left: 200px;
    width: calc(100% - 200px);
    padding: 4rem 4rem;
    background-color: var(--bg-primary);
}

main h1, main h2, main h3, main h4, main h5, main h6 {
    margin: 1.5em 0 0.75em;
}

main hr {
    border: none;
    border-top: 1px solid var(--text-muted);
    margin: 0.25rem 0;
}

main blockquote {
    margin: 1rem 0;
    padding-left: 1.2rem;
    border-left: 3px solid var(--border-list);
    color: var(--text-muted);
}

main blockquote blockquote {
    margin: 0.5rem 0;
}

main dl {
    margin: 1rem 0;
}

main dt {
    font-weight: bold;
    margin-top: 0.5rem;
}

main dd {
    line-height: 1.8;
    margin: 0 0 0.5rem 1.5rem;
}

main p {
    font-size: 1rem;
    line-height: 1.8;
    color: var(--text-body);
    margin-bottom: 1rem;
}

main a {
    color: var(--text-body);
    text-decoration: underline dashed var(--text-muted);
    text-underline-offset: 0.3em;
    text-decoration-thickness: 1px;
    transition: color 0.2s ease, text-decoration-color 0.2s ease;
}

main a:hover {
    color: var(--cyan);
    text-decoration: underline dashed var(--cyan);
    text-underline-offset: 0.3em;
    text-decoration-thickness: 1px;
}

main mark {
    background-color: var(--bg-highlight);
    color: var(--text-body);
    padding: 0.1em 0.3em;
    border-radius: 3px;
}

main li input[type="checkbox"] {
    display: none;
}

main ul:not(.link-list) > li:has(input[type="checkbox"])::before {
    content: "☐";
    margin-right: 0.5rem;
}

main ul:not(.link-list) > li:has(input[type="checkbox"]:checked)::before {
    content: "☑";
}

main img {
    max-width: 80%;
    max-height: 80vh;
    height: auto;
    margin: 1.5rem 0;
}

main ul, main ol:not(.link-list) {
    list-style: none;
    margin: 1rem 0 1rem 0.5rem;
    padding-left: 0;
}

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

main ul:not(.link-list) li,
main ol:not(.link-list) li {
    font-size: 1rem;
    line-height: 1.8;
    color: var(--text-body);
    margin-bottom: 0.5rem;
}

main ol:not(.link-list) {
    counter-reset: list-counter;
}

main ol:not(.link-list) > li {
    counter-increment: list-counter;
}

main ol:not(.link-list) > li::before {
    content: counter(list-counter) ".";
    margin-right: 0.5rem;
    font-weight: bold;
}

main ol:not(.link-list) ol > li::before {
    content: counter(list-counter, lower-alpha) ".";
}

main ul:not(.link-list) > li:not(:has(input[type="checkbox"]))::before {
    content: "⬡";
    margin-right: 0.5rem;
}

main ul:not(.link-list) ul > li:not(:has(input[type="checkbox"]))::before {
    content: "⬦";
    margin-right: 0.5rem;
}

main table {
    border-collapse: collapse;
    margin: 1rem 0 1.5rem 0;
    font-size: 0.95rem;
    color: var(--text-body);
}

main table th,
main table td {
    border: 1px solid var(--border-list);
    padding: 0.4rem 1rem;
    text-align: center;
}

main table th {
    background-color: var(--bg-sidebar);
    color: var(--text-primary);
    font-weight: bold;
}

main table tr:nth-child(even) {
    background-color: var(--bg-sidebar);
}

/* ==== assets/css/components.css ==== */
.link-list {
    list-style: none;
    margin: 0.25rem 0 0 0;
    padding-left: 0;
}

.link-list li {
    padding: 0.75rem 0;
    border-bottom: 1px solid var(--border-list);
}

.link-list li a {
    color: var(--text-primary);
    text-decoration: none;
    font-weight: 300;
    transition: color 0.15s ease;
}

.link-list li a:hover {
    color: var(--text-sidebar-hover);
}

.link-list li a.article-link {
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
}

.link-list li .article-date {
    font-size: 0.85rem;
    color: var(--text-muted);
    margin-top: 0.25rem;
    margin-bottom: 0;
    font-weight: normal;
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
}

.nav-la {
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
    font-weight: 300;
}

.article-title,
.page-title {
    font-size: 1.8rem;
}

.article-title {
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
    font-weight: 300;
    margin: 0rem 0 1rem;
}

.page-title {
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
    font-weight: 300;
    margin: 0 0 0.8rem;
}

.page-desc {
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
}

.post-date {
    font-size: 0.85rem;
    color: var(--text-muted);
    margin: 0 0 1rem;
    font-weight: normal;
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
}

.article-divider {
    margin-bottom: 1rem;
}

.callout {
    margin: 1rem 0;
    padding: 0.75rem 1rem;
    border-left: 4px solid;
    border-radius: 4px;
    background-color: var(--callout-bg);
}

.callout-title {
    font-weight: bold;
    margin-bottom: 0.4rem;
    font-size: 1rem;
}

.callout-content > p {
    margin-bottom: 0.4rem;
}

.callout-content > p:last-child {
    margin-bottom: 0;
}

.callout-abstract {
    border-left-color: var(--callout-abstract);
}
.callout-abstract .callout-title {
    color: var(--callout-abstract);
}

.callout-note {
    border-left-color: var(--callout-note);
}
.callout-note .callout-title {
    color: var(--callout-note);
}

.callout-warning {
    border-left-color: var(--callout-warning);
}
.callout-warning .callout-title {
    color: var(--callout-warning);
}

.callout-tip {
    border-left-color: var(--callout-tip);
}
.callout-tip .callout-title {
    color: var(--callout-tip);
}

.callout-info {
    border-left-color: var(--callout-info);
}
.callout-info .callout-title {
    color: var(--callout-info);
}

.callout-todo {
    border-left-color: var(--callout-todo);
}
.callout-todo .callout-title {
    color: var(--callout-todo);
}

.callout-success {
    border-left-color: var(--callout-success);
}
.callout-success .callout-title {
    color: var(--callout-success);
}

.callout-fail {
    border-left-color: var(--callout-fail);
}
.callout-fail .callout-title {
    color: var(--callout-fail);
}

.callout-question {
    border-left-color: var(--callout-question);
}
.callout-question .callout-title {
    color: var(--callout-question);
}

.signature {
    text-align: center;
    font-style: italic;
    color: var(--text-muted);
    margin-top: 1.25rem;
    line-height: 2;
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
    font-weight: 300;
    letter-spacing: 0.05em;
}

.welcome {
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
    font-weight: 300;
    margin: 0 0 1rem;
}

/* ── 脚注 ────────────────────────────── */

@keyframes fn-highlight {
    0%   { background-color: var(--bg-highlight); border-radius: 2px; }
    100% { background-color: transparent; }
}

sup[id^="fnref:"] {
    font-size: 0.9em;
    position: relative;
    top: -0.15em;
    line-height: 0;
    scroll-margin-top: 45vh;
    display: inline-block;
    padding: 0 0.15em;
    margin: 0 -0.15em;
    border-radius: 2px;
}

sup[id^="fnref:"]:target {
    animation: fn-highlight 1.2s ease-out;
}

.footnote-ref {
    color: var(--cyan);
    font-weight: bold;
    text-decoration: none;
    padding: 0 0.15em;
}

.footnote-ref:hover {
    text-decoration: underline;
}

@media (prefers-color-scheme: dark) {
    .footnote-ref {
        color: var(--cyan);
    }
}

.footnote-backref {
    color: var(--cyan);
    text-decoration: none;
    font-variant-emoji: text;
}

.footnote-backref:hover {
    text-decoration: underline;
}

@media (prefers-color-scheme: dark) {
    .footnote-backref {
        color: var(--cyan);
    }
}

li[id^="fn:"] {
    scroll-margin-top: 45vh;
}

div.footnote {
    border-top: none;
}

div.footnote hr {
    display: none;
}

/* ==== assets/css/code.css ==== */
main pre {
    background-color: var(--bg-code);
    color: var(--text-code);
    padding: 1rem;
    overflow-x: auto;
    border-radius: 4px;
    margin: 1rem 0;
    font-size: 0.9rem;
    line-height: 1.5;
}

main code {
    font-family: "Inconsolata", "SF Mono", "Fira Code", "Consolas", monospace;
    font-size: 0.9em;
    color: var(--text-code);
}

main :not(pre) > code {
    background-color: var(--bg-inline-code);
    color: var(--text-code);
    padding: 0.15rem 0.4rem;
    border-radius: 3px;
}

main math {
    font-size: 0.95rem;
}

main math[display="block"] {
    display: block;
    margin: 1rem 0;
}

/* ==== assets/css/footer.css ==== */
footer {
    display: block;
    text-align: center;
    padding: 2rem;
    font-size: 0.85rem;
    color: var(--text-muted);
    background-color: var(--bg-primary);
    font-family: "Cormorant Garamond", "LXGW Bright Subset", "LXGW Bright", serif;
    margin-left: 200px;
    width: calc(100% - 200px);
}

footer a,
footer a:visited {
    color: var(--text-link);
    text-decoration: none;
    transition: color 0.3s ease;
}

footer a:hover {
    color: var(--text-body);
}

/* ==== assets/css/responsive-portrait.css ==== */
@media (max-width: 800px) {
    @media (prefers-reduced-motion: no-preference) {
        body, header, main, footer {
            animation: none;
        }
    }

    header {
        width: 100%;
        height: auto;
        min-width: unset;
        position: fixed;
        top: 0;
        left: 0;
        flex-direction: column;
        padding: 0;
        z-index: 100;
    }

    .header-bar {
        display: flex;
        align-items: center;
        gap: 0.5rem;
        padding: 0.5rem 0.75rem;
        width: 100%;
        background-color: var(--bg-primary);
        position: relative;
        z-index: 101;
    }

    .header-bar > a {
        display: flex;
        align-items: center;
    }

    .header-bar > a:hover {
        color: var(--text-sidebar-hover);
    }

    .header-bar > a.avatar {
        display: none;
    }

    .site-title {
        font-size: 0.95rem;
        margin: 0 0 0 0.3rem;
        width: auto;
    }

    .current-section {
        display: inline;
        margin-left: auto;
        font-size: 0.85rem;
        color: var(--text-muted);
        text-decoration: none;
    }

    .section-page .current-section {
        display: none;
    }

    .section-page .nav-toggle-btn {
        margin-left: auto;
    }

    .nav-toggle-btn {
        display: inline;
        font-size: 1.4rem;
        cursor: pointer;
        user-select: none;
        padding: 0.1rem 0.3rem;
        color: var(--text-nav);
    }

    main {
        margin-left: 0;
        width: 100%;
        padding: 2rem 7.5%;
        padding-top: calc(var(--bar-height) + 3rem);
    }

    main img,
    main video {
        display: block;
        margin: 1.5rem auto;
    }

    main img {
        width: 100%;
        max-width: 100%;
        max-height: none;
        height: auto;
        margin: 1.5rem 0;
    }

    footer {
        margin-left: 0;
        width: 100%;
    }
}
