:root{--ink:#0c1115;--ink-2:#141b1f;--ink-3:#1c262b;--accent:#4ad9a4;--accent-deep:#1f7d63;--accent-pale:#a8f0d3;--accent-rgb:74, 217, 164;--bloom-1:31, 125, 99;--bloom-2:60, 110, 150;--bloom-3:120, 60, 130;--prism-cool:#4fd8ff;--prism-warm:#ff5fd2;--gold:#d4a24c;--paper:#f1f5f2;--paper-dim:#c0c9c3;--paper-faint:#89958e;--lattice-young:#a8f0d3;--lattice-young-rgb:168, 240, 211;--radius-sm:8px;--radius-md:12px;--radius-lg:16px;--hair:#e8ece926;--hair-strong:#e8ece93d;--surface:#ffffff07;--surface-up:#ffffff0d;--ink-rgb:12, 17, 21;--display:"Space Grotesk", "Segoe UI", system-ui, sans-serif;--mono:"IBM Plex Mono", ui-monospace, "SF Mono", Menlo, monospace;--han:"Noto Serif SC", "Songti SC", "PingFang SC", "Microsoft YaHei", serif}*{box-sizing:border-box}html,body{height:100%}body{background:var(--ink);color:var(--paper);font-family:var(--display);-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.6;overflow-x:hidden}main.auth-shell{z-index:2;grid-template-columns:minmax(0,1fr);place-items:center;gap:0;width:100%;max-width:none;min-height:100dvh;margin:0;padding:32px 20px;display:grid;position:relative}.auth-panel{border:1px solid var(--hair-strong);border-top-color:rgba(var(--accent-rgb), .55);background:linear-gradient(145deg, rgba(var(--accent-rgb), .09), transparent 52%), rgba(var(--ink-rgb), .9);width:min(100%,440px);padding:32px;box-shadow:0 24px 80px #00000047}.auth-brand{align-items:center;gap:14px;min-width:0;margin-bottom:30px;display:flex}.auth-brand .wordmark{min-width:0}.auth-tabs{border-bottom:1px solid var(--hair-strong);grid-template-columns:1fr 1fr;display:grid}.auth-tabs button{color:var(--paper-faint);cursor:pointer;font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;background:0 0;border:0;border-bottom:2px solid #0000;padding:10px 12px;font-size:10.5px}.auth-tabs button.active{border-bottom-color:var(--accent);color:var(--accent-pale)}.auth-copy{margin:28px 0 22px}.auth-copy h1{font-size:26px}.auth-copy p{color:var(--paper-faint);margin:5px 0 0;font-size:13px}.auth-form{gap:17px;display:grid}.auth-form label{gap:6px;display:grid}.auth-form label>span{color:var(--paper-dim);font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;font-size:9.5px}.auth-form input{border:1px solid var(--hair-strong);border-radius:var(--radius-sm);width:100%;color:var(--paper);font:inherit;background:#ffffff09;outline:none;padding:11px 12px}.auth-form input:focus{border-color:rgba(var(--accent-rgb), .7);box-shadow:0 0 0 2px rgba(var(--accent-rgb), .12)}.auth-submit{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--accent);color:var(--ink);cursor:pointer;font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;margin-top:5px;padding:12px 18px;font-size:10.5px;font-weight:500}.auth-submit:disabled{cursor:wait;opacity:.65}.auth-tabs button,.auth-submit{min-height:44px}.auth-feedback{min-height:28px;margin-top:16px}.auth-feedback p,.auth-setup-error{margin:0;font-size:12px;line-height:1.6}.auth-error,.auth-setup-error{color:#ff9b86}.auth-message{color:var(--accent-pale)}.auth-loading{color:var(--paper-faint);font-family:var(--mono);font-size:12px}.auth-setup-error{max-width:420px;position:fixed;bottom:20px;right:20px}.auth-setup-error-centered{position:static}.sync-warning{z-index:3;color:#ffb2a2;font-family:var(--mono);letter-spacing:.06em;text-align:center;background:#782d2333;border-bottom:1px solid #ff9b8659;padding:7px 20px;font-size:10px;position:relative}.sync-status{z-index:3;border-bottom:1px solid rgba(var(--accent-rgb), .22);color:var(--paper-faint);font-family:var(--mono);letter-spacing:.06em;text-align:center;padding:6px 20px;font-size:10px;position:relative}@media (width<=520px){.auth-panel{padding:25px 20px}}.ground{z-index:0;pointer-events:none;background:radial-gradient(120% 90% at 50% 0%, var(--ink-2) 0%, var(--ink) 55%), var(--ink);position:fixed;inset:0;overflow:hidden}.bloom{opacity:.62;will-change:transform;border-radius:50%;position:absolute;transform:translate(0,0)}.bloom-a{background:radial-gradient(closest-side, rgba(var(--bloom-1),.36) 0%, rgba(var(--bloom-1),.24) 26%, rgba(var(--bloom-1),.11) 48%, rgba(var(--bloom-1),.035) 68%, transparent 84%);width:62vw;height:62vw;animation:44s ease-in-out infinite alternate drift-a;top:-4vw;left:-16vw}.bloom-b{background:radial-gradient(closest-side, rgba(var(--bloom-2),.26) 0%, rgba(var(--bloom-2),.17) 28%, rgba(var(--bloom-2),.08) 50%, rgba(var(--bloom-2),.025) 70%, transparent 85%);width:54vw;height:54vw;animation:58s ease-in-out infinite alternate drift-b;top:20vh;right:-14vw}.bloom-c{background:radial-gradient(closest-side, rgba(var(--bloom-3),.2) 0%, rgba(var(--bloom-3),.13) 30%, rgba(var(--bloom-3),.06) 52%, rgba(var(--bloom-3),.02) 72%, transparent 86%);width:46vw;height:46vw;animation:68s ease-in-out infinite alternate drift-c;bottom:-18vw;left:38vw}@keyframes drift-a{to{transform:translate(4vw,3vh)scale(1.12)}}@keyframes drift-b{to{transform:translate(-6vw,-5vh)scale(1.1)}}@keyframes drift-c{to{transform:translate(3vw,-6vh)scale(1.18)}}.grain{z-index:0;pointer-events:none;opacity:.055;mix-blend-mode:overlay;width:100%;height:100%;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.bloom{animation:none}.logo-badge-flip-inner{transition:none}}.masthead{z-index:2;border-bottom:1px solid var(--hair-strong);background:rgba(var(--ink-rgb), .58);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:24px;padding:17px 32px 14px;display:flex;position:relative}.mark{align-items:center;gap:14px;display:flex}.mark-home{cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;margin:0;padding:0;transition:opacity .15s}.mark-home:hover{opacity:.82}.mark-home:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.mark-home:disabled,.chrono button:disabled{cursor:default;opacity:.45}.mark-home:disabled:hover,.chrono button:disabled:hover,.chrono button.icon-btn:disabled:hover{color:var(--paper-dim);border-color:var(--hair-strong);opacity:.45;background:0 0;transform:none}.logo-mark{align-items:center;gap:6px;display:flex}.logo-fu{letter-spacing:-.01em;color:var(--accent);font-size:30px;font-weight:800;line-height:1}.logo-badge-flip{perspective:300px;flex-shrink:0;width:40px;height:40px;display:block}.logo-badge-flip-inner{width:100%;height:100%;transform-style:preserve-3d;transition:transform .48s cubic-bezier(.4,.15,.2,1);display:block;position:relative}.logo-badge-flip:hover .logo-badge-flip-inner,.logo-badge-flip:focus-visible .logo-badge-flip-inner{transform:rotateY(180deg)}.logo-badge{backface-visibility:hidden;width:100%;height:100%;position:absolute;inset:0}.logo-badge-back{transform:rotateY(180deg)}.logo-badge-bg{fill:var(--accent);rx:24px}.logo-badge-glyph{fill:var(--ink);font-family:Noto Sans SC,PingFang SC,Microsoft YaHei,sans-serif;font-size:58px;font-weight:900}.logo-badge-pinyin{fill:var(--ink);letter-spacing:-.01em;font-size:50px;font-weight:900}html[data-theme=skyline] .logo-fu{color:#fff;font-weight:900}html[data-theme=skyline] .logo-badge-flip{width:46px}html[data-theme=skyline] .logo-badge-bg{fill:#ff9a00;rx:10px}.meta{font-family:var(--mono);letter-spacing:.16em;color:var(--paper-faint);text-transform:uppercase;margin-top:3px;font-size:10.5px}.meta span{color:var(--gold)}.hsk-badge{background:linear-gradient(135deg, color-mix(in srgb, var(--level-color,var(--accent)) 32%, transparent), color-mix(in srgb, var(--level-color,var(--accent)) 14%, transparent));border:1px solid color-mix(in srgb, var(--level-color,var(--accent)) 60%, transparent);box-shadow:0 0 16px color-mix(in srgb, var(--level-color,var(--accent)) 28%, transparent);border-radius:999px;align-items:center;gap:5px;margin-top:4px;padding:4px 11px 5px;display:inline-flex}.hsk-badge-label{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--level-color,var(--accent-pale));opacity:.85;font-size:10px}.hsk-badge-level{font-family:var(--display);color:var(--paper);letter-spacing:.01em;font-size:15px;font-weight:700;line-height:1}.chrono{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.chrono-label{font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;color:var(--paper-dim);font-size:11px}.chrono-day{font-family:var(--mono);color:var(--paper);font-variant-numeric:tabular-nums;margin-right:6px;font-size:22px;font-weight:500}.chrono button{font-family:var(--mono);letter-spacing:.1em;background:var(--surface);color:var(--paper-dim);border:1px solid var(--hair-strong);border-radius:var(--radius-sm);cursor:pointer;padding:6px 11px;font-size:10.5px;transition:color .2s,border-color .2s,background .2s}.chrono button:hover{color:var(--accent-pale);border-color:rgba(var(--accent-rgb), .55);background:rgba(var(--accent-rgb), .11)}.chrono button.chrono-signout{border-radius:999px;min-height:0;padding:5px 12px;font-size:9.5px}.chrono button.warn:hover{color:#e08b7a;background:#e08b7a0d;border-color:#e08b7a66}.chrono button.icon-btn{width:40px;height:40px;color:var(--paper-dim);cursor:pointer;background:0 0;border:none;border-radius:0;justify-content:center;align-self:center;align-items:center;padding:0;transition:color .2s,transform .3s;display:flex}.chrono button.icon-btn:hover{color:var(--accent-pale);background:0 0;border-color:#0000;transform:rotate(35deg)}main{z-index:2;grid-template-columns:minmax(0,1fr) 320px;align-items:start;gap:24px;width:100%;max-width:1920px;margin:0 auto;padding:24px 32px 38px;display:grid;position:relative}main.lesson-mode{grid-template-columns:minmax(0,1fr)}main.learning-home-mode{grid-template-columns:minmax(0,1fr);padding-top:16px;padding-bottom:12px}.app-startup-main{min-height:calc(100dvh - 82px)}.app-startup{grid-template-columns:minmax(280px,.42fr) minmax(420px,1fr);gap:24px;width:100%;display:grid}.app-startup-summary,.app-startup-map{border:1px solid var(--hair);background:rgba(var(--ink-rgb), .56)}.app-startup-summary{flex-direction:column;justify-content:center;min-height:260px;padding:28px;display:flex}.app-startup-summary h1{margin-top:5px}.app-startup-summary p{color:var(--paper-dim);margin:8px 0 0;font-size:13px}.app-startup-summary .btn{align-self:flex-start;margin-top:18px}.app-startup-kicker{color:var(--accent-pale);font-family:var(--mono);letter-spacing:.16em;text-transform:uppercase;font-size:10px}.app-startup-map{background:radial-gradient(70% 65% at 45% 50%, rgba(var(--accent-rgb), .07), transparent 75%), rgba(var(--ink-rgb), .4);min-height:clamp(360px,100dvh - 240px,580px);position:relative;overflow:hidden}.app-startup-path{background:linear-gradient(90deg, transparent, var(--hair-strong), transparent);height:1px;position:absolute;top:50%;left:10%;right:10%}.app-startup-node{top:var(--startup-top);left:var(--startup-left);border:1px solid rgba(var(--accent-rgb), .42);background:rgba(var(--accent-rgb), .08);width:34px;height:34px;box-shadow:0 0 24px rgba(var(--accent-rgb), .08);border-radius:50%;animation:1.8s ease-in-out infinite alternate startup-node-pulse;position:absolute;transform:translate(-50%,-50%)}.app-startup-node:nth-of-type(3n){animation-delay:.18s}.app-startup-node:nth-of-type(4n){animation-delay:.36s}@keyframes startup-node-pulse{to{border-color:rgba(var(--accent-rgb), .8);background:rgba(var(--accent-rgb), .18);box-shadow:0 0 30px rgba(var(--accent-rgb), .2)}}@media (width<=850px){.app-startup{grid-template-columns:minmax(0,1fr)}.app-startup-summary{min-height:190px}.app-startup-map{min-height:360px}}@media (prefers-reduced-motion:reduce){.app-startup-node{animation:none}}.stage{min-width:0}main.settings-main{grid-template-columns:minmax(0,1180px);justify-content:center}@media (width<=1120px){main{grid-template-columns:1fr;gap:28px}}.learning-home-top{grid-template-columns:minmax(420px,1.1fr) minmax(360px,1fr) minmax(270px,320px);align-items:stretch;gap:18px;display:grid}.continue-card{border:1px solid rgba(var(--accent-rgb),.48);border-left:3px solid var(--accent);border-radius:var(--radius-lg);background:linear-gradient(110deg, rgba(var(--accent-rgb),.14), transparent 68%), rgba(var(--ink-rgb),.7);justify-content:space-between;align-items:center;gap:28px;min-width:0;padding:18px 22px;display:flex;box-shadow:0 14px 40px #00000038}.continue-copy{min-width:0}.continue-kicker{font-family:var(--mono);letter-spacing:.15em;text-transform:uppercase;color:var(--accent-pale);margin-bottom:5px;font-size:11px}.continue-card h1{font-size:clamp(25px,2vw,32px)}.continue-card p{color:var(--paper-dim);margin:5px 0 0;font-size:15px;line-height:1.5}.continue-meta{font-size:13px;font-family:var(--mono);letter-spacing:.04em;color:var(--paper-dim);margin-top:12px}.continue-button{white-space:nowrap;min-width:154px;min-height:50px;padding:13px 20px;font-size:12px}.continue-practice-actions{flex:0 0 174px;gap:9px;display:grid}.continue-secondary-button{cursor:pointer;white-space:nowrap;min-height:42px;color:var(--paper-dim);border:1px solid var(--hair-strong);font-family:var(--mono);letter-spacing:.09em;text-transform:uppercase;background:0 0;padding:10px 16px;font-size:11px}.continue-secondary-button:hover{color:var(--paper);border-color:rgba(var(--accent-rgb),.55);background:rgba(var(--accent-rgb),.055)}.home-practice{border:1px solid rgba(var(--accent-rgb),.4);border-left:3px solid var(--accent);border-radius:var(--radius-lg);background:linear-gradient(110deg, rgba(var(--accent-rgb),.1), transparent 68%), rgba(var(--ink-rgb),.55);min-width:0;padding:14px 16px}.home-practice h2{letter-spacing:.18em;color:var(--accent-pale);text-transform:uppercase;font-size:12px}.home-practice-note{color:var(--paper-dim);margin:4px 0 10px;font-size:12px;line-height:1.4}.home-practice-actions{gap:9px;display:grid}.home-practice-actions button{min-height:47px;color:var(--paper);background:rgba(var(--accent-rgb),.05);border:1px solid rgba(var(--accent-rgb),.3);border-radius:var(--radius-md);text-align:left;cursor:pointer;gap:1px;padding:7px 10px;display:grid}.home-practice-actions button:hover:not(:disabled){color:var(--paper);border-color:rgba(var(--accent-rgb),.7);background:rgba(var(--accent-rgb),.12)}.home-practice-actions button:disabled{opacity:.42;cursor:not-allowed}.home-practice-actions span{font-size:14px;font-weight:650}.home-practice-actions small{color:var(--paper-dim);font-size:12px}.learning-home-top .rank-panel{padding:12px 18px}.primary-map{border-radius:var(--radius-lg);border:1px solid var(--hair);background:#ffffff04;margin-top:12px;overflow:hidden;box-shadow:inset 0 1px #ffffff06}.primary-map .web-wrap{border:0;border-bottom:1px solid var(--hair);box-shadow:none;margin-top:0}.primary-map .key{background:rgba(var(--ink-rgb),.9);min-height:48px;padding:8px 16px}.web-edges path{opacity:.9}.node-hit-area{fill:#0000;pointer-events:all}.node-hit-target{fill:rgba(var(--ink-rgb),.72);stroke:var(--hair-strong);stroke-width:1.2px;transition:fill .18s,stroke .18s}.node-untouched .node-hit-target{fill:rgba(var(--ink-rgb),.38);stroke:#e8ece91c;stroke-width:.9px}.node:hover .node-hit-target,.node:focus-visible .node-hit-target{fill:rgba(var(--accent-rgb),.09);stroke:rgba(var(--accent-rgb),.75)}.node.recommended .node-hit-target{stroke:var(--gold);stroke-width:1.5px}.node.admin-complete-target .node-hit-target{fill:#e08b7a29;stroke:#e08b7a;stroke-width:2px}.node-portal{cursor:pointer}.portal-pop{transition:transform .18s;transform:scale(1)}.node-portal:hover .portal-pop,.node-portal:focus-visible .portal-pop{transform:scale(1.12)}.portal-badge{transition:fill .18s,stroke .18s}.web-region-bar{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--paper-faint);align-items:center;gap:10px;padding:8px 12px 0;font-size:11.5px;display:flex}.web-region-current{color:var(--paper)}.web-level-hub-toggle{border:1px solid var(--hair-strong);color:var(--paper-dim);font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;cursor:pointer;background:0 0;margin-left:auto;padding:5px 10px;font-size:10.5px;transition:color .18s,border-color .18s,background .18s}.web-level-hub-toggle:hover,.web-level-hub-toggle:focus-visible{color:var(--paper);background:rgba(var(--accent-rgb), .1);border-color:rgba(var(--accent-rgb), .4)}.web-level-load-status{color:var(--paper-faint);font-family:var(--mono);align-items:center;gap:8px;margin:8px 12px 0;font-size:11px;display:flex}.web-level-load-status.error{color:#e08b7a}.web-level-load-status button{color:inherit;cursor:pointer;font:inherit;background:0 0;border:0;text-decoration:underline}.web-level-hub{min-height:clamp(420px,100dvh - 350px,600px);padding:10px 4px;overflow-y:auto}.web-level-hub .theme-opt{padding:14px 8px}.web-level-hub .theme-name{font-size:14px}.web-level-hub .theme-blurb{text-transform:none;letter-spacing:.02em;font-size:10px}.learning-web-overview{grid-template-columns:minmax(270px,.42fr) minmax(520px,1fr);align-items:stretch;gap:24px;display:grid}.stage-head{flex-direction:column;justify-content:center;padding:8px 4px;display:flex}h1{letter-spacing:-.02em;margin:0;font-size:30px;font-weight:500}.lede{color:var(--paper-dim);max-width:52ch;margin:6px 0 0;font-size:13.5px}.web-wrap{border:1px solid var(--hair);background:radial-gradient(80% 75% at 40% 45%, rgba(var(--accent-rgb), .045), transparent 75%), #ffffff04;margin:20px 0 0;padding:0 8px;position:relative;box-shadow:inset 0 1px #ffffff06}.web-stage{position:relative}#web{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:clamp(420px,100dvh - 350px,600px);display:block;overflow:visible}.crystal-web-layer{pointer-events:none;z-index:1;position:absolute;inset:0}.crystal-web-layer,.crystal-web-layer *{pointer-events:none!important}.crystal-web-layer canvas{width:100%;height:100%;display:block}#web.dragging{cursor:grabbing}#web.dragging *{filter:none!important}.web-portal-fab{z-index:20;background:var(--ink-2);width:48px;height:48px;color:var(--paper-dim);cursor:pointer;box-shadow:0 6px 16px #0006, 0 0 0 1px #ffffff14 inset, inset 0 0 0 2px var(--hair-strong);opacity:0;pointer-events:none;border:none;border-radius:999px;justify-content:center;align-items:center;padding:0;transition:transform .22s,opacity .22s,color .18s,box-shadow .18s;display:flex;position:absolute;top:50%;transform:translateY(-50%)scale(.7)}.web-portal-fab svg{flex:none}.web-portal-fab.visible{opacity:.85;pointer-events:auto;transform:translateY(-50%)scale(1)}.web-portal-fab.lit.visible{opacity:1}.web-portal-fab:hover,.web-portal-fab:focus-visible{color:var(--accent-pale);box-shadow:0 6px 16px #0006, 0 0 0 1px #ffffff14 inset, inset 0 0 0 2px var(--accent)}.web-portal-fab.visible:hover,.web-portal-fab.visible:focus-visible{transform:translateY(-50%)scale(1.1)}.web-portal-fab-forward{right:22px}.web-portal-fab-back{left:22px}.node-relic{cursor:pointer}.node-relic[aria-disabled=true]{cursor:default}.node-relic-disc{fill:var(--ink-2);stroke:var(--hair-strong);stroke-width:2px;transition:stroke .22s,fill .22s}.node-relic-icon{stroke:var(--paper-faint);transition:stroke .22s,filter .22s}.node-relic.locked .node-relic-glyph{filter:grayscale(.9);opacity:.75}.node-relic.earned .node-relic-disc{stroke:var(--gold);fill:color-mix(in srgb, var(--gold) 12%, var(--ink-2))}.node-relic.earned .node-relic-icon{stroke:var(--gold)}.node-relic.earned .node-relic-glyph{filter:drop-shadow(0 0 8px #d4a24c99)drop-shadow(0 0 18px #d4a24c66);animation:2.6s ease-in-out infinite relic-pulse}.node-relic:hover .node-relic-disc,.node-relic:focus-visible .node-relic-disc{stroke:var(--gold)}@keyframes relic-pulse{0%,to{filter:drop-shadow(0 0 8px #d4a24c8c)drop-shadow(0 0 16px #d4a24c59)}50%{filter:drop-shadow(0 0 14px #d4a24cd9)drop-shadow(0 0 28px #d4a24c99)}}@media (prefers-reduced-motion:reduce){.node-relic.earned .node-relic-glyph{animation:none}}.node-test-placement-ring{stroke:var(--accent);stroke-width:2.4px;filter:drop-shadow(0 0 6px rgba(var(--accent-rgb), .6));pointer-events:none;animation:1.8s ease-in-out infinite test-placement-pulse}@keyframes test-placement-pulse{0%,to{r:46;opacity:.85}50%{r:54;opacity:.4}}@media (prefers-reduced-motion:reduce){.node-test-placement-ring{animation:none}}.node-relic-entry .node-relic-disc,.node-relic-entry .node-relic-icon{stroke:var(--accent)}.node-relic-entry:hover .node-relic-disc,.node-relic-entry:focus-visible .node-relic-disc{stroke:var(--accent-pale)}@media (width<=900px){.web-portal-fab{width:42px;height:42px}.web-portal-fab-forward{right:10px}.web-portal-fab-back{left:10px}}.web-zoom-controls{z-index:20;background:var(--ink-2);box-shadow:0 6px 16px #0006, 0 0 0 1px #ffffff14 inset, inset 0 0 0 2px var(--hair-strong);border-radius:999px;align-items:center;gap:2px;padding:3px;display:flex;position:absolute;bottom:14px;right:14px}.web-zoom-controls button{color:var(--paper-dim);cursor:pointer;font:inherit;background:0 0;border:none;border-radius:999px;line-height:1;transition:color .15s,background .15s}.web-zoom-controls button:hover:not(:disabled),.web-zoom-controls button:focus-visible:not(:disabled){color:var(--accent-pale);background:rgba(var(--accent-rgb), .14)}.web-zoom-controls button:disabled{opacity:.35;cursor:default}.web-zoom-controls button:not(.web-zoom-reset){width:26px;height:26px;font-size:16px;font-weight:600}.web-zoom-reset{letter-spacing:.02em;min-width:44px;padding:4px 8px;font-size:11px}@media (width<=900px){.web-zoom-controls{bottom:8px;right:8px}}.web-fullscreen-toggle{z-index:20;background:var(--ink-2);width:32px;height:32px;color:var(--paper-dim);cursor:pointer;box-shadow:0 6px 16px #0006, 0 0 0 1px #ffffff14 inset, inset 0 0 0 2px var(--hair-strong);border:none;border-radius:999px;justify-content:center;align-items:center;padding:0;transition:color .15s,box-shadow .15s;display:flex;position:absolute;top:14px;right:14px}.web-fullscreen-toggle:hover,.web-fullscreen-toggle:focus-visible{color:var(--accent-pale);box-shadow:0 6px 16px #0006, 0 0 0 1px #ffffff14 inset, inset 0 0 0 2px var(--accent)}:-webkit-any(.web-wrap:fullscreen,.web-wrap:-webkit-full-screen){background:var(--ink);border:none;justify-content:center;align-items:center;padding:0;display:flex}:is(.web-wrap:fullscreen,.web-wrap:fullscreen){background:var(--ink);border:none;justify-content:center;align-items:center;padding:0;display:flex}:-webkit-any(.web-wrap:fullscreen #web,.web-wrap:-webkit-full-screen #web){width:100vw;height:100dvh}:is(.web-wrap:fullscreen #web,.web-wrap:fullscreen #web){width:100vw;height:100dvh}:-webkit-any(.web-wrap:fullscreen .web-region-bar,.web-wrap:-webkit-full-screen .web-region-bar){z-index:20;position:absolute;top:16px;left:16px}:is(.web-wrap:fullscreen .web-region-bar,.web-wrap:fullscreen .web-region-bar){z-index:20;position:absolute;top:16px;left:16px}.key{flex-wrap:wrap;gap:22px;padding:8px 4px 0;display:flex}.key-item{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--paper-faint);align-items:center;gap:8px;font-size:11.5px;display:flex}.rail{border:1px solid var(--hair);background:var(--surface);flex-direction:column;gap:30px;max-height:calc(100vh - 108px);padding:20px 22px;display:flex;position:sticky;top:18px;overflow-y:auto;box-shadow:inset 0 1px #ffffff06}.rail section{display:block}.rail h2{letter-spacing:.2em;font-size:13px}h2{font-family:var(--mono);letter-spacing:.26em;text-transform:uppercase;color:var(--paper-dim);border-bottom:1px solid var(--hair-strong);margin:0 0 12px;padding-bottom:8px;font-size:10px;font-weight:500}.rail-note{color:var(--paper-dim);margin:0 0 12px;font-size:14px;line-height:1.55}.rail-review-head h2{border-bottom:none;padding-bottom:0}.rail-review-btn{width:100%;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;text-align:center;color:var(--paper);background:var(--surface-up);cursor:pointer;border:1px solid #e8ece961;padding:11px;font-size:12px}.rail-review-btn:hover{background:var(--accent-pale);border-color:var(--accent-pale);box-shadow:0 0 26px rgba(var(--accent-rgb), .34)}.rail-review-ready{border:1px solid rgba(var(--accent-rgb),.38);background:rgba(var(--accent-rgb),.055);padding:15px}.optional-practice{gap:14px;display:grid}.practice-option{padding-top:3px}.practice-option+.practice-option{border-top:1px solid var(--hair);padding-top:17px}.practice-option h3{color:var(--paper);margin:0;font-size:16px;font-weight:500}.practice-option p{color:var(--paper-dim);margin:4px 0 11px;font-size:13.5px;line-height:1.5}.rail-secondary-btn{cursor:pointer;width:100%;min-height:42px;color:var(--paper-dim);border:1px solid var(--hair-strong);font-family:var(--mono);letter-spacing:.09em;text-transform:uppercase;background:0 0;padding:10px 13px;font-size:11px}.rail-secondary-btn:hover:not(:disabled){color:var(--paper);border-color:rgba(var(--accent-rgb),.52);background:rgba(var(--accent-rgb),.055)}.rail-secondary-btn:disabled{opacity:.42;cursor:not-allowed}.shard{text-align:left;border:none;border-bottom:1px solid var(--hair);width:100%;color:var(--paper);cursor:pointer;background:0 0;align-items:center;gap:11px;padding:10px 4px;font-family:inherit;transition:background .2s,padding-left .2s;display:flex}.shard:hover{background:rgba(var(--accent-rgb), .1);padding-left:9px}.shard-glyph{flex:none}.shard-body{flex:1;min-width:0}.shard-title{white-space:nowrap;text-overflow:ellipsis;font-size:14px;overflow:hidden}.shard-meta{font-family:var(--mono);letter-spacing:.07em;color:var(--paper-faint);text-transform:uppercase;margin-top:2px;font-size:11px}.empty{color:var(--paper-faint);padding:4px 0 10px;font-size:12px;font-style:italic}.ledger{flex-direction:column;margin:0;display:flex}.ledger>div{border-bottom:1px solid var(--hair);justify-content:space-between;align-items:baseline;padding:7px 0;display:flex}.ledger dt{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--paper-faint);font-size:10px}.ledger dd{font-family:var(--mono);font-variant-numeric:tabular-nums;color:var(--paper);margin:0;font-size:14px}.ledger dd em{color:var(--paper-faint);font-size:11px;font-style:normal}.creed{color:var(--paper-faint);border-left:1px solid #d4a24c66;margin:0;padding-left:13px;font-size:11.5px;line-height:1.7}#lesson-view{width:100%}.lesson-top{border-bottom:1px solid var(--hair);flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:30px;padding-bottom:18px;display:flex}.lesson-sub{color:var(--paper-dim);margin:5px 0 0;font-size:13px;font-style:italic}.lesson-workspace{flex-direction:column;align-items:center;display:flex}.lesson-practice{width:min(100%,920px);min-width:0}.lesson-complete-side{flex-direction:column;gap:20px;display:flex}.lesson-complete-side .acts{margin-top:0}.lesson-workspace-complete>.slab,.lesson-complete-side{width:min(100%,920px)}.slab{text-align:center;background:linear-gradient(180deg, rgba(var(--accent-rgb), .09), rgba(var(--accent-rgb), .015) 60%), var(--surface);border:1px solid var(--hair);border-top-color:rgba(var(--accent-rgb), .42);border-radius:var(--radius-lg);flex-direction:column;justify-content:center;gap:14px;min-height:220px;padding:46px 34px;display:flex;position:relative}.completion-stamp{border:3px solid var(--accent);border-radius:var(--radius-sm);font-family:var(--han);letter-spacing:.04em;color:var(--accent);opacity:.85;pointer-events:none;padding:8px 14px;font-size:26px;font-weight:700;line-height:1;position:absolute;top:20px;right:26px;transform:rotate(9deg)}.completion-congrats{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--paper-dim);font-size:12px}.listen-complete-slab{flex-direction:column;justify-content:center;align-items:center;gap:32px;min-height:280px;display:flex}.listen-complete-headline{font-family:var(--han);color:var(--paper);text-shadow:0 0 28px rgba(var(--accent-rgb), .28);font-size:32px;font-weight:700;line-height:1.1}.level-test-result-note{max-width:46ch;color:var(--paper-dim);font-size:14px;line-height:1.5}.level-test-language-warning{color:#c0212f;max-width:46ch;font-size:14px;font-weight:600;line-height:1.5}.level-test-score{font-family:var(--mono);color:var(--paper);align-items:baseline;gap:12px;font-size:15px;display:flex}.level-test-score-pct{color:var(--accent-pale);font-size:22px;font-weight:700}.level-test-progress{gap:4px;width:min(100%,620px);margin:4px 0 24px;display:flex}.level-test-progress-step{background:var(--hair-strong);border-radius:1px;flex:1;height:6px;transition:background .2s}.level-test-progress-step.correct{background:var(--accent)}.level-test-progress-step.wrong{background:#c0212f}.level-test-progress-step.current{background:rgba(var(--accent-rgb), .4);box-shadow:0 0 8px rgba(var(--accent-rgb), .55)}.level-test-card{min-height:320px}.level-test-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:min(100%,560px);margin:28px auto 0;display:grid}.level-test-option{text-align:left;color:var(--paper);background:var(--surface);border:1px solid var(--hair-strong);cursor:pointer;padding:14px 16px;font-size:15px;transition:color .18s,border-color .18s,background .18s}.level-test-option:hover:not(:disabled){border-color:rgba(var(--accent-rgb), .55);background:rgba(var(--accent-rgb), .08)}.level-test-option:disabled{cursor:default}.level-test-option.correct{border-color:var(--accent);background:rgba(var(--accent-rgb), .16)}.level-test-option.wrong{background:#c0212f24;border-color:#c0212f}.level-test-replay-wrap{justify-content:center;margin:8px 0 4px;display:flex}.level-test-input{box-sizing:border-box;width:min(100%,420px);min-height:52px;font-family:var(--han);color:var(--paper);background:var(--surface);border:1px solid var(--hair-strong);border-radius:4px;padding:12px 16px;font-size:20px;line-height:1.4}.level-test-input:focus{border-color:rgba(var(--accent-rgb), .55);outline:none}.level-test-input:disabled{opacity:.6}.level-test-input.correct{border-color:var(--accent);background:rgba(var(--accent-rgb), .1)}.level-test-input.wrong{background:#c0212f1a;border-color:#c0212f}.level-test-option-hanzi{text-align:center;letter-spacing:.04em;padding:18px 16px;font-size:22px}.level-test-skip{color:var(--paper-dim);opacity:.75;margin:24px auto 0;font-size:13px;display:block}.level-test-skip:hover:not(:disabled){opacity:1}.level-test-skip:disabled{opacity:.35;cursor:default}@media (width<=600px){.level-test-options{grid-template-columns:1fr}}.acts button.premium-btn{border-radius:var(--radius-sm);cursor:pointer;font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);background:var(--accent);border:1px solid var(--accent);box-shadow:0 0 0 rgba(var(--accent-rgb), 0);padding:13px 28px;font-size:11px;font-weight:500;transition:color .18s,border-color .18s,background .18s,box-shadow .18s;position:relative;overflow:hidden}.premium-btn span{z-index:1;position:relative}.premium-btn:before{content:"";background:linear-gradient(115deg,#0000 30%,#ffffff59 48%,#0000 66%);transition:transform .7s;position:absolute;inset:0;transform:translate(-120%)}.acts button.premium-btn:hover{color:var(--ink);background:color-mix(in srgb, var(--accent) 82%, white 18%);border-color:color-mix(in srgb, var(--accent) 82%, white 18%);box-shadow:0 0 16px rgba(var(--accent-rgb), .22)}.premium-btn:hover:before{transform:translate(120%)}@media (prefers-reduced-motion:reduce){.premium-btn,.premium-btn:before{transition:none}}.card-aid-controls{z-index:45;align-items:center;gap:5px;display:flex;position:absolute;bottom:14px;left:14px}.pinyin-toggle,.tone-guide-inline-toggle{height:29px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-faint);background:var(--surface);border:1px solid var(--hair-strong);cursor:pointer;border-radius:999px;align-items:center;gap:6px;padding:0 10px;font-size:9px;display:inline-flex}.pinyin-toggle:before,.tone-guide-inline-toggle:before{content:"";border:1px solid var(--paper-faint);border-radius:50%;flex:none;width:6px;height:6px}.pinyin-toggle:hover,.tone-guide-inline-toggle:hover,.pinyin-toggle.on,.tone-guide-inline-toggle.on{color:var(--accent-pale);border-color:rgba(var(--accent-rgb), .5)}.pinyin-toggle.on,.tone-guide-inline-toggle.on{background:rgba(var(--accent-rgb), .09)}.pinyin-toggle.on:before,.tone-guide-inline-toggle.on:before{background:var(--accent);border-color:var(--accent);box-shadow:0 0 6px rgba(var(--accent-rgb), .72)}.translation-edit-toggle{height:29px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-faint);background:var(--surface);border:1px solid var(--hair-strong);cursor:pointer;border-radius:999px;align-items:center;padding:0 10px;font-size:9px;display:inline-flex}.translation-edit-toggle:hover{color:var(--accent-pale);border-color:rgba(var(--accent-rgb), .5)}.translation-editor{background:var(--surface);border:1px solid var(--hair-strong);text-align:left;border-radius:4px;flex-direction:column;gap:8px;width:min(100%,480px);margin:14px auto 0;padding:12px 14px;display:flex}.translation-editor-label{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-faint);font-size:10px}.translation-editor-input{box-sizing:border-box;resize:vertical;width:100%;color:var(--paper);background:var(--panel,var(--surface));border:1px solid var(--hair-strong);border-radius:4px;padding:8px 10px;font-size:15px;line-height:1.4}.translation-editor-input:focus{border-color:rgba(var(--accent-rgb), .55);outline:none}.translation-editor-input:disabled{opacity:.6}.translation-editor-error{color:#c0212f;margin:0;font-size:13px}.translation-editor-acts{justify-content:flex-end;gap:8px;display:flex}.hanzi-size-controls{gap:5px;display:flex;position:absolute;bottom:14px;right:14px}.hanzi-size-controls button{width:29px;height:29px;font-family:var(--mono);color:var(--paper-dim);background:var(--surface);border:1px solid var(--hair-strong);cursor:pointer;border-radius:50%;place-items:center;padding:0;font-size:18px;line-height:1;display:grid}.hanzi-size-controls button:hover:not(:disabled){color:var(--paper);border-color:#e8ece961}.hanzi-size-controls button:disabled{opacity:.35;cursor:default}.audio-repeat-control{z-index:45;font-family:var(--mono);color:var(--paper-dim);text-align:left;position:relative}.audio-repeat-control summary{cursor:pointer;-webkit-user-select:none;user-select:none;letter-spacing:.05em;background:var(--surface);border:1px solid var(--hair-strong);border-radius:999px;place-items:center;width:42px;height:29px;font-size:11px;list-style:none;display:grid}.audio-repeat-control summary::-webkit-details-marker{display:none}.audio-repeat-control summary:hover,.audio-repeat-control[open] summary{color:var(--paper);border-color:rgba(var(--accent-rgb),.52)}.audio-repeat-menu{background:rgba(var(--ink-rgb),.98);border:1px solid var(--hair-strong);width:190px;padding:12px;position:absolute;bottom:calc(100% + 8px);left:0;box-shadow:0 14px 36px #00000094}.audio-repeat-presets{grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.audio-repeat-presets button,.audio-repeat-menu form button{cursor:pointer;min-height:32px;color:var(--paper-dim);background:var(--surface);border:1px solid var(--hair-strong);font:inherit;padding:6px 8px}.audio-repeat-presets button:hover,.audio-repeat-presets button.on,.audio-repeat-menu form button:hover{color:var(--paper);border-color:rgba(var(--accent-rgb),.55);background:rgba(var(--accent-rgb),.08)}.audio-repeat-menu form{margin-top:11px}.audio-repeat-menu label{color:var(--paper-faint);letter-spacing:.12em;text-transform:uppercase;margin-bottom:5px;font-size:9px;display:block}.audio-repeat-menu form>div{grid-template-columns:1fr auto;gap:6px;display:grid}.audio-repeat-menu input{width:100%;min-width:0;color:var(--paper);background:var(--ink-2);border:1px solid var(--hair-strong);font:inherit;outline:none;padding:6px 8px}.audio-repeat-menu input:focus{border-color:rgba(var(--accent-rgb),.62)}.slab-tag{font-family:var(--mono);letter-spacing:.28em;text-transform:uppercase;color:var(--gold);font-size:9.5px}.review-card>.slab-tag{position:absolute;top:18px;left:50%;transform:translate(-50%)}.slab-han{font-family:var(--han);font-size:var(--hanzi-font-size,40px);letter-spacing:.04em;color:var(--paper);text-shadow:0 0 30px rgba(var(--accent-rgb), .22);line-height:1.4;position:relative}.shadow-said-loosely-btn{color:var(--paper-dim);cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;padding:0;font-size:18px;line-height:1;transition:color .15s;display:inline-flex;position:absolute;top:-2px;right:-28px}.shadow-said-loosely-btn:hover{color:var(--accent-pale)}.shadow-said-loosely-popover{background:var(--surface);border:1px solid var(--hair-strong);border-radius:8px;flex-direction:column;align-items:center;gap:4px;margin-top:4px;padding:10px 16px;display:flex}.shadow-said-loosely-text{font-family:var(--han);color:var(--paper-dim);font-size:18px}.dictation-replay-wrap{align-self:center;display:inline-flex;position:relative}.practice-fade{animation:.3s both practice-fade-in}@keyframes practice-fade-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.practice-fade{animation:none}}.shadow-encouragement-bubble{white-space:nowrap;background:var(--surface-up);color:var(--accent-pale);border:1px solid rgba(var(--accent-rgb), .4);font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;pointer-events:none;border-radius:999px;margin-right:10px;padding:6px 14px;font-size:12px;font-weight:600;animation:1.6s forwards shadow-encouragement-pop;position:absolute;top:50%;right:100%;box-shadow:0 4px 14px #0000004d}.shadow-encouragement-bubble:after{content:"";border:6px solid #0000;border-left-color:var(--surface-up);position:absolute;top:50%;left:100%;transform:translateY(-50%)}@keyframes shadow-encouragement-pop{0%{opacity:0;transform:translate(6px,-50%)scale(.9)}15%{opacity:1;transform:translateY(-50%)scale(1)}75%{opacity:1;transform:translateY(-50%)scale(1)}to{opacity:0;transform:translateY(-50%)scale(1)}}@media (prefers-reduced-motion:reduce){.shadow-encouragement-bubble{animation-name:shadow-encouragement-fade}}@keyframes shadow-encouragement-fade{0%,75%{opacity:1}to{opacity:0}}.hz-word{isolation:isolate;display:inline-block;position:relative}.hz-word-tip{background:var(--ink-2);border:1px solid var(--hair-strong);font-family:var(--sans,inherit);letter-spacing:normal;color:var(--paper);white-space:nowrap;text-shadow:none;opacity:0;visibility:hidden;pointer-events:none;z-index:40;border-radius:5px;margin-bottom:10px;padding:5px 10px;font-size:13px;transition:opacity .12s;position:absolute;bottom:100%;left:50%;transform:translate(-50%);box-shadow:0 6px 18px #0006}.hz-word:hover>.hz-word-tip{opacity:1;visibility:visible}.hz-word:has(.hz-char-active)>.hz-word-tip{opacity:0;visibility:hidden}.hz-word-tip-pos{color:var(--paper-dim);font-style:italic}.hz-word-tip-hsk{font-family:var(--mono);font-size:11px;font-weight:600}.hz-word-flagged .hz-char-glyph{text-underline-offset:6px;-webkit-text-decoration:underline dotted #e0455a;text-decoration:underline dotted #e0455a;text-decoration-thickness:2px}.hz-word-tip-flag{color:var(--paper);border-left:3px solid #e0455a}.hz-char{cursor:pointer;display:inline-block;position:relative}.hz-char-pinned{vertical-align:top;flex-direction:column;align-items:center;margin-bottom:20px;display:inline-flex}.hz-word:hover .hz-char{color:var(--accent-pale)}.hz-word:hover .hz-char:hover{color:color-mix(in srgb, var(--accent-pale) 72%, var(--paper) 28%)}.hz-char-active,.hz-char-speaking{color:var(--accent)}.hz-char-speaking .hz-char-glyph{text-shadow:0 0 24px rgba(var(--accent-rgb), .8);transform:translateY(-2px)scale(1.08)}.hz-char-speaking>.hz-pinyin-tip{color:var(--accent)}.hz-char-glyph{transform-style:preserve-3d;transform-origin:50%;backface-visibility:hidden;will-change:transform;transition:transform .15s,text-shadow .15s;display:inline-block}.hz-word:hover .hz-char-glyph{text-decoration:underline;-webkit-text-decoration-color:var(--hsk-color,var(--accent-pale));text-decoration-color:var(--hsk-color,var(--accent-pale));text-underline-offset:6px;text-decoration-thickness:2px}.hz-char-holo{transform:perspective(360px) translateZ(20px) rotateX(calc(var(--my,0) * -22deg)) rotateY(calc(var(--mx,0) * 22deg)) scale(1.22);text-shadow:0 10px 16px #00000073}.hz-pinyin-tip{font-family:var(--mono);letter-spacing:.02em;color:var(--accent-pale);text-shadow:none;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;z-index:50;margin-top:8px;font-size:14px;transition:opacity .12s;position:absolute;top:100%;left:50%;transform:translate(-50%)}.hz-char:hover>.hz-pinyin-tip{opacity:1;visibility:visible}.hz-pinyin-pinned{opacity:1;visibility:visible;margin-top:3px;position:static;transform:none}.slab-han .hz-pinyin-pinned{font-size:calc(var(--hanzi-font-size,40px) * .275)}.hz-char>.hz-pinyin-pinned.hz-pinyin-hidden{opacity:0}.hz-char-tip{background:var(--ink-2);border:1px solid var(--hair-strong);white-space:nowrap;text-shadow:none;z-index:60;border-radius:5px;flex-direction:column;align-items:center;gap:3px;margin-bottom:10px;padding:6px 11px;display:flex;position:absolute;bottom:100%;left:50%;transform:translate(-50%);box-shadow:0 8px 22px #00000073}.hz-char-tip-word{font-family:var(--sans,inherit);letter-spacing:normal;color:var(--paper-dim);font-size:11px}.hz-char-tip-meaning{font-family:var(--sans,inherit);letter-spacing:normal;color:var(--paper);font-size:14px;font-weight:600}.slab-pinyin{font-family:var(--mono);color:var(--accent-pale);letter-spacing:.05em;font-size:13px}.slab-en{color:var(--paper-dim);font-size:16px}.slab-note{color:var(--paper-faint);font-size:12px}.review-card{min-height:300px}.review-card .slab-en{font-size:calc(var(--hanzi-font-size,40px) * .4)}.slab-prompt{color:var(--paper);font-size:24px}.review-card .slab-prompt{font-size:calc(var(--hanzi-font-size,40px) * .6)}.card-answer{border-top:1px solid var(--hair-strong);flex-direction:column;align-items:center;gap:12px;width:min(100%,620px);margin:6px auto 0;padding-top:20px;transition:opacity .15s;display:flex}.card-answer-hidden{opacity:0;pointer-events:none}.pronunciation-stack{flex-direction:column;align-items:center;gap:0;width:min(100%,720px);margin:0 auto;display:flex}.pronunciation-stack .slab-han{line-height:1.18}.pronunciation-stack .hz-char-pinned{margin-bottom:4px}.tone-guide-slot{width:100%}.tone-guide-slot-hidden{visibility:hidden}.tone-guide{scrollbar-width:thin;width:100%;max-width:720px;margin:-2px auto 0;overflow-x:auto}.tone-guide svg{max-width:none;height:84px;margin:0 auto;display:block;overflow:visible}.tone-guide-grid{stroke:var(--hair);stroke-width:1px;opacity:.28;vector-effect:non-scaling-stroke}.tone-guide-curve{fill:none;stroke:var(--accent-pale);stroke-width:2.8px;stroke-linecap:round;stroke-linejoin:round;opacity:.75;vector-effect:non-scaling-stroke;transition:opacity .12s,stroke .12s,stroke-width .12s}.tone-guide-syllable.active .tone-guide-curve{stroke:var(--accent);stroke-width:2.75px;opacity:1}.tone-guide-label,.tone-guide-number{font-family:var(--mono);text-anchor:middle;fill:var(--paper-dim)}.tone-guide-label{font-size:9px}.tone-guide-number{letter-spacing:.05em;text-transform:uppercase;fill:var(--paper-faint);font-size:8px}.tone-guide-syllable.active .tone-guide-label{fill:var(--paper)}.tone-guide-syllable.changed .tone-guide-number{fill:var(--gold)}.tone-guide-dot{fill:var(--accent);stroke:var(--surface);stroke-width:2px;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 5px rgba(var(--accent-rgb), .85))}@media (prefers-reduced-motion:reduce){.tone-guide-dot{display:none}.tone-guide-curve{transition:none}}.listen-mode-toggle{border:1px solid var(--hair-strong);background:var(--surface);border-radius:999px;align-self:center;gap:2px;margin:0 auto 18px;padding:3px;display:inline-flex}.listen-mode-toggle button{cursor:pointer;font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--paper-faint);background:0 0;border:0;border-radius:999px;padding:8px 18px;font-size:11px}.listen-mode-toggle button:hover{color:var(--paper-dim)}.listen-mode-toggle button.active{color:var(--ink);background:var(--accent)}.shadow-controls{flex-direction:column;align-items:center;gap:10px;margin-top:6px;display:flex}.shadow-record{cursor:pointer;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--accent-pale);background:rgba(var(--accent-rgb), .1);border:1px solid rgba(var(--accent-rgb), .4);border-radius:999px;justify-content:center;align-items:center;gap:9px;padding:12px 24px;font-size:13px;display:flex}.shadow-record:hover{background:rgba(var(--accent-rgb), .18)}.shadow-record:disabled{cursor:default;opacity:.75}.shadow-record-icon{color:var(--accent-pale);display:inline-flex}.shadow-listening{color:var(--ink);background:var(--accent);border:1px solid var(--accent);border-radius:999px;align-items:center;gap:10px;padding:12px 24px;display:flex}.shadow-listening-label{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;font-size:13px}.mic-level-bars{align-items:center;gap:3px;height:16px;display:flex}.mic-level-bars span{background:var(--ink);transform-origin:50%;border-radius:2px;width:3px;height:100%;transition:transform 70ms linear;display:block;transform:scaleY(.12)}.shadow-record.is-checking{align-items:center;gap:8px;display:flex}.shadow-spinner{border:2px solid rgba(var(--accent-rgb), .35);border-top-color:var(--accent-pale);border-radius:50%;width:12px;height:12px;animation:.7s linear infinite shadow-spin}@keyframes shadow-spin{to{transform:rotate(360deg)}}.shadow-playback-btn{cursor:pointer;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-dim);background:var(--surface);border:1px solid var(--hair-strong);border-radius:999px;padding:6px 14px;font-size:11px}.shadow-playback-btn:hover{color:var(--paper);border-color:rgba(var(--accent-rgb), .4)}.shadow-mistakes{flex-direction:column;align-items:center;gap:16px;width:min(100%,480px);margin:0 auto;display:flex}.shadow-said-row{flex-direction:column;align-items:center;gap:4px;display:flex}.shadow-compare-label{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--paper-faint);font-size:10px}.shadow-said-text{font-family:var(--han);color:var(--paper-dim);font-size:22px}.shadow-said-empty{font-family:var(--sans,inherit);font-size:15px;font-style:italic}.shadow-correction-card{background:#d4a24c12;border:1px solid #d4a24c4d;border-radius:10px;flex-direction:column;align-items:center;gap:14px;width:100%;padding:24px 20px;display:flex}.shadow-correction-card .shadow-compare-label{color:#d4a24c}.shadow-correction-hanzi{font-family:var(--han);color:var(--paper);text-align:center;font-size:32px;line-height:1.4}.shadow-correction-hanzi .hz-word-flagged .hz-char-glyph{color:var(--gold);text-shadow:0 0 18px #d4a24c80;font-weight:800;text-decoration:none}@media (prefers-reduced-motion:reduce){.shadow-spinner{border-top-color:rgba(var(--accent-rgb), .35);animation:none}.mic-level-bars span{transition:none}}.dictation-card{gap:18px}.dictation-replay{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--accent-pale);background:rgba(var(--accent-rgb), .1);border:1px solid rgba(var(--accent-rgb), .4);cursor:pointer;border-radius:999px;justify-content:center;align-self:center;align-items:center;gap:9px;padding:14px 26px;font-size:13px;display:flex}.audio-icon{color:inherit;display:inline-flex}.dictation-replay:hover{color:var(--paper);background:rgba(var(--accent-rgb), .2);box-shadow:0 0 26px rgba(var(--accent-rgb), .3)}.dictation-feedback{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;border-radius:999px;align-self:center;padding:6px 14px;font-size:13px}.dictation-feedback.correct{color:var(--accent);background:rgba(var(--accent-rgb), .14)}.dictation-feedback.incorrect{color:#e0455a;background:#e0455a1f}.dictation-feedback.revealed{color:var(--gold);background:#d4a24c24}.dictation-notice{z-index:80;background:var(--ink-2);border:1px solid #e0455a66;border-left:3px solid #e0455a;border-radius:6px;flex-direction:column;gap:18px;width:min(320px,100vw - 56px);padding:22px 24px;display:flex;position:fixed;top:50%;left:28px;transform:translateY(-50%);box-shadow:0 16px 40px #00000080}.dictation-notice p{color:var(--paper);margin:0;font-size:14px;line-height:1.5}.dictation-notice .key-act{align-self:flex-end}.dictation-acts{margin-top:18px}.dictation-skip{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--paper-faint);border:1px solid var(--hair-strong);cursor:pointer;background:0 0;padding:11px 20px;font-size:11px}.dictation-skip:hover{color:var(--paper-dim);border-color:#e8ece961}.confidence-bar{justify-content:center;gap:10px;margin-top:26px;display:flex}.confidence-btn{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;cursor:pointer;background:var(--surface);border:1px solid var(--hair-strong);padding:11px 20px;font-size:11px;transition:color .18s,border-color .18s,background .18s,box-shadow .18s}.confidence-rusty{color:var(--gold)}.confidence-rusty:hover{background:#d4a24c1a;border-color:#d4a24c73}.confidence-satisfied{color:var(--ink);background:var(--accent);border-color:var(--accent);font-weight:500}.confidence-satisfied:hover{background:color-mix(in srgb, var(--accent) 82%, white 18%);border-color:color-mix(in srgb, var(--accent) 82%, white 18%);box-shadow:0 0 16px rgba(var(--accent-rgb), .22)}.dictation-input-row{justify-content:center;gap:10px;margin-top:26px;display:flex}.dictation-input-wrap{background:var(--surface);border:1px solid var(--hair-strong);border-radius:4px;width:min(100%,420px);position:relative}.dictation-input-wrap:focus-within{border-color:rgba(var(--accent-rgb), .55)}.dictation-mirror{min-height:1.4em;font-family:var(--han);white-space:pre-wrap;word-break:break-word;pointer-events:none;padding:12px 16px;font-size:18px;line-height:1.4}.dictation-token{border-radius:3px}.dictation-token-match,.dictation-token-neutral{color:var(--paper)}.dictation-token-wrong,.dictation-token-extra{color:#e0455a;background:#e0455a2e;-webkit-text-decoration:underline #e0455a99;text-decoration:underline #e0455a99}.dictation-token-placeholder{color:var(--paper-faint);font-family:var(--mono);font-size:14px}.dictation-mirror.correct .dictation-token-match,.dictation-mirror.correct .dictation-token-neutral{color:var(--accent)}.dictation-input{box-sizing:border-box;width:100%;height:100%;font-family:var(--han);color:#0000;caret-color:var(--paper);background:0 0;border:none;border-radius:4px;padding:12px 16px;font-size:18px;line-height:1.4;position:absolute;inset:0}.dictation-input:focus{outline:none}.dictation-input:disabled{opacity:.6}.meter{background:var(--hair);height:1px;margin-top:26px;overflow:hidden}.meter-fill{background:linear-gradient(90deg, var(--accent-deep), var(--accent));height:100%;transition:width .34s}.acts{flex-wrap:wrap;justify-content:center;gap:10px;margin-top:26px;display:flex}.acts button,.btn,button.key-act{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;border-radius:var(--radius-sm);cursor:pointer;background:var(--surface);color:var(--paper-dim);border:1px solid var(--hair-strong);padding:11px 20px;font-size:11px;transition:color .18s,border-color .18s,background .18s,box-shadow .18s}.acts button:hover,.btn:hover{color:var(--paper);background:var(--surface-up);border-color:#e8ece961}button.key-act{color:var(--ink);background:var(--accent);border-color:var(--accent);font-weight:500}button.key-act:hover{background:color-mix(in srgb, var(--accent) 82%, white 18%);border-color:color-mix(in srgb, var(--accent) 82%, white 18%);box-shadow:0 0 16px rgba(var(--accent-rgb), .22)}button.key-act:disabled{color:var(--paper-faint);background:var(--surface);border-color:var(--hair-strong);cursor:not-allowed;box-shadow:none}.acts button.q1{color:#ffb5a4;background:#3a201c;border-color:#7d4034}.acts button.q2{color:#f0c87a;background:#382c14;border-color:#7a5c22}.acts button.q3{color:#7fe8c0;background:#143329;border-color:#256b52}.acts button.q4{color:#8ae6ff;background:#12303b;border-color:#24647d}.acts button.q1:hover{color:#ffd2c6;background:#522c26;border-color:#a85543}.acts button.q2:hover{color:#ffdc9b;background:#4d3d1c;border-color:#a67c2e}.acts button.q3:hover{color:#a8f0d3;background:#1c4838;border-color:#35916f}.acts button.q4:hover{color:#b3efff;background:#194354;border-color:#3288a8}html[data-color-scheme=beige] button.key-act,html[data-color-scheme=beige] .auth-submit,html[data-color-scheme=beige] .acts button.premium-btn,html[data-color-scheme=beige] .lattice-node-shape{color:#06331f}html[data-color-scheme=beige] .acts button.q1{color:#7a1f16;background:#f7ddd6;border-color:#d99b8c}html[data-color-scheme=beige] .acts button.q2{color:#6b4a10;background:#f7ecd4;border-color:#d9bb7f}html[data-color-scheme=beige] .acts button.q3{color:#145c3f;background:#dcf2e7;border-color:#86c9ad}html[data-color-scheme=beige] .acts button.q4{color:#14536b;background:#dbeef7;border-color:#85c2d9}.acts button.q1,.acts button.q2,.acts button.q3,.acts button.q4{flex-direction:column;align-items:center;gap:4px;display:flex}.grade-interval{letter-spacing:.1em;opacity:.62;text-transform:none;font-size:9px}.freetalk-slab{gap:20px}.freetalk-prompt{justify-content:center;align-items:center;gap:12px;display:flex}.freetalk-prompt-image-frame{background:rgba(var(--accent-rgb), .08);border:1px solid var(--hair-strong);transform-origin:50%;border-radius:14px;flex:none;justify-content:center;align-items:center;width:64px;height:64px;transition:transform .2s;display:flex;position:relative;overflow:hidden}.freetalk-prompt-image-frame:hover{z-index:5;transform:scale(1.5)}.freetalk-slab.reduced-motion .freetalk-prompt-image-frame{transition:none}.freetalk-prompt-image{object-fit:cover;width:100%;height:100%;display:block}.freetalk-prompt-image-placeholder{background:linear-gradient(100deg, rgba(var(--accent-rgb),.06) 30%, rgba(var(--accent-rgb),.16) 50%, rgba(var(--accent-rgb),.06) 70%);background-size:200% 100%;width:100%;height:100%;animation:1.6s ease-in-out infinite freetalk-image-shimmer}.freetalk-prompt-image-placeholder.failed{background:rgba(var(--accent-rgb), .05);animation:none}@keyframes freetalk-image-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.freetalk-slab.reduced-motion .freetalk-prompt-image-placeholder{animation:none}.freetalk-prompt-text{color:var(--paper-dim);letter-spacing:.05em;max-width:46ch;font-size:22px}.freetalk-prompt-text .hz-char{margin:0 2px}.freetalk-prompt-text .hz-pinyin-pinned{margin-top:4px;font-size:12px}.freetalk-prompt-lang{border:1px solid var(--hair-strong);min-width:30px;color:var(--paper-dim);font-family:var(--mono);letter-spacing:.03em;cursor:pointer;background:0 0;border-radius:999px;flex:none;padding:4px 8px;font-size:12px}.freetalk-prompt-lang:hover{color:var(--paper);border-color:rgba(var(--accent-rgb),.55);background:rgba(var(--accent-rgb),.06)}.freetalk-mic-row{flex-direction:column;align-items:center;gap:12px;display:flex}.freetalk-mic-row .mic-level-bars{height:22px}.freetalk-mic-row .mic-level-bars span{background:var(--accent)}.freetalk-mic{width:84px;height:84px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--accent-pale);background:rgba(var(--accent-rgb), .1);border:1px solid rgba(var(--accent-rgb), .4);cursor:pointer;border-radius:50%;flex-direction:column;justify-content:center;align-self:center;align-items:center;gap:4px;font-size:11px;transition:color .18s,background .18s,box-shadow .18s;display:flex}.freetalk-mic-icon{display:flex}.freetalk-mic:hover:not(:disabled){color:var(--paper);background:rgba(var(--accent-rgb), .2);box-shadow:0 0 26px rgba(var(--accent-rgb), .3)}.freetalk-mic:disabled{cursor:wait;opacity:.7}.freetalk-mic.listening{color:var(--ink);background:var(--accent);border-color:var(--accent);animation:1.8s ease-out infinite freetalk-pulse}@keyframes freetalk-pulse{0%,to{box-shadow:0 0 0 0 rgba(var(--accent-rgb), .35)}50%{box-shadow:0 0 0 16px rgba(var(--accent-rgb), 0)}}.freetalk-slab.reduced-motion .freetalk-mic.listening{animation:none}.freetalk-mic-message{color:#ff9b86;font-size:12px}.freetalk-live{min-height:1.4em;font-family:var(--han);color:var(--paper);margin:0;font-size:22px;line-height:1.5}.freetalk-interim{color:var(--paper-faint)}.freetalk-translation{color:var(--paper-dim);margin:6px 0 0;font-size:13px;font-style:italic}.freetalk-transcript{font-family:var(--han);color:var(--paper);margin:0;font-size:26px;line-height:1.6;display:block}.freetalk-transcript-row{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.sentence-audio-btn{cursor:pointer;width:30px;height:30px;color:var(--paper-dim);background:rgba(var(--accent-rgb), .1);border:1px solid var(--hair-strong);border-radius:50%;flex:none;justify-content:center;align-items:center;margin-top:2px;font-size:13px;display:flex}.sentence-audio-btn:hover{color:var(--paper);background:rgba(var(--accent-rgb), .24)}.freetalk-cards{background:var(--hair-strong);border:1px solid var(--hair-strong);text-align:left;flex-wrap:wrap;gap:1px;margin-top:24px;display:flex}.freetalk-card{background:var(--ink-2);flex-direction:column;flex:220px;gap:8px;padding:16px 18px;display:flex}.freetalk-chip{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;border-radius:999px;align-self:flex-start;padding:3px 9px;font-size:9.5px}.freetalk-chip-vocabulary{color:var(--gold);background:#d4a24c24}.freetalk-chip-grammar{color:var(--accent);background:rgba(var(--accent-rgb), .14)}.freetalk-card-text-row{justify-content:space-between;align-items:flex-start;gap:10px;display:flex}.freetalk-card-text{font-family:var(--han);color:var(--paper);font-size:21px}.freetalk-card-english{color:var(--paper-dim);font-size:13px}.freetalk-card-caption{color:var(--paper-faint);font-size:11px;font-style:italic}.freetalk-new-words{background:#d4a24c17;border:1px solid #d4a24c47;border-radius:8px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}.freetalk-new-word{font-family:var(--han);color:var(--paper);flex-wrap:wrap;align-items:center;gap:8px;font-size:18px;display:flex}.freetalk-new-word-label{font-family:var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--gold);font-size:9px}.freetalk-new-word-audio{color:var(--gold)}.freetalk-new-word-gloss{color:var(--paper-dim);font-size:12.5px}.freetalk-card-acts{gap:10px;margin-top:4px;display:flex}.freetalk-card-accept,.freetalk-card-reject{cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;font-size:14px;display:flex}.freetalk-card-accept{color:var(--accent-pale);background:rgba(var(--accent-rgb), .12);border:1px solid rgba(var(--accent-rgb), .45)}.freetalk-card-accept:hover{color:var(--paper);background:rgba(var(--accent-rgb), .24);box-shadow:0 0 20px rgba(var(--accent-rgb), .3)}.freetalk-card-reject{color:#e0899a;background:#e0455a1a;border:1px solid #e0455a66}.freetalk-card-reject:hover{color:var(--paper);background:#e0455a38;box-shadow:0 0 20px #e0455a40}.freetalk-card-notice{color:var(--gold);text-align:center;margin-top:14px;font-size:12px}.freetalk-review-error{flex-direction:column;align-items:center;gap:12px;margin-top:20px;display:flex}.freetalk-review-error p{color:#ff9b86;margin:0;font-size:13px}@media (prefers-reduced-motion:reduce){.freetalk-mic.listening{animation:none}}.glossary{width:min(100%,1100px);min-width:0;margin-top:80px}.glossary-grid{background:var(--hair-strong);border:1px solid var(--hair-strong);border-radius:var(--radius-md);flex-wrap:wrap;gap:1px;display:flex;overflow:hidden}.gloss{background:var(--ink-2);cursor:pointer;text-align:left;color:var(--paper);border:none;flex:128px;padding:11px 13px;font-family:inherit;transition:background .2s}.gloss:hover{background:var(--ink-3)}.gloss:disabled{cursor:default}.gloss:disabled:hover{background:var(--ink-2)}.gloss.revealed{background:var(--surface-up)}.gloss-han{font-family:var(--han);font-size:19px}.gloss-content{min-height:27px;display:grid}.gloss-details,.gloss-placeholder{grid-area:1/1;min-height:27px;transition:opacity .42s,transform .42s}.gloss:not(.revealed) .gloss-details{opacity:0;pointer-events:none;transform:translateY(3px)}.gloss.revealed .gloss-placeholder{opacity:0;transform:translateY(-3px)}.gloss-py{font-family:var(--mono);color:var(--accent-pale);letter-spacing:.06em;margin-top:2px;font-size:9.5px}.gloss-en{color:var(--paper-faint);margin-top:1px;font-size:10.5px}.gloss-placeholder{opacity:.65;flex-direction:column;justify-content:center;gap:7px;display:flex}.gloss-placeholder span{background:var(--hair-strong);width:42%;height:1px;display:block}.gloss-placeholder span:last-child{width:68%}.rank-panel{border:1px solid var(--hair);border-radius:var(--radius-lg);border-left:2px solid rgba(var(--accent-rgb), .7);background:linear-gradient(100deg, rgba(var(--accent-rgb), .08), transparent 48%), var(--surface);grid-template-columns:minmax(150px,.4fr) minmax(0,1fr);align-items:center;gap:34px 20px;margin:0;padding:15px 20px;display:grid}.rank-level-test-btn{white-space:nowrap;grid-column:1/-1;justify-self:start}.rank-panel h2{color:var(--accent-pale);border:0;margin:0 0 5px;padding:0}.rank-panel .rank-name{font-size:21px}.rank-progress{min-width:0}.rank-progress-trigger{cursor:pointer;text-align:left;width:100%;color:inherit;background:0 0;border:none;margin:0;padding:0;font-family:inherit;display:block}.rank-progress-trigger:hover .rank-next{color:var(--accent-pale)}.rank-progress-trigger .rank-next{transition:color .18s}.rank-progress-label{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-dim);flex-wrap:wrap;justify-content:space-between;gap:4px 20px;font-size:12px;display:flex}.rank-panel .rank-track{margin:10px 0 7px}.rank-panel .rank-next{text-align:right}.rank-name{letter-spacing:-.01em;margin-top:2px;font-size:19px;font-weight:500}.rank-note{font-family:var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--paper-dim);margin-top:2px;font-size:12px}.rank-track{background:var(--hair);height:3px;margin:12px 0 6px}.rank-bar{background:linear-gradient(90deg, var(--accent-deep), var(--accent));height:100%;transition:width .6s cubic-bezier(.2,.8,.3,1)}.rank-next{font-family:var(--mono);letter-spacing:.05em;color:var(--paper-dim);text-transform:uppercase;font-size:12px}.theme-list{flex-direction:column;display:flex}.theme-opt{border:none;border-bottom:1px solid var(--hair);width:100%;color:var(--paper-dim);cursor:pointer;text-align:left;background:0 0;align-items:center;gap:11px;padding:8px 4px;font-family:inherit;transition:color .2s,background .2s,padding-left .2s;display:flex}.theme-opt:hover{background:rgba(var(--accent-rgb), .1);color:var(--paper);padding-left:9px}.theme-opt.on{color:var(--paper)}.theme-opt.on .theme-name{color:var(--accent)}.theme-preview{flex:none;width:26px;height:26px;display:block}.theme-text{flex-direction:column;flex:1;min-width:0;display:flex}.theme-name{font-size:12.5px}.theme-blurb{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-faint);font-size:9px}.tiny{margin-top:10px;font-size:10.5px}.tiny code{font-family:var(--mono);color:var(--paper-dim)}#settings-view{width:100%;max-width:1180px}#settings-view h2{letter-spacing:.22em;font-size:13px}#settings-view .rail-note{font-size:14px;line-height:1.6}#settings-view .ledger dt{font-size:12px}#settings-view .ledger dd{font-size:17px}#settings-view .ledger dd em{font-size:12px}#settings-view .theme-name{font-size:15px}#settings-view .theme-blurb{font-size:10px}#settings-view .option-value{font-size:13px}#settings-view .fsrs-control-heading{font-size:14px}#settings-view .fsrs-control-heading output{font-size:13px}#settings-view .btn{font-size:12px}.settings-top{border-bottom:1px solid var(--hair);flex-wrap:wrap;align-items:center;gap:20px;margin-bottom:30px;padding-bottom:18px;display:flex}.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:22px;display:grid}.settings-section{border:1px solid var(--hair);background:rgba(var(--ink-rgb),.48);min-width:0;margin:0;padding:22px}.settings-wide{grid-column:1/-1}.settings-section h2{margin-top:0}.option-value{font-family:var(--mono);color:var(--paper-faint);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.theme-opt.on .option-value{color:var(--accent)}.fsrs-controls{border:1px solid var(--hair);background:#ffffff04;gap:18px;margin-top:22px;padding:18px;display:grid}.fsrs-control{gap:7px;display:grid}.fsrs-control-heading{color:var(--paper-dim);justify-content:space-between;gap:20px;font-size:12.5px;display:flex}.fsrs-control-heading output{font-family:var(--mono);color:var(--accent);font-variant-numeric:tabular-nums;font-size:11px}.fsrs-control input[type=range]{appearance:none;background:var(--hair-strong);cursor:pointer;outline:none;width:100%;height:2px;margin-top:7px}.fsrs-control input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--accent);width:14px;height:14px;box-shadow:0 0 10px rgba(var(--accent-rgb), .55);border-radius:50%}.fsrs-control input[type=range]::-moz-range-thumb{background:var(--accent);width:14px;height:14px;box-shadow:0 0 10px rgba(var(--accent-rgb), .55);border:none;border-radius:50%}.theme-opt.fsrs-toggle{border-top:1px solid var(--hair);padding:12px 4px 4px}.new-card-dialog-backdrop{z-index:200;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#05080ef0;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.new-card-dialog{background:var(--surface);border:1px solid var(--hair-strong);border-top-color:rgba(var(--accent-rgb), .55);width:min(100%,510px);padding:28px;box-shadow:0 24px 70px #0009}.new-card-dialog form{display:contents}.new-card-dialog h2{color:var(--paper);margin:0 0 15px}.new-card-dialog p{color:var(--paper-dim);margin:0 0 13px;line-height:1.65}.new-card-amount{gap:7px;margin:20px 0;display:grid}.new-card-amount span{font-family:var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--paper-faint);font-size:9.5px}.new-card-amount input{width:100%;font:inherit;color:var(--paper);background:var(--ink-2);border:1px solid var(--hair-strong);outline:none;padding:11px 12px}.new-card-amount input:focus{border-color:rgba(var(--accent-rgb), .6)}.new-card-dialog-actions{flex-wrap:wrap;justify-content:flex-end;gap:10px;margin-top:22px;display:flex}.progress-detail-backdrop{z-index:200;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#05080ef0;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.progress-detail{background:var(--surface);border:1px solid var(--hair-strong);border-top-color:rgba(var(--accent-rgb), .55);width:min(100%,560px);max-height:min(85vh,640px);padding:28px;overflow-y:auto;box-shadow:0 24px 70px #0009}.progress-detail-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.progress-detail-head h2{color:var(--paper);margin:0}.progress-detail-close,button.progress-detail-close{width:32px;height:32px;color:var(--paper-dim);border:1px solid var(--hair-strong);cursor:pointer;background:0 0;flex-shrink:0;justify-content:center;align-items:center;padding:0;font-size:18px;line-height:1;transition:color .18s,border-color .18s;display:flex}.progress-detail-close:hover{color:var(--paper);border-color:rgba(var(--accent-rgb), .5)}.progress-detail-words{color:var(--paper-dim);margin:18px 0 6px;font-size:16px}.progress-detail-words strong{color:var(--accent-pale);font-size:22px;font-weight:700}.progress-detail-legend{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--paper-faint);gap:16px;margin:4px 0 22px;font-size:11px;display:flex}.progress-detail-legend span{align-items:center;gap:6px;display:flex}.progress-detail-swatch{background:var(--hair-strong);border-radius:1px;width:9px;height:9px;display:inline-block}.progress-detail-swatch.mastered{background:var(--accent)}.progress-detail-swatch.learning{background:rgba(var(--accent-rgb), .4)}.progress-detail-bars{gap:18px;display:grid}.progress-detail-row-label{color:var(--paper);justify-content:space-between;gap:12px;margin-bottom:7px;font-size:14px;display:flex}.progress-detail-row-label span:last-child{font-family:var(--mono);color:var(--paper-dim);font-size:12px}.progress-detail-bar-track{background:var(--hair);height:10px;display:flex;overflow:hidden}.progress-detail-bar-seg{height:100%;transition:width .5s cubic-bezier(.2,.8,.3,1)}.progress-detail-bar-seg.mastered{background:linear-gradient(90deg, var(--accent-deep), var(--accent))}.progress-detail-bar-seg.learning{background:rgba(var(--accent-rgb), .35)}.progress-detail-row-note{font-family:var(--mono);color:var(--paper-faint);margin-top:6px;font-size:11.5px}.admin-panel-layer{z-index:240;pointer-events:none;position:fixed;inset:0}.admin-panel{pointer-events:auto;background:linear-gradient(145deg, rgba(var(--accent-rgb),.055), #080c0f1f 58%), rgba(var(--ink-rgb),.96);-webkit-backdrop-filter:blur(14px)saturate(.65);backdrop-filter:blur(14px)saturate(.65);border:1px solid var(--hair-strong);border-top-color:#e08b7ab8;width:min(100% - 40px,560px);max-height:calc(100dvh - 104px);padding:22px;position:absolute;top:84px;right:20px;overflow-y:auto;box-shadow:0 24px 70px #000000c7,inset 0 1px #ffffff06}.admin-panel-head{cursor:move;touch-action:none;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:flex-start;gap:20px;margin:-22px -22px 0;padding:22px 22px 14px;display:flex}.admin-panel-kicker,.admin-command-group h3,.admin-panel-shortcut{font-family:var(--mono);text-transform:uppercase;letter-spacing:.16em}.admin-panel-kicker{color:#e08b7a;margin-bottom:7px;font-size:9px}.admin-panel h2{color:var(--paper);margin:0}.admin-panel-close{width:34px;height:34px;color:var(--paper-dim);border:1px solid var(--hair-strong);cursor:pointer;background:0 0;flex:none;padding:0;font-size:22px;line-height:1}.admin-panel-close:hover{color:var(--paper);border-color:rgba(var(--accent-rgb),.55)}.admin-panel-status{color:var(--paper-dim);background:var(--ink-2);border:1px solid var(--hair);font-family:var(--mono);letter-spacing:.08em;flex-wrap:wrap;gap:7px 18px;margin-top:20px;padding:12px 14px;font-size:10px;display:flex}.admin-panel-warning{color:#e08b7a;margin:9px 0 0;font-size:11px}.admin-command-group{margin-top:24px}.admin-command-group h3{color:var(--paper-faint);margin:0 0 10px;font-size:9px;font-weight:500}.admin-command-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;display:grid}.admin-command-grid-four{grid-template-columns:repeat(4,minmax(0,1fr))}.admin-command-grid button{min-height:40px;color:var(--paper-dim);background:var(--ink-2);border:1px solid var(--hair-strong);font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;padding:10px 12px;font-size:10px}.admin-command-grid button:hover:not(:disabled){color:var(--paper);border-color:rgba(var(--accent-rgb),.55)}.admin-command-grid button:disabled{opacity:.36;cursor:not-allowed}.admin-command-grid .admin-run{color:var(--accent);border-color:rgba(var(--accent-rgb),.45)}.admin-command-grid .admin-stop,.admin-command-grid .admin-danger{color:#e08b7a;border-color:#e08b7a80}.admin-command-group p{color:var(--paper-faint);margin:10px 0 0;font-size:12px;line-height:1.55}.admin-panel-shortcut{color:var(--paper-faint);border-top:1px solid var(--hair);text-align:right;margin-top:24px;padding-top:14px;font-size:9px}.settings-danger-zone{border-color:#e08b7a4d}.danger-btn{color:#e08b7a;border-color:#e08b7a73}.danger-btn:hover{color:#f0a696;background:#e08b7a12;border-color:#e08b7abf}.volume-row{align-items:center;gap:16px;padding:6px 4px;display:flex}.volume-row input[type=range]{appearance:none;background:var(--hair-strong);cursor:pointer;outline:none;flex:1;height:2px}.volume-row input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--accent);width:14px;height:14px;box-shadow:0 0 10px rgba(var(--accent-rgb), .55);cursor:pointer;border-radius:50%}.volume-row input[type=range]::-moz-range-thumb{background:var(--accent);width:14px;height:14px;box-shadow:0 0 10px rgba(var(--accent-rgb), .55);cursor:pointer;border:none;border-radius:50%}.volume-value{text-align:right;width:5ch;font-family:var(--mono);color:var(--paper-dim);font-variant-numeric:tabular-nums;flex:none;font-size:11px}.celebrate{justify-content:center;margin:4px 0 10px;display:flex}.celebrate svg{overflow:visible}.celebrate.pulse svg{animation:1.5s cubic-bezier(.2,.8,.3,1) restore}@keyframes restore{0%{opacity:.25;filter:brightness(.5);transform:scale(.72)}45%{opacity:1;filter:brightness(1.9);transform:scale(1.14)}to{opacity:1;filter:brightness();transform:scale(1)}}@media (prefers-reduced-motion:reduce){.celebrate.pulse svg{animation:none}.gloss-details,.gloss-placeholder{transition:none}}.slab.restored{border-top-color:rgba(var(--accent-rgb), .55);background:radial-gradient(120% 90% at 50% 0%, rgba(var(--accent-rgb), .13), transparent 62%), #ffffff04}.restore-line{font-family:var(--mono);justify-content:center;align-items:baseline;gap:12px;margin-top:4px;font-size:13px;display:flex}.restore-was{color:var(--paper-faint);text-decoration:line-through}.restore-arrow{color:var(--paper-faint)}.restore-now{color:var(--accent);text-shadow:0 0 22px rgba(var(--accent-rgb), .55);font-size:17px}.rank-up{background:linear-gradient(#d4a24c17,#0000);border:1px solid #d4a24c59;justify-content:center;align-items:center;gap:14px;margin-top:20px;padding:14px;display:flex}.rank-up-tag{font-family:var(--mono);letter-spacing:.26em;text-transform:uppercase;color:var(--gold);font-size:9px}.rank-up-name{font-size:19px}.rank-up-note{font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--paper-faint);font-size:9.5px}.key-glyph{width:30px;height:30px;display:block}.node{cursor:pointer}.node-progress-label{font-family:var(--mono);letter-spacing:.04em;text-anchor:middle;fill:var(--accent-pale);opacity:0;stroke:var(--ink);stroke-width:4px;paint-order:stroke;pointer-events:none;font-size:10.5px;transition:opacity .18s}.node:hover .node-progress-label,.node:focus-visible .node-progress-label{opacity:1}.node-label{font-family:var(--display);letter-spacing:0;text-anchor:middle;fill:var(--paper-dim);opacity:.9;pointer-events:none;font-size:13.25px;font-weight:500;transition:fill .3s,opacity .3s}.node-label.lit{fill:var(--paper);opacity:1}.node:hover .node-label,.node:focus-visible .node-label{fill:var(--accent-pale);opacity:1}.node-body{transform-box:fill-box;transform-origin:50%;transition:transform .32s cubic-bezier(.2,.8,.3,1)}.node:hover .node-body,.node:focus-visible .node-body{transform:scale(1.07)}.node:focus-visible{outline:none}@keyframes gem-spin{to{transform:rotate(360deg)}}.gem-spin{animation:80s linear infinite gem-spin}@keyframes gem-shine{0%,to{opacity:.1}50%{opacity:.9}}.gem-shine{transform-box:fill-box;transform-origin:50%;animation:4s ease-in-out infinite gem-shine}@keyframes star-spin{to{transform:rotate(360deg)}}.star-spin{transform-box:fill-box;transform-origin:50%;animation:46s linear infinite star-spin}.orbit-spin{animation:30s linear infinite star-spin}@keyframes gem-tumble{0%,to{transform:perspective(900px)rotateY(0)rotateX(0)}25%{transform:perspective(900px)rotateY(24deg)rotateX(-5deg)}75%{transform:perspective(900px)rotateY(-24deg)rotateX(5deg)}}.node:hover .gem-hover,.node:focus-visible .gem-hover{animation:1.6s ease-in-out gem-tumble}@keyframes highlight-sweep{0%,to{opacity:.7;transform:translate(0)scale(1)}25%{opacity:1;transform:translate(7px)scale(1.15)}75%{opacity:.55;transform:translate(-7px)scale(.9)}}.gem-highlight{transform-box:fill-box;transform-origin:50%}.node:hover .gem-highlight,.node:focus-visible .gem-highlight{animation:1.6s ease-in-out highlight-sweep}@keyframes wire-surge{to{stroke-dashoffset:-20px}}.wire-surge{animation:1.4s linear infinite wire-surge}@keyframes twinkle{0%,to{opacity:.55;transform:scale(.86)}50%{opacity:1;transform:scale(1.1)}}.twinkle{transform-box:fill-box;transform-origin:50%;animation:3.2s ease-in-out infinite twinkle}@keyframes flower-sway{0%,to{transform:rotate(-2.6deg)}50%{transform:rotate(2.8deg)}}.flower-sway{animation:5s ease-in-out infinite flower-sway}@keyframes leaf-flutter{0%,to{transform:rotate(-5deg)}50%{transform:rotate(6deg)}}.leaf-flutter{animation:3.4s ease-in-out infinite leaf-flutter}@keyframes window-flicker{0%,2%,to{opacity:.88}3%,6%{opacity:.14}7%,41%{opacity:.82}42%,44%{opacity:.1}45%,74%{opacity:.9}75%,77%{opacity:.3}78%{opacity:.9}}.window-flicker{animation:7s linear infinite window-flicker}@keyframes beacon-blink{0%,88%,to{opacity:.2}90%,94%{opacity:1}92%{opacity:.35}}.beacon-blink{animation:3.2s ease-in-out infinite beacon-blink}@media (prefers-reduced-motion:reduce){.gem-spin,.gem-shine,.star-spin,.orbit-spin,.twinkle,.flower-sway,.leaf-flutter,.window-flicker,.beacon-blink,.wire-surge,.node:hover .gem-hover,.node:focus-visible .gem-hover,.node:hover .gem-highlight,.node:focus-visible .gem-highlight{animation:none}}button:focus-visible{outline:1px solid var(--accent-pale);outline-offset:3px}@media (width<=1120px){.learning-home-top{grid-template-columns:repeat(2,minmax(0,1fr))}.home-practice{grid-column:1/-1}.home-practice-actions{grid-template-columns:repeat(2,minmax(0,1fr))}.learning-web-overview{grid-template-columns:minmax(240px,.5fr) minmax(440px,1fr)}.rail{max-height:none;padding:20px;position:static;overflow:visible}#web{height:clamp(340px,100dvh - 460px,480px)}}@media (width<=780px){.learning-home-top{grid-template-columns:1fr}.home-practice{grid-column:auto}.home-practice-actions{grid-template-columns:1fr}.continue-card{flex-direction:column;align-items:flex-start}.continue-button{width:100%}.continue-practice-actions{flex-basis:auto;width:100%}.learning-web-overview{grid-template-columns:1fr}.stage-head{padding:0}.settings-grid{grid-template-columns:1fr}.settings-wide{grid-column:auto}}@media (width<=680px){.rank-panel{grid-template-columns:1fr;gap:18px;padding:17px 18px}.rank-panel .rank-next{text-align:left}}@media (width<=600px){.admin-panel{width:calc(100% - 20px);max-height:calc(100dvh - 80px);padding:20px;top:70px;right:10px}.admin-panel-head{margin:-20px -20px 0;padding:20px 20px 14px}.admin-command-grid-four{grid-template-columns:repeat(2,minmax(0,1fr))}.masthead{padding:16px 20px 14px}main{padding:22px 18px 34px}.web-wrap{margin-right:-18px;padding-right:18px;overflow-x:auto}#web{width:760px;height:430px}}html{-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;min-width:0}body,#root{min-width:0}#root{min-height:100%}button,summary{touch-action:manipulation}input,textarea,select{max-width:100%}.lesson-top-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:10px;display:flex}.mobile-session-action,.mobile-session-tools{display:none}.slab-han,.slab-en,.slab-prompt,.freetalk-prompt-text,.freetalk-transcript,.freetalk-card-text,.theme-name,.theme-blurb,.rail-note,.sync-warning{overflow-wrap:anywhere}.freetalk-prompt-text,.freetalk-transcript,.freetalk-card-text{min-width:0}.review-card>.slab-tag{text-align:center;width:calc(100% - 32px);max-width:34rem;line-height:1.45}.fsrs-control input[type=range],.volume-row input[type=range]{background:linear-gradient(var(--hair-strong), var(--hair-strong)) center / 100% 2px no-repeat;height:28px;margin-block:0}.fsrs-control input[type=range]::-webkit-slider-thumb{width:18px;height:18px}.volume-row input[type=range]::-webkit-slider-thumb{width:18px;height:18px}.fsrs-control input[type=range]::-moz-range-thumb{width:18px;height:18px}.volume-row input[type=range]::-moz-range-thumb{width:18px;height:18px}.new-card-dialog-backdrop,.progress-detail-backdrop{overscroll-behavior:contain;padding-top:max(20px, env(safe-area-inset-top));padding-right:max(20px, env(safe-area-inset-right));padding-bottom:max(20px, env(safe-area-inset-bottom));padding-left:max(20px, env(safe-area-inset-left));overflow-y:auto}.new-card-dialog,.progress-detail{max-height:calc(100dvh - 40px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overscroll-behavior:contain;overflow-y:auto}.progress-detail-legend{flex-wrap:wrap}@media (hover:hover) and (pointer:fine){.freetalk-prompt-image-frame:hover{z-index:5;transform:scale(1.5)}}@media (hover:none),(pointer:coarse){.freetalk-prompt-image-frame:hover{transform:none}.hz-word:hover>.hz-word-tip,.hz-char:hover>.hz-pinyin-tip{opacity:0;visibility:hidden}}@media (pointer:coarse){.chrono button,.web-fullscreen-toggle,.web-zoom-controls button:not(.web-zoom-reset),.web-zoom-reset,.pinyin-toggle,.tone-guide-inline-toggle,.hanzi-size-controls button,.audio-repeat-control summary,.audio-repeat-presets button,.audio-repeat-menu form button,.sentence-audio-btn,.freetalk-card-accept,.freetalk-card-reject,.progress-detail-close,.admin-panel-close{min-width:44px;min-height:44px}.fsrs-control input[type=range]::-webkit-slider-thumb{width:24px;height:24px}.volume-row input[type=range]::-webkit-slider-thumb{width:24px;height:24px}.fsrs-control input[type=range]::-moz-range-thumb{width:24px;height:24px}.volume-row input[type=range]::-moz-range-thumb{width:24px;height:24px}}@media (width<=780px){.masthead{padding-right:max(20px, env(safe-area-inset-right));padding-left:max(20px, env(safe-area-inset-left));gap:14px}.chrono{flex-wrap:nowrap;gap:6px;margin-left:auto}main{padding-right:max(20px, env(safe-area-inset-right));padding-bottom:max(34px, env(safe-area-inset-bottom));padding-left:max(20px, env(safe-area-inset-left));gap:22px}.mobile-session-action{display:inline-flex}.mobile-session-tools{justify-content:center;margin-top:16px;display:flex}.continue-card{gap:18px;padding:18px}.continue-practice-actions{flex-basis:auto}.key{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;display:grid}.lesson-top{margin-bottom:24px}.lesson-practice{width:100%}.glossary{margin-top:44px}.new-card-dialog,.progress-detail{width:min(100%,560px)}.settings-section{padding:20px}.settings-grid{gap:18px}}@media (width<=600px){.masthead{padding-top:max(12px, env(safe-area-inset-top));padding-right:max(12px, env(safe-area-inset-right));padding-bottom:12px;padding-left:max(12px, env(safe-area-inset-left));flex-wrap:nowrap;gap:10px}.mark{gap:8px;min-width:0}.mark .wordmark{display:block}.mark .wordmark>:not(.hsk-badge){display:none}.mark .hsk-badge{margin-top:0;padding:3px 9px 4px}.mark .hsk-badge-label{font-size:8.5px}.chrono-label{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.chrono-day{margin-right:2px;font-size:17px}.chrono-day:before{content:"day ";color:var(--paper-faint);font-size:10px}.chrono button{min-height:44px}.chrono button.icon-btn{width:44px;height:44px}.chrono button.chrono-signout{border-radius:999px;min-width:0;min-height:34px;padding:6px 13px}main,main.learning-home-mode{padding-top:18px;padding-right:max(16px, env(safe-area-inset-right));padding-bottom:max(30px, env(safe-area-inset-bottom));padding-left:max(16px, env(safe-area-inset-left))}main.auth-shell{padding-top:max(20px, env(safe-area-inset-top));padding-right:max(14px, env(safe-area-inset-right));padding-bottom:max(20px, env(safe-area-inset-bottom));padding-left:max(14px, env(safe-area-inset-left))}.auth-panel{padding:24px 18px}.auth-brand{margin-bottom:24px}.auth-copy{margin:22px 0 18px}.auth-tabs button,.auth-submit{min-height:44px}.auth-form input{min-height:46px;font-size:16px}.learning-home-top{gap:14px}.continue-card{align-items:stretch}.continue-card h1{font-size:clamp(23px,7vw,28px)}.continue-button,.continue-secondary-button{width:100%;min-height:48px}.home-practice{padding:15px}.home-practice-actions button{min-height:54px}.rank-level-test-btn{width:100%;min-height:46px}.rank-progress-trigger{min-height:54px;padding:4px 0}.primary-map{margin-top:14px}.web-wrap{margin-right:0;padding-right:8px;overflow:visible}.web-stage,.crystal-web-layer{width:100%}#web{touch-action:pan-y;width:100%;height:clamp(280px,52svh,390px)}.web-fullscreen-toggle{width:44px;height:44px;top:8px;right:8px}.web-zoom-controls{padding:2px}.web-zoom-controls button:not(.web-zoom-reset){width:44px;height:44px}.web-zoom-reset{min-width:56px;min-height:44px}.web-portal-fab{width:48px;height:48px}.key{padding:10px 12px 12px}.key-item{letter-spacing:.08em;font-size:10.5px}.lesson-top{flex-direction:column;align-items:stretch;gap:14px;padding-bottom:15px}.lesson-top-actions{grid-template-columns:repeat(2,minmax(0,1fr));width:100%;display:grid}.lesson-top-actions>:only-child{grid-column:1/-1}.lesson-top-actions .btn{min-height:44px;padding-inline:12px}.slab{min-height:200px;padding:34px 18px}.review-card{gap:13px;min-height:280px;padding:20px 16px 22px}.review-card>.slab-tag{display:none}.card-aid-controls,.hanzi-size-controls{flex-wrap:wrap;justify-content:center;align-self:stretch;position:static}.pinyin-toggle,.tone-guide-inline-toggle,.hanzi-size-controls button,.audio-repeat-control summary{min-width:0;min-height:30px}.pinyin-toggle,.tone-guide-inline-toggle{gap:4px;padding-inline:8px;font-size:8.5px}.pinyin-toggle:before,.tone-guide-inline-toggle:before{width:5px;height:5px}.hanzi-size-controls button{width:30px;height:30px;font-size:13px}.audio-repeat-control summary{width:34px;font-size:9.5px}.card-aid-controls{gap:5px}.audio-repeat-menu{width:min(220px,100vw - 48px);top:calc(100% + 8px);bottom:auto;left:50%;transform:translate(-50%)}.audio-repeat-presets button,.audio-repeat-menu form button{min-height:44px}.audio-repeat-menu input{min-height:44px;font-size:16px}.slab-han{font-size:min(var(--hanzi-font-size,40px), 14vw)}.slab-han .hz-pinyin-pinned{font-size:min(calc(var(--hanzi-font-size,40px) * .275), 4vw)}.review-card .slab-en,.review-card .slab-prompt{font-size:min(var(--hanzi-font-size,40px), 11vw);overflow-wrap:anywhere;line-height:1.25}.review-card>.pronunciation-stack,.review-card>.slab-prompt,.review-card>.card-answer{flex-direction:column;justify-content:center;align-items:center;display:flex}.review-card>.pronunciation-stack,.review-card>.slab-prompt{flex:.85 auto;justify-content:flex-start;padding-top:4px}.review-card>.card-answer{flex:1.15 auto;gap:8px;padding-top:14px;padding-bottom:2px}.hz-word-tip,.hz-char-tip{white-space:normal;width:max-content;max-width:min(210px,100vw - 48px);line-height:1.35}.hz-word-tip-pos,.hz-word-tip-hsk,.hz-char-tip-word,.hz-char-tip-meaning{white-space:normal}.pronunciation-stack{margin-top:28px}.tone-guide{max-width:calc(100vw - 64px)}.tone-guide svg{height:74px}.acts{gap:8px;margin-top:20px}.acts button,.btn,button.key-act{min-height:44px;padding:11px 14px}.acts>button{flex:120px}.lesson-practice .acts{z-index:40;padding:10px 0 max(10px, env(safe-area-inset-bottom));background:linear-gradient(to bottom, rgba(var(--ink-rgb), 0) 0%, rgba(var(--ink-rgb), .92) 22%, rgba(var(--ink-rgb), .98) 100%);margin-top:14px;position:sticky;bottom:0}.lesson-practice .acts>button{flex:1 1 0;min-width:0;padding-inline:6px}.acts button.q1,.acts button.q2,.acts button.q3,.acts button.q4{font-size:11px}.review-card{justify-content:center;min-height:68dvh;padding-top:14px}.review-card .pronunciation-stack{flex:auto;justify-content:center}.lesson-top{gap:8px;margin-bottom:10px;padding-bottom:10px}.lesson-top .lesson-sub{display:none}.lesson-top h1{font-size:clamp(19px,5.4vw,23px)}.lesson-top-actions .btn{min-height:36px;font-size:10px}.mobile-session-tools .btn{width:100%;min-height:44px}.meter{margin-top:20px}.glossary{margin-top:34px}.gloss{min-height:76px;padding:12px}.gloss-py{font-size:10.5px}.gloss-en{font-size:11.5px}.listen-mode-toggle{width:100%;margin-bottom:14px}.listen-mode-toggle button{flex:1;min-width:0;min-height:44px;padding-inline:10px}.dictation-input-row{flex-direction:column;align-items:stretch;margin-top:20px}.dictation-input-wrap{width:100%;min-height:50px}.dictation-input-row>.key-act{width:100%}.dictation-notice{top:auto;right:max(14px, env(safe-area-inset-right));bottom:max(14px, env(safe-area-inset-bottom));left:max(14px, env(safe-area-inset-left));width:auto;max-height:calc(100dvh - 28px - env(safe-area-inset-top) - env(safe-area-inset-bottom));overflow-y:auto;transform:none}.shadow-encouragement-bubble{white-space:normal;text-align:center;width:min(240px,100vw - 48px);margin:0;animation:none;top:calc(100% + 10px);left:50%;right:auto;transform:translate(-50%)}.shadow-encouragement-bubble:after{border-color:transparent transparent var(--surface-up);inset:auto auto 100% 50%;transform:translate(-50%)}.shadow-correction-card{padding:20px 14px}.shadow-correction-hanzi{font-size:clamp(24px,9vw,32px)}.shadow-record,.shadow-listening{min-height:48px;padding-inline:18px}.shadow-playback-btn{min-height:44px}.freetalk-slab{padding-inline:16px}.freetalk-prompt{flex-wrap:wrap;gap:10px;width:100%}.freetalk-prompt-image-frame{width:56px;height:56px}.freetalk-prompt-text{flex:140px;font-size:clamp(18px,6.4vw,22px);line-height:1.45}.freetalk-prompt-lang,.sentence-audio-btn{min-width:44px;min-height:44px}.freetalk-transcript-row{min-width:0}.freetalk-transcript{font-size:clamp(21px,7vw,26px)}.freetalk-card{flex-basis:100%;min-width:0;padding:15px}.freetalk-card-text-row{min-width:0}.freetalk-card-accept,.freetalk-card-reject{width:44px;height:44px}.settings-top{align-items:flex-start;margin-bottom:22px}.settings-section{padding:17px 16px}#settings-view .theme-name{font-size:14px}#settings-view .theme-blurb{font-size:11px;line-height:1.45}.theme-opt{min-height:48px;padding-block:10px}.fsrs-controls{padding:15px 13px}.fsrs-control-heading{gap:10px}.ledger>div{gap:12px}.ledger dt{overflow-wrap:anywhere;min-width:0}.ledger dd{text-align:right;flex:none}.volume-row{gap:10px}.new-card-dialog-backdrop,.progress-detail-backdrop{place-items:center;padding:12px}.new-card-dialog,.progress-detail{max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));padding:21px 18px}.new-card-dialog-actions{grid-template-columns:1fr;display:grid}.new-card-dialog-actions button{width:100%;min-height:44px}.new-card-amount input{min-height:46px;font-size:16px}.progress-detail-close{width:44px;height:44px}.progress-detail-legend{gap:8px 14px}.progress-detail-row-label{align-items:flex-start}.admin-panel-layer{pointer-events:auto;background:#05080e8c}.admin-panel{top:max(10px, env(safe-area-inset-top));bottom:max(10px, env(safe-area-inset-bottom));max-height:none}.admin-panel-head{cursor:default;touch-action:pan-y}.admin-command-grid button{min-height:44px}.admin-panel-shortcut{display:none}.completion-stamp{padding:6px 10px;font-size:20px;top:12px;right:12px}.listen-complete-slab{gap:24px;padding-top:70px}.rank-up{flex-wrap:wrap}}@media (width<=420px){.fullscreen-toggle{display:none!important}.chrono{gap:4px}.chrono button.chrono-signout{padding-inline:11px}.auth-panel{border-left:0;border-right:0}.key{grid-template-columns:1fr}.rank-panel{padding:15px}.level-test-progress{gap:2px}.level-test-option{min-height:48px}.progress-detail-row-label{flex-direction:column;gap:2px}.progress-detail-row-label span:last-child{text-align:left}.admin-command-grid{grid-template-columns:1fr}.admin-command-grid-four{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=350px){.auth-brand .wordmark,.logo-fu{display:none}.logo-badge-flip{width:38px;height:38px}.chrono-day:before{content:"d"}.slab{padding-inline:14px}.settings-section{padding-inline:13px}}@media (height<=520px) and (orientation:landscape){.masthead{padding-top:8px;padding-bottom:8px}main{padding-top:14px}.lesson-top{margin-bottom:16px}#web{height:min(250px,58dvh)}.new-card-dialog,.progress-detail{max-height:calc(100dvh - 16px);padding-block:16px}.dictation-notice{top:8px;bottom:8px}}.primary-map--lattice{box-shadow:none;background:0 0;border:none;overflow:visible}.lattice-root{flex-direction:column;gap:10px;display:flex}.lattice-hint{color:var(--paper-faint);margin:0;padding:0 6px;font-size:13px}.lattice-canvas{background:var(--ink);touch-action:pan-y;border-radius:22px;width:100%;position:relative;overflow:hidden}.lattice-edges{width:100%;height:100%;position:absolute;inset:0}.lattice-edge{stroke-linecap:round}.lattice-edge--faint{stroke:var(--paper-faint);opacity:.2;stroke-dasharray:2 9}.lattice-edge--solid{stroke:var(--paper-faint);opacity:.4}.lattice-edge--bright{stroke:var(--accent);opacity:.85}.lattice-edge--long{opacity:.13}.lattice-edge--bright.lattice-edge--long{opacity:.5}.lattice-canvas{background:var(--ink)}.lattice-node{cursor:pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none;flex-direction:column;align-items:center;gap:6px;width:84px;min-width:44px;min-height:44px;padding:0;display:flex;position:absolute;transform:translate(-50%,-50%)}.lattice-node-shape{width:68px;height:68px;font-family:var(--han);justify-content:center;align-items:center;font-weight:700;line-height:1;display:flex;position:relative}.lattice-node--new .lattice-node-shape:before,.lattice-node--learning .lattice-node-shape:before,.lattice-node--fading .lattice-node-shape:before{content:"";clip-path:inherit;position:absolute}.lattice-node--new .lattice-node-shape{clip-path:polygon(25% 5%,75% 5%,100% 50%,75% 95%,25% 95%,0% 50%);background:var(--paper-faint);width:64px;height:62px;color:var(--paper-faint);opacity:.55}.lattice-node--new .lattice-node-shape:before{background:var(--ink);inset:1.5px}.lattice-node--thick.lattice-node--new .lattice-node-shape:before{inset:2.5px}.lattice-node--learning .lattice-node-shape,.lattice-node--fading .lattice-node-shape{clip-path:polygon(50% 0%,100% 50%,50% 100%,0% 50%);background:var(--accent);width:66px;height:82px;color:var(--ink)}.lattice-node--learning .lattice-node-shape:before,.lattice-node--fading .lattice-node-shape:before{background:var(--lattice-young);inset:2.5px}.lattice-node--thick.lattice-node--learning .lattice-node-shape:before,.lattice-node--thick.lattice-node--fading .lattice-node-shape:before{inset:4px}.lattice-node--fading .lattice-node-shape{opacity:.72}.lattice-node--mature .lattice-node-shape{background:var(--accent);border:3.5px solid var(--accent-deep);box-shadow:0 0 0 1px rgba(var(--accent-rgb), .9), 0 0 14px rgba(var(--accent-rgb), .3);color:var(--ink);border-radius:50%;font-weight:900}.lattice-node--thick.lattice-node--mature .lattice-node-shape{border-width:4.5px}.lattice-node--mature .lattice-word{font-weight:900}.lattice-node--new .lattice-node-label{color:var(--paper-faint);opacity:.7}.lattice-node-halo{border:1.5px solid rgba(var(--accent-rgb), .6);pointer-events:none;border-radius:50%;width:82px;height:82px;position:absolute;top:-7px;left:50%;transform:translate(-50%)}.lattice-node--thick .lattice-node-halo{border-width:2.5px}.lattice-word{justify-content:center;align-items:center;transition:opacity .65s ease-in-out,font-size .65s ease-in-out;display:flex;position:absolute;inset:0}.lattice-node-label{color:var(--paper-dim);text-align:center;overflow-wrap:anywhere;max-width:84px;font-size:10.5px;line-height:1.2}.lattice-summary{color:var(--paper-faint);margin:0;padding:0 6px;font-size:13px}.lattice-preview-overlay{z-index:60;background:rgba(var(--ink-rgb), .62);padding:max(24px, env(safe-area-inset-top)) 24px max(24px, env(safe-area-inset-bottom));justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.lattice-preview-card{background:var(--ink-2);border:1px solid var(--hair-strong);border-radius:16px;width:min(320px,100%);padding:20px}.lattice-preview-card h3{font-family:var(--display);margin:0 0 4px}.lattice-preview-subtitle{color:var(--paper-faint);margin:0 0 14px;font-size:13px}.lattice-preview-card dl{grid-template-columns:1fr 1fr;gap:10px 12px;margin:0 0 18px;display:grid}.lattice-preview-card dl div{flex-direction:column;gap:2px;display:flex}.lattice-preview-card dt{text-transform:uppercase;letter-spacing:.04em;color:var(--paper-faint);margin:0;font-size:11px}.lattice-preview-card dd{color:var(--paper);margin:0;font-size:16px}.home-actions{flex-direction:column;gap:8px;margin-bottom:12px;display:flex}.home-actions-row{flex-wrap:wrap;gap:6px;display:flex}.home-action{min-height:44px;font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--paper-dim);background:var(--surface);border:1px solid var(--hair);cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:10px;flex:auto;justify-content:center;align-items:center;gap:6px;padding:8px 12px;font-size:11px;transition:opacity .18s,border-color .18s,color .18s,background .18s;display:inline-flex;position:relative}.home-action--dim{opacity:.55}.home-action--open{color:var(--paper);border-color:var(--hair-strong);background:var(--surface-up)}.home-action--glow{color:var(--accent);border-color:rgba(var(--accent-rgb), .55);background:rgba(var(--accent-rgb), .1);box-shadow:0 0 0 1px rgba(var(--accent-rgb), .18), 0 0 16px rgba(var(--accent-rgb), .22);animation:2.6s ease-in-out infinite homeActionPulse}@keyframes homeActionPulse{0%,to{box-shadow:0 0 0 1px rgba(var(--accent-rgb), .18), 0 0 14px rgba(var(--accent-rgb), .18)}50%{box-shadow:0 0 0 1px rgba(var(--accent-rgb), .3), 0 0 22px rgba(var(--accent-rgb), .34)}}@media (prefers-reduced-motion:reduce){.home-action--glow{animation:none}}.home-action-badge{background:rgba(var(--accent-rgb), .22);min-width:18px;color:var(--accent);letter-spacing:.02em;border-radius:9px;padding:1px 5px;font-size:10px}.home-action-panel{border:1px solid var(--hair);background:var(--surface);border-radius:12px;flex-direction:column;gap:10px;padding:12px 14px;display:flex}.home-action-detail{color:var(--paper-dim);margin:0;font-size:13px;line-height:1.45}.home-action-panel .key-act{min-height:44px}.lattice-relic{pointer-events:none;justify-content:center;align-items:center;gap:10px;padding:0 18px;display:flex;position:absolute;left:0;right:0}.lattice-relic:before,.lattice-relic:after{content:"";background:linear-gradient(90deg, transparent, var(--relic-color));opacity:.5;flex:auto;height:1px}.lattice-relic:after{background:linear-gradient(90deg, var(--relic-color), transparent)}.lattice-relic-gem{background:var(--relic-color);width:16px;height:16px;box-shadow:0 0 12px var(--relic-color), 0 0 0 4px #00000040;border-radius:3px;flex:none;transform:rotate(45deg)}.lattice-relic-label{font-family:var(--mono);letter-spacing:.2em;text-transform:uppercase;color:var(--relic-color);text-shadow:0 0 14px var(--relic-color);flex:none;font-size:11px}.hz-word>.hz-word-tip.is-open{opacity:1;visibility:visible}
