@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-cyrillic-ext-600-normal-CWPPjBOD.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-600-normal-vnfu4DTE.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-cyrillic-600-normal-DJGQ2h05.woff2)format("woff2"),url(/assets/nunito-cyrillic-600-normal-BUjmtIuu.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-vietnamese-600-normal-BY8O6Cug.woff2)format("woff2"),url(/assets/nunito-vietnamese-600-normal-DO1RqFw5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-latin-ext-600-normal-Dd9Zuxh1.woff2)format("woff2"),url(/assets/nunito-latin-ext-600-normal-BKUpuB78.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:600;src:url(/assets/nunito-latin-600-normal-Br8yIETf.woff2)format("woff2"),url(/assets/nunito-latin-600-normal-Cd0eNu1l.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-cyrillic-ext-700-normal-BuR0mlCG.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-700-normal-DfoqN4Gs.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-cyrillic-700-normal-DP36NgGt.woff2)format("woff2"),url(/assets/nunito-cyrillic-700-normal-DfHRUDv-.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-vietnamese-700-normal-Ch8EUCfz.woff2)format("woff2"),url(/assets/nunito-vietnamese-700-normal-C9SQsXvj.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-latin-ext-700-normal-BWeMsAzO.woff2)format("woff2"),url(/assets/nunito-latin-ext-700-normal-D4woHhbd.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/nunito-latin-700-normal-Dort48En.woff2)format("woff2"),url(/assets/nunito-latin-700-normal-OcDqTBcA.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-cyrillic-ext-800-normal-B-cvGohL.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-800-normal-pjRatrRO.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-cyrillic-800-normal-D3igD7Kl.woff2)format("woff2"),url(/assets/nunito-cyrillic-800-normal-DymMgApb.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-vietnamese-800-normal-D_CZYdm9.woff2)format("woff2"),url(/assets/nunito-vietnamese-800-normal-Dz0hZPb5.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-latin-ext-800-normal-CtU8tJOV.woff2)format("woff2"),url(/assets/nunito-latin-ext-800-normal-CDcxIxx8.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/nunito-latin-800-normal-Dz8SOQK_.woff2)format("woff2"),url(/assets/nunito-latin-800-normal-D-J0wlBY.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-cyrillic-ext-900-normal-BLeVovcl.woff2)format("woff2"),url(/assets/nunito-cyrillic-ext-900-normal-DKFql_-q.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-cyrillic-900-normal-CWPcV0_V.woff2)format("woff2"),url(/assets/nunito-cyrillic-900-normal-Dr1fjxoU.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-vietnamese-900-normal-D6LWQAy_.woff2)format("woff2"),url(/assets/nunito-vietnamese-900-normal-WV2-fBew.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-latin-ext-900-normal-Dllsvgjo.woff2)format("woff2"),url(/assets/nunito-latin-ext-900-normal-CTBZd6bf.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Nunito;font-style:normal;font-display:swap;font-weight:900;src:url(/assets/nunito-latin-900-normal-BVB1fGs6.woff2)format("woff2"),url(/assets/nunito-latin-900-normal-CVn49sIn.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Noto Sans SC;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/noto-sans-sc-chinese-simplified-700-normal-DoUziBww.woff2)format("woff2"),url(/assets/noto-sans-sc-chinese-simplified-700-normal-CDPtaw17.woff)format("woff")}:root{--ink:#1d2742;--ink-2:#4a5470;--muted:#5d6680;--bg:#f4fbf3;--card:#fff;--line:#dfe7dc;--green:#178a3c;--green-hi:#2fb457;--green-lo:#0f6a2c;--leaf:#e3f7e6;--sun:#ffc93c;--sun-lo:#d99a00;--coral:#d93c3c;--coral-lo:#a82525;--coral-bg:#ffe9e7;--sky:#2a7de1;--grape:#7c4dff;--xp:#ffb400;--ring-bg:#e8ece6;--focus:#2a7de1;--radius:20px;--shadow:0 4px 0 #1d274214, 0 10px 30px #1d27420f;--t1:#1d64c4;--t2:#18803c;--t3:#8a3fc7;--t4:#cc2a2a;--t0:#5d6680;--accent:#e36b12;color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-family:Nunito,system-ui,-apple-system,Segoe UI,sans-serif;font-size:17px;line-height:1.45}*{box-sizing:border-box}body{background:radial-gradient(circle at 10% 0%, #fff7d6 0, transparent 35%), radial-gradient(circle at 100% 30%, #e1f3ff 0, transparent 30%), var(--bg);min-height:100vh;margin:0}[lang=zh-CN],.zh{font-family:Noto Sans SC,Nunito,PingFang SC,Microsoft YaHei,sans-serif}h1,h2,h3{letter-spacing:-.01em;margin:0 0 .4em;font-weight:900;line-height:1.15}h1{font-size:clamp(1.6rem,4vw,2.2rem)}h2{font-size:1.2rem}p{margin:0 0 .6em}a{color:var(--sky);font-weight:700}button{font:inherit;color:inherit}kbd{font-family:inherit}.sr-only{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.muted{color:var(--muted)}.small{font-size:.85rem}.lead{color:var(--ink-2);font-size:1.1rem}.eyebrow{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:.2em;font-size:.75rem;font-weight:800}.emoji{font-size:1.2em}.row{flex-wrap:wrap;align-items:center;gap:10px;margin:10px 0;display:flex}:focus-visible{outline:3px solid var(--focus);outline-offset:3px;border-radius:12px}.skip-link{background:var(--ink);color:#fff;z-index:100;border-radius:10px;padding:8px 14px;position:absolute;top:8px;left:-999px}.skip-link:focus{left:8px}.btn{--b:var(--line);--bg-b:#fff;border:2px solid var(--b);background:var(--bg-b);cursor:pointer;text-transform:none;border-bottom-width:5px;border-radius:16px;justify-content:center;align-items:center;gap:8px;min-height:48px;padding:10px 20px;font-weight:900;transition:transform 80ms,filter .15s;display:inline-flex}.btn:hover:not(:disabled){filter:brightness(1.04);transform:translateY(-1px)}.btn:active:not(:disabled){border-bottom-width:3px;transform:translateY(2px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{--bg-b:var(--green);--b:var(--green-lo);color:#fff}.btn.danger{--bg-b:var(--coral);--b:var(--coral-lo);color:#fff}.btn.ghost{--bg-b:transparent;--b:transparent;color:var(--ink-2);border-bottom-width:2px}.btn.ghost:hover{background:#1d27420d}.btn.big{min-height:56px;padding:12px 28px;font-size:1.1rem}.btn.small{min-height:38px;padding:6px 12px;font-size:.85rem}.icon-btn{cursor:pointer;width:44px;height:44px;color:var(--muted);background:0 0;border:0;border-radius:14px;flex:none;font-size:1.4rem;font-weight:900}.icon-btn:hover{background:#1d27420f}.link-btn{color:var(--sky);cursor:pointer;text-underline-offset:3px;background:0 0;border:0;padding:6px 0;font-weight:800;text-decoration:underline}.audio-buttons{vertical-align:middle;gap:8px;display:inline-flex}.audio-btn{background:var(--sky);color:#fff;cursor:pointer;border:0;border-bottom:4px solid #1859a8;border-radius:16px;place-items:center;width:48px;height:48px;font-size:1.5rem;transition:transform 80ms;display:grid}.audio-btn.slow{color:var(--ink);border:2px solid var(--line);background:#fff;border-bottom-width:4px;font-size:1.25rem}.audio-btn:active{transform:translateY(2px)}.audio-btn.playing{animation:.9s infinite pulse}.audio-buttons.big .audio-btn{border-radius:26px;width:84px;height:84px;font-size:2.6rem}.audio-buttons.big .audio-btn.slow{align-self:end;width:64px;height:64px;font-size:1.8rem}@keyframes pulse{50%{transform:scale(1.07);box-shadow:0 0 0 8px #2a7de12e}}.tone-1{color:var(--t1)}.tone-2{color:var(--t2)}.tone-3{color:var(--t3)}.tone-4{color:var(--t4)}.tone-0,.tone-5{color:var(--t0)}.pinyin{font-family:Nunito,sans-serif;font-weight:800}.target{font-weight:800}.t-sm{font-size:1rem}.t-md{font-size:1.2rem}.t-lg{font-size:1.6rem}.t-xl{font-size:clamp(2rem,6vw,2.8rem)}.target.zh{flex-wrap:wrap;align-items:flex-end;gap:0 .12em;display:inline-flex}ruby{ruby-position:over;flex-direction:column-reverse;align-items:center;line-height:1.1;display:inline-flex}rt{text-align:center;font-size:.42em;font-weight:800;line-height:1.3;display:block}.t-xl rt{font-size:.36em}.py-line{font-size:.8em;display:block}.target .py-line{width:100%;font-size:.5em}.skill-badge{color:#3b3f9c;text-transform:uppercase;letter-spacing:.04em;background:#eef2ff;border-radius:999px;padding:4px 10px;font-size:.78rem;font-weight:900;display:inline-block}.skill-badge.skill-tones{color:#6a2db3;background:#f3e9ff}.skill-badge.skill-characters{color:#a12121;background:#ffecec}.skill-badge.skill-meaning{color:#1a5aa8;background:#e7f3ff}.skill-badge.skill-speaking,.skill-badge.skill-pronunciation{color:#8a5a00;background:#fff3d6}.skill-badge.skill-grammar,.skill-badge.skill-spelling{color:#136b30;background:#e3f7e6}.skill-badge.skill-conversation{color:#a2480b;background:#ffeede}.skill-badge.retry{background:var(--coral-bg);color:var(--coral-lo)}.badges{gap:8px;min-height:26px;margin-bottom:8px;display:flex}.ring{flex:none;place-items:center;display:inline-grid;position:relative}.ring svg{position:absolute;inset:0}.ring circle{transition:stroke-dashoffset .6s}.ring-inner{font-size:.85rem;font-weight:900;position:relative}.ring-num{font-size:1rem}.meter{gap:3px;display:inline-flex}.meter span{background:var(--ring-bg);border-radius:4px;width:8px;height:18px}.meter span.on{background:var(--green-hi)}.shell{grid-template-rows:auto 1fr;grid-template-columns:230px 1fr;min-height:100vh;display:grid}.topbar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:2px solid var(--line);z-index:20;background:#ffffffd9;grid-column:1/-1;align-items:center;gap:16px;padding:10px 22px;display:flex;position:sticky;top:0}.brand{text-decoration:none;display:flex}.top-stats{gap:8px;margin-left:auto;display:flex}.chip{border:2px solid var(--line);color:var(--ink);background:#fff;border-radius:999px;align-items:center;gap:6px;min-height:40px;padding:6px 12px;font-weight:900;text-decoration:none;display:inline-flex}.chip.streak.lit{color:#a14a00;background:#fff1e0;border-color:#ffc89a}.switcher{position:relative}.switch-btn{border:2px solid var(--line);cursor:pointer;background:#fff;border-radius:14px;align-items:center;gap:8px;min-height:44px;padding:6px 14px;font-weight:900;display:inline-flex}.switch-btn .flag{font-size:1.4rem}.switch-menu{border:2px solid var(--line);box-shadow:var(--shadow);z-index:30;background:#fff;border-radius:18px;min-width:250px;padding:6px;position:absolute;top:calc(100% + 6px);left:0}.switch-item{text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;width:100%;padding:10px 12px;display:flex}.switch-item span span{display:block}.switch-item .flag{font-size:1.8rem}.switch-item:hover,.switch-item.on{background:var(--leaf)}.sidenav{flex-direction:column;align-self:start;gap:6px;padding:18px 12px;display:flex;position:sticky;top:66px}.nav-item{color:var(--ink-2);border:2px solid #0000;border-radius:16px;align-items:center;gap:12px;min-height:52px;padding:12px 16px;font-weight:900;text-decoration:none;display:flex;position:relative}.nav-item:hover{background:#1d27420a}.nav-item.on{color:#165aa8;background:#e5f6ff;border-color:#9fd3ff}.nav-icon{font-size:1.5rem}.nav-badge{background:var(--coral);color:#fff;border-radius:999px;margin-left:auto;padding:1px 8px;font-size:.75rem}.content{outline:none;width:100%;max-width:1100px;padding:24px clamp(14px,3vw,36px) 40px}.foot{text-align:center;margin-top:40px}.foot a{color:var(--muted)}.panel{background:var(--card);border:2px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:16px;padding:18px 20px}.learn{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:28px;display:grid}.side-panels{position:sticky;top:86px}.goal-panel{align-items:center;gap:16px;display:flex}.goal-panel h2{margin-bottom:2px}.side-panels .btn{width:100%;margin-top:6px}.hero-card{background:linear-gradient(135deg, var(--unit), color-mix(in srgb, var(--unit) 70%, #000));color:#fff;box-shadow:0 6px 0 color-mix(in srgb, var(--unit) 60%, #000);border-radius:28px;justify-content:space-between;align-items:center;gap:16px;margin-bottom:26px;padding:24px 26px;display:flex}.hero-card .eyebrow,.hero-card .lead{color:#ffffffeb}.hero-card .btn.primary{--bg-b:#fff;--b:#0003;color:var(--ink)}.hero-pip{flex:none}.unit{margin-bottom:30px}.unit-head{background:var(--unit);color:#fff;box-shadow:0 5px 0 color-mix(in srgb, var(--unit) 65%, #000);border-radius:22px;align-items:center;gap:14px;padding:16px 20px;display:flex}.unit-head p{color:#ffffffeb;margin:0}.unit-head .eyebrow{color:#ffffffd9}.unit-head h2{margin:0;font-size:1.35rem}.unit-emoji{font-size:2.4rem}.unit-done{margin-left:auto;font-size:2rem}.nodes{flex-direction:column;gap:16px;margin:0;padding:18px 0 0;list-style:none;display:flex}.node-row{margin-left:calc((var(--off) + 2) * 34px);align-items:center;gap:16px;padding-left:22px;display:flex}.node{border:0;border-bottom:7px solid color-mix(in srgb, var(--unit) 60%, #000);background:var(--unit);color:#fff;cursor:pointer;border-radius:50%;flex:none;place-items:center;width:76px;height:70px;font-size:1.9rem;transition:transform .1s;display:grid;position:relative}.node:hover:not(:disabled){transform:scale(1.06)}.node:active:not(:disabled){border-bottom-width:4px;transform:translateY(3px)}.node.done{background:var(--sun);border-bottom-color:var(--sun-lo)}.node.current{box-shadow:0 0 0 6px #fff, 0 0 0 10px color-mix(in srgb, var(--unit) 45%, #fff);animation:1.8s ease-in-out infinite bob}.node.locked{cursor:not-allowed;background:#e1e6df;border-bottom-color:#c3cac0}.node.review:not(.locked){border-radius:24px}@keyframes bob{50%{transform:translateY(-4px)}}.node-label{flex-direction:column;min-width:0;max-width:320px;display:flex}.start-flag{background:var(--ink);color:#fff;letter-spacing:.1em;border-radius:8px;align-self:flex-start;margin-top:4px;padding:2px 10px;font-size:.72rem;font-weight:900}.player{background:#fff;flex-direction:column;min-height:100vh;display:flex}.player-top{align-items:center;gap:14px;width:100%;max-width:1000px;margin:0 auto;padding:14px clamp(12px,3vw,28px);display:flex}.player-title{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;max-width:40%;font-weight:900;overflow:hidden}.bar{background:var(--ring-bg);border-radius:999px;flex:1;height:18px;overflow:hidden}.bar span{background:linear-gradient(var(--green-hi), var(--green));border-radius:999px;height:100%;transition:width .4s;display:block;box-shadow:inset 0 -4px #0000001a,inset 0 4px #ffffff59}.stage{flex:1;width:100%;max-width:720px;margin:0 auto;padding:10px 18px 150px;animation:.25s slidein}@keyframes slidein{0%{opacity:0;transform:translate(16px)}}.ex-title{margin-bottom:16px;font-size:clamp(1.4rem,3.5vw,1.8rem)}.prompt-card{border:2px solid var(--line);background:#f7faf6;border-radius:20px;flex-wrap:wrap;align-items:center;gap:14px;margin-bottom:18px;padding:16px 18px;font-size:1.3rem;font-weight:800;display:flex}.prompt-card.col{text-align:center;flex-direction:column}.listen-stage{justify-content:center;padding:20px 0 26px;display:flex}.char-prompt{text-align:center;margin:6px 0;font-family:Noto Sans SC,sans-serif;font-size:clamp(3rem,12vw,4.5rem);font-weight:700}.char-prompt.sm{margin:0;font-size:2.2rem}.hint-line{color:var(--muted);font-weight:700}.reveal{text-align:center;font-size:1.2rem}.choices{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;display:grid}.choice{text-align:left;border:2px solid var(--line);cursor:pointer;background:#fff;border-bottom-width:5px;border-radius:18px;align-items:center;gap:12px;min-height:64px;padding:12px 16px;font-size:1.12rem;font-weight:800;transition:transform 80ms;display:flex}.choice:hover:not(:disabled){background:#f6fbff}.choice:active:not(:disabled){transform:translateY(2px)}.choice kbd{border:2px solid var(--line);width:28px;height:28px;color:var(--muted);border-radius:8px;flex:none;place-items:center;font-size:.85rem;display:grid}.choice-body{flex-direction:column;display:flex}.choice.selected{color:#0f4c94;background:#e8f4ff;border-color:#79bfff}.choice.right{color:#0f6a2c;background:#e3f7e6;border-color:#6fd18c}.choice.wrong{background:var(--coral-bg);color:var(--coral-lo);border-color:#ff9a9a}.choice.dim{opacity:.55}.choice:disabled{cursor:default}.choices.tones{grid-template-columns:repeat(4,1fr)}.tone-choice{text-align:center;flex-direction:column;justify-content:center;gap:6px;padding:14px 8px}.tone-line{fill:none;stroke:currentColor;stroke-width:5px;stroke-linecap:round}.tone-syl{font-size:1.4rem;font-weight:900}.tile{border:2px solid var(--line);cursor:pointer;background:#fff;border-bottom-width:4px;border-radius:14px;justify-content:center;align-items:center;min-width:52px;min-height:52px;padding:8px 16px;font-size:1.15rem;font-weight:800;display:inline-flex}.tile:active:not(:disabled){transform:translateY(2px)}.tile.ghost{background:var(--ring-bg);color:#0000;border-color:var(--ring-bg);cursor:default}.answer-line{border-bottom:2px dashed var(--line);border-top:2px dashed var(--line);flex-wrap:wrap;align-items:center;gap:8px;min-height:76px;margin-bottom:18px;padding:10px 0;display:flex}.placeholder{color:var(--muted);font-weight:700}.bank{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.match-grid{grid-template-columns:1fr 1fr;gap:14px;display:grid}.match-col{flex-direction:column;gap:10px;display:flex}.match-tile{width:100%;min-height:64px}.match-tile.selected{background:#e8f4ff;border-color:#79bfff}.match-tile.matched{color:#8fb59a;background:#f0faf2;border-color:#b9e8c5}.match-tile.wrong{background:var(--coral-bg);border-color:#ff9a9a;animation:.3s shake}@keyframes shake{25%{transform:translate(-5px)}75%{transform:translate(5px)}}.fill-sentence{gap:8px;font-size:1.6rem}.blank{border-bottom:4px solid var(--sky);text-align:center;min-width:80px;color:var(--sky);padding:0 6px;display:inline-block}.blank.filled{color:var(--ink)}.typed{width:100%;font:inherit;border:2px solid var(--line);background:#f7faf6;border-radius:18px;min-height:60px;padding:16px 18px;font-size:1.25rem;font-weight:700}.typed:focus{border-color:var(--sky);background:#fff;outline:none;box-shadow:0 0 0 4px #2a7de133}.accent-keys{flex-wrap:wrap;gap:8px;margin-top:12px;display:flex}.key{border:2px solid var(--line);cursor:pointer;background:#fff;border-bottom-width:4px;border-radius:12px;min-width:46px;min-height:46px;font-size:1.15rem;font-weight:900}.teach-card{text-align:center;background:linear-gradient(#fffdf2,#fff);border:3px solid #ffe08a;border-radius:28px;margin-bottom:16px;padding:22px 18px}.teach-emoji{margin-bottom:4px;font-size:4rem;display:block}.teach-main{flex-direction:column;align-items:center;gap:14px;display:flex}.teach-en{color:var(--ink-2);margin-top:12px;font-size:1.3rem;font-weight:800}.gender-chip,.tone-chip{border-radius:999px;padding:4px 12px;font-size:.9rem;font-weight:800;display:inline-block}.g-m{color:#1d4fa0;background:#e7f0ff}.g-f{color:#a51f5a;background:#ffe8f1}.tone-chip{color:#6a2db3;background:#f3e9ff}.tip{background:#eef8ff;border:2px solid #bfe0ff;border-radius:18px;align-items:center;gap:12px;margin:12px 0;padding:12px 16px;display:flex}.tip p{margin:0;font-weight:700}.tip.oops{background:var(--coral-bg);border-color:#ffc2bd}.tip.yay{background:#e3f7e6;border-color:#a8e3b8}.info-banner{background:#fff6dc;border:2px solid #ffe08a;border-radius:14px;padding:10px 14px;font-weight:700}.info-banner.warn{background:var(--coral-bg);border-color:#ffc2bd}.mic-zone{flex-direction:column;align-items:center;gap:10px;margin:16px 0;display:flex}.mic-btn{border:0;border-bottom:7px solid var(--coral-lo);background:var(--coral);cursor:pointer;border-radius:50%;width:110px;height:110px;font-size:3rem}.mic-btn.live{animation:1s infinite pulse-red}@keyframes pulse-red{50%{box-shadow:0 0 0 16px #d93c3c33}}.mic-label{font-weight:900}.speak-actions{flex-wrap:wrap;justify-content:center;gap:8px;margin-top:12px;display:flex}.compare{text-align:center}.compare-row{justify-content:center;gap:12px;display:flex}.chat{flex-direction:column;gap:12px;margin-bottom:16px;display:flex}.bubble-row{align-items:flex-end;gap:10px;display:flex}.bubble-row.me{flex-direction:row-reverse}.avatar{flex:none;font-size:2rem}.bubble{background:#f2f5f9;border-radius:20px 20px 20px 6px;flex-direction:column;align-items:flex-start;gap:4px;max-width:80%;padding:10px 14px;display:flex}.me .bubble{background:#e3f7e6;border-radius:20px 20px 6px;align-items:flex-end}.bubble-t{font-size:1.2rem;font-weight:800}.bubble-en{color:var(--ink-2);font-size:.92rem}.bubble .audio-btn{border-radius:12px;width:38px;height:38px;font-size:1.1rem}.who{color:var(--muted);text-transform:uppercase;font-size:.75rem;font-weight:900}.choice.reply{min-height:58px}.scenario-done{text-align:center}.action-bar{border-top:2px solid var(--line);padding:16px clamp(14px, 3vw, 28px) calc(16px + env(safe-area-inset-bottom));z-index:10;background:#fff;position:fixed;bottom:0;left:0;right:0}.action-bar.right{background:#d9f5df;border-color:#a8e3b8}.action-bar.wrong{background:#ffe3e0;border-color:#ffc2bd}.action-inner{justify-content:space-between;align-items:center;gap:16px;max-width:960px;margin:0 auto;display:flex}.action-inner .btn.big{min-width:170px}.feedback{align-items:flex-start;gap:12px;display:flex}.feedback p{margin:0 0 4px}.fb-head{font-size:1.35rem;font-weight:900}.right .fb-head{color:var(--green-lo)}.wrong .fb-head,.wrong .fb-answer{color:var(--coral-lo)}.fb-explain,.fb-note{color:var(--ink-2);max-width:600px;font-weight:700}.kbd-hint{color:var(--muted);margin:0;font-size:.85rem;font-weight:700}.summary{background:linear-gradient(#f4fbf3,#fff);justify-content:center;align-items:center;padding:20px}.summary-card{text-align:center;width:100%;max-width:560px}.can-do{background:#fff6dc;border-radius:16px;padding:12px 16px;font-size:1.15rem}.summary-stats{grid-template-columns:repeat(3,1fr);gap:12px;margin:16px 0;display:grid}.stat{border:2px solid var(--line);background:#fff;border-radius:18px;flex-direction:column;align-items:center;gap:4px;padding:12px 8px;font-weight:800;display:flex}.stat .big{font-size:1.7rem;font-weight:900}.stat.xp{color:#8a5a00;border-color:#ffd36b}.stat.acc{color:var(--green-lo);border-color:#a8e3b8}.banner{border-radius:16px;margin:8px 0;padding:10px 14px;font-weight:800}.banner.gold{background:#fff1c2}.banner.fire{background:#ffe8d6}.banner.soft{background:#eef2ff}.banner.award{background:#f3e9ff}.summary-actions{flex-wrap:wrap;justify-content:center;gap:12px;margin-top:18px;display:flex}.bounce{animation:1.2s ease-in-out infinite hop}@keyframes hop{0%,to{transform:translateY(0)}40%{transform:translateY(-14px)}}.modal-backdrop{z-index:50;background:#1d274273;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal{text-align:center;background:#fff;border-radius:26px;width:100%;max-width:380px;padding:26px}.modal-actions{flex-direction:column;gap:8px;margin-top:14px;display:flex}.onboarding{place-items:center;min-height:100vh;padding:20px;display:grid}.onb-card{width:100%;max-width:640px;box-shadow:var(--shadow);border:2px solid var(--line);background:#fff;border-radius:32px;padding:clamp(20px,5vw,40px)}.onb-dots{justify-content:center;gap:6px;margin-bottom:18px;display:flex}.onb-dots span{background:var(--ring-bg);border-radius:6px;width:34px;height:8px}.onb-dots span.on{background:var(--green-hi)}.onb-step.center{text-align:center;flex-direction:column;align-items:center;gap:10px;display:flex}.onb-nav{justify-content:space-between;gap:10px;width:100%;margin-top:22px;display:flex}.lang-picks{grid-template-columns:1fr 1fr;gap:14px;display:grid}.lang-pick{text-align:center;border:3px solid var(--line);cursor:pointer;background:#fff;border-bottom-width:6px;border-radius:24px;flex-direction:column;align-items:center;gap:2px;padding:20px 12px;display:flex;position:relative}.lang-pick .flag{font-size:3.4rem}.lp-name{font-size:1.3rem;font-weight:900}.lp-native{color:var(--ink-2);font-size:1.1rem;font-weight:800}.lp-variety{color:var(--muted);font-size:.8rem;font-weight:700}.lang-pick.on{border-color:var(--green-hi);background:var(--leaf)}.lang-pick .check{background:var(--green);color:#fff;border-radius:50%;place-items:center;width:30px;height:30px;font-weight:900;display:grid;position:absolute;top:10px;right:12px}.lang-pick:not(.on) .check{border:2px solid var(--line);background:0 0}.goal-picks{grid-template-columns:repeat(2,1fr);gap:12px;display:grid}.goal-picks.compact{grid-template-columns:repeat(4,1fr)}.goal-pick{border:3px solid var(--line);cursor:pointer;background:#fff;border-bottom-width:5px;border-radius:20px;flex-direction:column;align-items:center;gap:2px;padding:14px 8px;display:flex}.goal-pick .emoji{font-size:2rem}.gp-label{font-weight:900}.gp-time,.gp-xp{color:var(--muted);font-size:.85rem;font-weight:700}.goal-pick.on{border-color:var(--green-hi);background:var(--leaf)}.practice-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:14px;margin:18px 0 26px;display:grid}.practice-card{text-align:left;border:2px solid var(--line);cursor:pointer;background:#fff;border-bottom-width:6px;border-radius:22px;flex-direction:column;align-items:flex-start;gap:4px;min-height:130px;padding:18px;display:flex}.practice-card:hover:not(:disabled){transform:translateY(-2px)}.practice-card:disabled{opacity:.55;cursor:not-allowed}.pc-emoji{font-size:2.2rem}.pc-review{border-color:#ffc2bd}.pc-words{border-color:#bfe0ff}.pc-listen{border-color:#a8e3b8}.pc-tones{border-color:#d9c2ff}.pc-cards{border-color:#ffe08a}.mistake-list ul{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.mistake{border:2px solid var(--line);background:#fff;border-radius:16px;align-items:center;gap:12px;padding:10px 14px;display:flex}.m-body{flex-direction:column;flex:1;display:flex}.m-correct{font-weight:800}.m-due{color:var(--muted);font-size:.8rem;font-weight:900}.m-due.now{color:var(--coral-lo)}.empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:8px;min-height:100vh;padding:20px;display:flex}.cards-screen{background:#fff;min-height:100vh}.flashcard-wrap{flex-direction:column;align-items:center;gap:16px;max-width:520px;margin:10px auto;padding:0 16px;display:flex}.flashcard{cursor:pointer;background:linear-gradient(#fffdf2,#fff);border:3px solid #ffe08a;border-bottom-width:8px;border-radius:30px;place-items:center;width:100%;min-height:280px;padding:20px;transition:transform .25s;display:grid}.flashcard.flipped{background:linear-gradient(#eef8ff,#fff);border-color:#bfe0ff}.fc-face{flex-direction:column;align-items:center;gap:10px;display:flex}.fc-emoji{font-size:3.5rem}.fc-en{font-size:2rem;font-weight:900}.fc-tools{align-items:center;gap:20px;display:flex}.fc-rate{flex-wrap:wrap;justify-content:center;gap:12px;display:flex}.stat-row{grid-template-columns:repeat(3,1fr);gap:14px;display:grid}.stat-tile{text-align:center;color:var(--ink-2);flex-direction:column;align-items:center;font-weight:800;display:flex}.stat-tile .big{color:var(--ink);font-size:1.8rem;font-weight:900}.week{align-items:stretch;gap:10px;height:130px;display:flex}.week-col{flex-direction:column;flex:1;align-items:center;gap:4px;display:flex}.week-bar{background:var(--ring-bg);border-radius:10px;flex:1;align-items:flex-end;width:100%;max-width:44px;display:flex;overflow:hidden}.week-bar span{background:var(--sky);border-radius:10px;width:100%}.week-bar span.met{background:var(--xp)}.course-cards{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;display:grid}.course-card{text-align:left;cursor:pointer;align-items:center;gap:14px;display:flex}.course-card span span{display:block}.course-card.on{border-color:var(--green-hi);background:#f4fcf5}.course-card .flag{font-size:1.6rem}.can-do-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.can-do-list li{background:#fff8e1;border-radius:12px;padding:8px 12px;font-weight:800}.can-do-list li:before{content:"✓ ";color:var(--green)}.word-list{gap:6px;margin:10px 0 0;padding:0;list-style:none;display:grid}.word-list li{border-radius:14px;grid-template-columns:auto minmax(0,1.2fr) minmax(0,1fr) auto;align-items:center;gap:12px;padding:6px 8px;display:grid}.word-list li:nth-child(odd){background:#f7faf6}.word-list li.mastered .wl-en:after{content:" 👑"}.word-list .audio-btn{border-radius:12px;width:40px;height:40px;font-size:1.1rem}.word-list .audio-btn.slow{display:none}.wl-en{color:var(--ink-2);font-weight:700}.badge-grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin:0;padding:0;list-style:none;display:grid}.badge{text-align:center;border:2px solid var(--line);border-radius:18px;flex-direction:column;align-items:center;gap:2px;padding:14px 10px;display:flex}.badge.got{background:#fff6dc;border-color:#ffd36b}.badge.locked{color:var(--muted)}.badge-emoji{font-size:2.2rem}.toggle-row{border-bottom:1px solid var(--line);cursor:pointer;justify-content:space-between;align-items:center;gap:14px;padding:12px 0;display:flex;position:relative}.toggle-row>span:first-child{flex-direction:column;display:flex}.toggle-row input{opacity:0;cursor:pointer;width:56px;height:32px;margin:0;position:absolute;right:0}.switch{background:#c9d0c6;border-radius:999px;flex:none;width:56px;height:32px;transition:background .2s;position:relative}.switch:after{content:"";background:#fff;border-radius:50%;width:24px;height:24px;transition:transform .2s;position:absolute;top:4px;left:4px;box-shadow:0 1px 3px #0003}.toggle-row input:checked+.switch{background:var(--green)}.toggle-row input:checked+.switch:after{transform:translate(24px)}.toggle-row input:focus-visible+.switch{outline:3px solid var(--focus);outline-offset:3px}.course-toggle{flex-wrap:wrap;gap:10px;display:flex}.support-list{padding-left:0;list-style:none}.code-box{border:2px solid var(--line);border-radius:12px;width:100%;padding:10px;font-family:monospace;font-size:.8rem}.danger-zone{border-color:#ffc2bd}@media (width<=900px){.learn{grid-template-columns:1fr}.side-panels{order:-1;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;display:grid;position:static}.side-panels .panel{margin:0}}@media (width<=760px){.shell{grid-template-columns:1fr;padding-bottom:76px}.topbar{gap:8px;padding:8px 12px}.brand .wm-text,.switch-name{display:none}.sidenav{border-top:2px solid var(--line);padding:6px 6px calc(6px + env(safe-area-inset-bottom));z-index:20;background:#fff;flex-direction:row;gap:2px;position:fixed;inset:auto 0 0}.nav-item{flex-direction:column;flex:1;justify-content:center;gap:0;min-height:58px;padding:6px 4px;font-size:.78rem}.nav-badge{position:absolute;top:2px;right:16%}.content{padding:16px 14px 30px}.side-panels{grid-template-columns:1fr}.side-panels .panel:not(.goal-panel){display:none}.node-row{margin-left:calc((var(--off) + 2) * 16px);padding-left:8px}.hero-pip{display:none}.action-inner{flex-direction:column;align-items:stretch}.action-inner .btn.big{width:100%}.kbd-hint{display:none}.stage{padding-bottom:200px}.choices.tones,.goal-picks.compact{grid-template-columns:repeat(2,1fr)}.stat-row{grid-template-columns:repeat(3,1fr);gap:8px}.stat-tile .big{font-size:1.3rem}.word-list li{grid-template-columns:auto 1fr auto}.word-list .wl-en{grid-area:2/2;font-size:.9rem}.choice kbd,.player-title{display:none}.lang-picks{grid-template-columns:1fr}.lang-pick{text-align:left;flex-flow:wrap;gap:12px;padding:14px}.lang-pick .flag{font-size:2.4rem}.lp-variety{width:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}.wordmark{letter-spacing:-.03em;align-items:center;gap:.3em;font-weight:900;line-height:1;display:inline-flex}.wm-leap{color:var(--green)}.wm-ling{color:var(--accent)}
