:root{--bg:#f7f5f2;--surface:#fff;--surface-2:#f0ede8;--border:#e2ddd5;--border-strong:#cfc7bb;--text:#23201c;--text-2:#6b645b;--text-3:#9a9289;--accent:#b26b2e;--accent-weak:#f3e7da;--accent-deep:#8a5222;--done:#4e7a4a;--done-bg:#e8f0e6;--warn:#a8792b;--warn-bg:#f7eedc;--f-xs:12px;--f-sm:14px;--f-base:16px;--f-lg:18px;--f-xl:22px;--f-2xl:28px;--f-3xl:34px;--lh-body:1.75;--lh-head:1.35;--s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;--s7:48px;--s8:64px;--radius:8px;--radius-lg:12px;--shadow:0 1px 3px #23201c0f, 0 4px 12px #23201c0a;--font:"PingFang SC","Microsoft YaHei","Source Han Sans SC",system-ui,sans-serif;--font-num:ui-monospace,"SF Mono",Consolas,monospace;--content-max:1200px}*{box-sizing:border-box}html{scroll-behavior:smooth}html,body{background:var(--bg);margin:0;padding:0}body{font-family:var(--font);color:var(--text);font-size:var(--f-base);line-height:var(--lh-body);-webkit-font-smoothing:antialiased;min-width:1024px}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-deep)}button{font:inherit;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;padding:0}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--radius)}.nowrap,.btn,.nav-item,.tag,.op{white-space:nowrap}.wrap{max-width:var(--content-max);padding:0 var(--s5);margin:0 auto}.page{padding:var(--s7) 0 var(--s8)}.stack{flex-direction:column;display:flex}.row{align-items:center;display:flex}.grow{flex:1;min-width:0}.prose{max-width:780px}.ell{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.topbar{z-index:40;background:var(--surface);border-bottom:1px solid var(--border);height:56px;position:sticky;top:0}.topbar .wrap{justify-content:space-between;align-items:center;gap:var(--s5);height:56px;display:flex}.brand{font-size:var(--f-lg);letter-spacing:.08em}.nav{align-items:center;gap:var(--s6);display:flex}.nav-item{font-size:var(--f-sm);color:var(--text-2);padding:var(--s2) 0;border-bottom:2px solid #0000;transition:color .15s}.nav-item:hover{color:var(--text)}.nav-item.on{color:var(--accent-deep);border-bottom-color:var(--accent)}.avatar{border:1px solid var(--border-strong);background:var(--surface-2);width:32px;height:32px;font-size:var(--f-xs);color:var(--text-2);border-radius:50%;justify-content:center;align-items:center;display:flex}.btn{justify-content:center;align-items:center;gap:var(--s2);font-size:var(--f-sm);padding:var(--s3) var(--s5);border-radius:var(--radius);transition:background .15s,color .15s,border-color .15s;display:inline-flex}.btn-p{background:var(--accent);color:var(--surface)}.btn-p:hover{background:var(--accent-deep)}.btn-s{background:var(--surface);color:var(--text);border:1px solid var(--border-strong)}.btn-s:hover{background:var(--surface-2)}.btn-t{color:var(--accent);padding:var(--s2) var(--s2)}.btn-t:hover{color:var(--accent-deep)}.btn-sm{font-size:var(--f-xs);padding:var(--s1) var(--s3)}.btn-full{width:100%}.back{font-size:var(--f-sm);color:var(--text-2);padding:var(--s2) 0;transition:color .15s}.back:hover{color:var(--accent-deep)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.card-p{padding:var(--s5)}.hair{background:var(--border);height:1px}.tag{font-size:var(--f-xs);border-radius:var(--radius);padding:var(--s1) var(--s3);line-height:var(--lh-head);display:inline-block}.tag-cur{color:var(--accent-deep);background:var(--accent-weak)}.tag-new{color:var(--text-3);background:var(--surface-2);border:1px solid var(--border)}.tag-done{color:var(--done);background:var(--done-bg)}.bar{height:var(--s1);background:var(--surface-2);border-radius:var(--radius);flex:1;min-width:80px;overflow:hidden}.bar>i{background:var(--accent);height:100%;display:block}.count{font-size:var(--f-sm);color:var(--text-2);white-space:nowrap}.count b{font-family:var(--font-num);color:var(--text);font-weight:400}.list{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.item{width:100%;color:inherit;border-bottom:1px solid var(--border);transition:background .15s;display:block}.item:hover{color:inherit}.item:last-child{border-bottom:0}.item:hover{background:var(--surface-2)}.item-in{align-items:center;gap:var(--s4);padding:var(--s4) var(--s5);display:flex}.ord{width:28px;font-family:var(--font-num);font-size:var(--f-sm);color:var(--text-3);flex:none}.item-t{font-size:var(--f-base);line-height:var(--lh-head)}.item-d{font-size:var(--f-sm);color:var(--text-2)}.done-mark{align-items:center;gap:var(--s2);font-size:var(--f-sm);color:var(--done);white-space:nowrap;display:flex}.tick{background:var(--done-bg);width:18px;height:18px;color:var(--done);font-size:var(--f-xs);border-radius:50%;justify-content:center;align-items:center;display:flex}.prehint{background:var(--warn-bg);color:var(--warn);font-size:var(--f-xs);line-height:var(--lh-head);padding:var(--s1) var(--s2);border-radius:var(--radius);margin-top:var(--s2);display:inline-block}.grp{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.grp-hd{align-items:center;gap:var(--s3);width:100%;padding:var(--s4) var(--s5);transition:background .15s;display:flex}.grp-hd:hover{background:var(--surface-2)}.grp.open .grp-hd{border-bottom:1px solid var(--border)}.caret{width:16px;color:var(--text-3);font-size:var(--f-sm);flex:none;transition:transform .15s;display:inline-block}.grp.open .caret{transform:rotate(90deg)}.grp-n{font-size:var(--f-base);line-height:var(--lh-head)}.grp-sub{font-size:var(--f-xs);color:var(--text-3);margin-top:2px}.grp-bd .item:last-child{border-bottom:0}.grp-em{padding:var(--s5) var(--s5) var(--s5) 76px;font-size:var(--f-sm);color:var(--text-3)}.empty{border:1px dashed var(--border-strong);border-radius:var(--radius);background:var(--surface);padding:var(--s8) var(--s5);text-align:center}.empty-t{font-size:var(--f-base);color:var(--text-2)}.empty-d{font-size:var(--f-sm);color:var(--text-3);margin-top:var(--s2)}.ph{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);width:100%;font-family:var(--font-num);font-size:var(--f-xs);color:var(--text-3);cursor:zoom-in;justify-content:center;align-items:center;transition:border-color .15s;display:flex}.ph:hover{border-color:var(--border-strong)}.cap{font-size:var(--f-sm);color:var(--text-3);margin-top:var(--s2)}.ph-err{border-style:dashed;border-color:var(--border-strong);color:var(--warn);cursor:default}.login{background:var(--bg);justify-content:center;align-items:center;min-height:100vh;display:flex}.login-card{background:var(--surface);border-radius:var(--radius-lg);width:400px;box-shadow:var(--shadow);padding:var(--s7)}.field{width:100%;height:40px;padding:0 var(--s3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);font-size:var(--f-sm);font-family:var(--font)}.field:focus{border-color:var(--accent);outline:none}.err{font-size:var(--f-sm);color:var(--warn)}.p4{align-items:flex-start;gap:var(--s7);display:flex}.p4-main{flex:none;width:780px}.p4-side{flex:none;width:340px;position:sticky;top:76px}.sec-h{font-size:var(--f-xl);line-height:var(--lh-head);margin:0 0 var(--s4)}.toc a,.toc .anch-l{width:100%;font-size:var(--f-sm);color:var(--text-2);padding:var(--s1) 0 var(--s1) var(--s3);border-left:2px solid #0000;transition:color .15s,border-color .15s;display:block}.toc a:hover,.toc .anch-l:hover{color:var(--text)}.toc a.on,.toc .anch-l.on{color:var(--accent-deep);border-left-color:var(--accent)}.pass{background:var(--accent-weak);border-left:3px solid var(--accent);border-radius:var(--radius);padding:var(--s4) var(--s5)}.chk{align-items:flex-start;gap:var(--s3);width:100%;padding:var(--s2) 0;display:flex}.box{border:1px solid var(--border-strong);border-radius:var(--s1);background:var(--surface);width:18px;height:18px;font-size:var(--f-xs);color:#0000;flex:none;justify-content:center;align-items:center;margin-top:5px;line-height:1;transition:background .15s,border-color .15s;display:flex}.chk.on .box{background:var(--done);border-color:var(--done);color:var(--surface)}.chk.on .chk-t{color:var(--text-2)}.chk-t{font-size:var(--f-sm);line-height:var(--lh-body);text-align:left}.step{align-items:flex-start;gap:var(--s4);display:flex}.step-n{width:24px;height:24px;margin-top:var(--s1);background:var(--accent-weak);color:var(--accent-deep);font-family:var(--font-num);font-size:var(--f-xs);border-radius:50%;flex:none;justify-content:center;align-items:center;display:flex}.step-x{font-family:var(--font-num);font-size:var(--f-sm);color:var(--text-3);white-space:nowrap}.param{background:var(--surface-2);border-radius:var(--radius);padding:var(--s4) var(--s5);align-items:center;gap:var(--s7);display:flex}.param b{font-family:var(--font-num);font-size:var(--f-2xl);font-weight:400;line-height:var(--lh-head);display:block}.param span{font-size:var(--f-xs);color:var(--text-3)}.dots{align-items:center;gap:var(--s2);display:flex}.dot{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:50%;width:10px;height:10px;transition:background .15s,border-color .15s}.dot.on{background:var(--accent);border-color:var(--accent)}.dot.on.first{background:var(--accent-deep);border-color:var(--accent-deep)}.rbtn{border:1px solid var(--border-strong);width:32px;height:32px;color:var(--text-2);border-radius:50%;flex:none;justify-content:center;align-items:center;transition:background .15s;display:flex}.rbtn:hover{background:var(--surface-2)}.seg{gap:var(--s2);flex-wrap:wrap;display:flex}.seg button{font-size:var(--f-sm);padding:var(--s2) var(--s4);border:1px solid var(--border-strong);border-radius:var(--radius);color:var(--text-2);white-space:nowrap;transition:background .15s,color .15s,border-color .15s}.seg button:hover{background:var(--surface-2)}.seg button.on{background:var(--accent-weak);border-color:var(--accent);color:var(--accent-deep)}.pat{min-width:64px;height:52px;padding:0 var(--s3);justify-content:center;align-items:center;display:inline-flex}.nsvg{color:var(--text-2);display:block}.pat.on .nsvg,.pat.on .pat-sup{color:var(--accent-deep)}input[type=range]{accent-color:var(--accent);width:100%}select{font:inherit;font-size:var(--f-sm);color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);padding:var(--s2) var(--s3)}#l2{z-index:30;display:none;position:fixed;bottom:0;left:0;right:0}#l2.show{display:block}.l2-bar{max-width:var(--content-max);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg) var(--radius-lg) 0 0;box-shadow:var(--shadow);padding:var(--s3) var(--s5);align-items:center;gap:var(--s5);border-bottom:0;margin:0 auto;display:flex}.l2-fab{right:var(--s6);bottom:var(--s6);background:var(--surface);border:1px solid var(--border-strong);width:56px;height:56px;box-shadow:var(--shadow);font-family:var(--font-num);font-size:var(--f-sm);color:var(--text-2);border-radius:50%;justify-content:center;align-items:center;display:flex;position:fixed}.l2-fab.beat{border-color:var(--accent)}#l1{z-index:60;background:#23201cb8;justify-content:center;align-items:center;display:none;position:fixed;inset:0}#l1.show{display:flex}.l1-box{align-items:center;gap:var(--s4);flex-direction:column;max-width:90vw;max-height:90vh;display:flex}.l1-img{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius);width:70vw;max-width:900px;height:56vh;font-family:var(--font-num);font-size:var(--f-sm);color:var(--text-3);justify-content:center;align-items:center;display:flex}.l1-cap{color:var(--surface);font-size:var(--f-sm)}.l1-x{top:var(--s5);right:var(--s6);background:var(--surface);width:36px;height:36px;color:var(--text-2);border-radius:50%;justify-content:center;align-items:center;display:flex;position:fixed}.l1-nav{background:var(--surface);width:40px;height:40px;color:var(--text-2);border-radius:50%;justify-content:center;align-items:center;display:flex;position:fixed;top:50%;transform:translateY(-50%)}.tabs{align-items:center;gap:var(--s5);border-bottom:1px solid var(--border);margin-bottom:var(--s6);display:flex}.tab{font-size:var(--f-sm);color:var(--text-2);padding:var(--s3) var(--s4);border-radius:var(--radius) var(--radius) 0 0;white-space:nowrap;border-bottom:2px solid #0000;transition:color .15s,background .15s}.tab:hover{color:var(--text)}.tab.on{color:var(--accent-deep);background:var(--accent-weak);border-bottom-color:var(--accent)}.vbox{aspect-ratio:16/9;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);justify-content:center;align-items:center;gap:var(--s3);flex-direction:column;display:flex}.vplay{border-style:solid;border-width:14px 0 14px 24px;border-color:transparent transparent transparent var(--border-strong);width:0;height:0}.vcard{align-items:center;gap:var(--s4);text-align:left;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:100%;padding:var(--s3);transition:border-color .15s,background .15s;display:flex}.vcard:hover{border-color:var(--border-strong);background:var(--surface-2)}.vthumb{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);flex:none;justify-content:center;align-items:center;width:160px;height:90px;display:flex}.vthumb .vplay{border-width:10px 0 10px 17px}#lv{z-index:60;background:#23201cb8;justify-content:center;align-items:center;display:none;position:fixed;inset:0}#lv.show{display:flex}.lv-box{gap:var(--s4);flex-direction:column;width:70vw;max-width:900px;display:flex}.lv-frame{aspect-ratio:16/9;background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--radius);justify-content:center;align-items:center;gap:var(--s3);flex-direction:column;display:flex}.mic{background:var(--surface-2);border:1px solid var(--border-strong);border-radius:50%;justify-content:center;align-items:center;width:72px;height:72px;display:flex}.mic i{border-radius:var(--radius-lg);background:var(--border-strong);width:20px;height:34px;display:block}.tscale{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface-2);height:56px;position:relative;overflow:hidden}.tzone{width:10%;position:absolute;top:0;bottom:0;left:45%}.tzone.ok{background:var(--done-bg)}.ttick{background:var(--border-strong);width:1px;position:absolute;top:0}.tneedle{top:var(--s2);bottom:var(--s2);background:var(--warn);width:2px;transition:left .2s;position:absolute}.tneedle.ok{background:var(--done)}.tstr{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);padding:var(--s3) var(--s2);text-align:center;flex:1}.tstr.on{border:2px solid var(--accent);background:var(--accent-weak)}.statbar{background:var(--surface-2);border-radius:var(--radius);padding:var(--s4) var(--s5);align-items:center;gap:var(--s7);display:flex}.statbar b{font-family:var(--font-num);font-size:var(--f-2xl);font-weight:400;line-height:var(--lh-head);display:block}.statbar span{font-size:var(--f-xs);color:var(--text-3)}.jdate{width:96px;font-family:var(--font-num);flex:none}.chipx{align-items:center;gap:var(--s2);font-size:var(--f-xs);color:var(--accent-deep);background:var(--accent-weak);border-radius:var(--radius);padding:var(--s1) var(--s3);white-space:nowrap;display:inline-flex}.icard{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);padding:var(--s4)}.ta{width:100%;padding:var(--s3);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);font-family:var(--font);font-size:var(--f-sm);line-height:var(--lh-body);resize:vertical}.ta:focus{border-color:var(--accent);outline:none}.jfoot{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--s3) var(--s5);align-items:center;gap:var(--s4);margin-top:var(--s6);display:flex;position:sticky;bottom:0}.pop{z-index:10;top:calc(100% + var(--s2));background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);width:420px;max-height:320px;box-shadow:var(--shadow);padding:var(--s3);position:absolute;left:0;overflow:auto}.popi{align-items:center;gap:var(--s3);width:100%;font-size:var(--f-sm);color:var(--text-2);padding:var(--s2) var(--s3);border-radius:var(--radius);transition:background .15s;display:flex}.popi:hover{background:var(--surface-2)}.popi.on{color:var(--accent-deep);background:var(--accent-weak)}
