:root{--blue:#1865f2;--blue2:#e8f0fe;--ink:#21242c;--mut:#5f6368;--line:#e3e5e8;--ok:#1f9d55;--okbg:#e6f6ec;--bad:#d92916;--badbg:#fdecea;--y:#ffb100;--bg:#f7f8fa}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.5 -apple-system,BlinkMacSystemFont,"PingFang SC","Helvetica Neue",sans-serif}
button{font:inherit;cursor:pointer;color:inherit}
a{color:var(--blue);text-decoration:none}
.top{position:sticky;top:0;z-index:20;display:flex;align-items:center;gap:14px;padding:10px 18px;padding-top:max(10px,env(safe-area-inset-top));background:#fff;border-bottom:1px solid var(--line)}
.top .home{font-weight:600;white-space:nowrap}
.top .brand{flex:1;font-size:19px}.top .brand span{color:var(--mut);font-size:15px;margin-left:4px}
.speed{display:flex;border:1px solid var(--line);border-radius:20px;overflow:hidden}
.speed button{border:0;background:#fff;padding:6px 14px;font-size:15px}
.speed button.on{background:var(--blue);color:#fff}
main{max-width:1100px;margin:0 auto;padding:18px}
.foot{max-width:1100px;margin:10px auto 40px;padding:0 18px;color:var(--mut);font-size:13px}
.loading{color:var(--mut)}
h1{font-size:26px;margin:4px 0 6px}h2{font-size:21px;margin:22px 0 10px}h3{font-size:18px;margin:0}
.sub{color:var(--mut);margin:0 0 14px}
.card{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin:0 0 12px}
.pin{display:flex;align-items:center;gap:16px;border:2px solid var(--blue);background:linear-gradient(90deg,#fff,var(--blue2))}
.pin .big{font-size:22px;font-weight:700}
.btn{display:inline-block;border:0;background:var(--blue);color:#fff;border-radius:22px;padding:8px 18px;font-weight:600;font-size:16px}
.btn.ghost{background:#fff;color:var(--blue);border:1px solid var(--blue)}
.btn.sm{padding:4px 12px;font-size:14px}
.course>summary,.unit>summary,.lesson>summary{list-style:none;cursor:pointer}
.course>summary::-webkit-details-marker,.unit>summary::-webkit-details-marker,.lesson>summary::-webkit-details-marker{display:none}
.course>summary{display:flex;align-items:center;gap:10px;font-size:20px;font-weight:700}
.course>summary .zh,.unit .zh{color:var(--mut);font-weight:400;font-size:15px}
.caret{display:inline-block;transition:transform .15s;color:var(--mut)}
details[open]>summary .caret{transform:rotate(90deg)}
.units{margin-top:10px}
.unit{border-top:1px solid var(--line);padding:10px 0}
.unit>summary{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.unit>summary .t{font-weight:600}
.tag{font-size:12px;border-radius:10px;padding:1px 8px;background:#eee;color:var(--mut);white-space:nowrap}
.tag.full{background:var(--y);color:#3b2a00;font-weight:700}
.meta{color:var(--mut);font-size:14px}
.right{margin-left:auto;display:flex;gap:8px;align-items:center}
.lessons{margin:8px 0 0 22px}
.lesson{padding:6px 0;border-bottom:1px dashed var(--line)}
.lesson>summary{display:flex;align-items:center;gap:8px}
.chk{width:28px;height:28px;border-radius:50%;border:2px solid #c4c7cc;background:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:15px;flex:none;padding:0}
.chk.on{background:var(--ok);border-color:var(--ok);color:#fff}
.items{margin:6px 0 4px 36px;display:flex;flex-direction:column;gap:3px}
.items a{font-size:15px}
.items .k{display:inline-block;width:22px;color:var(--mut)}
.check{margin:6px 0 2px 0;font-size:15px}
/* unit page */
.tabs{position:sticky;top:57px;z-index:10;display:flex;gap:6px;background:var(--bg);padding:8px 0;overflow-x:auto}
.tabs button{border:1px solid var(--line);background:#fff;border-radius:20px;padding:7px 15px;white-space:nowrap;font-size:16px}
.tabs button.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0 12px}
.prog{color:var(--mut);font-size:15px}
.grp{margin:16px 0 8px;font-weight:700;font-size:17px}.grp span{color:var(--mut);font-weight:400;margin-left:6px}
.words{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:10px}
.word{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 14px;position:relative}
.word.known{border-color:var(--ok);background:var(--okbg)}
.word .en{font-size:22px;font-weight:700;color:var(--blue);border:0;background:none;padding:0;text-align:left}
.word .zhm{color:var(--ink);font-size:15px;margin:2px 0 6px}
.word .ex{display:block;border:0;background:none;padding:0;text-align:left;font-size:16px}
.word .know{position:absolute;top:10px;right:10px;border:1px solid var(--line);background:#fff;border-radius:16px;font-size:13px;padding:3px 10px}
.word.known .know{background:var(--ok);color:#fff;border-color:var(--ok)}
.say::before{content:"🔊 ";font-size:.85em}
.playing{background:#fff6d6!important;border-radius:6px}
.zhbtn{border:1px solid var(--line);background:#fff;border-radius:12px;font-size:13px;padding:1px 9px;color:var(--mut);margin-left:6px;vertical-align:middle}
.zh-hide{display:none}
.zht{color:#7a4b00;font-size:15px;margin-top:2px}
.vid{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 16px;margin-bottom:12px}
.vid .vh{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:6px}
.line{padding:7px 0;border-top:1px solid #f0f1f3;display:flex;align-items:flex-start;gap:6px}
.line .txt{flex:1}
.line .en{border:0;background:none;padding:0;text-align:left;font-size:18px;line-height:1.45}
.ph{background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px 16px;margin-bottom:10px}
.ph .frame{color:var(--mut);font-size:15px;font-family:ui-monospace,Menlo,monospace}
.ph .en{border:0;background:none;padding:0;text-align:left;font-size:20px;font-weight:600}
.rnd{border:2px dashed var(--blue);background:#fff;border-radius:14px;padding:14px 16px;margin:16px 0}
.rnd .num{font-size:44px;font-weight:800;color:var(--blue);letter-spacing:2px}
.rnd .ans{margin-top:8px}
.rnd .ans button{display:block;border:0;background:none;padding:4px 0;text-align:left;font-size:18px}
.prob{background:#fff;border:1px solid var(--line);border-radius:14px;padding:14px 16px;margin-bottom:12px}
.prob.ok{border-color:var(--ok);background:var(--okbg)}.prob.no{border-color:var(--bad)}
.prob .qh{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.prob .q{font-size:19px;font-weight:600;border:0;background:none;padding:0;text-align:left}
.prob .hl{color:var(--blue);font-weight:800}
.expr{font-size:28px;font-weight:700;display:flex;align-items:center;gap:14px;margin:10px 0}
.opts{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0}
.opt{border:2px solid var(--line);background:#fff;border-radius:12px;padding:9px 16px;font-size:18px;min-width:56px}
.opt.sel{border-color:var(--blue);background:var(--blue2)}
.opt.good{border-color:var(--ok);background:var(--okbg)}
.boxes{display:flex;gap:8px;margin:10px 0;flex-wrap:wrap}
.boxes label{display:flex;flex-direction:column;align-items:center;font-size:14px;color:var(--mut)}
.boxes input{width:74px;height:50px;font-size:24px;text-align:center;border:2px solid var(--line);border-radius:10px}
.boxes .fixed{width:74px;height:50px;font-size:22px;display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--ink)}
.match{display:grid;grid-template-columns:auto auto;gap:8px 14px;align-items:center;margin:10px 0;justify-content:start}
.match .l{font-size:20px;font-weight:600}
.match select{font-size:18px;padding:6px 10px;border-radius:10px;border:2px solid var(--line);background:#fff}
.slots{display:flex;gap:8px;margin:10px 0}
.slot{width:58px;height:58px;border:2px dashed #bbb;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:28px;font-weight:700;background:#fff}
.fb{margin-top:8px;font-weight:600}
.fb.ok{color:var(--ok)}.fb.no{color:var(--bad)}
.acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
.quiz{background:#fff;border:1px solid var(--line);border-radius:14px;padding:18px;text-align:center}
.quiz .opts{justify-content:center}
.quiz .opt{min-width:200px;font-size:20px}
.quiz .opt small{display:block;color:var(--mut);font-size:13px}
.big-play{font-size:20px;padding:12px 28px}
.score{font-size:22px;font-weight:700;margin:10px 0}
@media (max-width:700px){.words{grid-template-columns:1fr}.tabs{top:53px}}
