:root{--ink:#181430;--soft:#6d6689;--line:#e6e2f0;--bg:#f5f3fb;--card:#fff;--accent:#4C3BCF;--accent-soft:#ece9fb;--ok:#0F9D77;--ok-soft:#e2f6f0;--no:#E0426E;--no-soft:#fdeaf0;--warn:#E08A16;--warn-soft:#fdf1dd;--nav-h:64px}*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}body,html{height:100%}body{font-family:-apple-system,Segoe UI,system-ui,sans-serif;background:var(--bg);color:var(--ink);line-height:1.5;max-width:640px;margin:0 auto;overscroll-behavior-y:none;padding:10px 12px calc(var(--nav-h) + env(safe-area-inset-bottom) + 14px);touch-action:manipulation}button,input,textarea{font-family:inherit}input,textarea{font-size:16px}.top{gap:8px;margin-bottom:12px}.logo,.top{display:flex;align-items:center}.logo{font-size:1.05rem;font-weight:800;letter-spacing:-.02em;gap:6px}.pills{margin-left:auto;display:flex;gap:6px}.pill{background:#fff;border:1px solid var(--line);border-radius:999px;padding:4px 10px;font-size:.72rem;font-weight:700;color:var(--soft);white-space:nowrap}.pill b{color:var(--accent)}.pill.due b{color:var(--no)}.card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:16px;box-shadow:0 4px 18px rgba(60,40,120,.05)}.card+.card{margin-top:12px}.muted{color:var(--soft);font-size:.85rem}.center{text-align:center}.err{background:var(--no-soft);color:#a3234b;padding:11px 14px;border-radius:12px;font-size:.85rem;margin-top:10px}.empty{padding:44px 18px;text-align:center;color:var(--soft)}.empty .big{font-size:2.6rem;display:block;margin-bottom:10px}.btn{border:none;border-radius:14px;background:var(--accent);color:#fff;font-weight:700;font-size:1rem;padding:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;width:100%}.btn:disabled{opacity:.5}.btn.ghost{background:#fff;color:var(--ink);border:1px solid var(--line)}.btn.sm{font-size:.85rem;padding:9px 14px;width:auto;border-radius:11px}.iconbtn{border:1px solid var(--line);background:#fff;border-radius:11px;width:38px;height:38px;font-size:1rem;cursor:pointer;flex-shrink:0}.searchbox{display:flex;gap:8px}.searchbox input{flex:1 1;border:1px solid var(--line);border-radius:14px;padding:14px 15px;background:#fff;font-weight:600}.searchbox input:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.ctx{width:100%;margin-top:9px;border:1px solid var(--line);border-radius:12px;padding:11px 13px;background:#fff;resize:vertical;min-height:44px;font-size:.9rem}.hintline{font-size:.78rem;color:var(--soft);margin-top:8px}.wordhead{display:flex;align-items:flex-start;gap:10px}.term{font-size:1.7rem;letter-spacing:-.02em;line-height:1.15;word-break:break-word}.badge,.term{font-weight:800}.badge{font-size:.68rem;padding:3px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent);white-space:nowrap}.badge.new{background:var(--warn-soft);color:var(--warn)}.badge.ok{background:var(--ok-soft);color:var(--ok)}.phon{color:var(--soft);font-size:.92rem;margin-top:2px}.mean{font-size:1.12rem;font-weight:700;margin-top:10px}.meanen{font-size:.88rem;color:var(--soft);margin-top:3px;font-style:italic}.sect{margin-top:14px}.sect h4{font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--soft);margin-bottom:6px;font-weight:800}.ex{border-left:3px solid var(--accent-soft);padding-left:11px;margin-bottom:9px}.ex .en{font-weight:600;font-size:.95rem}.ex .vi{color:var(--soft);font-size:.86rem}.mnem{background:var(--warn-soft);border-radius:12px;padding:11px 13px;font-size:.92rem;font-weight:600;color:#7a4c05}.syns{display:flex;flex-wrap:wrap;gap:6px}.syn{background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:4px 11px;font-size:.82rem;font-weight:600}.rowbtns{display:flex;gap:8px;margin-top:14px}.bar{height:7px;background:var(--line);overflow:hidden;margin-top:7px}.bar,.bar span{border-radius:999px}.bar span{display:block;height:100%;background:var(--accent);transition:width .5s cubic-bezier(.3,1.4,.5,1)}.bar.ok span{background:var(--ok)}.progress{display:flex;gap:4px;margin-bottom:12px}.dot{flex:1 1;height:5px;border-radius:999px;background:var(--line)}.dot.done{background:var(--ok)}.dot.miss{background:var(--no)}.dot.now{background:var(--accent)}.qkind{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--accent);margin-bottom:8px}.q{font-size:1.25rem;font-weight:700;line-height:1.35;word-break:break-word}.q.small{font-size:1.05rem}.qhint{color:var(--soft);font-size:.86rem;margin-top:6px}.opts{flex-direction:column;gap:9px;margin-top:16px}.opt,.opts{display:flex}.opt{border:1.5px solid var(--line);background:#fff;border-radius:14px;padding:14px;text-align:left;font-size:1rem;font-weight:600;cursor:pointer;color:var(--ink);align-items:center;gap:10px}.opt .idx{width:24px;height:24px;border-radius:8px;background:var(--bg);display:grid;place-items:center;font-size:.75rem;font-weight:800;color:var(--soft);flex-shrink:0}.opt.pick-ok{border-color:var(--ok);background:var(--ok-soft)}.opt.pick-no{border-color:var(--no);background:var(--no-soft)}.opt.show-ok{border-color:var(--ok)}.opt:disabled{cursor:default}.typebox{display:flex;gap:8px;margin-top:16px}.typebox input{flex:1 1;border:1.5px solid var(--line);padding:14px;font-size:1.05rem;text-align:center;letter-spacing:.02em}.typebox input,.verdict{border-radius:14px;font-weight:700}.verdict{margin-top:14px;padding:13px 15px}.verdict.ok{background:var(--ok-soft);color:#0a6b52}.verdict.no{background:var(--no-soft);color:#a3234b}.verdict .sub{font-weight:600;font-size:.88rem;margin-top:5px;opacity:.9;white-space:pre-line}.verdict .mn{font-weight:600;font-size:.86rem;margin-top:8px;background:rgba(255,255,255,.65);border-radius:10px;padding:8px 10px}.combo{font-size:.78rem;font-weight:800;color:var(--warn)}.filters{display:flex;gap:6px;overflow-x:auto;padding-bottom:2px;margin-bottom:10px}.fchip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 13px;font-size:.82rem;font-weight:700;color:var(--soft);white-space:nowrap;cursor:pointer;flex-shrink:0}.fchip.on{background:var(--accent);color:#fff;border-color:var(--accent)}.wlist{display:flex;flex-direction:column;gap:9px}.witem{background:#fff;border:1px solid var(--line);border-radius:15px;padding:12px 14px;cursor:pointer}.witem .l1{display:flex;align-items:baseline;gap:8px}.witem .w{font-weight:800;font-size:1.02rem}.witem .p{margin-left:auto;font-size:.72rem;font-weight:800;color:var(--soft);white-space:nowrap}.witem .m{color:var(--soft);font-size:.88rem;margin-top:1px}.witem.open{border-color:var(--accent)}.detail{margin-top:12px;padding-top:12px}.detail,.nav{border-top:1px solid var(--line)}.nav{position:fixed;left:0;right:0;bottom:0;background:rgba(255,255,255,.94);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);display:flex;padding:6px 8px calc(6px + env(safe-area-inset-bottom));z-index:20}.nav .in{display:flex;width:100%;max-width:640px;margin:0 auto}.navbtn{flex:1 1;border:none;background:none;display:flex;flex-direction:column;align-items:center;gap:2px;padding:7px 0;cursor:pointer;color:var(--soft);font-size:.7rem;font-weight:700;position:relative}.navbtn .ic{font-size:1.25rem;line-height:1}.navbtn.on{color:var(--accent)}.navbtn .n{position:absolute;top:2px;right:calc(50% - 22px);background:var(--no);color:#fff;font-size:.62rem;border-radius:999px;padding:0 5px;font-weight:800;min-width:16px}.gate{min-height:70dvh;display:flex;flex-direction:column;justify-content:center;gap:12px}.iconbtn.act{background:var(--accent);border-color:var(--accent)}.speak{margin-top:2px}.target{background:var(--bg);border-radius:14px;padding:14px;text-align:center}.target .tw{font-size:1.35rem;font-weight:800;letter-spacing:-.01em;line-height:1.3;word-break:break-word}.target .tp{color:var(--soft);font-size:.88rem;margin-top:3px}.listen{display:flex;gap:8px;justify-content:center;margin-top:11px}.listen .btn{width:auto}.miczone{display:flex;flex-direction:column;align-items:center;gap:9px;margin-top:16px}.mic{position:relative;width:84px;height:84px;border-radius:50%;border:none;background:var(--accent);color:#fff;font-size:2rem;cursor:pointer;display:grid;place-items:center;box-shadow:0 8px 24px rgba(76,59,207,.3)}.mic.on{background:var(--no);box-shadow:0 8px 24px rgba(224,66,110,.35)}.mic:disabled{opacity:.6}.mic .ring{position:absolute;inset:-10px;border-radius:50%;border:3px solid var(--no);pointer-events:none;transition:transform .1s linear,opacity .1s linear}.micstate{font-size:.86rem;color:var(--soft);font-weight:600;text-align:center}.result{margin-top:16px}.scoreline{display:flex;align-items:center;gap:14px}.ring2{width:74px;height:74px;border-radius:50%;border:5px solid var(--accent);display:grid;place-items:center;flex-shrink:0;line-height:1.05}.ring2 b{font-size:1.6rem;font-weight:800}.ring2 span{font-size:.62rem;color:var(--soft);font-weight:700}.sw{font-weight:800;font-size:1.02rem}.heard{font-size:.86rem;color:var(--soft);margin-top:4px;word-break:break-word}.verdictline{margin-top:11px;font-weight:600;font-size:.95rem}.meters{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px 14px;gap:10px 14px;margin-top:14px}.mlabel{font-size:.75rem;color:var(--soft);font-weight:700;display:flex;justify-content:space-between}.mlabel b{color:var(--ink)}.issue{background:var(--no-soft);border-radius:13px;padding:12px;margin-bottom:9px}.isound{font-weight:800;font-size:.92rem;color:#a3234b}.iwhat{font-size:.88rem;margin-top:3px}.ifix{font-size:.9rem;font-weight:600;margin-top:6px}.drill{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}.drill .syn{cursor:pointer;background:#fff}.good{list-style:none;font-size:.9rem;color:#0a6b52;display:flex;flex-direction:column;gap:3px}.wchips{display:flex;flex-wrap:wrap;gap:6px;max-height:132px;overflow-y:auto}.wchip{border:1px solid var(--line);background:#fff;border-radius:999px;padding:7px 12px;font-size:.85rem;font-weight:700;cursor:pointer;color:var(--ink)}.wchip.on{background:var(--accent);color:#fff;border-color:var(--accent)}.wchip b{font-size:.72rem;opacity:.75;margin-left:3px}.hist{flex-direction:column;gap:6px}.hist,.hrow{display:flex}.hrow{align-items:center;gap:10px;font-size:.88rem}.hrow .ht{flex:1 1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hrow .hs{font-weight:800}@keyframes pop{0%{transform:scale(.94);opacity:0}to{transform:scale(1);opacity:1}}.pop{animation:pop .22s cubic-bezier(.3,1.5,.5,1)}@keyframes shake{0%,to{transform:translateX(0)}25%{transform:translateX(-6px)}75%{transform:translateX(6px)}}.shake{animation:shake .3s}.spin{display:inline-block;animation:sp 1s linear infinite}@keyframes sp{to{transform:rotate(1turn)}}