:root{--bg:#f6f4ef;--card:#fff;--ink:#1d232a;--muted:#5b6672;--line:#d9d4ca;--accent:#1f5f8b;--accent-ink:#fff;--accent-soft:#e3eef6;--good:#1f7a45;--good-soft:#e3f3e8;--bad:#b3361f;--bad-soft:#fbe7e2;--warn-soft:#fff4d6;--radius:14px;--hz-font:"PingFang SC", "Hiragino Sans GB", "Noto Sans SC", "Microsoft YaHei", sans-serif;--py-font:"Helvetica Neue", Arial, "Noto Sans", sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--ink);font-family:var(--hz-font);-webkit-tap-highlight-color:transparent;margin:0;font-size:19px;line-height:1.55}button,input,select{font:inherit;color:inherit}a{color:var(--accent)}.screen{max-width:560px;padding:max(12px, env(safe-area-inset-top)) 16px calc(96px + env(safe-area-inset-bottom));margin:0 auto}.loading{text-align:center;color:var(--muted);padding-top:40vh}.muted{color:var(--muted)}.small{font-size:16px}.center{text-align:center}.label{margin:14px 0 6px;font-weight:600}h1{margin:8px 0 0;font-size:30px}h2{margin:8px 0;font-size:24px}h3{margin:12px 0 6px;font-size:20px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);margin:14px 0;padding:14px 16px}.btn{border:2px solid var(--line);background:var(--card);cursor:pointer;touch-action:manipulation;border-radius:12px;min-height:52px;padding:10px 18px;font-weight:600}.btn:disabled{opacity:.45;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-good{background:var(--good-soft);border-color:var(--good);color:var(--good)}.btn-bad{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}.btn-ghost{color:var(--accent);text-underline-offset:3px;background:0 0;border-color:#0000;min-height:44px;padding:8px 10px;text-decoration:underline}.btn-big{width:100%;min-height:60px;margin-top:16px;font-size:21px}.btn-small{min-height:44px;padding:6px 12px}.btn-row{flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0;display:flex}.btn-row.center{justify-content:center}.play-wrap{flex-direction:column;gap:4px;display:inline-flex}.play-err{color:var(--bad);max-width:260px;font-size:14px}.btn-hero{text-align:left;flex-direction:column;align-items:flex-start;gap:4px;width:100%;min-height:104px;margin:18px 0 6px;padding:18px 20px;display:flex;box-shadow:0 4px 14px #1f5f8b40}.hero-main{font-size:26px}.hero-sub{opacity:.92;font-size:16px;font-weight:400}.home-head{padding-top:8px}.home-grid{grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px;display:grid}.home-grid .btn{padding:10px 6px}.intro ul{margin:6px 0 0;padding-left:20px}.foot{margin-top:24px}.notice{border-radius:12px;margin:12px 0;padding:12px 14px;font-size:18px}.notice-info{background:var(--accent-soft)}.notice-good{background:var(--good-soft);color:#10462a;border:1px solid #b6dcc3}.notice-bad{background:var(--bad-soft);color:#6d1f10;border:1px solid #efc2b7}.notice-warn{background:var(--warn-soft)}.lesson-head{align-items:center;gap:12px;margin-bottom:10px;display:flex}.lesson-title{flex-direction:column;line-height:1.3;display:flex}.back{color:var(--accent);cursor:pointer;white-space:nowrap;background:0 0;border:none;min-height:44px;padding:0 8px 0 0;font-weight:600}.pbar{background:#e6e1d7;border-radius:99px;height:8px;overflow:hidden}.pbar-fill{background:var(--accent);height:100%;transition:width .25s}.q{padding-top:6px}.q.text p,.q.text li{font-size:18px}.q-kind{text-align:center;color:var(--muted);font-size:16px}.prompt{text-align:center;margin:12px 0 4px;font-size:19px}.big-py{text-align:center;font-family:var(--py-font);color:var(--accent);letter-spacing:1px;margin:4px 0 8px;font-size:88px;font-weight:700;line-height:1.15}.explain{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px;font-size:18px}.examples{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.chip{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:99px;min-height:44px;padding:8px 14px}.chip-hz{font-size:22px}.chip-py{font-family:var(--py-font)}.options{grid-template-columns:repeat(3,1fr);gap:12px;margin:18px 0;display:grid}.options.row{margin:6px 0}.opt{min-height:72px;font-family:var(--py-font);border:2px solid var(--line);background:var(--card);cursor:pointer;touch-action:manipulation;border-radius:14px;font-size:30px;font-weight:700}.opt-sel{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.opt-good{border-color:var(--good);background:var(--good-soft);color:var(--good)}.opt-bad{border-color:var(--bad);background:var(--bad-soft);color:var(--bad)}.rate{text-align:center;margin-top:14px}.rate .btn{min-width:88px}.formula{flex-wrap:wrap;justify-content:center;align-items:center;gap:8px;margin:18px 0 8px;display:flex}.formula .part{font-family:var(--py-font);border:2px solid var(--line);background:var(--card);cursor:pointer;border-radius:14px;justify-content:center;align-items:center;min-width:72px;min-height:72px;padding:6px 12px;font-size:40px;font-weight:700;display:inline-flex}.formula .part.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.formula .op{color:var(--muted);font-size:30px}.formula.small .part{cursor:default;min-width:56px;min-height:56px;font-size:28px}.demo-caption{min-height:84px;font-size:18px}.demo-hanzi{justify-content:center;align-items:baseline;gap:16px;display:flex}.hz-big{font-size:72px;font-weight:600;line-height:1.2}.hz-long{font-size:52px}.py-big{font-family:var(--py-font);color:var(--accent);font-size:28px}.hz-prompt{flex-wrap:wrap;justify-content:center;align-items:center;gap:10px;margin-top:6px;display:flex}.hint-py{text-align:center;font-family:var(--py-font);margin:4px 0;font-size:26px}.hint-py .muted{font-size:18px}.hint-split{font-family:var(--py-font);flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.typed{border:2px solid var(--line);background:var(--card);max-width:420px;min-height:64px;font-family:var(--py-font);letter-spacing:3px;border-radius:12px;justify-content:center;align-items:center;margin:12px auto;padding:4px 12px;font-size:34px;display:flex}.typed.ok{border-color:var(--good)}.typed.wrong{border-color:var(--bad)}.typed .placeholder{font-family:var(--hz-font);letter-spacing:0;color:var(--muted);font-size:16px}.caret{background:var(--accent);width:2px;height:34px;margin-left:3px;animation:1.1s step-end infinite blink}.typed.ok .caret{display:none}@keyframes blink{50%{opacity:0}}.kbd{-webkit-user-select:none;user-select:none;background:#d9dde3;border-radius:12px;margin:10px -12px 0;padding:8px 4px}.kbd-row{justify-content:center;gap:5px;margin:6px 0;display:flex}.kbd-key{min-width:0;height:52px;font-family:var(--py-font);cursor:pointer;touch-action:manipulation;background:#fff;border:none;border-radius:8px;flex:0 9.2%;font-size:24px;position:relative;box-shadow:0 1px #8a9099}.kbd-key:active{background:#c9d6e3}.kbd-key small{color:var(--muted);font-size:12px;position:absolute;top:1px;right:4px}.kbd-wide{background:#b9c0c9;flex-basis:14%;font-size:22px}.kbd-enter{font-family:var(--hz-font);background:var(--accent);color:#fff;flex:0 60%;font-size:20px}.ime-input{border:2px solid var(--accent);background:var(--card);text-align:center;border-radius:12px;width:100%;min-height:64px;margin:14px 0 4px;padding:8px 14px;font-size:32px}.status-row{flex-wrap:nowrap;justify-content:center;align-items:center;gap:6px;min-height:48px;display:flex}.player-ctl{gap:0;display:inline-flex}.player-ctl .btn-ghost{min-height:44px;padding:6px 8px}.units{margin:0;padding:0;list-style:none}.unit button{text-align:left;border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:12px;align-items:center;gap:12px;width:100%;min-height:64px;margin:8px 0;padding:12px;display:flex}.unit.locked button{opacity:.55;cursor:default}.unit-no{background:var(--accent-soft);width:32px;height:32px;color:var(--accent);border-radius:50%;flex:none;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.unit-body{flex-direction:column;flex:1;line-height:1.35;display:flex}.unit-st{color:var(--muted);white-space:nowrap;flex-direction:column;align-items:flex-end;font-size:15px;display:flex}.st-passed .unit-no,.st-consolidated .unit-no{background:var(--good-soft);color:var(--good)}.st-practice .unit-st,.st-remedial .unit-st{color:var(--bad)}.kp-grid{flex-wrap:wrap;gap:6px;display:flex}.kp{font-family:var(--py-font);border:1px solid var(--line);cursor:pointer;background:#eee;border-radius:10px;min-width:52px;min-height:44px;font-size:18px}.m-good{background:#cdebd8;border-color:#8cc9a3}.m-mid{background:#fbe9b7;border-color:#e3c56d}.m-low{background:#f6cfc5;border-color:#e09a89}.days{border-collapse:collapse;width:100%;font-size:16px}.days td{border-bottom:1px solid var(--line);padding:4px 2px}.mistakes{padding-left:20px;font-size:16px}.seg{border:2px solid var(--accent);border-radius:12px;display:inline-flex;overflow:hidden}.seg button{background:var(--card);cursor:pointer;border:none;min-height:48px;padding:8px 18px;font-weight:600}.seg button.on{background:var(--accent);color:#fff}.field{flex-direction:column;gap:6px;margin:12px 0;font-size:17px;display:flex}.field select{border:1px solid var(--line);background:var(--card);border-radius:10px;min-height:48px;padding:6px 10px}.check{align-items:flex-start;gap:10px;font-size:17px;display:flex}.check input{flex:none;width:24px;height:24px;margin-top:3px}.audit-list{flex-wrap:wrap;gap:8px;margin:10px 0;display:flex}@media (width<=360px){body{font-size:17px}.big-py{font-size:72px}.kbd-key{height:46px;font-size:21px}}.position{color:var(--muted);margin:10px 0 0;font-size:16px}.position .pbar{margin-top:6px}details.family{margin:18px 0}details.family>summary{cursor:pointer;min-height:48px;color:var(--muted);border-top:1px solid var(--line);align-items:center;padding-top:10px;font-weight:600;display:flex}
