/* CJK webfonts (~16MB) are injected only during PDF export (see pdfexport/chrome.go).
   Putting @font-face here makes the browser tab wait on those files. */
:root{--bg:#09111f;--panel:#111c2e;--panel2:#17243a;--line:#263753;--text:#eaf0f8;--muted:#91a0b6;--accent:#63b3ff;--accent2:#a78bfa;--shadow:0 18px 50px #0004;--ui-font:ui-sans-serif,system-ui,"Noto Sans SC","Source Han Sans SC","PingFang SC","Microsoft YaHei","Segoe UI",sans-serif;--print-font:"Noto Sans SC","kxsrv-cjk",ui-sans-serif,system-ui,sans-serif;color-scheme:dark}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:radial-gradient(circle at 75% -10%,#17335d 0,transparent 35rem),var(--bg);color:var(--text);font-family:var(--ui-font);min-height:100vh}a{color:inherit}.shell{width:min(1080px,calc(100% - 32px));margin-inline:auto}.hero{padding:72px 0 48px;border-bottom:1px solid var(--line)}.hero h1{font-size:clamp(2.5rem,8vw,5rem);letter-spacing:-.06em;margin:.2rem 0}.hero p,.topbar p{color:var(--muted);margin:.2rem 0}.eyebrow{font-size:.72rem;font-weight:800;letter-spacing:.2em;color:var(--accent)}.main{padding-block:34px}.section-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-head h2{font-size:1rem;margin:0}.section-head span{font-size:.8rem;color:var(--muted)}.tool-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(270px,1fr));gap:16px}.tool-card{display:flex;gap:16px;align-items:center;padding:22px;text-decoration:none;background:linear-gradient(135deg,var(--panel2),var(--panel));border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);transition:.18s}.tool-card:hover{border-color:var(--accent);transform:translateY(-2px)}.tool-card strong,.tool-card small{display:block}.tool-card small{margin-top:5px;color:var(--muted);line-height:1.4}.tool-card b{margin-left:auto;color:var(--accent)}.tool-icon{font-size:1.7rem}.topbar{padding:30px 0;border-bottom:1px solid var(--line);background:#09111fcc}.bar-inner{display:flex;gap:15px;align-items:center}.bar-inner h1{font-size:1.4rem;margin:0}.brand{width:44px;height:44px;display:grid;place-items:center;border-radius:12px;background:linear-gradient(135deg,var(--accent),var(--accent2));color:#07101e;text-decoration:none;font-weight:900}.topbar p{font-family:ui-monospace,monospace;font-size:.75rem;overflow-wrap:anywhere}.search{display:flex;gap:10px;margin-bottom:28px}.search input{min-width:0;flex:1;background:var(--panel);border:1px solid var(--line);border-radius:11px;color:var(--text);padding:13px 15px;font:inherit;outline:none}.search input:focus{border-color:var(--accent)}button,.button{border:0;border-radius:10px;background:var(--accent);color:#07101e;font-weight:750;padding:0 18px;text-decoration:none}.search>a{align-self:center;color:var(--muted);font-size:.85rem}.file-list{border:1px solid var(--line);background:#0e192a;border-radius:15px;overflow:hidden}.file-row{display:flex;align-items:center;gap:14px;padding:15px 17px;text-decoration:none;border-bottom:1px solid var(--line)}.file-row:last-child{border-bottom:0}.file-row:hover{background:var(--panel2)}.file-main{min-width:0;flex:1}.file-main strong,.file-main small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-main small{color:var(--muted);font-family:ui-monospace,monospace;font-size:.72rem;margin-top:4px}.file-row time{color:var(--muted);font-size:.72rem}.file-row>b{color:var(--accent)}.type{font-size:.65rem;font-weight:900;min-width:42px;text-align:center;padding:7px 5px;border-radius:7px;background:#23334e;color:#bdd8f5}.type-md{background:#163e5e;color:#7dd3fc}.type-html{background:#512f1e;color:#fdba74}.type-pdf{background:#51232c;color:#fda4af}.empty{color:var(--muted);padding:44px;text-align:center}footer{text-align:center;color:var(--muted);font-size:.72rem;padding:45px 16px}.reader-nav{height:56px;position:sticky;z-index:10;top:0;display:flex;align-items:center;gap:18px;padding:0 22px;background:#09111ff2;border-bottom:1px solid var(--line);backdrop-filter:blur(12px)}.reader-nav a{text-decoration:none;color:var(--accent);white-space:nowrap}.reader-nav span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;color:var(--muted);font:12px ui-monospace,monospace}.reader-layout{width:min(1220px,calc(100% - 32px));margin:28px auto;display:grid;grid-template-columns:230px minmax(0,850px);gap:32px;justify-content:center}.toc{position:sticky;top:84px;align-self:start;max-height:calc(100vh - 110px);overflow:auto;font-size:.8rem}.toc ul{list-style:none;margin:0;padding:0}.toc ul ul{padding-left:12px;border-left:1px solid var(--line)}.toc a{display:block;color:var(--muted);padding:5px 0;text-decoration:none}.toc a:hover{color:var(--accent)}.markdown-body{background:#fff;color:#1d2735;border-radius:14px;padding:clamp(22px,5vw,60px);box-shadow:var(--shadow);line-height:1.75;min-width:0;font-family:var(--ui-font)}.markdown-body h1,.markdown-body h2,.markdown-body h3{line-height:1.3;scroll-margin-top:72px}.markdown-body h1{font-size:2.1rem;border-bottom:2px solid #e6ebf1;padding-bottom:.5em}.markdown-body h2{margin-top:2.1em;border-bottom:1px solid #e6ebf1;padding-bottom:.3em}.markdown-body a{color:#0969da}.markdown-body img{max-width:100%}.markdown-body table{display:block;overflow-x:auto;border-collapse:collapse}.markdown-body th,.markdown-body td{border:1px solid #d7dee7;padding:7px 12px}.markdown-body th{background:#f1f5f9}.markdown-body pre{overflow:auto;background:#111827;color:#e5e7eb;border-radius:9px;padding:16px}.markdown-body code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.markdown-body :not(pre)>code{background:#edf1f5;padding:.15em .35em;border-radius:4px}.markdown-body blockquote{border-left:4px solid #80bfff;margin-left:0;padding-left:16px;color:#526173}.sandbox-note{height:34px;display:grid;place-items:center;font-size:.72rem;color:#b8c4d6;background:#111c2e}.snapshot-page,.pdf-page{overflow:hidden}.snapshot-frame{display:block;width:100%;height:calc(100vh - 90px);border:0;background:#fff}.pdf-frame{display:block;width:100%;height:calc(100vh - 56px);border:0;background:#40464f}.pdf-fallback{display:grid;place-items:center;height:100%;text-align:center}.pdf-fallback .button{display:inline-block;padding:12px 18px}.reader-page{background:#dfe7f0}.reader-page .reader-nav{color:var(--text)}@media(max-width:780px){.hero{padding-top:48px}.reader-layout{display:block;width:min(100% - 20px,850px);margin:10px auto}.toc{display:none}.markdown-body{border-radius:9px;padding:22px 18px}.file-row time{display:none}.search{flex-wrap:wrap}.search input{flex-basis:100%}.search button{height:42px}.sandbox-note{padding:0 10px;text-align:center}.snapshot-frame{height:calc(100vh - 90px)}}
@media(prefers-color-scheme:light){:root{--bg:#edf3fa;--panel:#fff;--panel2:#f7faff;--line:#d5dfeb;--text:#172235;--muted:#64748b;--accent:#1671c5;--accent2:#7c3aed;--shadow:0 15px 40px #2b4e7017;color-scheme:light}body{background:radial-gradient(circle at 75% -10%,#cee6ff 0,transparent 35rem),var(--bg)}.topbar,.reader-nav{background:#edf3faf2}.brand{color:white}.tool-card{background:linear-gradient(135deg,var(--panel2),var(--panel))}.file-list{background:var(--panel)}.reader-page{background:#dfe7f0}}
.exercise-page{background:var(--bg)}.exercise-hero{width:min(1040px,calc(100% - 32px));margin:0 auto;padding:46px 0 28px}.exercise-hero>div{background:linear-gradient(135deg,var(--panel2),var(--panel));border:1px solid var(--line);border-radius:18px;padding:clamp(24px,5vw,42px);box-shadow:var(--shadow)}.exercise-hero h1{font-size:clamp(1.65rem,4vw,2.55rem);line-height:1.25;margin:.35rem 0 .65rem;letter-spacing:-.025em}.exercise-hero p:last-child{color:var(--muted);margin:0}.exercise-layout{width:min(1040px,calc(100% - 32px));margin:0 auto 60px;display:grid;grid-template-columns:180px minmax(0,820px);gap:24px;align-items:start}.question-nav{position:sticky;top:80px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px;max-height:calc(100vh - 104px);overflow:auto}.question-nav>strong{display:block;margin-bottom:12px}.question-nav>div{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.question-nav a{aspect-ratio:1;display:grid;place-items:center;text-decoration:none;border:1px solid var(--line);border-radius:7px;color:var(--muted);font-size:.75rem}.question-nav a:hover{color:var(--accent);border-color:var(--accent);background:var(--panel2)}.question-list{display:grid;gap:18px;min-width:0}.question-card{scroll-margin-top:76px;background:#fff;color:#1d2735;border-radius:15px;padding:clamp(20px,4vw,34px);box-shadow:var(--shadow);min-width:0;font-family:var(--ui-font)}.question-head{display:flex;align-items:center;gap:12px;padding-bottom:18px;border-bottom:1px solid #e2e8f0}.question-number{display:grid;place-items:center;min-width:38px;height:38px;border-radius:10px;background:#1671c5;color:#fff;font-weight:850}.question-head>div{display:flex;align-items:baseline;gap:8px}.question-head small{color:#64748b}.question-topic{margin-left:auto;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:999px;padding:5px 10px;background:#edf6ff;color:#1266ad;font-size:.72rem}.question-stem{font-size:1rem;line-height:1.85;padding:18px 0 5px;overflow-wrap:anywhere}.question-stem p{margin:.55em 0}.question-stem img,.question-options img,.analysis-box img{display:inline-block;max-width:100%;height:auto;margin:0 .15em;vertical-align:middle}.question-stem p:has(>img:only-child),.analysis-box p:has(>img:only-child){text-align:center}.question-options p:has(>img:only-child){text-align:left}.question-stem p:has(>img:only-child) img,.analysis-box p:has(>img:only-child) img{display:block;margin:14px auto}.question-options p:has(>img:only-child) img{display:inline-block;margin:0 .15em;vertical-align:middle}.question-stem table,.analysis-box table{display:block;max-width:100%;overflow:auto;border-collapse:collapse}.question-stem td,.question-stem th,.analysis-box td,.analysis-box th{border:1px solid #cbd5e1;padding:6px 10px}.question-options{list-style:none;padding:8px 0 0;margin:0;display:grid;gap:10px}.question-options li{display:grid;grid-template-columns:32px minmax(0,1fr);gap:10px;align-items:center;padding:12px 14px;border:1px solid #dce4ed;border-radius:10px;background:#f8fafc;line-height:1.65}.question-options li>div{min-width:0}.question-options li>b{display:grid;place-items:center;width:28px;height:28px;border-radius:7px;background:#e4eef8;color:#1266ad}.question-options li p{margin:0}.question-hint{color:#64748b;font-size:.85rem}.answer-box,.analysis-box{margin-top:18px;border-radius:10px;padding:14px 16px;line-height:1.7}.answer-box{background:#ecfdf5;border:1px solid #a7f3d0;color:#166534}.answer-box p{margin:.35rem 0 0;font-weight:700;letter-spacing:.06em}.analysis-box{background:#f5f3ff;border:1px solid #ddd6fe;color:#4c1d95}.analysis-box>div{margin-top:7px}.extract-error{width:min(620px,calc(100% - 32px));margin:12vh auto;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:clamp(28px,6vw,48px);box-shadow:var(--shadow)}.extract-error h1{margin:.4rem 0}.extract-error>p:not(.eyebrow){color:var(--muted);line-height:1.7}.extract-error code{display:block;padding:12px;margin:22px 0;background:var(--panel2);border-radius:8px;color:var(--muted);overflow-wrap:anywhere}.extract-error .button{display:inline-block;padding:12px 18px}
@media(max-width:780px){.exercise-hero{width:min(100% - 20px,820px);padding:16px 0 12px}.exercise-layout{display:block;width:min(100% - 20px,820px);margin-bottom:30px}.question-nav{position:static;max-height:none;margin-bottom:12px;padding:12px}.question-nav>strong{font-size:.8rem}.question-nav>div{display:flex;overflow-x:auto;padding-bottom:2px}.question-nav a{aspect-ratio:auto;min-width:34px;height:34px}.question-list{gap:12px}.question-card{border-radius:11px;padding:18px 16px}.question-head{align-items:flex-start;gap:9px}.question-topic{display:none}.question-stem{font-size:.95rem}.question-options li{padding:10px}.reader-nav{padding:0 12px;gap:10px}.reader-nav span{display:none}}
.markdown-body .math-display{display:block;margin:1em 0;text-align:center}.markdown-body .math-inline{white-space:nowrap}.markdown-body .katex-display{margin:.9em 0;overflow-x:auto;overflow-y:hidden;padding:2px 0}.markdown-body .katex{font-size:1.05em}
.markdown-body .md-tag{display:inline-block;font-weight:750;font-size:.86em;letter-spacing:.02em;padding:.12em .55em;border-radius:6px;margin-right:.35em;line-height:1.4;vertical-align:baseline}
.markdown-body .md-tag-knowledge{background:#e0f2fe;color:#0369a1}
.markdown-body .md-tag-define{background:#ecfdf5;color:#047857}
.markdown-body .md-tag-method{background:#fef3c7;color:#b45309}
.markdown-body .md-tag-pitfall{background:#fee2e2;color:#b91c1c}
.markdown-body .md-tag-mnemonic{background:#fce7f3;color:#9d174d}
.markdown-body .md-tag-compare{background:#e0e7ff;color:#3730a3}
.markdown-body .md-tag-exam{background:#ffedd5;color:#c2410c}

/* print-export */
@media print{
.reader-nav,.toc,.question-nav,.sandbox-note{display:none!important}
.reader-page,.exercise-page,.pdf-page{background:#fff!important}
.reader-layout{display:block!important;width:100%!important;margin:0!important;gap:0!important}
.markdown-body,.question-card,.exercise-hero{font-family:var(--print-font)!important}
.markdown-body{box-shadow:none!important;border-radius:0!important;padding:0!important;max-width:none!important}
.exercise-hero{width:100%!important;margin:0 0 16px!important;padding:0!important}
.exercise-hero>div{box-shadow:none!important;border:0!important;background:transparent!important;padding:0!important}
.exercise-layout{display:block!important;width:100%!important;margin:0!important}
.question-list{gap:14px!important}
.question-card{break-inside:avoid;page-break-inside:avoid;box-shadow:none!important;border:1px solid #d7dee7!important}
.question-topic{display:none!important}
.markdown-body .katex-display{break-inside:avoid}
body{background:#fff!important;color:#000!important}
a{color:inherit!important;text-decoration:none!important}
}

/* course catalog table */
.catalog-page .shell{width:min(1180px,calc(100% - 24px))}
.catalog-kicker{margin:0 0 16px;color:var(--muted);font-size:.92rem;letter-spacing:.04em}
.catalog-wrap{overflow:auto;border:1px solid var(--line);border-radius:16px;background:var(--panel);box-shadow:var(--shadow)}
.catalog{width:100%;border-collapse:collapse;min-width:760px;font-size:.92rem}
.catalog th,.catalog td{border:1px solid var(--line);padding:.7rem .85rem;vertical-align:top}
.catalog thead th{background:var(--panel2);font-weight:750;text-align:center;white-space:nowrap}
.catalog .cat-group,.catalog .cat-kind{text-align:center;vertical-align:middle;font-weight:750;background:var(--panel2);letter-spacing:.06em;width:5.5rem}
.catalog .course-name{min-width:16rem}
.catalog .num{text-align:center;white-space:nowrap;width:4rem;font-variant-numeric:tabular-nums}
.catalog .note{color:var(--muted);min-width:10rem;padding:.35rem .45rem;vertical-align:middle}
.note-input{width:100%;min-width:8rem;box-sizing:border-box;background:transparent;border:1px solid transparent;border-radius:8px;color:inherit;font:inherit;padding:.35rem .5rem;outline:none}
.note-input:hover,.note-input:focus{background:var(--panel2);border-color:var(--line)}
.note-input:focus{border-color:var(--accent);color:var(--text)}
.note-input::placeholder{color:var(--muted);opacity:.65}
.note-input.saving{opacity:.55}
.note-input.saved{border-color:#34d399;color:#34d399}
.note-input.error{border-color:#f87171}
.course-papers>summary{list-style:none;cursor:pointer;display:flex;align-items:baseline;gap:.6rem;flex-wrap:wrap}
.course-papers>summary::-webkit-details-marker{display:none}
.course-papers>summary strong{font-size:1rem}
.paper-count{color:var(--accent);font-size:.75rem;font-weight:700}
.course-papers>summary:hover strong{color:var(--accent)}
.course-papers ul{margin:.55rem 0 0;padding:0;list-style:none;display:grid;gap:.35rem}
.course-papers a{color:var(--accent);text-decoration:none}
.course-papers a:hover{text-decoration:underline}
.paper-empty{margin:.45rem 0 0;color:var(--muted);font-size:.8rem}
.other-head{font-size:1rem;margin:28px 0 10px}
.other-list{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.other-list a{color:var(--accent);text-decoration:none}
.other-list small{display:block;color:var(--muted);font-size:.75rem}
@media(prefers-color-scheme:light){.catalog thead th,.catalog .cat-group,.catalog .cat-kind{background:#f3f7fc}}

