:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0e0c0b;--bg-2:#16120f;--surface:#ffeed60b;--surface-2:#ffeed614;--surface-solid:#1b1714;--line:#ffe4c417;--line-strong:#ffe4c429;--ink:#f5ede2;--ink-2:#d9cdbd;--muted:#a09180;--faint:#6c6055;--lantern:#eaa54b;--lantern-soft:#eaa54b24;--noren:#e2583c;--noren-soft:#e2583c24;--sage:#8fb996;--sage-soft:#8fb99624;--tea:#6fb3b0;--tea-soft:#6fb3b024;--radius-lg:28px;--radius:20px;--radius-sm:14px;--shadow:0 1px 0 #fff0dc0d inset, 0 20px 40px -18px #000000b3;--font-ui:-apple-system, BlinkMacSystemFont, "SF Pro Text", "PingFang SC", "Hiragino Sans", "Noto Sans CJK SC", sans-serif;--font-jp:"Hiragino Mincho ProN", "Yu Mincho", "Songti SC", "Noto Serif CJK JP", serif;--ease:cubic-bezier(.22, 1, .36, 1);--dock-h:0px}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{background:var(--bg);min-height:100%;color:var(--ink);font-family:var(--font-ui);-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;margin:0}body{background:radial-gradient(120% 60% at 50% -10%, #eaa54b29, transparent 60%), radial-gradient(80% 50% at 110% 30%, #e2583c14, transparent 60%), linear-gradient(180deg, var(--bg-2), var(--bg) 40%);background-attachment:fixed;min-height:100dvh}body:before{content:"";pointer-events:none;z-index:0;opacity:.05;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");position:fixed;inset:0}a{color:inherit;text-decoration:none}button,input{font:inherit;color:inherit}button{-webkit-user-select:none;user-select:none}h1,h2,h3,p{margin:0}.app{z-index:1;width:min(480px,100%);min-height:100dvh;padding:0 20px calc(28px + env(safe-area-inset-bottom) + var(--dock-h));flex-direction:column;margin:0 auto;display:flex;position:relative}.app.has-dock{--dock-h:128px}.topbar{z-index:20;padding:calc(env(safe-area-inset-top) + 10px) 20px 10px;-webkit-backdrop-filter:blur(14px)saturate(140%);background:linear-gradient(#0e0c0beb,#0e0c0b99 70%,#0000);grid-template-columns:44px 1fr auto;align-items:center;gap:10px;margin:0 -20px 8px;display:grid;position:sticky;top:0}.topbar-title{text-align:center;letter-spacing:.02em;white-space:nowrap;text-overflow:ellipsis;font-size:1.02rem;font-weight:600;overflow:hidden}.topbar-right{justify-self:end;align-items:center;gap:8px;display:flex}.icon-btn{border:1px solid var(--line);background:var(--surface);width:44px;height:44px;color:var(--ink-2);cursor:pointer;transition:transform .2s var(--ease), background .2s, color .2s;border-radius:999px;place-items:center;display:grid}.icon-btn:active{background:var(--surface-2);transform:scale(.92)}.icon-btn svg{width:20px;height:20px}.seal{color:#fff4ec;width:40px;height:40px;font-family:var(--font-jp);background:linear-gradient(145deg,#ef6a4c,#b93a22);border-radius:12px;place-items:center;font-size:1.3rem;font-weight:700;display:grid;box-shadow:0 8px 20px -8px #e2583cb3,inset 0 1px #ffffff40}.avatar{background:var(--lantern-soft);width:36px;height:36px;color:var(--lantern);text-transform:uppercase;border:1px solid #eaa54b40;border-radius:999px;place-items:center;font-size:.95rem;font-weight:700;display:grid}.muted{color:var(--muted)}.stack{gap:12px;display:grid}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--lantern);font-size:.78rem;font-weight:600}.page-title{font-family:var(--font-jp);letter-spacing:.02em;font-size:2.1rem;font-weight:700;line-height:1.2}.page-sub{color:var(--muted);font-size:.95rem;line-height:1.6}.section-label{letter-spacing:.08em;color:var(--faint);margin:26px 2px 12px;font-size:.82rem;font-weight:600}.glass,.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(20px)}.panel{padding:20px}.badge{background:var(--lantern-soft);color:var(--lantern);letter-spacing:.04em;border-radius:999px;align-items:center;gap:4px;padding:4px 10px;font-size:.78rem;font-weight:600;display:inline-flex}.badge.done{background:var(--sage-soft);color:var(--sage)}.badge svg{width:13px;height:13px}.error{border-radius:var(--radius-sm);background:var(--noren-soft);color:#ff9a84;border:1px solid #e2583c40;padding:12px 14px;font-size:.92rem}.progress{background:#ffeed612;border-radius:999px;height:6px;position:relative;overflow:hidden}.progress>i{border-radius:inherit;background:linear-gradient(90deg, var(--lantern), #f3c27a);transition:width .8s var(--ease);position:absolute;inset:0 auto 0 0;box-shadow:0 0 12px #eaa54b80}.progress.sage>i{background:linear-gradient(90deg, #6fa77a, var(--sage));box-shadow:0 0 12px #8fb99673}.button{cursor:pointer;letter-spacing:.06em;color:#2a1406;background:linear-gradient(180deg, #f5b964, var(--lantern));width:100%;min-height:56px;transition:transform .2s var(--ease), filter .2s, opacity .2s;border:0;border-radius:18px;padding:0 20px;font-size:1.05rem;font-weight:600;box-shadow:0 14px 30px -12px #eaa54ba6,inset 0 1px #fff6}.button:active{filter:brightness(.95);transform:scale(.97)}.button:disabled{opacity:.55}.ghost{border:1px solid var(--line-strong);background:var(--surface);min-height:44px;color:var(--ink-2);cursor:pointer;transition:transform .2s var(--ease), background .2s;border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:0 16px;font-size:.92rem;display:inline-flex}.ghost:active{background:var(--surface-2);transform:scale(.96)}.ghost:disabled{opacity:.6}.ghost svg{width:17px;height:17px}.linkish{color:var(--muted);cursor:pointer;background:0 0;border:0;min-height:44px;padding:0;font-size:.92rem}.linkish b{color:var(--lantern);font-weight:600}.auth{padding-top:env(safe-area-inset-top);justify-content:center}.auth-hero{text-align:center;animation:rise .8s var(--ease) both;margin:8vh 0 34px}.auth-glyph{color:#fff4ec;width:108px;height:108px;font-family:var(--font-jp);background:linear-gradient(145deg,#ef6a4c,#a8331d);border-radius:32px;place-items:center;margin-bottom:22px;font-size:3.6rem;font-weight:700;display:inline-grid;position:relative;box-shadow:0 30px 60px -20px #e2583ccc,inset 0 1px #ffffff4d}.auth-glyph:after{content:"";z-index:-1;filter:blur(10px);background:radial-gradient(circle,#eaa54b59,#0000 70%);border-radius:50%;animation:4s ease-in-out infinite glow;position:absolute;inset:-30px}.auth-title{font-family:var(--font-jp);letter-spacing:.12em;font-size:2.3rem;font-weight:700}.auth-tag{color:var(--muted);margin-top:10px;font-size:.95rem;line-height:1.6}.auth-card{animation:rise .8s .1s var(--ease) both;gap:16px;padding:22px 20px 12px;display:grid}.segmented{border:1px solid var(--line);background:#0000004d;border-radius:16px;grid-template-columns:1fr 1fr;padding:4px;display:grid;position:relative}.segmented:before{content:"";background:var(--surface-2);border:1px solid var(--line-strong);width:calc(50% - 4px);transition:transform .35s var(--ease);border-radius:12px;position:absolute;top:4px;bottom:4px;left:4px}.segmented[data-index="1"]:before{transform:translate(100%)}.segmented button{min-height:40px;color:var(--muted);cursor:pointer;background:0 0;border:0;font-weight:600;transition:color .2s;position:relative}.segmented button.active{color:var(--ink)}.field{gap:8px;display:grid}.field span{color:var(--muted);letter-spacing:.04em;padding-left:4px;font-size:.82rem}input{border:1px solid var(--line-strong);width:100%;min-height:54px;color:var(--ink);background:#00000047;border-radius:16px;outline:none;padding:0 16px;font-size:16px;transition:border-color .2s,box-shadow .2s,background .2s}input:focus{background:#0000005c;border-color:#eaa54b99;box-shadow:0 0 0 4px #eaa54b1f}.hero{border-radius:var(--radius-lg);background:radial-gradient(120% 140% at 0% 0%, #eaa54b2e, transparent 55%), var(--surface);animation:rise .7s var(--ease) both;grid-template-columns:1fr auto;align-items:center;gap:16px;margin-top:6px;padding:22px 20px;display:grid}.hero-greet{font-family:var(--font-jp);letter-spacing:.04em;font-size:1.65rem;font-weight:700}.hero-sub{color:var(--muted);margin-top:6px;font-size:.9rem}.hero-stats{gap:22px;margin-top:18px;display:flex}.hero-stats div{gap:2px;display:grid}.hero-stats b{font-variant-numeric:tabular-nums;font-size:1.5rem;font-weight:700}.hero-stats span{color:var(--faint);letter-spacing:.06em;font-size:.76rem}.ring{width:96px;height:96px;position:relative}.ring svg{width:100%;height:100%;transform:rotate(-90deg)}.ring circle{fill:none;stroke-width:8px;stroke-linecap:round}.ring .track{stroke:#ffeed614}.ring .value{stroke:url(#ringGrad);transition:stroke-dashoffset 1.2s var(--ease);filter:drop-shadow(0 0 6px #eaa54b80)}.ring-label{text-align:center;place-content:center;display:grid;position:absolute;inset:0}.ring-label b{font-variant-numeric:tabular-nums;font-size:1.3rem}.ring-label span{color:var(--faint);letter-spacing:.08em;font-size:.68rem}.deck{border-radius:var(--radius);transition:transform .25s var(--ease), background .25s;animation:rise .7s var(--ease) both;grid-template-columns:64px 1fr auto;align-items:center;gap:16px;padding:18px;display:grid;position:relative;overflow:hidden}.deck:active{background:var(--surface-2);transform:scale(.98)}.deck-glyph{width:64px;height:64px;font-family:var(--font-jp);color:var(--accent,var(--lantern));background:color-mix(in srgb, var(--accent,var(--lantern)) 14%, transparent);border:1px solid color-mix(in srgb, var(--accent,var(--lantern)) 28%, transparent);border-radius:18px;place-items:center;font-size:2.1rem;font-weight:700;display:grid}.deck-body{gap:8px;min-width:0;display:grid}.deck-name{font-size:1.12rem;font-weight:650}.deck-meta{color:var(--faint);font-size:.8rem}.deck .progress>i{background:var(--accent,var(--lantern));box-shadow:0 0 10px color-mix(in srgb, var(--accent,var(--lantern)) 50%, transparent)}.deck-due{text-align:right;gap:2px;display:grid}.deck-due b{font-variant-numeric:tabular-nums;font-size:1.5rem;font-weight:700}.deck-due span{color:var(--faint);letter-spacing:.06em;font-size:.72rem}.deck-due .badge{justify-self:end}.series-grid{grid-template-columns:1fr 1fr;gap:12px;margin-top:22px;display:grid}.tile{border-radius:var(--radius);min-height:132px;transition:transform .25s var(--ease), background .25s;animation:rise .6s var(--ease) both;gap:12px;padding:16px;display:grid;position:relative;overflow:hidden}.tile:active{background:var(--surface-2);transform:scale(.97)}.tile-glyph{font-family:var(--font-jp);color:#ffeed60f;pointer-events:none;font-size:5.6rem;font-weight:700;line-height:1;position:absolute;top:-14px;right:-6px}.tile-head{align-items:baseline;gap:8px;display:flex}.tile-kana{font-family:var(--font-jp);font-size:2rem;font-weight:700;line-height:1}.tile-name{color:var(--muted);font-size:.82rem}.tile-foot{align-self:end;gap:8px;display:grid}.tile-count{color:var(--faint);font-variant-numeric:tabular-nums;justify-content:space-between;font-size:.78rem;display:flex}.tile-count b{color:var(--lantern);font-weight:600}.tile.done .tile-kana{color:var(--sage)}.tabs{border:1px solid var(--line);background:#0000004d;border-radius:16px;grid-template-columns:repeat(4,1fr);gap:4px;margin-bottom:14px;padding:4px;display:grid;position:relative}.tabs a{min-height:38px;color:var(--muted);border-radius:12px;place-items:center;font-size:.85rem;font-weight:600;transition:background .25s,color .25s;display:grid}.tabs a.active{background:var(--surface-2);color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-strong)}.study-wrap{flex-direction:column;flex:1;display:flex}.study-card{border:1px solid var(--line-strong);min-height:460px;animation:deal .55s var(--ease) both;cursor:pointer;background:radial-gradient(90% 60% at 50% 0,#eaa54b1f,#0000 70%),linear-gradient(#ffeed60f,#ffeed606);border-radius:32px;flex-direction:column;flex:1;padding:20px;display:flex;position:relative;box-shadow:inset 0 1px #fff0dc14,0 40px 80px -30px #000000d9}.study-card.open{cursor:default}.card-top{justify-content:space-between;align-items:center;min-height:44px;display:flex}.score-dots{gap:6px;display:flex}.score-dots i{background:#ffeed61f;border-radius:99px;width:8px;height:8px;transition:background .3s}.score-dots i.on{background:var(--lantern);box-shadow:0 0 8px #eaa54b99}.card-face{text-align:center;transition:flex .5s var(--ease);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;padding:12px 0;display:flex}.study-card.open .card-face{flex:none;padding:18px 0 8px}.surface{font-family:var(--font-jp);overflow-wrap:anywhere;text-shadow:0 10px 40px #eaa54b2e;transition:font-size .5s var(--ease);font-size:clamp(5rem,30vw,8.5rem);font-weight:600;line-height:1.1}.surface.long{letter-spacing:.02em;font-size:clamp(2.4rem,11vw,3.4rem)}.study-card.open .surface{font-size:clamp(3.6rem,20vw,5.4rem)}.study-card.open .surface.long{font-size:clamp(2rem,9vw,2.8rem)}.counterpart{color:var(--faint);letter-spacing:.06em;font-size:1rem}.counterpart b{font-family:var(--font-jp);color:var(--muted);margin-left:6px;font-size:1.3rem;font-weight:600}.tap-hint{text-align:center;letter-spacing:.2em;color:var(--faint);margin-top:auto;font-size:.82rem;animation:2.4s ease-in-out infinite breathe}.reveal{animation:rise .5s var(--ease) both;gap:14px;display:grid}.reading{text-align:center;font-family:var(--font-jp);letter-spacing:.08em;color:var(--lantern);font-size:1.7rem}.divider{background:linear-gradient(90deg, transparent, var(--line-strong), transparent);height:1px}.meaning-block{text-align:center;gap:6px;display:grid}.meaning{color:var(--ink);font-size:1.22rem;line-height:1.5}.english{color:var(--ink-2);letter-spacing:.02em;font-size:.98rem;font-style:italic}.note{color:var(--muted);border-radius:var(--radius-sm);border-left:2px solid var(--lantern);background:#0003;padding:12px 14px;font-size:.88rem;line-height:1.6}.card-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.explain{text-align:left;white-space:pre-wrap;color:var(--ink-2);border-radius:var(--radius-sm);border:1px solid var(--line);animation:rise .5s var(--ease) both;background:#00000040;padding:16px;font-size:.92rem;line-height:1.75}.spin{animation:.9s linear infinite spin}.ghost.active{color:var(--lantern);background:var(--lantern-soft);border-color:#eaa54b80}.ask-panel{border-radius:var(--radius-sm);border:1px solid var(--line);animation:rise .5s var(--ease) both;background:#00000040;gap:12px;padding:14px;display:grid}.ask-empty{color:var(--muted);font-size:.88rem;line-height:1.6}.ask-log{gap:10px;display:grid}.ask-msg{white-space:pre-wrap;overflow-wrap:anywhere;max-width:88%;animation:rise .35s var(--ease) both;border-radius:16px;padding:10px 14px;font-size:.92rem;line-height:1.7}.ask-msg.user{color:#2a1406;background:linear-gradient(180deg, #f5b964, var(--lantern));border-bottom-right-radius:6px;justify-self:end}.ask-msg.assistant{text-align:left;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);border-bottom-left-radius:6px;justify-self:start}.ask-msg.pending{color:var(--muted);align-items:center;gap:8px;display:inline-flex}.ask-msg.pending svg{width:15px;height:15px}.ask-error{margin:0}.ask-form{align-items:flex-end;gap:8px;display:flex}.ask-form textarea{resize:none;field-sizing:content;border:1px solid var(--line-strong);min-width:0;min-height:46px;max-height:140px;color:var(--ink);font:inherit;background:#00000047;border-radius:16px;outline:none;flex:1;padding:11px 14px;font-size:16px;line-height:1.5;transition:border-color .2s,box-shadow .2s,background .2s}.ask-form textarea:focus{background:#0000005c;border-color:#eaa54b99;box-shadow:0 0 0 4px #eaa54b1f}.ask-form textarea:disabled{opacity:.6}.ask-send{width:46px;height:46px;color:var(--lantern);cursor:pointer;flex:0 0 46px}.ask-send:disabled{opacity:.45;cursor:default}.ask-send svg{width:18px;height:18px}.dock{z-index:30;width:min(480px,100%);padding:22px 20px calc(14px + env(safe-area-inset-bottom));background:linear-gradient(#0000,#0e0c0be0 30%,#0e0c0bfa);position:fixed;bottom:0;left:50%;transform:translate(-50%)}.grades{animation:rise .4s var(--ease) both;grid-template-columns:repeat(4,1fr);gap:8px;display:grid}.grade{--c:var(--ink);--cs:var(--surface-2);border:1px solid color-mix(in srgb, var(--c) 30%, transparent);background:var(--cs);min-height:64px;color:var(--c);cursor:pointer;transition:transform .18s var(--ease), background .2s;border-radius:18px;place-content:center;gap:2px;display:grid}.grade:active{background:color-mix(in srgb, var(--c) 26%, transparent);transform:scale(.93)}.grade:disabled{opacity:.5}.grade b{font-size:.98rem;font-weight:650}.grade small{opacity:.7;letter-spacing:.04em;font-variant-numeric:tabular-nums;font-size:.68rem}.grade.again{--c:#ff8a70;--cs:var(--noren-soft)}.grade.fuzzy{--c:var(--lantern);--cs:var(--lantern-soft)}.grade.known{--c:var(--tea);--cs:var(--tea-soft)}.grade.easy{--c:var(--sage);--cs:var(--sage-soft)}.done-panel{text-align:center;min-height:420px;animation:deal .6s var(--ease) both;border-radius:32px;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;padding:32px 24px;display:flex}.done-glyph{width:112px;height:112px;font-family:var(--font-jp);color:var(--sage);background:var(--sage-soft);border:1px solid #8fb9964d;border-radius:999px;place-items:center;margin-bottom:8px;font-size:3.4rem;font-weight:700;display:grid;box-shadow:0 0 60px -10px #8fb99680}.done-panel h2{font-size:1.35rem;font-weight:650}.done-panel .button{place-items:center;max-width:260px;margin-top:14px;display:grid}.skeleton{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);position:relative;overflow:hidden}.skeleton:after{content:"";background:linear-gradient(90deg,#0000,#ffeed60f,#0000);animation:1.4s infinite shimmer;position:absolute;inset:0;transform:translate(-100%)}@keyframes rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@keyframes deal{0%{opacity:0;transform:translateY(24px)scale(.96)rotate(-.6deg)}to{opacity:1;transform:none}}@keyframes glow{0%,to{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}@keyframes breathe{0%,to{opacity:.45}50%{opacity:1}}@keyframes shimmer{to{transform:translate(100%)}}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
