:root{--bg:#0a0b0f;--bg-grad:radial-gradient(1200px 800px at 70% -10%, #14161f 0%, #0a0b0f 60%);--surface:#ffffff09;--surface-2:#ffffff0f;--border:#ffffff17;--border-strong:#ffffff29;--text:#eef1f7;--text-dim:#9aa3b2;--text-faint:#5f6675;--accent:#7c9cff;--accent-2:#57e6c9;--accent-glow:#7c9cff59;--again:#ff6b7a;--hard:#f0a95a;--good:#57e6c9;--easy:#7c9cff;--m-new:#57e6c9;--m-young:#7c9cff;--m-mature:#f5c451;--n5:#57e6c9;--n4:#7c9cff;--n3:#b98cff;--n2:#f0a95a;--n1:#ff6b7a;--radius:16px;--radius-sm:10px;--shadow:0 8px 30px #00000073;--blur:saturate(140%) blur(14px);--font:"Pretendard Variable", Pretendard, -apple-system, "Malgun Gothic", "Hiragino Kaku Gothic ProN", "Noto Sans KR", system-ui, sans-serif;--font-jp:"Hiragino Mincho ProN", "Yu Mincho", "Noto Serif JP", "Kozuka Mincho Pr6N", serif}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html{margin:0}body{background:var(--bg-grad), var(--bg);min-height:100dvh;color:var(--text);font-family:var(--font);-webkit-font-smoothing:antialiased;overscroll-behavior:none;background-attachment:fixed;margin:0}button{cursor:pointer;font-family:inherit}.glass{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);-webkit-backdrop-filter:var(--blur)}.app{max-width:560px;padding:env(safe-area-inset-top) 0 0;margin:0 auto}.view{padding:22px 20px calc(88px + env(safe-area-inset-bottom));animation:.25s fade}@keyframes fade{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.app-title{letter-spacing:.14em;text-transform:uppercase;color:var(--text-faint);margin:4px 2px 20px;font-size:13px;font-weight:700}.app-title b{color:var(--accent)}h1{letter-spacing:-.02em;margin:0 0 4px;font-size:24px}h2{color:var(--text-dim);margin:26px 2px 12px;font-size:15px;font-weight:600}.sub{color:var(--text-dim);margin:0 0 20px;font-size:14px}.nav{width:100%;max-width:560px;padding:9px 8px calc(9px + env(safe-area-inset-bottom));-webkit-backdrop-filter:var(--blur);border-top:1px solid var(--border);z-index:20;background:#0b0c11eb;grid-template-columns:repeat(5,1fr);display:grid;position:fixed;bottom:0;left:50%;transform:translate(-50%)}.nav button{color:var(--text-faint);background:0 0;border:none;flex-direction:column;align-items:center;gap:4px;padding:5px 0 3px;font-size:10.5px;font-weight:600;transition:color .15s;display:flex;position:relative}.nav button .ico{width:24px;height:24px;display:flex}.nav button .ico svg{width:100%;height:100%}.nav button.active{color:var(--accent)}.nav button.active:before{content:"";background:var(--accent);width:22px;height:3px;box-shadow:0 0 10px var(--accent-glow);border-radius:0 0 3px 3px;position:absolute;top:-9px}.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);-webkit-backdrop-filter:var(--blur);padding:18px}.row{gap:12px;display:flex}.row>*{flex:1}.collection-link{text-align:left;background:0 0;border:none;padding:0;transition:transform .1s}.collection-link:active{transform:scale(.99)}.today-hero{justify-content:space-between;align-items:center;margin-top:4px;display:flex}.today-n{letter-spacing:-.03em;color:var(--accent);font-size:44px;font-weight:800;line-height:1}.today-n span{color:var(--text-dim);margin-left:3px;font-size:18px;font-weight:700}.today-hero .l{color:var(--text-dim);margin-top:6px;font-size:13px}.today-side{text-align:right;color:var(--text-dim);flex-direction:column;gap:6px;font-size:14px;display:flex}.today-side b{color:var(--text);font-variant-numeric:tabular-nums;font-weight:700}.calendar{padding:16px}.cal-head{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.cal-title{font-size:14px;font-weight:700}.cal-nav{background:var(--surface-2);border:1px solid var(--border);color:var(--text);border-radius:8px;width:30px;height:30px;font-size:16px;line-height:1}.cal-nav:disabled{opacity:.3}.cal-grid{grid-template-columns:repeat(7,1fr);gap:4px;display:grid}.cal-wd{text-align:center;color:var(--text-faint);padding-bottom:4px;font-size:11px}.cal-day{aspect-ratio:1;color:var(--text-dim);background:var(--surface-2);font-variant-numeric:tabular-nums;border-radius:7px;justify-content:center;align-items:center;font-size:12px;display:flex}.cal-day.heat-1{background:color-mix(in srgb, var(--accent) 22%, transparent);color:var(--text)}.cal-day.heat-2{background:color-mix(in srgb, var(--accent) 42%, transparent);color:var(--text)}.cal-day.heat-3{background:color-mix(in srgb, var(--accent) 66%, transparent);color:#fff}.cal-day.heat-4{background:var(--accent);color:#fff;font-weight:700}.cal-day.is-today{box-shadow:0 0 0 2px var(--accent-2)}.stat .n{letter-spacing:-.02em;font-size:30px;font-weight:750}.stat .l{color:var(--text-dim);margin-top:2px;font-size:12px}.stat .n.due{color:var(--accent)}.stat .n.fresh{color:var(--accent-2)}.btn{text-align:center;border-radius:var(--radius);border:1px solid var(--border-strong);width:100%;color:var(--text);box-shadow:0 0 0 1px #7c9cff26, 0 8px 24px -12px var(--accent-glow);background:linear-gradient(#7c9cff38,#7c9cff14);padding:16px;font-size:16px;font-weight:700;transition:transform .1s,filter .15s;display:block}.btn:active{transform:scale(.985)}.btn:disabled{opacity:.4;filter:grayscale(.6)}.btn.ghost{background:var(--surface);box-shadow:none;border-color:var(--border);font-weight:600}.lvl{align-items:center;gap:12px;margin:10px 0;display:flex}.lvl .tag{text-align:center;border-radius:8px;width:34px;padding:3px 0;font-size:13px;font-weight:800}.lvl .bar{background:var(--surface-2);border-radius:6px;flex:1;height:8px;overflow:hidden}.lvl .bar>span{border-radius:6px;height:100%;transition:width .4s;display:block}.lvl .cnt{color:var(--text-dim);text-align:right;font-variant-numeric:tabular-nums;width:74px;font-size:12px}.session-top{color:var(--text-dim);justify-content:space-between;align-items:center;margin-bottom:18px;font-size:13px;display:flex}.progress-track{background:var(--surface-2);border-radius:4px;height:4px;margin-bottom:22px;overflow:hidden}.progress-track>span{background:linear-gradient(90deg, var(--accent), var(--accent-2));height:100%;transition:width .3s;display:block}.card{text-align:center;background:var(--surface);border:1px solid var(--border);min-height:340px;-webkit-backdrop-filter:var(--blur);box-shadow:var(--shadow);border-radius:22px;flex-direction:column;justify-content:center;align-items:center;padding:46px 28px 28px;display:flex;position:relative}.card .glyph{font-family:var(--font-jp);text-shadow:0 0 40px var(--accent-glow);font-size:132px;font-weight:500;line-height:1}.card .hint{color:var(--text-faint);margin-top:24px;font-size:13px}.card .badge{margin:0;position:absolute;top:14px;left:14px}.reveal{width:100%;animation:.2s fade}.reveal .gloss{margin:14px 0 2px;font-size:26px;font-weight:750}.reveal .kr-reading{color:var(--accent-2);font-size:15px;font-weight:600}.reveal .readings{color:var(--text-dim);flex-direction:column;align-items:center;gap:4px;margin:16px 0 2px;font-size:16px;display:flex}.reveal .readings b{color:var(--accent);margin-right:4px;font-size:13px;font-weight:700}.stroke-note{color:var(--text-faint);margin-top:4px;font-size:12px}.reveal .null-note{color:var(--hard);opacity:.85;margin-top:8px;font-size:12px}.examples{text-align:left;border-top:1px solid var(--border);margin-top:20px;padding-top:14px}.ex-title{color:var(--text-faint);letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px;font-size:11px;font-weight:700}.examples .ex{justify-content:space-between;align-items:baseline;gap:12px;padding:7px 0;display:flex}.examples .ex .w{font-family:var(--font-jp);font-size:18px}.examples .ex .r{color:var(--accent-2);font-size:14px}.tile .ex{justify-content:space-between;align-items:baseline;padding:7px 0;display:flex}.tile .ex+.ex{border-top:1px solid var(--border)}.tile .ex .w{font-family:var(--font-jp);font-size:20px}.grades{grid-template-columns:repeat(4,1fr);gap:8px;margin-top:20px;display:grid}.grades button{border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;flex-direction:column;align-items:center;gap:3px;padding:12px 4px;font-size:14px;font-weight:700;display:flex}.grades button small{color:var(--text-faint);font-variant-numeric:tabular-nums;font-size:10px;font-weight:500}.grades button.again{border-color:color-mix(in srgb, var(--again) 45%, transparent)}.grades button.hard{border-color:color-mix(in srgb, var(--hard) 45%, transparent)}.grades button.good{border-color:color-mix(in srgb, var(--good) 45%, transparent)}.grades button.easy{border-color:color-mix(in srgb, var(--easy) 45%, transparent)}.grades button.again small{color:var(--again)}.grades button.good small{color:var(--good)}.quiz-q{text-align:center;margin:12px 0 20px}.quiz-level{letter-spacing:.04em;margin-bottom:6px;font-size:13px;font-weight:800}.quiz-q .glyph{font-family:var(--font-jp);text-shadow:0 0 40px var(--accent-glow);font-size:100px;line-height:1}.q-label{color:var(--text-faint);letter-spacing:.06em;margin-bottom:8px;font-size:12px;font-weight:700}.difficulty{flex-direction:column;gap:10px;margin-top:8px;display:flex}.diff-btn{text-align:left;border:1px solid var(--border);color:var(--text);align-items:center;gap:14px;display:flex}.diff-btn .chip{pointer-events:none}.diff-name{flex:1;font-size:16px;font-weight:700}.diff-cnt{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:13px}.options{gap:10px;display:grid}.options button{text-align:left;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:14px;padding:16px;font-size:16px;font-weight:600;transition:border-color .15s,background .15s}.options button.correct{border-color:var(--good);background:color-mix(in srgb, var(--good) 14%, transparent)}.options button.wrong{border-color:var(--again);background:color-mix(in srgb, var(--again) 14%, transparent)}.options button:disabled{opacity:.9}.filters{flex-wrap:wrap;gap:8px;margin:4px 0 16px;display:flex}.chip{border:1px solid var(--border);background:var(--surface);color:var(--text-dim);border-radius:999px;padding:7px 14px;font-size:13px;font-weight:600}.chip.on{color:var(--text);border-color:var(--border-strong);background:var(--surface-2)}.search{background:var(--surface);border:1px solid var(--border);width:100%;color:var(--text);border-radius:12px;margin-bottom:16px;padding:13px 16px;font-size:15px}.search::placeholder{color:var(--text-faint)}.grid{grid-template-columns:repeat(auto-fill,minmax(64px,1fr));gap:8px;display:grid}.kanji-cell{aspect-ratio:1;border:1px solid var(--border);background:var(--surface);border-radius:12px;flex-direction:column;justify-content:center;align-items:center;gap:2px;display:flex;position:relative}.kanji-cell .g{font-family:var(--font-jp);font-size:30px}.kanji-cell .kr{color:var(--text-faint);font-size:10px}.kanji-cell.m-new,.kanji-cell.m-young,.kanji-cell.m-mature{position:relative}.kanji-cell.m-new:after,.kanji-cell.m-young:after,.kanji-cell.m-mature:after{content:"";border-radius:50%;width:6px;height:6px;position:absolute;top:6px;right:6px}.kanji-cell.m-new{border-color:color-mix(in srgb, var(--m-new) 30%, var(--border))}.kanji-cell.m-young{border-color:color-mix(in srgb, var(--m-young) 35%, var(--border))}.kanji-cell.m-mature{border-color:color-mix(in srgb, var(--m-mature) 45%, var(--border));background:color-mix(in srgb, var(--m-mature) 8%, var(--surface))}.kanji-cell.m-new:after{background:var(--m-new)}.kanji-cell.m-young:after{background:var(--m-young)}.kanji-cell.m-mature:after{background:var(--m-mature);box-shadow:0 0 6px var(--m-mature)}.mstat{text-align:center}.mstat .n{font-size:24px}.mstat.m-new .n{color:var(--m-new)}.mstat.m-young .n{color:var(--m-young)}.mstat.m-mature .n{color:var(--m-mature)}.sheet-backdrop{z-index:40;background:#0009;justify-content:center;align-items:flex-end;animation:.2s fade;display:flex;position:fixed;inset:0}.sheet{border:1px solid var(--border);width:100%;max-width:560px;max-height:80vh;padding:26px 22px calc(26px + env(safe-area-inset-bottom));background:#101218;border-radius:22px 22px 0 0;animation:.28s cubic-bezier(.2,.8,.2,1) slideup;overflow-y:auto}@keyframes slideup{0%{transform:translateY(100%)}to{transform:none}}.sheet .big{font-family:var(--font-jp);text-align:center;text-shadow:0 0 40px var(--accent-glow);font-size:84px}.field{margin:18px 0}.field>label{color:var(--text-dim);margin-bottom:10px;font-size:13px;display:block}.seg{flex-wrap:wrap;gap:8px;display:flex}.stepper{align-items:center;gap:14px;display:flex}.stepper button{border:1px solid var(--border);background:var(--surface);width:44px;height:44px;color:var(--text);border-radius:12px;font-size:22px;font-weight:700}.stepper .val{text-align:center;min-width:40px;font-size:22px;font-weight:750}.danger{color:var(--again);border-color:color-mix(in srgb, var(--again) 40%, transparent)!important;background:color-mix(in srgb, var(--again) 8%, transparent)!important}.empty{text-align:center;color:var(--text-dim);padding:60px 20px}.empty .em{margin-bottom:14px;font-size:44px}.footnote{color:var(--text-faint);margin-top:22px;font-size:11px;line-height:1.6}
