:root{--bg: #1b1d22;--panel: #23262d;--fg: #e6e6e6;--dim: #6f7580;--dimmer: #464b55;--accent: #e2b714;--err: #e5533d;--ok: #7cc36b;--synth: #5aa9f5;--warn: #f0a04b;--jp: "Yu Gothic", "YuGothic", "Meiryo", "Hiragino Sans", "Noto Sans CJK JP", "Noto Sans JP", sans-serif;--mono: "Cascadia Code", "Consolas", "Menlo", monospace;--ui: "Segoe UI", system-ui, -apple-system, sans-serif}*{box-sizing:border-box}html,body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--ui);font-size:15px}button{font:inherit;color:var(--fg);background:var(--panel);border:1px solid var(--dimmer);border-radius:6px;padding:6px 12px;cursor:pointer}button:hover{border-color:var(--dim)}button.on{border-color:var(--accent);color:var(--accent)}button.primary{background:var(--accent);color:#1b1d22;border-color:var(--accent);font-weight:600}button.primary:disabled{opacity:.5;cursor:default}button.big{padding:12px 28px;font-size:17px}button.danger{border-color:var(--err);color:var(--err)}kbd{font-family:var(--mono);font-size:11px;border:1px solid currentColor;border-radius:4px;padding:0 5px;margin-left:6px;opacity:.7}select,input[type=number]{font:inherit;color:var(--fg);background:var(--panel);border:1px solid var(--dimmer);border-radius:6px;padding:6px 10px}input[type=number]{width:70px}h3{margin:18px 0 8px;font-weight:600;color:var(--dim);text-transform:lowercase;letter-spacing:.02em}.dim{color:var(--dim)}.error{color:var(--err);padding:10px}.warn{color:var(--warn)}.msg{padding:8px 0;color:var(--ok)}.grow{flex:1}.app{max-width:1080px;margin:0 auto;padding:0 24px 60px}.topbar{display:flex;align-items:center;gap:18px;padding:18px 0}.brand{font-size:22px;font-weight:700;color:var(--fg);background:none;border:none;padding:0;font-family:var(--jp)}.brand span{color:var(--accent);font-family:var(--ui)}.topbar nav{display:flex;gap:4px}.topbar nav button{background:none;border:none;color:var(--dim)}.topbar nav button.on,.topbar nav button:hover{color:var(--fg)}@media(max-width:600px){.topbar{flex-wrap:wrap;gap:4px 14px;padding:12px 0}.topbar nav{flex-wrap:wrap}.topbar nav button{padding:6px 8px}}.panel{background:var(--panel);border-radius:10px;padding:12px 16px;margin:12px 0}.row{display:flex;align-items:center;gap:8px;padding:6px 0;flex-wrap:wrap}.row>label{min-width:90px;color:var(--dim)}.row.center{justify-content:center;padding:18px 0;gap:14px}.fold{padding:6px 0}.fold>summary{cursor:pointer;width:fit-content}.fold[open]>summary{margin-bottom:6px}.chip{padding:4px 10px;border-radius:14px;font-size:13px;background:none}.radio{display:inline-flex;gap:4px;flex-wrap:wrap}.modes{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;margin-top:8px}.mode{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:10px 12px;text-align:left}.mode small{color:var(--dim);font-size:12px}.mode.on small{color:inherit;opacity:.8}.typing{margin-top:20px}.livebar{display:flex;flex-wrap:wrap;align-items:baseline;gap:2px 22px;color:var(--dim);padding:6px 4px;min-height:34px}.livebar .stat b{color:var(--accent);font-size:22px;font-weight:600;margin-right:4px}.text{font-family:var(--jp);line-height:1.3;height:calc(2.1em * 3);overflow:hidden;position:relative;padding:0 .2em;-webkit-mask-image:linear-gradient(to bottom,#000 94%,transparent);mask-image:linear-gradient(to bottom,#000 94%,transparent);word-break:keep-all;overflow-wrap:anywhere;letter-spacing:.02em;-webkit-user-select:none;user-select:none}.stage{position:relative}.softkey,.softkey-hold{opacity:0;border:0;padding:0;margin:0;font-size:16px;caret-color:transparent;pointer-events:none}.softkey{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;touch-action:manipulation}.softkey-hold{position:fixed;top:0;left:0;width:1px;height:1px}@media(pointer:coarse){.softkey{pointer-events:auto}kbd{display:none}}@media(max-width:600px){.livebar{column-gap:14px}}.tap-hint{position:absolute;left:50%;bottom:12px;transform:translate(-50%);padding:6px 14px;border:1px solid var(--accent);border-radius:16px;background:var(--panel);color:var(--accent);font-size:14px;white-space:nowrap;pointer-events:none}.text{--gloss-size: .32em;--gloss-width: 7}.unit{display:inline-grid;grid-template-columns:fit-content(calc(var(--gloss-width) * var(--gloss-size)));justify-items:center;vertical-align:bottom;margin-top:.55em}.unit-wrap{display:inline-flex;flex-direction:column;align-items:stretch}.bracket{height:.22em;margin:.04em .06em 0;border:1.5px solid var(--dim);border-top:none;border-radius:0 0 4px 4px;opacity:.8}.bracket.none{border-color:transparent}.unit-jp{display:inline-grid;grid-auto-flow:column;align-items:end;min-height:1.35em;white-space:nowrap}.mode-furigana .unit-jp,.reveals .unit-jp{min-height:1.8em}.gloss{font-family:var(--ui);font-size:var(--gloss-size);line-height:1.25;height:2.5em;margin-top:.35em;color:var(--dim);justify-self:stretch;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;text-align:center;white-space:normal;overflow-wrap:anywhere;letter-spacing:0}.text.full .unit{margin-top:.4em}.text.full{height:auto;max-height:60vh;overflow:auto;-webkit-user-select:text;user-select:text;-webkit-mask-image:none;mask-image:none}.text ruby{ruby-align:center}.text rt{font-size:.42em;letter-spacing:0;line-height:1;opacity:.95}.tok{white-space:nowrap}.gap{display:inline-block;width:.55em}.x{color:var(--dimmer)}.m{color:var(--dim);transition:color 60ms;position:relative}.m.correct{color:var(--fg)}.m.error{color:var(--err);text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:.12em}.m.active{color:var(--accent)}.m.active:before{content:"";position:absolute;left:-.06em;top:.15em;bottom:.15em;width:.09em;background:var(--accent);border-radius:2px;animation:blink 1.1s steps(2,start) infinite}rt .m.active:before{display:none}@keyframes blink{to{visibility:hidden}}.kj{color:var(--dim);position:relative}.kj.correct{color:var(--fg)}.kj.error{color:var(--err)}.kj.partial{color:var(--fg)}.kj.active{color:var(--accent)}.kj.block:after{content:"";position:absolute;left:0;right:0;bottom:.18em;height:.06em;background:var(--dimmer);border-radius:2px}.kj.block.active:after{background:var(--accent);animation:blink 1.1s steps(2,start) infinite}.kj.block .progress{position:absolute;left:0;bottom:.18em;height:.06em;background:var(--fg);z-index:1;border-radius:2px}.kj.block.error .progress{background:var(--err)}.needs-fix{outline:2px solid var(--err);outline-offset:.08em;border-radius:4px}.flash-blocked .text{animation:shake .16s}@keyframes shake{25%{transform:translate(-3px)}75%{transform:translate(3px)}}.above{min-height:52px;padding:2px 4px 10px}.echo{font-family:var(--mono);color:var(--dim);min-height:22px;letter-spacing:.06em}.echo.warn{color:var(--err);font-family:var(--ui);letter-spacing:0}.meaning{color:var(--dim);font-style:italic;margin-top:4px}.tiles{display:flex;gap:24px;flex-wrap:wrap;align-items:flex-end;margin:18px 0 6px}.tile{display:flex;flex-direction:column}.tile b{font-size:30px;color:var(--accent);line-height:1.1}.tile.big b{font-size:56px}.tile span{color:var(--dim);font-size:12px}.chart{margin:10px 0;display:block}.chart .grid{stroke:var(--dimmer);stroke-width:1}.chart .tick{fill:var(--dim);font-size:11px}.chart .line{fill:none;stroke:var(--accent);stroke-width:2}.chart .dot{fill:var(--accent)}.chart .bar{fill:var(--accent);opacity:.85}.tbl{border-collapse:collapse;width:100%;font-size:14px}.tbl th{text-align:left;color:var(--dim);font-weight:500;padding:4px 8px;border-bottom:1px solid var(--dimmer)}.tbl td{padding:4px 8px;border-bottom:1px solid #2c3038;white-space:nowrap}.tbl tr.bad td:first-child{color:var(--err)}.tbl .jp{font-family:var(--jp);font-size:17px}.tbl .bar{display:inline-block;height:8px;background:var(--err);opacity:.7;margin-right:6px;vertical-align:middle;max-width:60px}.tbl.compact td{padding:2px 8px}.cols{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.cols .tbl td,.cols .tbl th{padding:3px 5px}@media(max-width:900px){.cols{grid-template-columns:1fr}.modes{grid-template-columns:repeat(3,1fr)}}.echo .bad{color:var(--err);text-decoration:underline;text-underline-offset:3px}.echo.blocked{color:var(--fg)}.hint{color:var(--dim);font-size:13px;margin-top:2px}.mastery .small{font-size:12px}.legend{color:var(--dim);font-size:13px}.legend span{margin-left:6px}.st-synthesized{color:var(--synth)}.st-bg-synthesized{background:var(--synth)}.tbl tr.st-row-synthesized td:first-child{color:var(--synth)}.st-mastered{color:var(--ok)}.st-learning{color:var(--accent)}.st-weak{color:var(--err)}.st-unseen{color:var(--dimmer)}.st-bg-mastered{background:var(--ok)}.st-bg-learning{background:var(--accent)}.st-bg-weak{background:var(--err)}.st-bg-unseen{background:var(--dimmer)}.bar-row{display:flex;height:8px;border-radius:4px;overflow:hidden;margin:4px 0 10px}.bar-seg{display:block;height:100%}.kana-groups{display:flex;gap:28px;flex-wrap:wrap;font-family:var(--jp);margin:8px 0}.kana-row{display:flex;gap:4px;margin:3px 0}.kana-cell{display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:2.1em;padding:0 .3em;white-space:nowrap;height:2.1em;border-radius:6px;background:var(--panel);border:1px solid var(--dimmer);font-size:15px;cursor:default}.kana-cell.empty{border-color:transparent;background:none}.kana-cell.st-mastered{border-color:var(--ok)}.kana-cell.st-learning{border-color:var(--accent)}.kana-cell.st-weak{border-color:var(--err);background:#e5533d1f}.tbl tr.st-row-weak td:first-child{color:var(--err)}.tbl tr.st-row-mastered td:first-child{color:var(--ok)}.tbl tr.st-row-unseen td:first-child{color:var(--dim)}.tbl.lessons td.bar-cell{min-width:160px}.tbl.lessons .bar-cell .bar-row{margin:0}.tbl.lessons tr.lesson-words>td{padding:6px 0 16px}.tbl.lessons tr.lesson-words .tbl{margin-top:6px}.cols.two{grid-template-columns:repeat(2,1fr)}.changes{margin-top:6px}.small{font-size:12px}.typed{position:absolute;left:50%;bottom:100%;transform:translate(-50%);font-family:var(--mono);font-style:normal;font-size:.45em;line-height:1;margin-bottom:.1em;color:var(--fg);letter-spacing:.02em;white-space:nowrap;pointer-events:none}.kjwrap{position:relative;display:inline-block}.typed.done{color:var(--dim)}.typed.now{color:var(--fg)}.typed.bad{color:var(--err)}.text-inner{will-change:transform}.mode-english .unit-jp{min-height:1.8em}.text.mode-english{--gloss-size: .4em;--gloss-width: 9}.mode-english .gloss{color:var(--fg)}.mode-english .bracket{display:none}.m.hidden{font-family:var(--mono);font-size:.5em;letter-spacing:.04em;display:inline-block;min-width:.4em;padding:0 .05em}.m.hidden.active:before{top:.05em;bottom:.05em}.mode:disabled{opacity:.35;cursor:not-allowed}.deck-move{font-size:18px;margin:4px 0 6px}.deck-score{color:var(--accent)}.toast{position:fixed;right:20px;bottom:20px;z-index:20;max-width:360px;padding:12px 14px;background:var(--panel);border:1px solid var(--accent);border-radius:10px;box-shadow:0 8px 24px #0006;font-size:14px;line-height:1.4}.toast .row{margin-top:10px;justify-content:flex-end}.workbook{display:flex;flex-direction:column;gap:16px;max-width:820px;margin:0 auto}.wb-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;background:var(--panel);border-radius:10px;padding:10px 14px;position:sticky;top:0;z-index:5}.wb-bar label{color:var(--dim);font-size:13px}.wb-modes{display:flex;gap:6px}.wb-opts{display:flex;flex-direction:column;gap:8px;background:var(--panel);border-radius:10px;padding:10px 14px}.wb-opts label{color:var(--dim);font-size:13px}.wb-opts .row{padding:0;gap:6px 8px}.wb-score{font-variant-numeric:tabular-nums;font-weight:600;margin-right:auto}.wb-score small{color:var(--dim);font-weight:400;margin-left:6px}.wb-sheet{background:var(--panel);border-radius:12px;overflow:hidden}.wb-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;padding:14px 18px 10px;border-bottom:2px solid var(--dimmer)}.wb-title{font-weight:700;font-size:17px}.wb-jp{font-family:var(--jp);font-weight:400;color:var(--dim);font-size:13px;margin-left:4px}.wb-sub{flex-basis:100%;color:var(--dim);font-size:13px}.wb-items{list-style:none;margin:0;padding:0}.wb-item{display:grid;grid-template-columns:2.4em 1fr;gap:0 10px;padding:12px 18px 12px 10px;border-bottom:1px dashed var(--dimmer);scroll-margin:90px 0 8px}.wb-item:last-child{border-bottom:none}.wb-num{position:relative;text-align:right;color:var(--dim);font-size:13px;padding-top:10px;font-variant-numeric:tabular-nums}.wb-mark{position:absolute;left:-4px;top:-2px;font-family:var(--jp);font-weight:700;font-size:32px;line-height:1;pointer-events:none}.wb-mark.m-ok,.wb-mark.m-self{color:var(--ok)}.wb-mark.m-close{color:var(--warn)}.wb-mark.m-no{color:var(--err)}.wb-body{min-width:0;display:flex;flex-direction:column;gap:4px}.wb-line{font-family:var(--jp);font-size:26px;line-height:2.3;overflow-wrap:anywhere}.workbook ruby{ruby-align:center}.wb-line rt,.wb-src rt,.wb-ref rt{font-size:.6em;color:var(--fg);opacity:.72}.wb-src{font-family:var(--jp);font-size:20px;color:var(--dim);line-height:2.2}.wb-prompt{font-size:17px;font-weight:500}.wb-line .wb-hint rt{font-size:.7em}.wb-hint{font-family:var(--jp);font-size:19px;color:var(--accent);margin-left:.4em;white-space:nowrap}.wb-en{color:var(--dim);font-size:13.5px}.wb-word{background:none;border:0;padding:0;font:inherit;color:inherit;border-bottom:1px dotted var(--dim);cursor:pointer}.wb-word.shown{border-bottom-color:var(--accent)}.wb-reveal{margin:0 .3em 0 .2em;font-family:var(--jp);color:var(--accent)}.wb-cue{color:var(--accent)}.wb-origin{font-size:11px;letter-spacing:.04em;color:var(--dim);opacity:.8}.wb-en b{color:var(--fg);font-weight:500}.wb-ans{font-family:var(--jp);font-size:24px;color:var(--fg);background:var(--bg);border:none;border-bottom:2px solid var(--dim);border-radius:4px 4px 0 0;padding:0 .3em;margin:0 .15em;height:1.7em;max-width:100%;vertical-align:baseline}input.wb-ans:focus{outline:none;border-bottom-color:var(--accent)}.wb-ans.wide{display:block;width:100%;margin:4px 0 0}.wb-ans.done{display:inline-block;height:auto;min-height:1.7em;line-height:1.7;background:transparent;border-bottom-color:var(--dimmer);overflow-wrap:anywhere}.wb-ans.done.wide{display:block}.wb-ans.struck{text-decoration:line-through;text-decoration-color:var(--err)}.wb-bad{color:var(--err);background:#e5533d29;border-radius:3px}.wb-gap{display:inline-block;width:3px;height:1.1em;margin:0 2px;vertical-align:-.2em;border-radius:2px;background:var(--err)}.res-close .wb-bad{color:var(--warn);background:#f0a04b29}.res-close .wb-gap{background:var(--warn)}.wb-preview{font-family:var(--jp);font-size:18px;color:var(--accent)}.wb-key{display:flex;flex-direction:column;gap:4px;margin-top:4px;padding:4px 0 4px 10px;border-left:3px solid var(--err)}.res-ok .wb-key,.res-self .wb-key{border-left-color:var(--ok)}.res-close .wb-key{border-left-color:var(--warn)}.wb-key .row{padding:0}.wb-ref{font-family:var(--jp);font-size:24px;font-weight:600;color:var(--err)}.res-ok .wb-ref,.res-self .wb-ref{color:var(--ok)}.res-close .wb-ref{color:var(--warn)}.wb-diag{color:var(--err);font-size:13.5px}.wb-note{color:var(--warn);font-size:13px}.wb-why{font-size:13.5px;max-width:64ch}.wb-claude{font-size:13.5px;max-width:64ch;margin-top:2px;padding-top:6px;border-top:1px dotted var(--dimmer)}.wb-claude-says{color:var(--synth);font-weight:600}.wb-foot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:10px 18px;border-top:1px solid var(--dimmer);font-size:13px}@media(max-width:600px){.wb-line{font-size:22px}.wb-ans,.wb-ref{font-size:21px}.wb-src{font-size:18px}.wb-item{padding-right:12px}}.gm-cells td,.gm-cells th{text-align:center;font-size:13px}.gm-cells td:first-child{text-align:left;color:var(--dim)}.gm-cell.st-unseen{color:var(--dim)}
