:root{--bg:#faf8f4;--surface:#fff;--text:#1f1d1a;--muted:#6b665e;--line:#e6e1d8;--accent:#c8352b;--accent-soft:#fbe9e7;--ok:#2e7d4f;--ok-soft:#e3f3ea;--bad:#b3261e;--bad-soft:#fbe4e2;--radius:14px;--hanzi:"Noto Sans SC", "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", sans-serif}@media (prefers-color-scheme:dark){:root{--bg:#17161a;--surface:#212026;--text:#efece6;--muted:#a09b92;--line:#34323a;--accent:#ef6a5f;--accent-soft:#3a2422;--ok:#5cc388;--ok-soft:#1d3327;--bad:#f0736b;--bad-soft:#3b2220}}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0;font:16px/1.5 system-ui,-apple-system,Segoe UI,sans-serif}#app{max-width:760px;margin:0 auto;padding:0 16px 80px}header.top{justify-content:space-between;align-items:center;padding:18px 0 8px;display:flex}header.top h1{margin:0;font-size:1.15rem}header.top h1 span{color:var(--accent);font-family:var(--hanzi)}.streak{color:var(--muted);font-size:.9rem}nav{border-bottom:1px solid var(--line);gap:6px;margin-bottom:18px;padding:6px 0 14px;display:flex;overflow-x:auto}nav a{white-space:nowrap;color:var(--muted);border-radius:999px;padding:7px 13px;font-size:.92rem;text-decoration:none}nav a.on{background:var(--accent);color:#fff}h2{margin:6px 0 4px;font-size:1.3rem}p.lead{color:var(--muted);margin:0 0 16px}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-bottom:12px;padding:16px}.hanzi{font-family:var(--hanzi)}button,.btn{font:inherit;cursor:pointer;border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:10px;padding:9px 16px}button:hover{border-color:var(--accent)}button.primary{background:var(--accent);border-color:var(--accent);color:#fff}button.big{padding:13px 22px;font-size:1.05rem}button:disabled{opacity:.5;cursor:default}.row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.spread{justify-content:space-between}.muted{color:var(--muted)}.small{font-size:.88rem}.step{align-items:center;gap:14px;display:flex}.step .num{background:var(--accent-soft);width:34px;height:34px;color:var(--accent);border-radius:50%;flex:none;place-items:center;font-weight:700;display:grid}.step.done .num{background:var(--ok-soft);color:var(--ok)}.step .grow{flex:1;min-width:0}.step h3{margin:0;font-size:1rem}.step p{color:var(--muted);margin:0;font-size:.9rem}.bar{background:var(--line);border-radius:99px;height:8px;margin:8px 0 4px;overflow:hidden}.bar>i{background:var(--accent);height:100%;display:block}.flash{text-align:center;padding:28px 16px}.flash .big-hanzi{font-size:4.6rem;line-height:1.15;font-family:var(--hanzi)}.flash .pinyin{color:var(--accent);margin-top:6px;font-size:1.7rem}.flash .meaning{margin-top:4px;font-size:1.2rem}.rate{grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px;display:grid}.rate button small{color:var(--muted);font-size:.75rem;display:block}.inp{min-width:0;font:inherit;border:1px solid var(--line);background:var(--surface);color:var(--text);border-radius:10px;flex:1;padding:11px 14px}.inp:focus{outline:2px solid var(--accent);border-color:#0000}.phon{color:var(--muted);margin-top:2px;font-size:1.05rem}.phon b{color:var(--text)}.phon sup{font-size:.65em}.mic{margin-bottom:12px}.tone-opts{grid-template-columns:repeat(4,1fr);gap:8px;margin-top:14px;display:grid}.tone-opts button{text-align:center;padding:10px 4px}.tone-opts button.good{background:var(--ok-soft);border-color:var(--ok)}.tone-opts button.bad{background:var(--bad-soft);border-color:var(--bad)}.tone-opts svg,.tone-ref svg{width:100%;max-width:70px;height:44px}.tone-opts svg path,.tone-ref svg path{fill:none;stroke:var(--accent);stroke-width:4px;stroke-linecap:round;stroke-linejoin:round}.tone-ref{text-align:center;grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.sound{align-items:flex-start;gap:12px;display:flex}.sound .s{min-width:90px;color:var(--accent);font-weight:700}.sound .ex{font-family:var(--hanzi);cursor:pointer;font-size:1.6rem;line-height:1}.sound p{margin:0;font-size:.92rem}.grid{grid-template-columns:repeat(auto-fill,minmax(62px,1fr));gap:8px;display:grid}.grid button{font-family:var(--hanzi);padding:8px 0;font-size:1.7rem}.grid button.sel{background:var(--accent);color:#fff;border-color:var(--accent)}#writer{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);width:260px;height:260px;margin:0 auto;display:block}.warn{background:var(--bad-soft);border:1px solid var(--bad);border-radius:10px;margin-bottom:12px;padding:10px 14px;font-size:.9rem}.chip{background:var(--accent-soft);color:var(--accent);border-radius:99px;padding:2px 10px;font-size:.8rem;display:inline-block}
