:root{--accent:#059669;--accent-ink:#047857;--accent-bright:#10B981;--accent-soft:#ECFDF5;--bg:#F8FAFC;--surface:#FFFFFF;--border:#E2E8F0;--border-strong:#CBD5E1;--ink:#334155;--ink-2:#475569;--muted:#94A3B8;--faint:#CBD5E1;--line:var(--border);--line-strong:var(--border-strong);--sidebar:#FFFFFF;--sidebar-border:#E2E8F0;--sidebar-ink:#334155;--sidebar-ink-2:#64748B;--sidebar-ink-3:#94A3B8;--sidebar-hover:#F1F5F9;--sidebar-active-bg:#ECFDF5;--sidebar-active-ink:#047857;--sidebar-active-bar:#059669;--good:#059669;--bad:#EF4444;--warn:#D97706;--cool:#3B82F6;--bg-app:var(--bg);--bg-card:var(--surface);--bg-sub:#F1F5F9;--bg-sunken:#E2E8F0;--ink-3:var(--muted);--brand:var(--accent);--brand-deep:var(--accent-ink);--brand-active:var(--accent);--brand-new:var(--accent);--brand-lift:var(--accent);--brand-soft:#D1FAE5;--brand-mist:var(--accent-soft);--ok:var(--good);--err:var(--bad);--ok-bg:#ECFDF5;--err-bg:#FEF2F2;--warn-bg:#FFFBEB;--info:#3B82F6;--info-bg:#EFF6FF;--mask:rgba(15,23,42,.34);--font-sans:"Sora","Noto Sans SC","Source Han Sans SC","PingFang SC","Microsoft YaHei",sans-serif;--font-cn:"Noto Sans SC","Source Han Sans SC","PingFang SC","HarmonyOS Sans SC","Microsoft YaHei",sans-serif;--font-num:"Sora","JetBrains Mono",ui-monospace,monospace;--font-en:"Sora","Noto Sans SC",sans-serif;--font-ipa:"JetBrains Mono","DejaVu Sans","Charis SIL","Doulos SIL",monospace;--font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,monospace;--fs-display-xl:4.625rem;--lh-display-xl:1.08;--fs-display-l:3.375rem;--lh-display-l:1.1;--fs-h1:2.125rem;--lh-h1:1.2;--fs-h2:1.5rem;--lh-h2:1.3;--fs-h3:1.25rem;--lh-h3:1.35;--fs-body-l:1rem;--lh-body-l:1.7;--fs-body:.9375rem;--lh-body:1.6;--fs-body-s:.90625rem;--lh-body-s:1.55;--fs-label:.8125rem;--lh-label:1.45;--fs-caption:.78125rem;--lh-caption:1.45;--fs-num:1.125rem;--lh-num:1.2;--r-card:16px;--r-btn:10px;--r-label:8px;--r-icon:14px;--r-input:10px;--r-pill:999px;--sh-1:0 1px 2px rgba(28,25,23,.04),0 12px 40px -16px rgba(28,25,23,.12);--sh-2:0 2px 6px rgba(28,25,23,.05),0 18px 46px -18px rgba(28,25,23,.18);--sh-3:0 14px 38px -12px rgba(28,25,23,.2),0 3px 10px rgba(28,25,23,.06);--sh-4:0 34px 80px -22px rgba(28,25,23,.3),0 8px 24px -8px rgba(28,25,23,.1);--card-gap:1rem;--block-gap:1.875rem;--content-max:1200px;--ease:cubic-bezier(.22,.61,.36,1);--ease-out:cubic-bezier(.16,.84,.44,1);--t-fast:.18s;--t-base:.28s;--t-slow:.42s;--t-panel:.32s}@font-face{font-family:Sora;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/Sora-400-latin.woff2) format("woff2")}@font-face{font-family:Sora;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/Sora-600-latin.woff2) format("woff2")}@font-face{font-family:Sora;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/Sora-700-latin.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/JetBrainsMono-400-latin.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/JetBrainsMono-500-latin.woff2) format("woff2")}[data-theme=dark]{--bg:#15171A;--surface:#1D2024;--bg-sub:#24272C;--bg-sunken:#30353C;--line:#3A4048;--line-strong:#6A7280;--ink:#E9EAEC;--ink-2:#B4BAC4;--muted:#A4ABB5;--faint:#9097A1;--accent-soft:#3A2A22;--brand-mist:#3A2A22;--brand-soft:#4A3126;--accent-ink:#F0A080;--good:#4FBF8B;--bad:#F08A8A;--warn:#E6BB5C;--cool:#8FB8DE;--ok-bg:#1E332A;--err-bg:#372222;--warn-bg:#332B1C;--mask:rgba(0,0,0,.62)}html{font-size:16px}@media (max-width:767px){html{font-size:15px}}[data-fontsize=s]{--fs-h2:1.375rem;--fs-h3:1.125rem;--fs-body-s:.875rem;--fs-caption:.75rem;--fs-h1:1.875rem;--fs-body-l:.9375rem;--fs-body:.875rem;--fs-label:.75rem}[data-fontsize=l]{--fs-h2:1.625rem;--fs-h3:1.375rem;--fs-body-s:.96875rem;--fs-caption:.84375rem;--fs-h1:2.25rem;--fs-body-l:1.0625rem;--fs-body:1rem;--fs-label:.875rem}@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;transition-duration:.001ms!important}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-cn);font-size:var(--fs-body);line-height:var(--lh-body);background:var(--bg-app);color:var(--ink);overflow-x:hidden;-webkit-font-smoothing:antialiased}#app{min-height:100vh}h1,h2,h3,h4,p{margin:0}h1,h2,h3,h4,.num{font-family:var(--font-sans)}.num{font-variant-numeric:tabular-nums;letter-spacing:-.01em}a{color:inherit}button{font-family:inherit}::selection{background:var(--accent-soft);color:var(--ink)}:where(a,button,input,textarea,select,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-btn)}:root{--green:var(--good);--green-soft:var(--ok-bg);--red:var(--bad);--red-soft:var(--err-bg);--blue:var(--cool);--blue-soft:var(--bg-sub);--purple:var(--ink-2);--purple-soft:var(--bg-sub);--page-bg:var(--bg);--card-bg:var(--surface);--display-scale:1}.layout-wrapper{display:flex;min-height:100vh}.layout-main-container{flex:1;display:flex;flex-direction:column;min-width:0}.layout-content{flex:1;min-width:0}.app-page{padding:1.75rem 2.125rem 5rem}.page-toolbar{display:flex;align-items:center;gap:.625rem;flex-wrap:wrap;background:var(--bg-card);border:1px solid var(--line);border-radius:var(--r-card);padding:.75rem 1rem;margin-bottom:1rem}.page-toolbar .divider{width:1px;height:1.125rem;background:var(--line)}.hint-bar{background:var(--bg-sub);color:var(--ink-2);border:1px solid var(--line);border-left:3px solid var(--line-strong);border-radius:var(--r-btn);padding:.5rem .875rem;font-size:var(--fs-body-s);margin-bottom:1rem}.pill{display:inline-flex;align-items:center;gap:.25rem;padding:.1875rem .5rem;border-radius:var(--r-label);font-size:var(--fs-caption);background:var(--bg-sub);color:var(--ink-2);white-space:nowrap}.pill.core,.pill.brand{background:var(--accent-soft);color:var(--accent-ink)}.pill.alert,.pill.red{background:var(--err-bg);color:var(--bad)}.pill.cool,.pill.blue{background:#eaf1f8;color:var(--cool)}.pill.warn{background:var(--warn-bg);color:var(--warn)}[data-theme=dark] .pill.cool,[data-theme=dark] .pill.blue{background:#1e2a36;color:var(--cool)}[data-theme=dark] .pill.warn{background:#2a2416}[data-theme=dark] .prog-track,[data-theme=dark] .dc-progress{box-shadow:inset 0 0 0 1px var(--line-strong)}[data-theme=dark] .judge-bar.ok .jb-mark{background:#2e7d5b;color:#fff}[data-theme=dark] .judge-bar.bad .jb-mark{background:#c94949;color:#fff}.pill.green{background:var(--ok-bg);color:var(--good)}.pill.purple{background:var(--bg-sub);color:var(--ink-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.375rem;height:2rem;padding:0 .875rem;border-radius:var(--r-btn);cursor:pointer;border:1px solid var(--line);background:var(--bg-card);color:var(--ink-2);font-size:var(--fs-body-s);white-space:nowrap;transition:border-color var(--t-fast),color var(--t-fast),background var(--t-fast),box-shadow var(--t-fast)}.btn:hover{border-color:var(--brand);color:var(--brand-deep);background:var(--bg-card)}.btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.btn.primary{background:var(--accent);border-color:transparent;color:#fff;font-weight:600;box-shadow:var(--sh-1)}.btn.primary:hover{background:var(--accent-ink);filter:none;color:#fff}.btn.purple,.btn.blue,.btn.green{background:var(--bg-card);border-color:var(--line);color:var(--ink)}.btn.purple:hover,.btn.blue:hover,.btn.green:hover{border-color:var(--brand);color:var(--brand-deep)}.btn.red{background:var(--bg-card);border-color:var(--line);color:var(--err)}.btn.red:hover{border-color:var(--err);color:var(--err);background:var(--err-bg)}.btn.ghost{background:transparent;border-color:transparent;color:var(--ink-3)}.btn.ghost:hover{background:var(--bg-sub);color:var(--ink-2)}.btn:disabled{opacity:.45;cursor:not-allowed;filter:none;box-shadow:none}.btn.sm{height:1.625rem;padding:0 .625rem;font-size:var(--fs-label);border-radius:var(--r-btn)}.switch{width:2.375rem;height:1.25rem;border-radius:var(--r-pill);border:none;background:var(--line-strong);position:relative;cursor:pointer;flex-shrink:0;transition:background var(--t-fast)}.switch:after{content:"";position:absolute;top:2px;left:2px;width:1rem;height:1rem;border-radius:50%;background:#fff;transition:left var(--t-fast);box-shadow:0 1px 2px #171a1f2e}.switch.on{background:var(--ink)}.switch.on:after{left:1.125rem}.switch:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.overlay-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--mask);z-index:1000;display:flex;animation:maskIn var(--t-panel) ease both}.overlay-mask.left{justify-content:flex-start}.overlay-mask.right{justify-content:flex-end}.overlay-mask.center{align-items:flex-start;justify-content:center;padding-top:12vh}@keyframes maskIn{0%{opacity:0}to{opacity:1}}@keyframes panelIn{0%{opacity:0;transform:translateY(12px) scale(.978)}to{opacity:1;transform:none}}@keyframes drawerIn{0%{transform:translate(100%)}to{transform:none}}.side-drawer{background:var(--bg-card);height:100%;overflow-y:auto;display:flex;flex-direction:column;box-shadow:var(--sh-4);animation:drawerIn var(--t-panel) var(--ease-out) both}.side-drawer.from-right{box-shadow:var(--sh-4)}.modal-card{background:var(--bg-card);border-radius:var(--r-card);overflow:hidden;box-shadow:var(--sh-4);border:1px solid var(--line);display:flex;flex-direction:column;max-height:76vh;animation:panelIn var(--t-panel) var(--ease-out) both}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:.875rem 1.25rem;border-bottom:1px solid var(--line);flex-shrink:0}.modal-title{font-size:var(--fs-h3);font-weight:600;color:var(--ink);letter-spacing:-.01em}.modal-sub{font-size:var(--fs-label);color:var(--ink-3);margin-top:.1875rem}.modal-close{border:none;background:none;font-size:1.125rem;color:var(--ink-3);cursor:pointer;line-height:1;padding:.25rem;border-radius:var(--r-btn)}.modal-close:hover{background:var(--bg-sub);color:var(--ink)}.modal-body{padding:1rem 1.25rem;overflow-y:auto}.modal-foot{padding:.75rem 1.25rem;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:.5rem;flex-shrink:0}.empty-block{display:flex;flex-direction:column;align-items:center;justify-content:center;color:var(--ink-3);font-size:var(--fs-body-s);padding:3.5rem 1.25rem;gap:.625rem;text-align:center}.empty-block .big-icon{font-size:2.125rem;opacity:.5}.grid-table{width:100%;border-collapse:collapse;font-size:var(--fs-body-s);background:var(--bg-card)}.grid-table th{text-align:left;font-weight:600;color:var(--ink-2);font-size:var(--fs-label);background:var(--bg-sub);border-bottom:1px solid var(--line);padding:.5625rem .625rem;white-space:nowrap;position:sticky;top:0;z-index:1}.grid-table td{padding:.5625rem .625rem;border-bottom:1px solid var(--line);color:var(--ink-2);vertical-align:middle}.grid-table tr:hover td{background:var(--bg-sub)}.flex{display:flex}.flex-column{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.text-center{text-align:center}.text-muted{color:var(--ink-3)}.kbd{display:inline-block;font-family:var(--font-num);font-size:var(--fs-label);background:var(--bg-sub);color:var(--ink-2);border:1px solid var(--line);border-radius:5px;padding:0 .3125rem;line-height:1.25rem;margin-left:.25rem}
