:root{--ink:#15171d;--ink-soft:#454b58;--muted:#5c6474;--paper:#eef0f4;--surface:#fafbfc;--surface-2:#e5e8ee;--line:#d3d8e0;--line-soft:#e2e6ec;--ai:#2b3a78;--ai-soft:#dfe4f5;--shu:#b8402a;--shu-soft:#f6e6e2;--good:#1f6b46;--f-jp:"Noto Sans JP", "Yu Gothic UI", "Meiryo", sans-serif;--f-ui:"IBM Plex Sans", "Segoe UI", system-ui, sans-serif;--f-mono:"IBM Plex Mono", ui-monospace, monospace;--s1:.35rem;--s2:.6rem;--s3:1rem;--s4:1.6rem;--s5:2.6rem;--r:6px}@media (prefers-color-scheme:dark){:root{--ink:#e6e9ef;--ink-soft:#b0b7c4;--muted:#939cac;--paper:#0d0f14;--surface:#161921;--surface-2:#1f242f;--line:#2b313e;--line-soft:#212633;--ai:#93a6ec;--ai-soft:#1c2338;--shu:#e8785f;--shu-soft:#33201b;--good:#5cc08d}}*{box-sizing:border-box}body{background:var(--paper);color:var(--ink);font-family:var(--f-ui);-webkit-font-smoothing:antialiased;margin:0;font-size:17px;line-height:1.62}.jp{font-family:var(--f-jp)}.mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}.page{max-width:33rem;padding:var(--s4) var(--s3) var(--s5);gap:var(--s4);flex-direction:column;margin:0 auto;display:flex}.banner{justify-content:space-between;align-items:center;gap:var(--s2);padding:var(--s2) var(--s3);background:var(--ai-soft);border:1px solid var(--ai);border-radius:var(--r);flex-wrap:wrap;font-size:.85rem;display:flex}.head{gap:var(--s1);flex-direction:column;display:flex}.titleline{align-items:baseline;gap:var(--s2);display:flex}.brand{color:var(--ai);letter-spacing:.18em;font-size:1.5rem}.head h1{letter-spacing:-.01em;margin:0;font-size:1.5rem;font-weight:600}.sub{color:var(--muted);margin:0;font-size:.92rem}.hint{color:var(--muted);margin:0;font-size:.875rem;line-height:1.65}.hint strong{color:var(--ink-soft);font-weight:600}.error{padding:var(--s2) var(--s3);border-radius:var(--r);background:var(--shu-soft);color:var(--shu);margin:0;font-size:.88rem}.tracks{gap:var(--s2);flex-direction:column;display:flex}.session{align-items:center;gap:var(--s1);padding:var(--s4) var(--s3);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);flex-direction:column;display:flex}.session .who{letter-spacing:.13em;text-transform:uppercase;color:var(--muted);font-size:.72rem}.session .n{font-family:var(--f-mono);font-variant-numeric:tabular-nums;color:var(--ai);font-size:3rem;line-height:1.05}.session .l{color:var(--muted);text-align:center;font-size:.82rem}.session .primary{width:100%;margin-top:var(--s2)}.session:has(.primary:disabled) .n{color:var(--muted)}.track{grid-template-columns:repeat(3,1fr);display:grid}.track>div{padding:0 var(--s2);border-left:1px solid var(--line-soft);flex-direction:column;align-items:center;gap:0;display:flex}.track>div:first-child{border-left:0}.track .n{font-family:var(--f-mono);font-variant-numeric:tabular-nums;color:var(--ink-soft);font-size:1.35rem}.track .l{color:var(--muted);text-align:center;font-size:.74rem;line-height:1.35}.panel{gap:var(--s2);padding:var(--s3);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);flex-direction:column;display:flex}.panel h2{margin:0;font-size:1rem;font-weight:600}.panel h3{margin:var(--s2) 0 0;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:.7rem;font-weight:500}.panel>.secondary{margin-top:var(--s1)}button{font:inherit;cursor:pointer;border-radius:4px;transition:background .12s,border-color .12s,color .12s}button:disabled{cursor:default;opacity:.4}button:focus-visible{outline:2px solid var(--ai);outline-offset:2px}.primary{background:var(--ai);color:#fff;border:0;padding:.85rem 1.2rem;font-size:.95rem;font-weight:600}.primary:not(:disabled):hover{filter:brightness(1.15)}.secondary{background:var(--paper);border:1px solid var(--line);color:var(--ink);align-self:flex-start;padding:.6rem 1rem;font-size:.88rem}.secondary.wide{text-align:center;align-self:stretch}.secondary:not(:disabled):hover{border-color:var(--ai);color:var(--ai)}.link{color:var(--ai);background:0 0;border:0;padding:0;font-size:.82rem;text-decoration:underline}.picker{gap:var(--s1);flex-wrap:wrap;display:flex}.chip{background:var(--paper);border:1px solid var(--line);color:var(--ink-soft);flex-direction:column;align-items:flex-start;gap:0;padding:.4rem .7rem;font-size:.875rem;line-height:1.4;display:flex}.chip small{color:var(--muted);font-size:.72rem}.chip .jp{color:var(--muted);font-size:.95rem}.chip:not(:disabled):hover{border-color:var(--ai)}.chip.on{background:var(--ai-soft);border-color:var(--ai);color:var(--ink)}.chip.on small,.chip.on .jp{color:var(--ai)}.setting{justify-content:space-between;align-items:center;gap:var(--s3);background:var(--paper);border:1px solid var(--line);border-radius:4px;padding:.55rem .8rem;font-size:.88rem;display:flex}.setting input{width:4.5rem;font:inherit;font-family:var(--f-mono);font-variant-numeric:tabular-nums;text-align:right;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:3px;padding:.35rem .5rem}.setting input:focus{outline:2px solid var(--ai);outline-offset:1px}.credits{gap:var(--s1);padding-top:var(--s3);border-top:1px solid var(--line-soft);color:var(--muted);flex-direction:column;font-size:.76rem;line-height:1.6;display:flex}.credits a{color:var(--muted)}.credits a:hover{color:var(--ai)}.review{gap:var(--s3)}.bar{align-items:center;gap:var(--s3);display:flex}.progress{background:var(--surface-2);border-radius:2px;flex:1;height:2px;overflow:hidden}.progress span{background:var(--ai);height:100%;transition:width .25s;display:block}.bar .mono{color:var(--muted);font-size:.74rem}.tag{font-family:var(--f-mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ai);flex:1;font-size:.66rem}.card{align-items:center;gap:var(--s3);padding:var(--s5) var(--s3) var(--s4);background:var(--surface);border:1px solid var(--line);border-radius:var(--r);flex-direction:column;display:flex;position:relative}.badge,.strokes{top:var(--s2);font-family:var(--f-mono);color:var(--muted);font-size:.64rem;position:absolute}.badge{left:var(--s2);letter-spacing:.1em;text-transform:uppercase;color:var(--ai);border:1px solid var(--ai);border-radius:99px;padding:.1em .5em}.strokes{right:var(--s3)}.prompt-label{color:var(--muted);letter-spacing:.02em;font-size:.8rem}.glyph{letter-spacing:.02em;font-size:clamp(4.5rem,20vw,7rem);font-weight:500;line-height:1.15}.romaji{font-family:var(--f-mono);font-size:clamp(2.6rem,12vw,3.8rem);line-height:1.1}.card form{justify-content:center;width:100%;display:flex}.answer{width:min(100%,15rem);font:inherit;font-family:var(--f-mono);text-align:center;background:var(--paper);color:var(--ink);border:1px solid var(--line);border-radius:4px;padding:.6rem .8rem;font-size:1.15rem}.answer:focus{outline:2px solid var(--ai);outline-offset:1px}.answer[readonly]{opacity:.6}.choices{gap:var(--s1);grid-template-columns:repeat(4,1fr);width:100%;display:grid}.choices.text{grid-template-columns:1fr}.choice{background:var(--paper);color:var(--ink);border:1px solid var(--line);padding:.9rem .3rem;font-size:1.85rem;font-weight:500}.choices.text .choice{padding:.7rem 1rem;font-size:.95rem;font-weight:400;line-height:1.4}.choice:not(:disabled):hover{border-color:var(--ai);background:var(--ai-soft)}.choice.good{border-color:var(--good);color:var(--good);opacity:1}.choice.bad{border-color:var(--shu);color:var(--shu);opacity:1}.verdict{align-items:center;gap:var(--s1);width:100%;padding-top:var(--s3);border-top:1px solid var(--line-soft);text-align:center;flex-direction:column;display:flex}.verdict>span:first-child{font-size:.9rem;font-weight:600}.verdict .good{color:var(--good)}.verdict .bad{color:var(--shu)}.verdict .detail{align-items:center;gap:var(--s1);color:var(--ink-soft);flex-direction:column;font-size:.92rem;display:flex}.verdict .sens{color:var(--ink);font-size:1rem}.verdict .sens em{color:var(--muted);font-size:.78rem;font-style:normal}.verdict .lectures{justify-content:center;gap:var(--s1) var(--s3);font-family:var(--f-mono);color:var(--muted);flex-wrap:wrap;font-size:.74rem;display:flex}.verdict .lectures b{color:var(--ink-soft);font-size:1.1rem;font-weight:500}.verdict .big{font-size:1.4rem}.ratings{gap:var(--s1);grid-template-columns:repeat(4,1fr);display:grid}.rating{background:var(--surface);border:1px solid var(--line);color:var(--ink-soft);flex-direction:column;align-items:center;gap:0;padding:.55rem .3rem;display:flex}.rating:hover{border-color:var(--ai)}.rating .k{font-size:.84rem;font-weight:500}.rating .iv{color:var(--muted);font-size:.68rem}.rating.suggested{border-color:var(--ai);background:var(--ai-soft);color:var(--ink)}.review .primary{width:100%}.done{text-align:center;align-items:center;padding-top:4rem}.done .brand{font-size:2rem}.done h1{margin:0;font-size:1.4rem;font-weight:600}.done .primary{width:100%}@media (width<=460px){.track{grid-template-columns:repeat(3,1fr)}.ratings{grid-template-columns:repeat(2,1fr)}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}@media (width>=900px){.page{max-width:46rem;padding:var(--s5) var(--s4);gap:var(--s4)}.brand,.head h1{font-size:1.9rem}.tracks{flex-direction:row}.tracks .session{padding:var(--s4);flex:1}.session .n{font-size:3.6rem}.session .l{font-size:.88rem}.session .primary{padding:.9rem 1.2rem;font-size:1rem}.panel{padding:var(--s4);gap:var(--s3)}.panel h2{font-size:1.1rem}.credits{justify-content:space-between;gap:var(--s4);flex-direction:row}.page.review{max-width:44rem}.card{padding:var(--s5) var(--s4);gap:var(--s4)}.glyph{font-size:9.5rem}.romaji{font-size:5rem}.answer{width:min(100%,20rem);padding:.75rem 1rem;font-size:1.35rem}.choice{padding:1.15rem .3rem;font-size:2.4rem}.choices.text{grid-template-columns:1fr 1fr}.choices.text .choice{padding:.85rem 1rem;font-size:1rem}.verdict{gap:var(--s2)}.verdict .sens{font-size:1.15rem}.verdict .lectures{font-size:.82rem}.verdict .lectures b{font-size:1.25rem}.rating{padding:.7rem .3rem}.rating .k{font-size:.92rem}.rating .iv{font-size:.74rem}.bar .mono{font-size:.82rem}}@media (width>=1400px){.page{max-width:52rem}.session .n{font-size:4.2rem}}.card.sentence{padding:var(--s4) var(--s3)}.phrase{text-align:center;letter-spacing:.01em;margin:0;font-size:1.65rem;font-weight:500;line-height:1.75}.phrase .gap{min-width:3.5rem;color:var(--ai);border-bottom:2px solid var(--ai);padding:0 .15em;font-weight:700;display:inline-block}.phrase .gap.filled{border-bottom-color:var(--good);color:var(--good)}.choice.token{padding:.7rem .8rem;font-size:1.15rem;font-weight:500}.card.sentence .verdict .sens{font-size:1.05rem;line-height:1.55}.card.sentence .verdict .lectures{color:var(--ink-soft);font-size:1.1rem}.ratings.two{grid-template-columns:1fr 1fr}.ratings.two .rating{padding:.8rem .5rem}@media (width>=900px){.card.sentence{padding:var(--s4)}.phrase{font-size:2rem;line-height:1.8}.phrase .gap{min-width:4.5rem}.choice.token{font-size:1.3rem}}.badge.leech{color:var(--shu);border-color:var(--shu)}.cardacts{justify-content:center;gap:var(--s4);padding-top:var(--s1);display:flex}.cardacts .link{color:var(--muted)}.cardacts .link:hover{color:var(--shu)}.issues{flex-direction:column;gap:0;margin:0;padding:0;list-style:none;display:flex}.issue{gap:var(--s1);padding:var(--s2) 0;border-top:1px solid var(--line-soft);flex-direction:column;display:flex}.issue:first-child{border-top:0}.issue .jp{font-size:1.5rem;line-height:1.3}.issue .phrase-mini{font-size:1.05rem;line-height:1.5}.issue .meta{color:var(--muted);font-size:.7rem}.issue .acts{gap:var(--s3);flex-wrap:wrap;display:flex}.issue.off{opacity:.55}.issue.off .jp{text-decoration:line-through;text-decoration-thickness:1px}.log{margin:var(--s1) 0 0;padding:var(--s2) var(--s3);background:var(--paper);color:var(--muted);border-radius:4px;font-size:.7rem;line-height:1.7;list-style:none}.tabs{margin-top:calc(var(--s4) * -1 + var(--s2));border-bottom:1px solid var(--line);flex-wrap:wrap;gap:0;display:flex}.tab{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;margin-bottom:-1px;padding:.55rem .9rem;font-size:.9rem;position:relative}.tab:hover{color:var(--ink-soft)}.tab.on{color:var(--ai);border-bottom-color:var(--ai);font-weight:600}.tab:focus-visible{outline:2px solid var(--ai);outline-offset:-3px}.tab .dot{vertical-align:middle;background:var(--shu);border-radius:50%;width:5px;height:5px;margin-left:.35rem;display:inline-block}.meter{background:var(--surface-2);border-radius:99px;height:8px;display:flex;overflow:hidden}.meter .known{background:var(--good)}.meter .doing{background:var(--ai)}.bars{align-items:flex-end;gap:2px;height:9rem;margin:0;padding:0;list-style:none;display:flex;overflow-x:auto}.bars li{flex-direction:column;flex:1 0 1.6rem;justify-content:flex-end;align-items:center;gap:.2rem;height:100%;display:flex}.bars .bar{background:var(--ai);border-radius:2px 2px 0 0;width:100%;max-width:2.2rem;transition:height .25s}.bars .v{color:var(--ink-soft);font-size:.62rem}.bars .d{color:var(--muted);writing-mode:vertical-rl;letter-spacing:.02em;font-size:.58rem}@media (width>=900px){.bars{gap:3px;height:11rem}.bars .v{font-size:.7rem}.bars .d{writing-mode:horizontal-tb;font-size:.66rem}}.chap{align-items:flex-start;gap:var(--s3);display:flex}.chap .num{border:1px solid var(--line);width:2.4rem;height:2.4rem;color:var(--ai);border-radius:50%;flex:none;place-items:center;font-size:.82rem;display:grid}.chap h2{margin:0 0 .15rem}.chap .unlock{font-size:.78rem}.lessons{margin:var(--s2) 0 0;padding:0;list-style:none}.lessons li{border-top:1px solid var(--line-soft)}.lesson{width:100%;padding:var(--s2) 0;color:var(--ink);text-align:left;background:0 0;border:0;border-radius:0;flex-direction:column;align-items:flex-start;gap:.3rem;display:flex}.lesson:hover .t{color:var(--ai)}.lesson .t{align-items:center;gap:.5rem;font-size:.96rem;font-weight:500;display:flex}.flag{font-family:var(--f-mono);letter-spacing:.1em;text-transform:uppercase;border:1px solid;border-radius:99px;padding:.1em .5em;font-size:.62rem;font-weight:400}.flag.done{color:var(--muted)}.flag.known{color:var(--good)}.cover{color:var(--muted);align-items:center;gap:.5rem;font-size:.74rem;display:flex}.cover.none{color:var(--muted);font-style:italic}.cover.full{color:var(--good)}.gauge{background:var(--surface-2);border-radius:99px;width:3.5rem;height:4px;display:flex;overflow:hidden}.gauge .k{background:var(--good)}.gauge .o{background:var(--ai)}.lessonhead{gap:var(--s1)}.lessonhead .link{align-self:flex-start}.lessonhead .who{letter-spacing:.13em;text-transform:uppercase;color:var(--muted);font-size:.7rem}.lessonhead h2{font-size:1.35rem}.prose{gap:var(--s3);flex-direction:column;display:flex}.prose p{max-width:62ch;margin:0;line-height:1.75}.prose strong{color:var(--ink);font-weight:600}.vocab,.examples,.pick{margin:0;padding:0;list-style:none}.vocab li,.examples li{padding:var(--s2) 0;border-top:1px solid var(--line-soft);flex-wrap:wrap;align-items:baseline;gap:.3rem .8rem;display:flex}.vocab li:first-child,.examples li:first-child{border-top:0}.vocab .jp{font-size:1.35rem}.vocab .rd{color:var(--muted);font-size:.95rem}.examples .jp{font-size:1.2rem;line-height:1.6}.fr{color:var(--ink-soft);font-size:.9rem}.pick li{border-top:1px solid var(--line-soft)}.pick li:first-child{border-top:0}.pick label{padding:var(--s2) 0;cursor:pointer;flex-wrap:wrap;align-items:center;gap:.3rem .7rem;display:flex}.pick li.has label{cursor:default;opacity:.55}.pick input{width:1rem;height:1rem;accent-color:var(--ai);flex:none}.pick .jp{font-size:1.1rem}.finish{gap:var(--s2);margin-top:var(--s2);flex-wrap:wrap;display:flex}.finish .primary{flex:16rem}@media (width>=900px){.prose p{font-size:1.02rem}.lessonhead h2{font-size:1.6rem}}.capacity .big-n{font-variant-numeric:tabular-nums;color:var(--ai);margin:0;font-size:clamp(3rem,14vw,4.5rem);line-height:1}.capacity .hint strong{color:var(--ink);font-weight:600}@media (width>=900px){.capacity .big-n{font-size:5rem}}.word{letter-spacing:.02em;text-align:center;font-size:clamp(2.6rem,11vw,3.8rem);font-weight:500;line-height:1.25}@media (width>=900px){.word{font-size:4.4rem}}.readings{gap:var(--s1);flex-direction:column;align-items:center;display:flex}.readings .row{justify-content:center;align-items:baseline;gap:var(--s1) var(--s3);flex-wrap:wrap;display:flex}.readings .tagline{font-family:var(--f-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-size:.66rem}.say{flex-direction:column;align-items:center;gap:0;display:inline-flex}.say b{color:var(--ink-soft);font-size:1.2rem;font-weight:500;line-height:1.25}.say .rom{font-family:var(--f-mono);color:var(--muted);font-size:.7rem;font-style:normal}.rom{font-family:var(--f-mono);color:var(--muted);font-style:normal}.gap-word{flex-wrap:wrap;justify-content:center;align-items:baseline;gap:.4rem;display:inline-flex}.gap-word .rom{font-size:.78rem}@media (width>=900px){.say b{font-size:1.35rem}.say .rom{font-size:.76rem}}
