:root{--bg:#f6f4ef;--card:#fffdf8;--ink:#1f2328;--muted:#6b6f76;--line:#e4dfd3;--soft:#f1ede3;--net:#2f6fdb;--net-bg:#e3ecfb;--sub:#d9822b;--sub-bg:#fbebd9;--host:#2e9d6a;--host-bg:#dcf2e6;--bad:#c4423a;--bad-bg:#fbe5e3;--good:#2e9d6a;--good-bg:#e1f4ea;--warn-bg:#fff3c4;--g0:#cfe0fb;--g1:#fbd9b5;--g2:#c9ecd8;--g3:#e9d3f4;--g4:#f8d0d0;--g5:#d7ecf1;--g6:#f3e6b8;--g7:#dcdcdc;--mono:ui-monospace,"Cascadia Code",Consolas,monospace}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--ink);font:16px/1.75 PingFang SC,Microsoft YaHei,system-ui,sans-serif}a{color:var(--net);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:var(--mono)}:not(pre)>code{background:var(--soft);border-radius:4px;padding:1px 5px;font-size:.92em}pre{color:#e8e6e1;font:14px/1.6 var(--mono);background:#22262b;border-radius:8px;padding:12px 14px;overflow:auto}h1{letter-spacing:-.01em;margin:0 0 4px;font-size:28px}h2{font-size:20px}.top{z-index:20;background:var(--bg);border-bottom:1px solid var(--line);position:sticky;top:0}.top .in{align-items:center;gap:18px;max-width:1240px;margin:0 auto;padding:10px 20px;display:flex}.brand{white-space:nowrap;font-weight:700;color:var(--ink)!important;text-decoration:none!important}.nav{flex-wrap:wrap;flex:1;gap:4px;display:flex}.nav a{color:var(--muted);border-radius:6px;padding:4px 10px;font-size:14px;text-decoration:none}.nav a.active{background:var(--ink);color:#fff}.nav .cnt{font:11px var(--mono);background:var(--bad);color:#fff;border-radius:8px;margin-left:4px;padding:0 5px}.seg{border:1px solid var(--line);border-radius:6px;font-size:13px;display:flex;overflow:hidden}.seg button{cursor:pointer;color:var(--muted);font:inherit;background:0 0;border:0;padding:4px 10px;font-size:13px}.seg button.on{background:var(--ink);color:#fff}.page{max-width:1240px;margin:0 auto;padding:28px 20px 100px}.narrow{max-width:900px}.muted{color:var(--muted)}.small{font-size:13px}.lead{color:var(--muted);margin:0 0 22px}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.spacer{flex:1}.btn{border:1px solid var(--line);cursor:pointer;font:inherit;color:var(--ink);white-space:nowrap;background:#fff;border-radius:8px;align-items:center;gap:6px;padding:7px 14px;font-size:14px;display:inline-flex;text-decoration:none!important}.btn:hover{border-color:var(--ink)}.btn.primary{background:var(--ink);color:#fff;border-color:var(--ink)}.btn.sm{padding:3px 9px;font-size:12px}.btn:disabled{opacity:.4;cursor:not-allowed}.panel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:20px 22px}.pill{background:var(--soft);color:var(--muted);white-space:nowrap;border-radius:10px;padding:1px 8px;font-size:12px}.pill.good{background:var(--good-bg);color:var(--good)}.pill.warn{background:var(--warn-bg);color:#8a6d00}.pill.bad{background:var(--bad-bg);color:var(--bad)}.pill.zero{background:var(--host-bg);color:var(--host)}.bar{background:var(--line);border-radius:3px;height:6px;overflow:hidden}.bar i{background:var(--ink);height:100%;transition:width .4s;display:block}input.txt,textarea.txt,select.txt{font:inherit;border:1px solid var(--line);background:#fff;border-radius:6px;width:100%;padding:7px 10px;font-size:14px}label.f{color:var(--muted);margin:10px 0 3px;font-size:13px;display:block}.grid2{grid-template-columns:1fr 1fr;gap:16px;display:grid}.grid3{grid-template-columns:repeat(3,1fr);gap:16px;display:grid}@media (width<=900px){.grid2,.grid3{grid-template-columns:1fr}}.empty{text-align:center;color:var(--muted);padding:40px}.mod{transition:border-color .2s;display:block;color:inherit!important;text-decoration:none!important}.mod:hover{border-color:var(--ink)}.mod .code{font:700 13px var(--mono);letter-spacing:.08em;color:var(--muted)}.mod h2{margin:4px 0 2px}.stat{background:var(--soft);border-radius:10px;padding:12px 14px}.stat b{font:600 24px/1.3 var(--mono);display:block}.stat small{color:var(--muted);font-size:12px}.weeks{grid-template-columns:180px 1fr;gap:24px;display:grid}@media (width<=860px){.weeks{grid-template-columns:1fr}}.wk-list{flex-direction:column;align-self:start;gap:4px;display:flex;position:sticky;top:70px}.wk-list button{text-align:left;cursor:pointer;font:inherit;color:var(--muted);background:0 0;border:0;border-radius:8px;padding:8px 12px}.wk-list button.on{background:var(--card);color:var(--ink);box-shadow:0 0 0 1px var(--line);font-weight:600}.kp{border-top:1px solid var(--line);grid-template-columns:1fr auto;align-items:center;gap:10px 16px;padding:16px 0;display:grid}.kp:first-of-type{border-top:0}.kp h3{margin:0;font-size:17px}.kp .acts{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.notes-list a{border-bottom:1px dashed var(--line);color:var(--ink);gap:10px;padding:6px 0;display:flex}.notes-list a:hover{color:var(--net);text-decoration:none}.lesson-layout{grid-template-columns:1fr 360px;gap:24px;max-width:1240px;margin:0 auto;padding:24px 20px 140px;display:grid}@media (width<=1000px){.lesson-layout{grid-template-columns:1fr}.tutor{height:520px!important;position:static!important}}.lbar{align-items:center;gap:14px;margin-bottom:18px;display:flex}.lbar .bar{flex:1}.chapter{font:600 12px/1 var(--mono);color:var(--muted);letter-spacing:.08em;margin:28px 0 10px}.card{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:16px;padding:22px 26px;animation:.35s in}@keyframes in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.card>h2{margin:0 0 10px;font-size:20px}.card p{margin:8px 0}.blk{margin:10px 0}.en{color:#4a5560;border-left:3px solid var(--line);margin:6px 0;padding-left:10px;font-size:14.5px}body.lang-zh .en,body.lang-en .zh-x{display:none}body.lang-en .zh-x.show{display:block}body.lang-en .en{border-left-color:var(--net);color:var(--ink);font-size:16px}.peek{color:var(--net);cursor:pointer;-webkit-user-select:none;user-select:none;margin-left:6px;font-size:12px;display:none}body.lang-en .peek{display:inline}.say-en{color:#33404d;background:#eef2f7;border-radius:8px;padding:10px 14px;font-size:15px}.say-en:before{content:"英文这么说 · ";color:var(--muted);font-size:12px}.new-word{background:var(--warn-bg);border-radius:4px;padding:0 5px;font-weight:600}.analogy{background:var(--soft);white-space:pre-line;border-radius:10px;padding:12px 16px}.big{font:600 26px/1.4 var(--mono);letter-spacing:.02em}.q{background:#fffefb;border:1px dashed #cfc8b8;border-radius:8px;padding:14px 16px}.q .qt{margin-bottom:8px;font-weight:600}.opts{flex-wrap:wrap;gap:8px;display:flex}.opts button{border:1px solid var(--line);cursor:pointer;font:inherit;text-align:left;background:#fff;border-radius:8px;padding:7px 14px;font-size:15px}.opts button:hover{border-color:var(--ink)}.opts button.right{background:var(--good-bg);border-color:var(--good)}.opts button.wrong{background:var(--bad-bg);border-color:var(--bad)}.opts.col{flex-direction:column;align-items:stretch}input.ans{font:15px var(--mono);border:1px solid var(--line);background:#fff;border-radius:6px;width:150px;padding:6px 10px}input.ans.ok{border-color:var(--good);background:var(--good-bg)}input.ans.no{border-color:var(--bad)}.fb{border-radius:8px;margin-top:10px;padding:10px 12px;font-size:15px}.fb.good{background:var(--good-bg)}.fb.bad{background:var(--bad-bg)}.alt{border-left:3px solid var(--sub);background:var(--sub-bg);border-radius:0 8px 8px 0;margin-top:10px;padding:12px 14px;font-size:15px}.alt:before{content:"换个说法 ";color:var(--sub);font-weight:600}table.t{border-collapse:collapse;width:100%;font-size:14.5px}table.t th,table.t td{border-bottom:1px solid var(--line);text-align:left;padding:6px 10px}table.t th{color:var(--muted);font-size:13px;font-weight:500}.myth{grid-template-columns:1fr 1fr;gap:10px;display:grid}@media (width<=700px){.myth{grid-template-columns:1fr}}.myth div{border-radius:8px;padding:10px 14px;font-size:15px}.myth .x{background:var(--bad-bg)}.myth .x:before{content:"❌ "}.myth .v{background:var(--good-bg)}.myth .v:before{content:"✅ "}.scaf .srow{flex-wrap:wrap;align-items:center;gap:10px;margin:8px 0;display:flex}.scaf .srow label{flex:1;min-width:260px}.fill input.ans{width:110px;margin:2px 4px}.fill{line-height:2.4}.vocab{grid-template-columns:1fr 1fr;gap:8px;max-width:560px;display:grid}.vocab button{border:1px solid var(--line);cursor:pointer;font:inherit;background:#fff;border-radius:8px;padding:8px;font-size:15px}.vocab button.sel{border-color:var(--ink);background:var(--warn-bg)}.vocab button.done{background:var(--good-bg);border-color:var(--good);cursor:default}.next-wrap{pointer-events:none;justify-content:center;display:flex;position:sticky;bottom:16px}.next-wrap .btn{pointer-events:auto;padding:10px 28px;font-size:15px;box-shadow:0 4px 14px #0002}.sw-row{flex-wrap:wrap;gap:10px;margin:10px 0;display:flex}.sw{border:2px solid var(--ink);cursor:pointer;width:54px;height:80px;font:600 22px var(--mono);-webkit-user-select:none;user-select:none;background:#fff;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;transition:background .2s;display:flex}.sw small{color:var(--muted);font:12px system-ui}.sw.on{background:#ffd75e}.found{flex-wrap:wrap;gap:6px;margin-top:6px;display:flex}.found span{font:600 15px var(--mono);background:var(--good-bg);border-radius:5px;padding:3px 9px}.found span.empty{background:var(--line);color:#0000}.dec{font:600 32px var(--mono)}.bits{font:600 14px/1 var(--mono);flex-wrap:wrap;gap:2px;margin:10px 0 6px;display:flex}.octet{gap:2px;margin-right:8px;display:flex}.bit{border-radius:3px;place-items:center;width:21px;height:30px;transition:background .25s,color .25s;display:grid}.bit.n{background:var(--net-bg);color:var(--net)}.bit.s{background:var(--sub-bg);color:var(--sub)}.bit.h{background:var(--host-bg);color:var(--host)}.legend{color:var(--muted);flex-wrap:wrap;gap:14px;font-size:13px;display:flex}.legend span:before{content:"";vertical-align:-1px;border-radius:2px;width:10px;height:10px;margin-right:5px;display:inline-block}.legend .ln:before{background:var(--net)}.legend .ls:before{background:var(--sub)}.legend .lh:before{background:var(--host)}.stats{grid-template-columns:repeat(4,1fr);gap:8px;margin-top:8px;display:grid}@media (width<=700px){.stats{grid-template-columns:1fr 1fr}}.agrid{grid-template-columns:repeat(16,1fr);gap:2px;max-width:520px;margin:10px 0;display:grid}.cell{aspect-ratio:1;font:9px/1 var(--mono);color:#0006;border-radius:2px;place-items:center;transition:background .3s;display:grid}.cell.edge{outline-offset:-2px;color:#000;outline:2px solid #0007;font-weight:700}.trace{grid-template-columns:1.3fr 1fr;gap:12px;display:grid}@media (width<=700px){.trace{grid-template-columns:1fr}}.trace pre{margin:0}.trace .ln{border-radius:3px;padding:0 6px;display:block}.trace .ln.cur{background:#ffd75e33;outline:1px solid #ffd75e}.vars{background:var(--soft);font:14px var(--mono);border-radius:8px;padding:10px 12px}.tutor{background:var(--card);border:1px solid var(--line);border-radius:12px;flex-direction:column;height:calc(100vh - 88px);display:flex;position:sticky;top:64px;overflow:hidden}.tutor .hd{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:12px 14px;display:flex}.tutor .hd b{flex:1}.tutor .sec{color:var(--muted);padding:8px 14px 4px;font-size:12px}.tutor .words{flex-wrap:wrap;gap:5px;max-height:76px;padding:0 14px 8px;display:flex;overflow:auto}.tutor .words span{background:var(--warn-bg);border-radius:10px;padding:1px 8px;font-size:12px}.tutor .quick{flex-wrap:wrap;gap:6px;padding:8px 14px;display:flex}.tutor .quick button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:12px;padding:3px 9px;font-size:12px}.tutor .msgs{border-top:1px solid var(--line);flex:1;padding:12px 14px;font-size:14.5px;overflow:auto}.msg{margin-bottom:12px}.msg.me{background:var(--bg);white-space:pre-wrap;border-radius:8px;padding:8px 10px}.msg.sys{color:var(--muted);font-size:13px}.msg p{margin:6px 0}.msg pre{font-size:13px}.msg table{border-collapse:collapse;font-size:13px}.msg td,.msg th{border:1px solid var(--line);padding:3px 6px}.tutor form{border-top:1px solid var(--line);gap:6px;padding:10px 14px;display:flex}.tutor textarea{resize:none;height:42px;font:inherit;border:1px solid var(--line);border-radius:6px;flex:1;padding:8px;font-size:14px}.note-body{font-size:15.5px}.note-body h2{margin-top:28px;font-size:21px}.note-body h3{margin-top:22px;font-size:18px}.note-body table{border-collapse:collapse;width:100%;margin:10px 0;font-size:14px}.note-body td,.note-body th{border:1px solid var(--line);vertical-align:top;padding:5px 8px}.note-body figure{margin:10px 0;overflow:auto}.note-body img{max-width:100%}body.lang-zh .note-body .en-p{display:none}body.lang-en .note-body .zh-p{opacity:.45}.qz{border-top:1px solid var(--line);padding:18px 0}.qz .no{font:600 13px var(--mono);color:var(--muted)}.score-big{font:700 44px var(--mono)}.auth-page{max-width:520px;padding-top:60px}.auth-page>.brand{margin-bottom:22px;display:block}.auth-page h1{font-size:25px}.auth-page .panel{padding:28px}.form-error{color:var(--bad);background:var(--bad-bg);overflow-wrap:anywhere;border-radius:6px;padding:8px 12px;font-size:14px}.table-scroll{overflow-x:auto}.table-scroll table{min-width:560px}.admin-users{gap:16px;display:grid}.admin-users label{font-size:14px}.admin-users input.txt{margin-top:5px;display:block}.tutor-budget{border-bottom:1px solid var(--line);padding:10px 14px}.tutor-budget select{font:inherit;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:3px 5px}.tutor-budget p{margin:6px 0 0}.tutor .quick button:disabled{opacity:.45;cursor:not-allowed}.tutor>.form-error{margin:4px 12px}:focus-visible{outline:2px solid var(--net);outline-offset:3px}@media (width<=680px){.top .in{flex-wrap:wrap;gap:8px}.top .nav{flex-basis:100%;order:3}.top .seg{margin-left:auto}.nav a{padding:4px 7px}.auth-page{padding-top:25px}.auth-page .panel{padding:20px}.tutor .quick{max-height:150px;overflow:auto}.lesson-layout main{min-width:0}.ans{max-width:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important}}.weeks>*,.kp>*,.grid2>*{min-width:0}@media (width<=860px){.weeks{grid-template-columns:minmax(0,1fr);gap:16px}.wk-list{overscroll-behavior-x:contain;flex-direction:row;gap:8px;max-width:100%;padding:2px 1px 8px;position:static;overflow-x:auto}.wk-list button{white-space:nowrap;flex:none;min-width:96px}}@media (width<=600px){.kp{grid-template-columns:minmax(0,1fr);gap:12px}.kp .acts{justify-content:flex-start}.kp h3,.kp .small,.notes-list a{overflow-wrap:anywhere}.page{padding:20px 16px 80px}.panel{padding:18px 16px}.notes-list a{flex-wrap:wrap}}
