:root{--bg: #f6f1e7;--panel: #fffdf7;--panel-2: #f1ead9;--ink: #2a2a30;--muted: #837c6e;--accent: #c8472e;--accent-soft: #f3d9d2;--indigo: #3a5a8c;--indigo-soft: #dde5f0;--ok: #4a7c59;--ok-soft: #dceadf;--bad: #b3423a;--gold: #b98a2f;--border: #e2dac7;--shadow: 0 1px 3px rgba(60, 50, 30, .08), 0 4px 14px rgba(60, 50, 30, .06);--radius: 12px;--font-jp: "Hiragino Kaku Gothic ProN", "Yu Gothic UI", "Yu Gothic", "Meiryo", sans-serif;--font-jp-serif: "UD Digi Kyokasho N-R", "Hiragino Mincho ProN", "Yu Mincho", serif}[data-theme=dark]{--bg: #16161c;--panel: #1f1f28;--panel-2: #262631;--ink: #ecebe4;--muted: #97928a;--accent: #e06a4f;--accent-soft: #3c2b27;--indigo: #7c9cc9;--indigo-soft: #252c3a;--ok: #6faf82;--ok-soft: #24322a;--bad: #d76b62;--gold: #d4a94c;--border: #31313d;--shadow: 0 1px 3px rgba(0, 0, 0, .4), 0 4px 14px rgba(0, 0, 0, .3)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:Segoe UI,system-ui,-apple-system,sans-serif;font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased}.jp{font-family:var(--font-jp)}#root{min-height:100dvh}.shell{max-width:1180px;margin:0 auto;padding:0 24px calc(32px + env(safe-area-inset-bottom))}@media(max-width:640px){.shell{padding-left:14px;padding-right:14px}}.topbar{display:flex;align-items:center;gap:10px;row-gap:8px;flex-wrap:wrap;padding:12px 0;margin-bottom:6px;position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}@media(max-width:560px){.topbar{gap:8px}.topbar h1{font-size:1.1rem}.icon-btn{width:36px;height:36px}}.topbar h1{font-size:1.2rem;margin:0;font-weight:700;letter-spacing:.02em;white-space:nowrap}.topbar h1 .jp{color:var(--accent);margin-right:6px}.topbar .spacer{flex:1}.chip{display:inline-flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--border);border-radius:999px;padding:4px 12px;font-size:.85rem;font-weight:600;white-space:nowrap}.chip .muted{color:var(--muted);font-weight:400}.chip svg,.stat .value svg{flex-shrink:0}.stat-chip{gap:5px;padding:5px 11px}.i-accent{color:var(--accent)}.i-gold{color:var(--gold)}.i-ok{color:var(--ok)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:999px;background:var(--panel);border:1px solid var(--border);color:var(--ink);cursor:pointer;text-decoration:none;flex-shrink:0;transition:border-color .15s ease,background .15s ease}.icon-btn:hover{border-color:var(--muted);background:var(--panel-2)}.topbar-actions{display:inline-flex;gap:8px;flex-shrink:0}.speak-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;border:1px solid var(--border);background:var(--panel);color:var(--indigo);cursor:pointer;flex-shrink:0;vertical-align:middle;transition:border-color .12s ease,background .12s ease}.speak-btn:hover{border-color:var(--muted);background:var(--panel-2)}.speak-btn:active{transform:scale(.94)}.speak-btn.tiny{width:26px;height:26px}.backlink{display:inline-flex;align-items:center;gap:4px;color:var(--indigo);text-decoration:none;font-weight:600;font-size:.95rem;padding:6px 0}.profile-head{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.profile-avatar{width:56px;height:56px;border-radius:999px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.5rem;font-weight:700;flex-shrink:0}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:inherit;font-weight:600;border:1px solid var(--border);background:var(--panel);color:var(--ink);border-radius:10px;padding:10px 18px;min-height:44px;cursor:pointer;transition:transform .05s ease,background .15s ease,border-color .15s ease;touch-action:manipulation}.btn:hover{border-color:var(--muted)}.btn:active{transform:scale(.97)}.btn:disabled{opacity:.5;cursor:default}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.primary:hover{filter:brightness(1.08)}.btn.ghost{background:transparent}.btn.small{min-height:36px;padding:6px 12px;font-size:.9rem}.input{font:inherit;width:100%;padding:10px 14px;min-height:44px;border-radius:10px;border:1px solid var(--border);background:var(--panel);color:var(--ink)}.input:focus{outline:2px solid var(--indigo);outline-offset:1px;border-color:transparent}.muted{color:var(--muted)}.small{font-size:.85rem}.center{text-align:center}.stack{display:flex;flex-direction:column;gap:14px}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}h2{font-size:1.25rem;margin:0 0 4px}h3{font-size:1rem;margin:0}.bar{height:8px;border-radius:999px;background:var(--panel-2);overflow:hidden}.bar>div{height:100%;border-radius:999px;background:var(--accent);transition:width .3s ease}.bar.indigo>div{background:var(--indigo)}.bar.ok>div{background:var(--ok)}.bar.gold>div{background:var(--gold)}.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px}.stat{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:12px 14px}.stat .value{font-size:1.5rem;font-weight:700;line-height:1.2;display:inline-flex;align-items:center;gap:6px}.stat .label{font-size:.8rem;color:var(--muted)}.stat-review{display:flex;justify-content:space-between;align-items:center;gap:10px;border-color:var(--accent)}.stat-review .btn{flex-shrink:0}.path{display:flex;flex-direction:column;align-items:center;gap:20px;padding:10px 0 6px;position:relative}.path:before{content:"";position:absolute;top:24px;bottom:24px;left:50%;width:4px;transform:translate(-50%);background:repeating-linear-gradient(var(--border) 0 10px,transparent 10px 20px);z-index:0}.path-row{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;gap:6px}.path-ring{width:78px;height:78px;border-radius:999px;padding:5px;border:none;background:var(--border);cursor:pointer;display:grid;place-items:center;transition:transform .1s ease}.path-ring:hover{transform:translateY(-2px)}.path-ring.locked{cursor:default}.path-ring.locked:hover{transform:none}.path-node{width:100%;height:100%;border-radius:999px;background:var(--panel);border:1px solid var(--border);color:var(--accent);display:grid;place-items:center;font-size:1.9rem;font-weight:700;box-shadow:var(--shadow)}.path-ring.done .path-node{background:var(--ok);color:#fff;border-color:var(--ok)}.path-ring.locked .path-node{background:var(--panel-2);color:var(--muted);box-shadow:none}.path-ring.current{animation:path-pulse 1.8s ease-in-out infinite}.path-ring.current .path-node{border-color:var(--accent);border-width:2px}@keyframes path-pulse{0%,to{box-shadow:0 0 color-mix(in srgb,var(--accent) 45%,transparent)}50%{box-shadow:0 0 0 8px transparent}}.path-node.big{width:54px;height:54px;font-size:1.5rem;flex-shrink:0}.path-node.big.done{background:var(--ok);color:#fff;border-color:var(--ok)}.path-label{font-size:.78rem;font-weight:600;text-align:center;max-width:150px;line-height:1.2}.sheet-overlay{position:fixed;inset:0;z-index:50;background:#14100a6b;display:flex;align-items:flex-end;justify-content:center;padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom))}.sheet{position:relative;width:100%;max-width:460px;animation:sheet-in .16s ease}@keyframes sheet-in{0%{transform:translateY(12px);opacity:0}to{transform:none;opacity:1}}.sheet-close{position:absolute;top:12px;right:12px;width:32px;height:32px;border-radius:999px;border:1px solid var(--border);background:var(--panel-2);color:var(--ink);cursor:pointer;display:grid;place-items:center}@media(min-width:560px){.sheet-overlay{align-items:center}}.chip.small{padding:2px 9px;font-size:.75rem}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.cal-head{text-align:center;padding-bottom:2px}.cal-cell{aspect-ratio:1;border:1px solid var(--border);border-radius:8px;background:var(--panel-2);color:var(--muted);font-size:.82rem;font-weight:600;cursor:pointer;display:grid;place-items:center;transition:transform .08s ease}.cal-cell:hover{transform:translateY(-1px)}.cal-cell.l1{background:color-mix(in srgb,var(--accent) 30%,var(--panel-2));color:var(--ink)}.cal-cell.l2{background:color-mix(in srgb,var(--accent) 55%,var(--panel-2));color:#fff}.cal-cell.l3{background:color-mix(in srgb,var(--accent) 80%,var(--panel-2));color:#fff}.cal-cell.l4{background:var(--accent);color:#fff}.cal-cell.today{border-color:var(--indigo);border-width:2px}.cal-cell.sel{outline:2px solid var(--ink);outline-offset:1px}.shell.has-tabbar{padding-bottom:calc(78px + env(safe-area-inset-bottom))}.tabbar{position:fixed;left:0;right:0;bottom:0;z-index:30;background:color-mix(in srgb,var(--panel) 94%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-top:1px solid var(--border);padding-bottom:env(safe-area-inset-bottom)}.tabbar-inner{max-width:1180px;margin:0 auto;display:flex}.tabbar-btn{flex:1;background:none;border:none;cursor:pointer;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 4px 8px;font-size:.72rem;font-weight:600;transition:color .12s ease}.tabbar-btn.active{color:var(--accent)}.tabbar-btn:hover{color:var(--ink)}.tabbar-btn.active:hover{color:var(--accent)}.module-cat{display:flex;flex-direction:column;gap:10px}.module-cat-title{display:flex;align-items:center;gap:7px;margin:4px 0 0;font-size:.95rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.modules-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}.module-card{display:flex;flex-direction:column;align-items:flex-start;gap:4px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:14px;cursor:pointer;font:inherit;color:var(--ink);text-align:left;transition:transform .08s ease,border-color .15s ease}.module-card:hover{transform:translateY(-2px);border-color:var(--muted)}.module-card .icon{font-size:1.5rem;font-family:var(--font-jp);color:var(--accent);font-weight:700}.module-card .name{font-weight:700}.module-card .desc{font-size:.78rem;color:var(--muted);line-height:1.35}.module-card .badge{margin-left:auto;background:var(--accent);color:#fff;font-size:.75rem;font-weight:700;border-radius:999px;padding:1px 8px}.quest{display:flex;align-items:center;gap:10px;padding:8px 0}.quest .bar{flex:1}.quest .check{color:var(--ok);font-weight:700}.heatmap{display:grid;grid-auto-flow:column;grid-template-rows:repeat(7,12px);gap:3px;overflow-x:auto;padding-bottom:4px}.heatmap .cell{width:12px;height:12px;border-radius:3px;background:var(--panel-2)}.heatmap .cell.l1{background:color-mix(in srgb,var(--accent) 30%,var(--panel-2))}.heatmap .cell.l2{background:color-mix(in srgb,var(--accent) 55%,var(--panel-2))}.heatmap .cell.l3{background:color-mix(in srgb,var(--accent) 80%,var(--panel-2))}.heatmap .cell.l4{background:var(--accent)}.session{max-width:560px;margin:0 auto}.glyph-xl{font-family:var(--font-jp);font-size:clamp(72px,22vw,128px);line-height:1.15;text-align:center;margin:8px 0}.glyph-lg{font-family:var(--font-jp);font-size:clamp(40px,11vw,64px);line-height:1.2}.prompt-fr{font-size:1.5rem;font-weight:700;text-align:center;margin:16px 0}.kana-preview{font-family:var(--font-jp);font-size:1.6rem;min-height:2.2rem;text-align:center;letter-spacing:.1em}.answer-ok{color:var(--ok);font-weight:700}.answer-bad{color:var(--bad);font-weight:700}.grade-row{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.grade-row .btn{flex-direction:column;gap:0;padding:8px 4px}.grade-row .btn .interval{font-size:.72rem;font-weight:400;color:var(--muted)}.grade-row .btn.suggested{outline:2px solid var(--indigo)}.grade-again{border-bottom:3px solid var(--bad)}.grade-hard{border-bottom:3px solid var(--gold)}.grade-good{border-bottom:3px solid var(--ok)}.grade-easy{border-bottom:3px solid var(--indigo)}.reveal{background:var(--panel-2);border-radius:var(--radius);padding:14px}.choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px}.choices .btn{font-family:var(--font-jp);font-size:1.2rem}.choices .btn.big{font-size:2rem;min-height:64px}.choices .btn.correct{background:var(--ok);border-color:var(--ok);color:#fff}.choices .btn.wrong{background:var(--bad);border-color:var(--bad);color:#fff}.tiles{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.tile{font-family:var(--font-jp);font-size:1.4rem;font-weight:600;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:8px 14px;min-width:48px;min-height:48px;cursor:pointer;color:var(--ink);box-shadow:var(--shadow)}.tile:disabled{opacity:.35;cursor:default}.tile-slots{min-height:56px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:center;border-bottom:2px dashed var(--border);padding:6px;font-family:var(--font-jp);font-size:1.6rem}.trace-canvas-wrap{position:relative;width:min(320px,84vw);aspect-ratio:1;margin:0 auto;border:1px solid var(--border);border-radius:var(--radius);background:linear-gradient(var(--border) 1px,transparent 1px) center / 100% 50.5% no-repeat,linear-gradient(90deg,var(--border) 1px,transparent 1px) center / 50.5% 100% no-repeat,var(--panel);touch-action:none}.trace-canvas-wrap canvas{position:absolute;inset:0;width:100%;height:100%}.battle-layout{display:grid;grid-template-columns:1fr 230px;gap:10px;align-items:start}.battle-log{max-height:min(60dvh,520px);overflow-y:auto;display:flex;flex-direction:column;gap:6px}.battle-log h3{margin:0}.battle-log .entry{background:var(--panel);border:1px solid var(--border);border-left:3px solid var(--ok);border-radius:8px;padding:5px 10px;font-size:.85rem;line-height:1.4}.battle-log .entry.leak{border-left-color:var(--bad);background:var(--panel-2)}@media(max-width:899px){.battle-layout{grid-template-columns:1fr}.battle-log{max-height:200px}}.battle-arena{position:relative;height:min(60dvh,520px);border:1px solid var(--border);border-radius:var(--radius);background:linear-gradient(180deg,var(--panel) 0%,var(--panel-2) 100%);overflow:hidden}.battle-enemy{position:absolute;display:flex;flex-direction:column;align-items:center;gap:2px;will-change:transform;transition:opacity .2s ease}.battle-word{font-family:var(--font-jp);font-size:1.25rem;font-weight:700;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:2px 10px;white-space:nowrap;box-shadow:var(--shadow)}.battle-word .hit{color:var(--accent)}.battle-enemy.locked .battle-word{border-color:var(--accent);outline:2px solid var(--accent-soft)}.battle-enemy.dying{opacity:0}.battle-hud{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding:8px 0}.battle-input{font-family:var(--font-jp);font-size:1.3rem;text-align:center;letter-spacing:.15em}.hearts{color:var(--bad);font-size:1.1rem;letter-spacing:2px}.battle-setup{display:flex;flex-direction:column;gap:8px;width:100%}.battle-setup .mode-label{font-weight:600;margin-top:6px}.battle-setup .btn.primary{margin-top:10px}.battle-chips{display:flex;flex-wrap:wrap;gap:8px}.battle-chip{font:inherit;font-weight:600;border:1px solid var(--border);background:var(--panel);color:var(--ink);border-radius:999px;padding:7px 14px;min-height:40px;cursor:pointer;transition:transform .05s ease,background .15s ease,border-color .15s ease;touch-action:manipulation}.battle-chip:hover{border-color:var(--muted)}.battle-chip:active{transform:scale(.97)}.battle-chip.active{background:var(--accent);border-color:var(--accent);color:#fff}.battle-choices{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.battle-choices .btn.choice{font-family:var(--font-jp);font-size:1.2rem;min-height:52px}.battle-choices .btn.choice .num{font-family:inherit;font-size:.72rem;color:var(--muted);border:1px solid var(--border);border-radius:6px;padding:0 5px;line-height:1.5}.battle-choices.answer-bad .btn.choice{border-color:var(--bad)}.dialogue-line{display:flex;align-items:flex-start;gap:10px}.dialogue-line .speaker{flex:none;width:26px;height:26px;display:grid;place-items:center;border-radius:50%;background:var(--panel-2);border:1px solid var(--border);font-size:.8rem;font-weight:700;color:var(--muted);margin-top:3px}.dialogue-text{font-family:var(--font-jp);font-size:1.3rem;line-height:1.9}.dialogue-text ruby rt{font-size:.55em;color:var(--muted)}.dialogue-blank{border-bottom:2px solid var(--border);padding:0 4px;border-radius:4px 4px 0 0}.dialogue-blank.current{border-bottom-color:var(--indigo);color:var(--indigo);font-weight:700}.dialogue-blank.correct{border-bottom-color:var(--ok);color:var(--ok)}.dialogue-blank.wrong{border-bottom-color:var(--bad);color:var(--bad)}.forecast{display:flex;align-items:flex-end;gap:6px;height:110px}.forecast-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;height:100%}.forecast-count{font-weight:700;min-height:1.1em}.forecast-track{flex:1;width:100%;display:flex;align-items:flex-end}.forecast-bar{width:100%;min-height:3px;background:var(--indigo);border-radius:5px 5px 0 0;transition:height .25s ease}.forecast-day{white-space:nowrap}.onboard-choice{display:flex;align-items:center;gap:12px;text-align:left;font:inherit;width:100%;border:1px solid var(--border);background:var(--panel);color:var(--ink);border-radius:12px;padding:12px 14px;cursor:pointer;transition:border-color .15s ease,background .15s ease}.onboard-choice:hover{border-color:var(--muted)}.onboard-choice.active{border-color:var(--accent);background:var(--accent-soft)}.onboard-check{flex:none;width:24px;height:24px;display:grid;place-items:center;border-radius:6px;border:1px solid var(--border);color:var(--accent);font-weight:700}.onboard-choice.active .onboard-check{border-color:var(--accent)}.onboard-title{display:block;font-weight:600}.result-list{width:100%;max-width:340px;max-height:260px;overflow-y:auto;display:flex;flex-direction:column;gap:5px;text-align:left}.result-list .entry{background:var(--panel-2);border:1px solid var(--border);border-left:3px solid var(--ok);border-radius:8px;padding:5px 10px;font-size:.9rem}.result-list .entry.leak{border-left-color:var(--bad)}.result-list .review-mark{display:inline-block;width:1.3em;font-weight:700}.stroke-order{width:220px;height:220px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius)}.stroke-grid{stroke:var(--border);stroke-width:1;stroke-dasharray:3 5}.stroke-path{fill:none;stroke:var(--ink);stroke-width:4.5;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1;animation-name:stroke-draw;animation-timing-function:ease;animation-fill-mode:forwards}@keyframes stroke-draw{to{stroke-dashoffset:0}}.stroke-start{fill:var(--accent);opacity:0;animation:stroke-dot 1s ease forwards}@keyframes stroke-dot{0%{opacity:0}12%{opacity:1}55%{opacity:1}to{opacity:0}}.stroke-panel{display:flex;flex-direction:column;align-items:center;gap:8px}.tabs{display:flex;gap:6px;flex-wrap:wrap}.tabs .btn.active{background:var(--indigo);border-color:var(--indigo);color:#fff}.kana-table{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.kana-cell{background:var(--panel);border:1px solid var(--border);border-radius:8px;text-align:center;padding:6px 2px;font:inherit;color:var(--ink);cursor:pointer;transition:border-color .15s ease,transform .05s ease}.kana-cell:hover{border-color:var(--muted)}.kana-cell:active{transform:scale(.96)}.kana-cell .jp{font-size:1.3rem}.kana-cell .romaji{font-size:.7rem;color:var(--muted)}.kana-cell.known{border-color:var(--ok)}.modal-overlay{position:fixed;inset:0;background:#00000073;display:grid;place-items:center;padding:16px;z-index:50}.modal-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;width:100%;max-width:420px;max-height:88dvh;overflow-y:auto}.lesson-row{display:flex;align-items:flex-start;gap:10px;width:100%;text-align:left;font:inherit;color:var(--ink);background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;cursor:pointer;transition:border-color .15s ease}.lesson-check{flex:none;width:22px;height:22px;display:grid;place-items:center;border-radius:50%;border:1px solid var(--border);color:var(--ok);font-weight:700;font-size:.8rem;margin-top:1px}.lesson-check.done{border-color:var(--ok)}.lesson-title{display:block;font-weight:600}.lesson-ex{display:flex;align-items:center;gap:10px;padding:6px 10px;background:var(--panel-2);border-radius:8px}.lesson-ex .jp{font-size:1.15rem;font-weight:700;min-width:90px}.lesson-ex ruby rt{font-size:.55em;color:var(--muted)}.lesson-ex .muted{flex:1}.lesson-note{margin:0;padding:8px 12px;background:var(--accent-soft);border-radius:8px;font-size:.9rem}.lesson-table-wrap{overflow-x:auto}.lesson-table{border-collapse:collapse;width:100%}.lesson-table th,.lesson-table td{border:1px solid var(--border);padding:6px 8px;text-align:center;font-size:1.1rem}.lesson-table th{background:var(--panel-2);color:var(--muted);font-weight:600}.lexicon-table{font-family:var(--font-jp);font-size:.95rem}.lexicon-table th,.lexicon-table td{text-align:left;padding:5px 9px}.lexicon-table th{position:sticky;top:0}.lexicon-table td.known{color:var(--ok);font-weight:700}.lex-mot{display:inline-flex;align-items:center;gap:8px}.shiritori-last{color:var(--accent);font-weight:700}.choices .btn.choice-fr{font-family:inherit;flex-direction:column;gap:2px;min-height:54px;line-height:1.2}.choices .btn.choice-fr .jp{font-size:.85rem}.choice-cell{display:flex;flex-direction:column;gap:5px}.choice-cell .btn.choice-fr{width:100%}.choices .reveal-btn{font-family:inherit;font-size:.75rem;min-height:30px;padding:3px 8px;color:var(--muted)}.shiritori-chain{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:center;gap:4px 8px}.shiritori-word{display:inline-flex;flex-direction:column;align-items:center;line-height:1.2}.shiritori-word .jp{font-size:1.05rem}.shiritori-word .romaji{font-size:.68rem}.shiritori-arrow{align-self:center}.word-row{display:flex;align-items:baseline;gap:10px;padding:7px 0;border-bottom:1px solid var(--border)}.word-row .jp{font-size:1.15rem;min-width:110px}.word-row .muted{flex:1}.sentence-jp{font-family:var(--font-jp);font-size:1.6rem;line-height:2.4;text-align:center}.sentence-jp .word{cursor:pointer;border-bottom:2px dotted transparent;margin:0 1px;position:relative}.sentence-jp .word:hover{border-bottom-color:var(--indigo)}.sentence-jp ruby rt{font-size:.6em;color:var(--muted)}.gloss-pop{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:var(--ink);color:var(--bg);font-size:.8rem;font-family:Segoe UI,system-ui,sans-serif;padding:4px 10px;border-radius:8px;white-space:nowrap;z-index:5}.result-xp{font-size:2.2rem;font-weight:800;color:var(--gold);text-align:center}.timer{font-variant-numeric:tabular-nums;font-weight:700}.timer.low{color:var(--bad)}.lesson-row{display:flex;align-items:center;gap:10px;width:100%;font:inherit;text-align:left;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:10px 12px;color:var(--ink);cursor:pointer;transition:border-color .15s ease,transform .05s ease}.lesson-row:hover{border-color:var(--muted)}.lesson-row:active{transform:scale(.99)}.lesson-row.done{border-color:var(--ok)}.lesson-row .glyphs{font-size:1.2rem;flex:1}.lesson-row .title{flex:none}.lesson-row .chip.next{background:var(--accent);border-color:var(--accent);color:#fff}.goju{display:grid;grid-template-columns:auto repeat(5,1fr);gap:4px;width:100%;max-width:420px}.goju-head{display:grid;place-items:center;min-width:22px;font-size:.72rem;font-weight:700;color:var(--muted)}.goju-cell{min-height:50px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;background:var(--panel);border:1px solid var(--border);border-radius:8px;font:inherit;color:var(--ink);padding:3px 2px}button.goju-cell{cursor:pointer}button.goju-cell:hover{border-color:var(--muted)}.goju-cell .jp{font-family:var(--font-jp);font-size:1.15rem;line-height:1.2}.goju-cell .romaji{font-size:.62rem;color:var(--muted)}.goju-cell.gap{visibility:hidden}.goju-cell.hole{background:var(--panel-2);border-style:dashed}.goju-cell.ok{border-color:var(--ok);border-style:solid;background:color-mix(in srgb,var(--ok) 12%,var(--panel))}.goju-cell.bad{border-color:var(--bad);border-style:solid;animation:cell-shake .3s ease}.goju-cell.target{border-color:var(--indigo);border-style:solid}@keyframes cell-shake{25%{transform:translate(-3px)}75%{transform:translate(3px)}}.tile.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 14%,var(--panel))}@media(hover:hover)and (pointer:fine){button[data-key]{position:relative}button[data-key]:after{content:attr(data-key);position:absolute;top:2px;left:6px;font-size:.6rem;font-weight:600;color:var(--muted);font-family:Segoe UI,system-ui,sans-serif;line-height:1;pointer-events:none}}.kbd-hint{display:none}@media(hover:hover)and (pointer:fine){.kbd-hint{display:inline;color:var(--muted)}p.kbd-hint{display:block}}.choices .btn:focus-visible,.tile:focus-visible,.goju-cell:focus-visible,.battle-choices .btn:focus-visible{outline:2px solid var(--indigo);outline-offset:1px}.kana-row{display:flex;gap:6px;align-items:stretch}.kana-row .kana-table{flex:1}.kana-row-learn{font:inherit;font-size:.68rem;font-weight:600;border:1px solid var(--border);background:var(--panel);color:var(--muted);border-radius:8px;padding:0 8px;cursor:pointer;transition:border-color .15s ease,color .15s ease}.kana-row-learn:hover{border-color:var(--accent);color:var(--accent)}@media(max-width:560px){body{font-size:15px}.card{padding:14px}.grade-row .btn{font-size:.85rem}.kana-table{grid-template-columns:repeat(5,1fr)}.word-row .jp{min-width:90px}.goju-cell{min-height:44px}.goju-cell .jp{font-size:1rem}.lesson-row{flex-wrap:wrap}}
