@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/fraunces-latin-400-normal-6IfK1voy.woff2)format("woff2"),url(/assets/fraunces-latin-400-normal-NUPT2cO8.woff)format("woff")}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/fraunces-latin-600-normal-BFCDtZfi.woff2)format("woff2"),url(/assets/fraunces-latin-600-normal-DL5QCzvS.woff)format("woff")}@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/fraunces-latin-700-normal-CEOla-zY.woff2)format("woff2"),url(/assets/fraunces-latin-700-normal-DTjk5d1Q.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff)format("woff")}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2)format("woff2"),url(/assets/jetbrains-mono-latin-700-normal-D3wTyLJW.woff)format("woff")}:root{--brand-navy:#1a2336;--brand-navy-deep:#0a0f1f;--brand-amber:#f5b041;--brand-salmon:#f2937c;--brand-teal:#35aca0;--brand-cream:#f3eee1;--navy:#0a0f1f;--navy-deep:#06090f;--surface:#0e1116;--surface-2:#141920;--line:#333b47;--line-strong:#d7dee8;--ink:#d7dee8;--muted:#a6b1bf;--faint:#6c7885;--act:#e05534;--on-accent:#0a0f1f;--done:var(--brand-teal);--on-done:#0a0f1f;--attention:var(--brand-amber);--danger:var(--brand-salmon);--page-gradient:linear-gradient(to bottom, #000 0%, #03060d 38%, #0a0f1f 100%);--shadow-card:6px 6px 0 #a0b9d70f;--shadow-btn:4px 4px 0 #a0b9d71a;--scrim:#000000b3;--show-bg:#fff;--show-ink:#000;--font-ui:"Fraunces", Georgia, serif;--font-head:"Fraunces", Georgia, serif;--font-label:"JetBrains Mono", ui-monospace, Menlo, monospace;--font-zh:"PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", "Source Han Sans SC", "Microsoft YaHei", sans-serif;--fs-root:clamp(15px, 1.43vw + 10.4px, 17px);--fs-xs:.6875rem;--fs-sm:.875rem;--fs-md:1rem;--fs-lg:1.25rem;--fs-xl:1.75rem;--fs-xxl:2.5rem;--label-track:.12em;--vvh:100dvh;--kb:0px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:24px;--sp-6:32px;--radius:0;--radius-sm:0;--rule:2px;--tap:44px;--tap-primary:48px;--tabbar-h:64px}@media (prefers-color-scheme:light){:root:not([data-theme=dark]){--navy:#f3eee1;--navy-deep:#fcfaf2;--surface:#fcfaf2;--surface-2:#fffdf7;--line:#cdc3a6;--line-strong:#211c13;--ink:#211c13;--muted:#4c4433;--faint:#8a7f64;--act:#bf3b21;--on-accent:#f3eee1;--done:#00796b;--on-done:#fffdf7;--attention:#8f6316;--danger:#b5524f;--page-gradient:none;--shadow-card:6px 6px 0 #211c1314;--shadow-btn:4px 4px 0 #211c1326;--scrim:#211c1373}}*,:before,:after{box-sizing:border-box}html,body{height:100%;margin:0}html{-webkit-text-size-adjust:100%;font-size:var(--fs-root)}body{background:var(--navy) var(--page-gradient) fixed no-repeat;color:var(--ink);font-family:var(--font-ui);font-size:var(--fs-md);-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none;line-height:1.45}:lang(zh),.zh{font-family:var(--font-zh)}h1,h2,h3{font-family:var(--font-head);margin:0;font-weight:700;line-height:1.15}h1{font-size:var(--fs-xl)}h2{font-size:var(--fs-lg)}h3{font-size:var(--fs-md)}p{margin:0}a{color:inherit}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--line-strong);outline-offset:2px}#app{min-height:100dvh;padding-top:env(safe-area-inset-top);flex-direction:column;display:flex}.topbar{align-items:center;gap:var(--sp-3);min-height:56px;padding:var(--sp-2) var(--sp-4);padding-left:max(var(--sp-4), env(safe-area-inset-left));padding-right:max(var(--sp-4), env(safe-area-inset-right));border-bottom:var(--rule) solid var(--line-strong);margin-bottom:var(--sp-3);display:flex}.topbar h1{font-size:var(--fs-lg);flex:1}.topbar h1:after{content:".";color:var(--act)}.topbar .status{align-items:center;gap:var(--sp-2);font-family:var(--font-label);font-size:var(--fs-xs);letter-spacing:var(--label-track);text-transform:uppercase;color:var(--muted);display:inline-flex}.dot{background:var(--done);border-radius:50%;width:10px;height:10px}.dot.off{background:var(--attention)}main.view{padding:var(--sp-2) var(--sp-4) calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--sp-5));padding-left:max(var(--sp-4), env(safe-area-inset-left));padding-right:max(var(--sp-4), env(safe-area-inset-right));gap:var(--sp-4);flex-direction:column;flex:1;width:100%;display:flex}.tabbar{z-index:10;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right);background:var(--navy-deep);border-top:var(--rule) solid var(--line-strong);grid-template-columns:repeat(6,1fr);display:grid;position:fixed;bottom:0;left:0;right:0}.tab{min-width:var(--tap);min-height:var(--tap);color:var(--muted);letter-spacing:.01em;border-top:3px solid #0000;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:12px;text-decoration:none;display:flex}.tab svg{width:24px;height:24px}@media (width<=345px){.tab{letter-spacing:0;font-size:9.5px}.tab svg{width:22px;height:22px}}@media (height<=600px){:root{--tabbar-h:56px}.topbar{min-height:48px}}.tab[aria-current=page]{color:var(--act);border-top-color:var(--act)}.tab[aria-current=page] span{font-weight:700}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:var(--sp-4);gap:var(--sp-2);flex-direction:column;display:flex}.label{font-family:var(--font-label);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:var(--label-track);font-weight:700}.num,time{font-family:var(--font-label)}.muted{color:var(--muted)}.small{font-size:var(--fs-sm)}.btn{justify-content:center;align-items:center;gap:var(--sp-2);min-height:var(--tap);padding:0 var(--sp-4);border-radius:var(--radius-sm);border:1px solid var(--line-strong);background:var(--surface);cursor:pointer;font-weight:600;text-decoration:none;display:inline-flex}.btn.primary{min-height:var(--tap-primary);background:var(--act);color:var(--on-accent);border-color:var(--act);box-shadow:var(--shadow-btn);font-weight:700}.btn:active{box-shadow:none;transform:translate(2px,2px)}.btn.danger{background:var(--surface);color:var(--danger);border:2px solid var(--danger);font-weight:700}.btn.ghost{background:0 0}.btn.block{width:100%}.btn svg{flex:none;width:20px;height:20px}.icon-btn{width:var(--tap);height:var(--tap);border-radius:var(--radius-sm);cursor:pointer;color:var(--ink);background:0 0;border:0;justify-content:center;align-items:center;display:inline-flex}.icon-btn svg{width:24px;height:24px}.quick{gap:var(--sp-3);grid-template-columns:repeat(3,1fr);display:grid}.quick .btn{min-height:84px;padding:var(--sp-3) var(--sp-2);text-align:center;font-size:var(--fs-sm);flex-direction:column}.quick .btn svg{width:28px;height:28px}.chip{min-height:28px;padding:0 var(--sp-3);border:1px solid var(--line);font-family:var(--font-label);font-size:var(--fs-xs);letter-spacing:.04em;border-radius:0;align-items:center;display:inline-flex}.chip.amber{border-color:var(--amber);color:var(--amber)}.chip.teal{border-color:var(--teal);color:var(--teal)}.chip.salmon{border-color:var(--salmon);color:var(--salmon)}.chip.cream{border-color:var(--cream);color:var(--cream)}.empty{border:1px dashed var(--line);border-radius:var(--radius);padding:var(--sp-5) var(--sp-4);text-align:center;gap:var(--sp-2);flex-direction:column;align-items:center;display:flex}.todo{color:var(--attention)}.toast{left:50%;bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + var(--sp-3));z-index:20;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius-sm);padding:var(--sp-3) var(--sp-4);box-shadow:var(--shadow-card);gap:var(--sp-3);max-width:calc(100% - 2 * var(--sp-4));align-items:center;display:flex;position:fixed;transform:translate(-50%)}.toast[hidden]{display:none}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.group-head{justify-content:space-between;align-items:baseline;gap:var(--sp-3);display:flex}.students{gap:var(--sp-2);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:0;list-style:none;display:grid}.student{width:100%;min-height:var(--tap);align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-sm);text-align:left;cursor:pointer;display:flex}.student .n{color:var(--faint);font-family:var(--font-label);font-size:var(--fs-xs);min-width:1.8em}.student .name{overflow-wrap:anywhere;flex:1}.student .has-note{color:var(--ink);display:inline-flex}.student .has-note svg{width:18px;height:18px}.student .preview{font-family:var(--font-label);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;display:block;overflow:hidden}.student .txt{flex-direction:column;flex:1;min-width:0;display:flex}.scrim{z-index:30;background:var(--scrim);position:fixed;inset:0}.sheet{z-index:31;bottom:0;left:0;right:0;bottom:var(--kb);max-height:calc(var(--vvh) - env(safe-area-inset-top) - var(--sp-4));background:var(--navy-deep);border:0;border-top:var(--rule) solid var(--line-strong);padding:var(--sp-4) var(--sp-4) calc(var(--sp-4) + env(safe-area-inset-bottom));gap:var(--sp-3);box-shadow:0 -6px 0 var(--scrim);border-radius:0;flex-direction:column;display:flex;position:fixed;overflow-y:auto}.sheet-head{align-items:center;gap:var(--sp-2);display:flex}.sheet-head h2{flex:1}.sheet textarea{resize:vertical;width:100%;min-height:min(6rem,20dvh);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:var(--sp-3)}.sheet textarea::placeholder{color:var(--muted)}.sheet .row{justify-content:space-between;align-items:center;gap:var(--sp-4);display:flex}.center{text-align:center}.ok{color:var(--done)}.seg{border:1px solid var(--line-strong);grid-template-columns:1fr 1fr;display:grid}.seg a{min-height:var(--tap);color:var(--ink);background:var(--surface);justify-content:center;align-items:center;font-weight:600;text-decoration:none;display:flex}.seg a+a{border-left:1px solid var(--line-strong)}.seg a[aria-selected=true]{background:var(--act);color:var(--on-accent);font-weight:700}.progress-set{gap:var(--sp-1);flex-direction:column;display:flex}.progress{align-items:center;gap:var(--sp-3);display:flex}.progress .plabel{width:7.5em;font-family:var(--font-label);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:var(--label-track);flex:none}.progress .pnum{text-align:right;width:3em;font-family:var(--font-label);flex:none}.progress .bar{border:1px solid var(--line);background:var(--surface-2);flex:1;height:10px;overflow:hidden}.progress .bar span{background:var(--attention);height:100%;transition:width .2s;display:block}.progress .bar span.done{background:var(--done)}.student .marks{color:var(--ink);gap:2px;display:inline-flex}.student .marks svg{width:18px;height:18px}table.checks{border-collapse:collapse;table-layout:fixed;width:100%}table.checks th,table.checks td{padding:var(--sp-1) 0;text-align:center}table.checks thead th{font-family:var(--font-label);text-transform:uppercase;letter-spacing:0;color:var(--muted);padding-left:2px;padding-right:2px;padding-bottom:var(--sp-2);-webkit-hyphens:manual;hyphens:manual;font-size:9.5px;font-weight:700;line-height:1.2}table.checks col.tickcol{width:46px}@media (width<=345px){.card:has(table.checks){padding-left:var(--sp-3);padding-right:var(--sp-3)}}table.checks th[scope=row],table.checks thead th:first-child{text-align:left;overflow-wrap:normal;word-break:keep-all;padding-right:var(--sp-1);font-weight:500}@media (width<=360px){table.checks th[scope=row]{font-size:12.5px}}table.checks tbody tr+tr{border-top:1px solid var(--line)}.tick{width:var(--tap);height:var(--tap);border:1px solid var(--line-strong);background:var(--surface-2);cursor:pointer;color:#0000;border-radius:0;justify-content:center;align-items:center;margin:0 auto;display:inline-flex}.tick svg{width:22px;height:22px}.tick[aria-pressed=true]{background:var(--done);border-color:var(--done);color:var(--on-done)}.field{gap:var(--sp-2);border:0;flex-direction:column;min-width:0;margin:0;padding:0;display:flex}.field legend{margin-bottom:var(--sp-2);padding:0}.toggle{align-items:center;gap:var(--sp-3);width:100%;min-height:var(--tap);padding:var(--sp-2) var(--sp-3);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);text-align:left;cursor:pointer;display:flex}.toggle .box{border:1px solid var(--line-strong);color:#0000;border-radius:0;flex:none;justify-content:center;align-items:center;width:26px;height:26px;display:inline-flex}.toggle .box svg{width:18px;height:18px}.toggle[aria-pressed=true] .box{background:var(--done);border-color:var(--done);color:var(--on-done)}.sheet input[type=text]{width:100%;min-height:var(--tap);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 var(--sp-3)}.sheet input::placeholder{color:var(--muted)}.chips{gap:var(--sp-2);flex-wrap:wrap;display:flex}.chips .chip{min-height:var(--tap);color:var(--ink);cursor:pointer;background:0 0}.sheet>.btn.primary{position:sticky;bottom:0}.input{width:100%;min-height:var(--tap);font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:0 var(--sp-3)}.input::placeholder{color:var(--muted)}.bk-res{gap:var(--sp-2);flex-direction:column;display:flex}.bk-hit{text-align:left;justify-content:flex-start;gap:var(--sp-3);padding:var(--sp-2) var(--sp-3);font-weight:400}.bk-hit .snip{font-size:var(--fs-sm);-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.bk-pages{gap:var(--sp-4);flex-direction:column;display:flex}.bk-page{gap:var(--sp-1);scroll-margin-top:var(--sp-4);flex-direction:column;margin:0;display:flex}.bk-page img{background:var(--surface);border:1px solid var(--line);width:100%;height:auto;box-shadow:var(--shadow-card)}.input,.sheet input[type=text],.sheet textarea{border-color:var(--line);background:var(--surface-2);font-family:var(--font-label)}.input:focus,.sheet input[type=text]:focus,.sheet textarea:focus{border-color:var(--line-strong);outline:none}.field>.label,.field legend.label{margin-bottom:0}h2{font-weight:700}.muted.small,.small.muted{font-family:var(--font-label);font-size:var(--fs-xs);letter-spacing:.02em}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.tr-form{gap:var(--sp-2);flex-direction:column;display:flex}.tr-inwrap{position:relative}.tr-inwrap textarea{resize:none;width:100%;min-height:5.5rem;font:inherit;font-size:var(--fs-lg);color:var(--ink);background:var(--surface-2);border:1px solid var(--line);padding:var(--sp-3) calc(var(--tap) + var(--sp-2)) var(--sp-3) var(--sp-3);display:block}.tr-inwrap textarea:focus{border-color:var(--line-strong);outline:none}.tr-inwrap textarea::placeholder{color:var(--faint);font-size:var(--fs-md)}.tr-clear{position:absolute;top:2px;right:2px}.btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}.tr-result{min-height:7rem}.tr-zh{overflow-wrap:anywhere;font-size:clamp(1.75rem,8vw,2.5rem);font-weight:600;line-height:1.25}.tr-py{font-family:var(--font-label);color:var(--muted)}.tr-en{font-size:var(--fs-xl);line-height:1.25}.tr-note{color:var(--muted);border-left:var(--rule) solid var(--line);padding-left:var(--sp-2)}.tr-actions{gap:var(--sp-2);margin-top:var(--sp-2);grid-template-columns:repeat(4,1fr);display:grid}.tr-actions .btn{min-height:56px;padding:var(--sp-1);font-family:var(--font-label);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em;flex-direction:column;gap:2px}.tr-section{gap:var(--sp-3);flex-direction:column;display:flex}.sc-group{gap:var(--sp-2);flex-direction:column;display:flex}.sc-list{gap:var(--sp-2);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.sc{text-align:left;min-height:var(--tap);padding:var(--sp-2) var(--sp-3);cursor:pointer;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-card);flex-direction:column;align-items:flex-start;gap:2px;display:flex}.sc .zh{font-size:var(--fs-lg);line-height:1.25}.sc .sc-en{font-family:var(--font-label);color:var(--muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:11px;display:-webkit-box;overflow:hidden}.pulse{color:var(--muted);animation:1.2s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.45}}.show-full{z-index:50;background:var(--show-bg);color:var(--show-ink);justify-content:center;gap:var(--sp-4);padding:calc(env(safe-area-inset-top) + var(--sp-5)) var(--sp-5) calc(env(safe-area-inset-bottom) + var(--sp-5));flex-direction:column;display:flex;position:fixed;inset:0}.show-full .zh{overflow-wrap:anywhere;font-size:clamp(2.5rem,12vw,4.5rem);font-weight:600;line-height:1.25}.show-full .py{font-family:var(--font-label);font-size:var(--fs-lg)}.show-full .btn{background:var(--show-bg);color:var(--show-ink);border-color:var(--show-ink);margin-top:auto}main.view.ask-view{padding-bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 5.5rem)}.ask-top{justify-content:flex-end;display:flex}.ask-log,.ask-empty{gap:var(--sp-3);flex-direction:column;display:flex}.ask-suggest{gap:var(--sp-2);flex-direction:column;display:flex}.ask-q{text-align:left;padding:var(--sp-2) var(--sp-3);justify-content:flex-start;font-weight:400}.msg{max-width:88%;padding:var(--sp-3);border:1px solid var(--line);gap:var(--sp-2);flex-direction:column;display:flex}.msg ul{padding-left:var(--sp-5);margin:0}.msg.user{background:var(--surface-2);border-color:var(--line-strong);align-self:flex-end}.msg.assistant{background:var(--surface);box-shadow:var(--shadow-card);align-self:flex-start}.msg.err{border-color:var(--attention)}.composer{z-index:12;left:0;right:0;bottom:max(calc(var(--tabbar-h) + env(safe-area-inset-bottom)), var(--kb));gap:var(--sp-2);padding:var(--sp-2) max(var(--sp-4), env(safe-area-inset-right)) var(--sp-2) max(var(--sp-4), env(safe-area-inset-left));background:var(--navy-deep);border-top:1px solid var(--line);align-items:flex-end;display:flex;position:fixed}.composer textarea{min-height:var(--tap-primary);resize:none;max-height:140px;font:inherit;color:var(--ink);background:var(--surface-2);border:1px solid var(--line);padding:var(--sp-2) var(--sp-3);flex:1}.composer textarea:focus{border-color:var(--line-strong);outline:none}.composer .btn.primary{width:var(--tap-primary);flex:none;padding:0}html.kb-open .tabbar{display:none}.btn.contact{text-align:left;justify-content:space-between;gap:var(--sp-3);padding-block:var(--sp-2)}.btn.contact .who{flex:1;min-width:0}.btn.contact .num{white-space:nowrap;font-family:var(--font-label);font-size:var(--fs-sm);flex:none;font-weight:700}
