:root{--accent:#E8541B;--accent-ink:#C2420A;--accent-soft:#FCEAE2;--ink:#1F2328;--ink-2:#4B5563;--muted:#6E737B;--faint:#B6BBC2;--line:#ECE9E3;--bg:#FAFAF8;--surface:#FFFFFF;--side:#17191D;--good:#2E9E6B;--bad:#D64545;--cool:#2C6FAB;--warn:#9A6A00;--bg-app:var(--bg);--bg-card:var(--surface);--bg-sub:#F4F2ED;--bg-sunken:#EDEAE4;--line-strong:#DED9CF;--ink-3:var(--muted);--brand:var(--accent);--brand-deep:var(--accent-ink);--brand-lift:var(--accent);--brand-soft:#F8D8CA;--brand-mist:var(--accent-soft);--ok:var(--good);--err:var(--bad);--ok-bg:#E8F5EE;--err-bg:#FBEBEB;--warn-bg:#F7EFDF;--mask:rgba(23,25,29,.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:#2A2E34;--line:#31353B;--line-strong:#3D424A;--ink:#E9EAEC;--ink-2:#A8ADB5;--muted:#9096A0;--faint:#6E747D;--accent-soft:#3A2A22;--brand-mist:#3A2A22;--brand-soft:#4A3126;--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)}.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}
