:root{--bg:#f3f6ff;--card:#fff;--ink:#1d2742;--sub:#68738f;--line:#e1e7f5;--pri:#4f7cff;--ok:#2cbf6f;--bad:#ef5350;--warn:#ffb020;
  --c-math:#3b82f6;--c-zh:#ef6a5b;--c-en:#1fb36f;--sj:var(--c-math);--sj2:#e6f0ff;--r:18px;--sh:0 2px 10px rgba(40,60,120,.08);
  --kai:"Kaiti SC","STKaiti","KaiTi","楷体","AR PL UKai CN","Noto Serif SC","Songti SC",serif;--ipa:"Lucida Sans Unicode","Segoe UI","Arial Unicode MS","Noto Sans",system-ui,sans-serif}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font:16px/1.5 system-ui,-apple-system,"PingFang SC","Microsoft YaHei","Noto Sans SC","Segoe UI",sans-serif;overscroll-behavior:none}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none;touch-action:manipulation}
h1,h2,h3,h4{margin:0}h3{font-size:1.05rem}h4{margin:14px 0 6px;color:var(--sub)}
.sub{color:var(--sub);margin:.3em 0}.small{font-size:.85rem}
.subj-math{--sj:var(--c-math);--sj2:#e6f0ff}.subj-zh{--sj:var(--c-zh);--sj2:#ffebe8}.subj-en{--sj:var(--c-en);--sj2:#e3f8ee}
.s-math{background:var(--c-math)}.s-zh{background:var(--c-zh)}.s-en{background:var(--c-en)}

/* ---- 版面 ---- */
#app{display:flex;flex-direction:column-reverse;height:100dvh;height:100vh;height:100dvh}
#main{flex:1;overflow-y:auto;padding:14px 14px 24px;padding-top:calc(14px + env(safe-area-inset-top));max-width:920px;width:100%;margin:0 auto;-webkit-overflow-scrolling:touch}
#nav{display:flex;background:#fff;border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -2px 12px rgba(40,60,120,.06)}
.brand{display:none}
.nv{flex:1;display:flex;flex-direction:column;align-items:center;gap:0;padding:7px 0 5px;color:var(--sub);font-size:.78rem}
.nv i{font-style:normal;font-size:1.5rem;line-height:1.2;transition:transform .15s}.nv.on{color:var(--pri);font-weight:700}.nv.on i{transform:scale(1.15)}
@media(min-width:900px){#app{flex-direction:row}#nav{flex-direction:column;width:190px;border-top:0;border-right:1px solid var(--line);padding:18px 12px;gap:6px;box-shadow:none}
 .brand{display:flex;align-items:center;gap:8px;font-size:1.3rem;padding:6px 10px 16px}.nv{flex-direction:row;gap:10px;padding:12px 14px;border-radius:14px;font-size:1rem}.nv.on{background:#e8eeff}#main{padding:24px 28px}}
@media(min-width:600px) and (max-width:899px){#main{padding:20px 24px}}
.card{background:var(--card);border-radius:var(--r);padding:16px;margin:12px 0;box-shadow:var(--sh)}
.card h3{margin-bottom:10px}

/* ---- 按钮 / 小元件 ---- */
.btn{padding:12px 20px;border-radius:14px;font-weight:700;background:#fff;border:2px solid var(--line);min-height:48px;transition:transform .08s}
.btn:active{transform:scale(.97)}.btn.primary{background:var(--pri);border-color:var(--pri);color:#fff;box-shadow:0 3px 0 #3a5fd0}.btn.ghost{background:#fff;color:var(--ink)}
.btn.good{background:var(--ok);border-color:var(--ok);color:#fff}.btn.bad{background:#fff;border-color:var(--bad);color:var(--bad)}.btn.wide{width:100%;margin-top:10px}.btn.sm{min-height:36px;padding:6px 14px}.btn.danger{color:var(--bad);border-color:#f5c2c0}
.row{display:flex;gap:10px;margin-top:14px}.row>.btn{flex:1}.row.wrap{flex-wrap:wrap;align-items:center}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}.chip-b{padding:8px 14px;border-radius:999px;background:#fff;border:2px solid var(--line);font-weight:600}.chip-b.on{background:var(--pri);border-color:var(--pri);color:#fff}
.chip-b.av{font-size:1.6rem;padding:4px 10px;line-height:1.3}
.pill{background:#fff;border-radius:999px;padding:6px 12px;font-weight:700;box-shadow:var(--sh);white-space:nowrap}.pill.fire{color:#e8590c}
.field{width:100%;font:inherit;font-size:1.1rem;padding:12px 14px;border-radius:12px;border:2px solid var(--line);background:#fff;color:var(--ink)}.field:focus{outline:0;border-color:var(--pri)}
.note{background:#fff8e1;border-radius:12px;padding:10px 14px;color:#8a6d00}.empty{text-align:center;font-size:3rem;padding:30px;color:var(--sub)}.empty p{font-size:1rem}
.xpbar,.mbar{height:8px;background:var(--line);border-radius:99px;overflow:hidden}.xpbar i,.mbar i{display:block;height:100%;background:linear-gradient(90deg,#7aa2ff,var(--pri));border-radius:99px;transition:width .4s}
.mbar{height:7px;margin-top:5px}.mbar.big{height:12px;margin:0}.mbar.big.s-math i{background:var(--c-math)}.mbar.big.s-zh i{background:var(--c-zh)}.mbar.big.s-en i{background:var(--c-en)}
.mbar.big.s-math,.mbar.big.s-zh,.mbar.big.s-en{background:var(--line)}

/* ---- 首页 ---- */
.hdr{display:flex;align-items:center;gap:12px;margin-bottom:6px}.hi{flex:1;min-width:0}.hi h1{font-size:1.35rem}.hi small{color:var(--sub)}.hi .xpbar{margin-top:6px;max-width:260px}
.me-av{font-size:2.4rem;width:62px;height:62px;border-radius:50%;background:#fff;box-shadow:var(--sh);line-height:1}.me-av.big{width:78px;height:78px;font-size:3rem}
.badges{display:flex;flex-direction:column;gap:6px;align-items:flex-end}
.plan-top{display:flex;gap:14px;align-items:center;margin-bottom:8px}.plan-top h2{font-size:1.2rem}
.tasks{display:flex;flex-direction:column;gap:8px}
.task{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:#f6f8ff;text-align:left;width:100%}.task.ok{background:#e9f9f0}
.ti{font-size:1.5rem;width:34px;text-align:center}.tl{flex:1;display:flex;flex-direction:column;gap:4px}.tb{display:block;height:7px;background:#dde4f7;border-radius:9px;overflow:hidden}.tb i{display:block;height:100%;background:var(--ok);border-radius:9px;transition:width .4s}
.tn{font-weight:700;color:var(--sub);font-size:.9rem}.go{color:var(--pri);font-weight:700;min-width:44px;text-align:right}
.quick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}.quick.two{grid-template-columns:repeat(2,1fr)}
.qk{display:flex;flex-direction:column;align-items:center;gap:2px;padding:14px 6px;border-radius:var(--r);color:#fff;box-shadow:var(--sh)}.qk i{font-style:normal;font-size:1.8rem}.qk small{opacity:.9;font-size:.78rem}
.q1{background:linear-gradient(135deg,#7c5cff,#5b8cff)}.q2{background:linear-gradient(135deg,#ff8a5b,#ef5b6a)}.q3{background:linear-gradient(135deg,#1fb36f,#42c6a0)}
.weekplan{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;text-align:center}.wp{display:flex;flex-direction:column;align-items:center;padding:8px 2px;border-radius:12px;background:#f6f8ff;font-size:.7rem;line-height:1.25}.wp i{font-style:normal;font-size:1.4rem}.wp small{font-weight:700;color:var(--sub)}.wp.now{background:#e1e9ff;outline:2px solid var(--pri)}
.wchart{display:flex;gap:6px;align-items:flex-end;height:112px}.wchart.tall{height:150px}.wc{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;font-size:.75rem;color:var(--sub)}.wc b{color:var(--ink);min-height:1.1em}
.stack{width:68%;max-width:34px;flex:1;display:flex;flex-direction:column-reverse;justify-content:flex-start;min-height:0}.stack i{display:block;width:100%;min-height:3px;border-radius:3px;margin-top:1px}
.legend{display:flex;gap:14px;justify-content:center;font-size:.8rem;color:var(--sub);margin-top:8px}.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px}
.dq{padding:10px 12px;border-radius:12px;background:#f6f8ff;margin:6px 0;cursor:pointer}.dq b{display:block;font-size:1.1rem}.dq small{color:var(--sub)}.dq .en{font-family:inherit}
.pulse{animation:pulse .5s}@keyframes pulse{50%{transform:scale(1.08);background:#e1e9ff}}

/* ---- 学习 ---- */
.seg{display:flex;background:#e7ecfa;border-radius:16px;padding:4px;gap:4px}.seg button{flex:1;padding:10px 4px;border-radius:12px;font-weight:700;color:var(--sub)}.seg button.on.sg-math{background:var(--c-math);color:#fff}.seg button.on.sg-zh{background:var(--c-zh);color:#fff}.seg button.on.sg-en{background:var(--c-en);color:#fff}
.grades{overflow-x:auto;flex-wrap:nowrap;padding-bottom:4px}.grades .chip-b{white-space:nowrap}
.hero{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:16px;border-radius:var(--r);color:#fff;margin:6px 0 4px;box-shadow:var(--sh)}.hero i{font-style:normal;font-size:2.2rem}.hero div{flex:1}.hero b{display:block;font-size:1.1rem}.hero small{opacity:.92}.hero span{font-weight:800;white-space:nowrap}
.hero.sj-math{background:linear-gradient(135deg,#3b82f6,#5b6cf0)}.hero.sj-zh{background:linear-gradient(135deg,#f0715f,#e8506e)}.hero.sj-en{background:linear-gradient(135deg,#1fb36f,#26a5a0)}
.sec{margin:18px 2px 8px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.sk-grid{grid-template-columns:repeat(auto-fill,minmax(270px,1fr))}
.tool{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:14px;background:#fff;border-radius:var(--r);box-shadow:var(--sh);text-align:left}.tool i{font-style:normal;font-size:1.8rem}.tool small{color:var(--sub);font-size:.8rem;line-height:1.3}
.sk{display:flex;align-items:center;gap:12px;padding:12px;background:#fff;border-radius:var(--r);box-shadow:var(--sh);cursor:pointer;position:relative}.sk:active{transform:scale(.99)}
.sk .ic{font-size:1.8rem;width:46px;height:46px;display:grid;place-items:center;background:#eef2ff;border-radius:14px;flex:none}.sk .tx{flex:1;min-width:0}.sk .tx b{display:block}.sk .tx small{color:var(--sub);display:block;font-size:.78rem;line-height:1.3}
.sk .lv{font-size:.72rem;font-weight:800;color:var(--pri);background:#eef2ff;padding:2px 8px;border-radius:99px;align-self:flex-start}.tipbtn{font-size:1.2rem;width:36px;height:36px;border-radius:50%;background:#fff6dc;flex:none}

/* ---- 我的 ---- */
.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:12px 0}.stats>div{background:#fff;border-radius:16px;padding:12px 6px;text-align:center;box-shadow:var(--sh)}.stats b{display:block;font-size:1.3rem}.stats b small{font-size:.8rem;color:var(--sub)}.stats span{font-size:.75rem;color:var(--sub)}.stats.mini{grid-template-columns:repeat(4,1fr)}.stats.mini>div{box-shadow:none;background:#f6f8ff}
.mrow{display:grid;grid-template-columns:78px 1fr 44px auto;gap:8px;align-items:center;margin:8px 0}.mrow small{color:var(--sub);font-size:.72rem}.mrow b{text-align:right}
.bgrid,.shop{display:grid;grid-template-columns:repeat(auto-fill,minmax(82px,1fr));gap:8px}
.bdg,.shi{display:flex;flex-direction:column;align-items:center;padding:8px 4px;border-radius:14px;background:#f1f3fa;font-size:.7rem;gap:2px;color:var(--sub)}.bdg i,.shi i{font-style:normal;font-size:2rem}.bdg.got{background:#fff4d6;color:#8a5a00;font-weight:700}
.shi{background:#fff;border:2px solid var(--line)}.shi.use{border-color:var(--pri);background:#eef2ff}.shi.lock i{filter:grayscale(.9);opacity:.6}.shi span{font-weight:700}
.boxes{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;text-align:center}.boxes>div{background:#f1f3fa;border-radius:10px;padding:8px 2px}.boxes b{display:block;font-size:1.2rem}.boxes span{font-size:.65rem;color:var(--sub)}
.mlist{display:flex;flex-direction:column;gap:8px;margin-top:12px}.mi{background:#fff;border-radius:14px;padding:10px 12px;box-shadow:var(--sh)}.mi .tg{color:#fff;font-size:.7rem;padding:1px 8px;border-radius:99px;font-weight:700}.mq{margin:4px 0;font-weight:600}.ma{color:var(--sub);font-size:.9rem}

/* ---- 家长 ---- */
.phead{display:flex;justify-content:space-between;align-items:center;margin-bottom:4px}
.pinwrap{text-align:center;padding-top:20px}.logo{font-size:3.4rem}.dots{display:flex;gap:14px;justify-content:center;margin:16px 0}.dots i{width:18px;height:18px;border-radius:50%;border:2px solid var(--pri)}.dots i.on{background:var(--pri)}
.pad{display:grid;grid-template-columns:repeat(3,76px);gap:12px;justify-content:center;margin-top:10px}.pad button{height:64px;border-radius:50%;background:#fff;font-size:1.6rem;font-weight:700;box-shadow:var(--sh)}.pad button:active{background:#e1e9ff}
.tbl{width:100%;border-collapse:collapse;font-size:.88rem;margin:10px 0}.tbl th,.tbl td{padding:7px 6px;text-align:center;border-bottom:1px solid var(--line)}.tbl th{color:var(--sub);font-weight:600;background:#f6f8ff}.tbl td.left{text-align:left;font-size:.8rem;color:var(--sub)}.up{color:var(--ok);font-weight:700}.dn{color:var(--bad);font-weight:700}
.tbl td .mbar{min-width:60px}details.card summary{cursor:pointer}details.card[open] summary{margin-bottom:8px}
.goal{display:flex;align-items:center;justify-content:space-between;padding:6px 0;border-bottom:1px dashed var(--line)}.step{display:flex;align-items:center;gap:10px}.step button{width:38px;height:38px;border-radius:50%;background:#eef2ff;font-size:1.3rem;font-weight:700;color:var(--pri)}.step b{min-width:34px;text-align:center;font-size:1.1rem}

/* ---- 设定画面 ---- */
.setup{max-width:480px;margin:0 auto;text-align:center;padding:10px 0}.setup h1{font-size:2rem}.cform{text-align:left}.cform label{display:block;margin:14px 0 4px;font-weight:700;color:var(--sub)}.setup .logo{margin-top:20px}
.setup-mode #nav{display:none}

/* ---- Modal / Toast ---- */
.modal{position:fixed;inset:0;background:rgba(20,30,60,.45);display:flex;align-items:flex-end;justify-content:center;z-index:100;animation:fade .15s}.sheet{background:#fff;width:100%;max-width:560px;border-radius:24px 24px 0 0;padding:20px 18px calc(18px + env(safe-area-inset-bottom));max-height:88vh;overflow:auto;animation:up .2s}
@media(min-width:700px){.modal{align-items:center}.sheet{border-radius:24px}}
@keyframes fade{from{opacity:0}}@keyframes up{from{transform:translateY(40px);opacity:.5}}
.sheet h3{margin-bottom:10px}.msg{font-size:1.05rem}.tip{background:#fff8e1;padding:12px 14px;border-radius:12px;line-height:1.6}
.list{display:flex;flex-direction:column;gap:8px}.li{display:flex;flex-direction:column;text-align:left;padding:12px 14px;border-radius:14px;background:#f4f6fd;gap:2px}.li small{color:var(--sub)}.li.cur{outline:2px solid var(--pri)}.av-l{font-size:1.8rem}
.toast{position:fixed;top:calc(12px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);background:#1d2742;color:#fff;padding:10px 18px;border-radius:99px;z-index:300;max-width:90vw;box-shadow:0 4px 18px rgba(0,0,0,.25);animation:fade .2s;transition:opacity .3s,transform .3s}.toast.out{opacity:0;transform:translate(-50%,-10px)}
.confetti{position:fixed;inset:0;pointer-events:none;z-index:250;overflow:hidden}.confetti span{position:absolute;top:-40px;animation:fall linear forwards}@keyframes fall{to{transform:translateY(110vh) rotate(540deg)}}

/* ---- 练习 / 页面 overlay ---- */
.overlay{position:fixed;inset:0;background:var(--bg);z-index:50;display:none}.overlay.show{display:block}
.sess,.page{height:100%;display:flex;flex-direction:column;max-width:760px;margin:0 auto}
.s-top{display:flex;align-items:center;gap:10px;padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top))}.s-top b{color:var(--sub);min-width:46px;text-align:right}
.prog{flex:1;height:14px;background:#dde4f7;border-radius:99px;overflow:hidden}.prog i{display:block;height:100%;background:var(--sj);border-radius:99px;transition:width .35s}
.icon-btn{width:42px;height:42px;border-radius:50%;background:#fff;font-size:1.3rem;box-shadow:var(--sh);flex:none}
.s-body{flex:1;overflow-y:auto;padding:6px 16px 16px}.s-foot{display:flex;gap:10px;padding:10px 16px calc(12px + env(safe-area-inset-bottom));background:linear-gradient(transparent,var(--bg) 30%)}.s-foot .btn{flex:1}.s-foot .btn.ghost{flex:0 0 auto}
.qcard{background:#fff;border-radius:22px;padding:20px 16px;text-align:center;box-shadow:var(--sh);border-top:6px solid var(--sj);position:relative}
.qt{font-size:1.35rem;line-height:1.7;font-weight:600}.qcard.big .qt{font-size:1.6rem}.chip{position:absolute;top:-12px;left:14px;background:var(--sj);color:#fff;border-radius:99px;font-size:.75rem;padding:1px 10px;font-weight:700}
.vis{display:block;margin:6px auto;max-width:100%;height:auto}.eq{font-size:2rem;font-weight:800;letter-spacing:.1em}.emo{font-size:2rem;letter-spacing:.15em;line-height:1.5}.emo.big{font-size:4.2rem;letter-spacing:0}
.zi{font-family:var(--kai);font-size:3rem;font-weight:700;letter-spacing:.08em;line-height:1.3}.zi .hl,.hl{color:var(--sj)}.blank{display:inline-block;min-width:1.3em;border-bottom:3px dashed var(--sj);color:var(--sj)}.zy{font-size:1.4rem;color:var(--sj);font-weight:700;letter-spacing:.1em}
.qline{font-family:var(--kai);font-size:1.6rem;margin:8px 0;line-height:1.6}.qline.en{font-family:inherit}.zhline{color:var(--sub);font-size:1.1rem}
.en{font-family:system-ui,-apple-system,"Segoe UI",Arial,sans-serif;font-weight:700;font-size:1.9rem}.kk{font-family:var(--ipa);color:var(--sj);font-weight:600}.kk.big{font-size:1.9rem;display:block;margin:6px 0}
.spk{margin-top:8px;padding:8px 16px;border-radius:99px;background:var(--sj2);color:var(--sj);font-weight:700}
.ctx{background:#fffdf2;border:2px dashed #f0d98c;border-radius:16px;padding:12px 14px;margin-bottom:12px;font-family:var(--kai);font-size:1.15rem;line-height:1.8}.ctx .en,.ctx p.en{font-family:system-ui;font-size:1.05rem;font-weight:500;line-height:1.7}.ctx h4{margin:0 0 4px;color:var(--ink)}.ctx details{font-family:system-ui;font-size:.95rem;color:var(--sub)}.ctx .spk{display:block;margin-top:8px}
.ans{margin-top:14px}.opts{display:grid;grid-template-columns:1fr 1fr;gap:10px}.opts.one{grid-template-columns:1fr}
.opt{padding:16px 10px;border-radius:16px;background:#fff;border:3px solid var(--line);font-size:1.25rem;font-weight:700;min-height:62px;transition:transform .08s;box-shadow:0 3px 0 var(--line);display:flex;align-items:center;justify-content:center;text-align:center}
.opt:active{transform:translateY(2px);box-shadow:none}.opt.right{background:#dff7ea;border-color:var(--ok);box-shadow:0 3px 0 var(--ok)}.opt.wrong{background:#ffe6e5;border-color:var(--bad);box-shadow:0 3px 0 var(--bad);animation:shake .3s}
@keyframes shake{25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}
.inrow{display:flex;align-items:center;gap:10px;justify-content:center}.inrow input{width:100%;max-width:340px;font:inherit;font-size:1.8rem;text-align:center;padding:12px;border-radius:16px;border:3px solid var(--line);font-weight:700;color:var(--ink);background:#fff}.inrow input:focus{outline:0;border-color:var(--sj)}.inrow input.right{border-color:var(--ok);background:#dff7ea}.inrow input.wrong{border-color:var(--bad);background:#ffe6e5}.unit{font-weight:700;color:var(--sub)}
.tiles-ans{min-height:64px;background:#fff;border:3px dashed var(--line);border-radius:16px;padding:8px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}.tiles-ans.right{border-color:var(--ok);background:#dff7ea}.tiles-ans.wrong{border-color:var(--bad);background:#ffe6e5}.tiles-ans .ph{color:var(--sub);font-size:.9rem;padding:0 6px}
.tiles-bank{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;justify-content:center}.tile{padding:10px 16px;border-radius:14px;background:#fff;border:3px solid var(--line);font-size:1.2rem;font-weight:700;box-shadow:0 3px 0 var(--line)}.tile.on{border-color:var(--sj);background:var(--sj2)}.tile.ghost{opacity:.25;box-shadow:none}
.fb{margin-top:14px}.good,.bad,.hintbox{padding:12px 14px;border-radius:14px;line-height:1.6}.good{background:#e1f8ec;color:#176b41}.bad{background:#fff0ef;color:#a02a27}.hintbox{background:#fff8e1;color:#7a5b00}.gain{float:right;font-weight:700}.correct{font-size:1.15rem}.exp,.fnote{margin-top:6px;color:var(--ink);font-size:.95rem}.good .fnote{color:#176b41}
.sum{text-align:center;padding:20px 10px}.big-face{font-size:5rem}.sum h2{margin:4px 0}.sum-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin:16px 0}.sum-cards>div{background:#fff;border-radius:16px;padding:12px;box-shadow:var(--sh)}.sum-cards b{display:block;font-size:1.5rem}.sum-cards span{font-size:.78rem;color:var(--sub)}
.wr{text-align:left;margin-top:10px}.wr-i{background:#fff;border-radius:12px;padding:10px 12px;margin:8px 0;box-shadow:var(--sh)}.wq{font-weight:600}.wa{color:var(--bad)}.we{font-size:.88rem;color:var(--sub)}
.pg-top{display:flex;align-items:center;gap:12px;padding:10px 14px;padding-top:calc(10px + env(safe-area-inset-top))}.pg-top h2{font-size:1.2rem}.pg-body{flex:1;overflow-y:auto;padding:4px 16px 24px}

/* ---- 字卡 ---- */
.cardwrap{display:flex;flex-direction:column;align-items:center;gap:14px}.cprog{width:100%;height:10px;background:#dde4f7;border-radius:99px;overflow:hidden}.cprog i{display:block;height:100%;background:var(--sj);transition:width .3s}
.fcard{width:100%;min-height:340px;background:#fff;border-radius:26px;box-shadow:var(--sh);border-top:8px solid var(--sj);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px;text-align:center;position:relative;cursor:pointer;user-select:none}
.fcard[data-new="新"]::before{content:"新";position:absolute;top:12px;right:14px;background:var(--warn);color:#fff;border-radius:99px;padding:0 10px;font-weight:700}
.fcard .hint{position:absolute;bottom:12px;color:var(--sub);font-size:.85rem}.cback{display:none}.fcard.flip .cfront{display:none}.fcard.flip .cback{display:block;animation:fade .25s}
.big-char{font-family:var(--kai);font-size:9rem;line-height:1.1}.big-char.sm{font-size:4.5rem}.zy-big{font-size:2rem;color:var(--sj);font-weight:800;letter-spacing:.1em}.zy-big.sm{font-size:1.2rem}.cmeta{color:var(--sub);margin:6px 0}.cwords{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:6px}.cwords span,.wmeta span[data-say]{background:var(--sj2);color:var(--sj);padding:4px 12px;border-radius:99px;font-weight:700;cursor:pointer}
.en-big{font-size:3rem;font-weight:800;margin:6px 0}.cbtns{display:flex;gap:12px;width:100%}.cbtns .btn{flex:1;font-size:1.1rem}.cbtns [hidden]{display:none}.speak{align-self:center}

/* ---- 写字 ---- */
.writer{display:flex;flex-direction:column;align-items:center;gap:10px}.wmeta{text-align:center;line-height:2}.wbox{position:relative;width:min(92vw,420px);aspect-ratio:1;background:#fff;border:3px solid #c85b50;border-radius:8px;box-shadow:var(--sh);
 background-image:linear-gradient(to right,transparent calc(50% - 1px),#e8b5b0 calc(50% - 1px),#e8b5b0 calc(50% + 1px),transparent calc(50% + 1px)),linear-gradient(to bottom,transparent calc(50% - 1px),#e8b5b0 calc(50% - 1px),#e8b5b0 calc(50% + 1px),transparent calc(50% + 1px)),linear-gradient(45deg,transparent calc(50% - .5px),#f3d6d3 calc(50% - .5px),#f3d6d3 calc(50% + .5px),transparent calc(50% + .5px)),linear-gradient(-45deg,transparent calc(50% - .5px),#f3d6d3 calc(50% - .5px),#f3d6d3 calc(50% + .5px),transparent calc(50% + .5px))}
.wghost{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--kai);color:#d6d9e3;line-height:1;pointer-events:none;user-select:none;padding-bottom:2%}.wbox canvas{position:absolute;inset:0;touch-action:none;cursor:crosshair}.wbtns{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}

/* ---- 表格 / 图表工具 ---- */
.grid-s{display:grid;grid-template-columns:repeat(auto-fill,minmax(82px,1fr));gap:8px}.tile-s{display:flex;flex-direction:column;align-items:center;padding:10px 4px;border-radius:14px;background:#fff;box-shadow:var(--sh);gap:0}.tile-s b{font-size:1.7rem;color:var(--sj);font-family:var(--ipa)}.tile-s span{font-size:1.1rem;font-family:var(--kai);font-weight:700}.tile-s small{color:var(--sub);font-size:.72rem;font-family:var(--ipa)}.tile-s.abc b{font-family:inherit}
.tones{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:8px}.tones>div{background:#fff;border-radius:12px;padding:8px 10px}.tones b{font-size:1.3rem;color:var(--sj);margin-right:6px}
.phrows{display:flex;flex-direction:column;gap:8px}.phrow{display:flex;align-items:center;gap:10px;background:#fff;border-radius:14px;padding:8px 12px;box-shadow:var(--sh)}.phk{min-width:70px;text-align:center}.phk b{display:block;font-size:1.4rem;color:var(--sj)}.phk span{font-family:var(--ipa);color:var(--sub);font-size:.9rem}.phw{display:flex;gap:6px;flex-wrap:wrap}.wd{padding:6px 12px;border-radius:99px;background:var(--sj2);color:var(--sj);font-weight:700}
.rlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}.ritem{background:#fff;border-radius:12px;padding:10px 12px;box-shadow:var(--sh);cursor:pointer}.ritem b{display:block;font-family:var(--kai);font-size:1.2rem}.ritem span{font-size:.85rem;color:var(--sub)}
.poem{text-align:center}.poem h3{font-size:1.6rem}.by{color:var(--sub);margin-bottom:10px}.pline{margin:14px 0;font-family:var(--kai);font-size:2rem;cursor:pointer;letter-spacing:.06em}.pline ruby{ruby-position:over;margin:0 3px}.pline rt{font-family:system-ui;font-size:.38em;color:var(--sj);font-weight:600;letter-spacing:0}.pbtns{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin:18px 0}.pmean{background:#fff8e1;border-radius:14px;padding:12px;text-align:left;line-height:1.7}
.dlg .bub{max-width:82%;padding:10px 14px;border-radius:18px;margin:10px 0;background:#fff;box-shadow:var(--sh);transition:filter .2s}.dlg .bub.r{margin-left:auto;background:var(--sj2)}.dlg .who{font-size:.72rem;color:var(--sub);font-weight:700}.dlg .bt{font-size:1.15rem;font-weight:600;cursor:pointer}.dlg .bz{font-size:.88rem;color:var(--sub)}.dlg .bub.now{outline:3px solid var(--sj)}.dlg .bub.blur .bt,.dlg .bub.blur .bz{filter:blur(7px);cursor:pointer}
.passage h4{margin:0}.mtab{border-collapse:collapse;margin:0 auto;font-size:1.05rem}.mtab th,.mtab td{width:36px;height:36px;text-align:center;border:1px solid var(--line);background:#fff}.mtab th{background:#e6f0ff;color:var(--c-math)}.mtab td.hl{background:#eaf1ff}.mtab td.hl2{background:var(--warn);color:#fff}.mtab-info{text-align:center;background:#fff;border-radius:12px;padding:10px;margin-bottom:10px;min-height:48px}
@media(min-width:600px){.mtab th,.mtab td{width:48px;height:48px;font-size:1.2rem}}

/* ---- 分数 ---- */
.fr{display:inline-flex;flex-direction:column;align-items:center;vertical-align:middle;line-height:1.15;margin:0 .15em;font-size:.88em}.fr i{font-style:normal;padding:0 .25em}.fr i:first-child{border-bottom:.09em solid currentColor}
.mx{display:inline-flex;align-items:center;gap:.15em}.mx b{font-weight:800}


/* ---- 朗读开关 / 拼音 ---- */
.novoice .spk,.novoice .speak,.novoice .vbtn,.novoice .ico,.novoice .vt{display:none!important}
.s-top .vt{width:42px;height:42px}
.pline ruby{margin:0 5px}.pline rt{font-size:.34em}
.row.wrap small.sub{flex-basis:100%;margin:-4px 0 0}
.card .chips .chip-b{font-size:.9rem}
