@import "https://fonts.googleapis.com/css2?family=Nunito:wght@400;500;600;700&family=Noto+Sans+JP:wght@400;500;600;700&display=swap";:root{color:#f7eee7;font-synthesis:none;--bg:#1b191a;--surface:#252122;--surface-soft:#2e2929;--surface-warm:#392d2b;--text:#f7eee7;--muted:#bcaeaa;--coral:#f09076;--coral-dark:#c86651;--sage:#96b7a0;--blue:#92b8c8;--line:#ffffff17;--shadow:0 24px 70px #00000052;background:#1b191a;font-family:Nunito,Noto Sans JP,ui-rounded,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{min-width:320px;min-height:100%;margin:0}body{background:radial-gradient(circle at 50% -20%, #43302e 0, var(--bg) 42%);min-height:100dvh}button{font:inherit}button:focus-visible{outline-offset:3px;outline:3px solid #f0907673}.app-shell,.welcome-screen{background:linear-gradient(#352b2a73,#1b191a00 26%);width:min(100%,470px);min-height:100dvh;margin:0 auto;position:relative;overflow:hidden}.topbar{min-height:76px;padding:max(16px, env(safe-area-inset-top)) 20px 10px;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px;display:grid}.brand-button,.settings-button{color:var(--text);background:0 0;border:0;padding:0}.brand-button{text-align:left;cursor:pointer;align-items:center;gap:8px;display:flex}.brand-button>span{background:var(--coral);color:#382522;border-radius:10px;place-items:center;width:31px;height:31px;font:700 17px Noto Sans JP,sans-serif;display:grid}.brand-button strong{letter-spacing:-.02em;font-size:13px;line-height:1}.brand-button strong span{color:var(--muted);margin-top:2px;font-weight:500;display:block}.settings-button{cursor:pointer;width:42px;height:42px;color:var(--muted);letter-spacing:3px;justify-self:end}.session-dots{gap:5px;display:flex}.session-dots i{background:#4d4545;border-radius:99px;width:6px;height:6px;transition:all .25s}.session-dots i.filled{background:var(--coral);width:14px}.learning-stage{min-height:calc(100dvh - 76px);padding:12px 18px max(24px, env(safe-area-inset-bottom));display:flex}.interaction-card{flex-direction:column;width:100%;animation:.32s both rise;display:flex}.eyebrow{text-transform:uppercase;letter-spacing:.14em;color:var(--coral);margin:0 0 8px;font-size:11px;font-weight:700}.interaction-card h1{letter-spacing:-.035em;margin:0;font-size:clamp(25px,7vw,34px);font-weight:600;line-height:1.16}.intro-card{text-align:center;align-items:center}.intro-card .eyebrow{text-align:left;align-self:flex-start}.image-tile{aspect-ratio:1;width:min(66vw,270px);box-shadow:inset 0 0 0 1px #ffffff3d, var(--shadow);background:radial-gradient(circle,#f5ded1 0,#d7af9e 70%,#bd8777 100%);border-radius:35%;place-items:center;margin:10px auto 0;display:grid;position:relative;overflow:hidden}.image-tile:after{content:"";pointer-events:none;border:1px solid #fff3;border-radius:32%;position:absolute;inset:6%}.image-tile img{object-fit:contain;filter:drop-shadow(0 13px 16px #3e221d2b);width:89%;height:89%}.image-tile.compact{border-radius:28%;width:100%;max-width:154px;margin:0;box-shadow:inset 0 0 0 1px #ffffff2e,0 12px 30px #0000002e}.word-stack{flex-direction:column;align-items:center;margin:18px 0 12px;display:flex}.word-line{align-items:center;gap:10px;display:flex}.word-line strong{letter-spacing:.02em;font:600 clamp(46px,14vw,68px)/1.1 Noto Sans JP,sans-serif}.sound-button{border:1px solid var(--line);background:var(--surface-soft);width:40px;height:40px;color:var(--coral);cursor:pointer;border-radius:50%;place-items:center;font-weight:700;display:grid}.reading{color:#ead8cf;margin-top:3px;font:500 19px Noto Sans JP,sans-serif}.meaning{color:var(--muted);margin-top:3px;font-size:16px}.soft-note{color:#ddc9c0;border:1px solid var(--line);background:#ffffff0b;border-radius:16px;width:100%;margin:4px 0 18px;padding:13px 16px;font-size:14px}.primary-button,.secondary-button{cursor:pointer;border:0;border-radius:18px;width:100%;min-height:58px;padding:14px 18px;font-weight:700;transition:transform .15s,filter .15s}.primary-button{color:#3d2722;background:linear-gradient(135deg,#f5a087,#e7846a);margin-top:auto;box-shadow:0 14px 32px #ca634b33}.primary-button span{float:right;font-size:20px}.primary-button:hover,.secondary-button:hover{filter:brightness(1.04)}.primary-button:active,.secondary-button:active{transform:scale(.985)}.primary-button:disabled{cursor:default;color:#817777;box-shadow:none;background:#4a4242}.secondary-button{color:var(--text);background:var(--surface-soft);border:1px solid var(--line)}.choice-card h1{max-width:340px}.gentle-hint{color:var(--muted);margin:12px 0 0;font-size:14px}.choice-card>.image-tile{width:min(53vw,210px);margin:22px auto 12px}.choice-grid{gap:12px;margin:30px 0 16px;display:grid}.choice-grid.visual{grid-template-columns:repeat(2,minmax(0,1fr))}.choice-option{border:1px solid var(--line);background:var(--surface);min-height:76px;color:var(--text);cursor:pointer;border-radius:20px;padding:16px;transition:transform .15s,border-color .15s,background .15s}.choice-option:not(:disabled):active{transform:scale(.97)}.choice-grid.visual .choice-option{padding:9px}.choice-option .option-caption{min-height:20px;color:var(--muted);margin:8px 2px 3px;font-size:13px;display:block}.option-japanese{font:600 28px Noto Sans JP,sans-serif}.choice-option.correct,.choice-option.reveal-correct{background:#5b7f6738;border-color:#96b7a0a6}.choice-option.wrong{background:#a54c3c33;border-color:#f09076a6}.feedback{border-radius:21px;margin-top:auto;padding:16px;animation:.25s both rise}.feedback.success{background:#6a91752b;border:1px solid #96b7a052}.feedback.try-again{background:#b0594524;border:1px solid #f0907645}.feedback>div{flex-direction:column;gap:2px;margin-bottom:13px;display:flex}.feedback strong{font-size:17px}.feedback div span{color:var(--muted);font-size:13px}.feedback .primary-button{min-height:52px}.pattern-hero{letter-spacing:.04em;margin-top:18vh;font:600 clamp(45px,14vw,67px) Noto Sans JP,sans-serif}.pattern-hero span{color:var(--coral)}.pattern-reading{color:#d9c7c0;margin:10px 0 4px;font:500 19px Noto Sans JP,sans-serif}.pattern-meaning{color:var(--muted);margin:0 0 26px}.arrange-card .translation{color:var(--muted);margin:8px 0 26px}.answer-tray{border-block:1px solid var(--line);flex-wrap:wrap;place-content:center;gap:8px;min-height:108px;margin-bottom:24px;padding:18px 12px;display:flex}.answer-placeholder{color:#716767;align-self:center;font-size:14px}.answer-tray button,.chunk-bank button{cursor:pointer;border-radius:14px;min-width:66px;min-height:52px;padding:10px 15px;font:600 21px Noto Sans JP,sans-serif}.answer-tray button{color:var(--text);background:#f0907621;border:1px solid #f0907675}.chunk-bank{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.chunk-bank button{color:var(--text);background:var(--surface-soft);border:1px solid var(--line)}.arrange-card>.primary-button{margin-top:auto}.arrange-card .feedback{width:100%}.shake{animation:.28s linear shake}.checkpoint-card{text-align:center;align-items:center}.checkpoint-card .eyebrow{margin-top:12px}.checkpoint-card h1{font-size:38px}.neko-face{color:#392725;width:108px;height:94px;box-shadow:var(--shadow);background:#e7aa8f;border-radius:48% 48% 45% 45%;grid-template-columns:1fr 1fr;align-items:center;margin:5vh 0 14px;padding:20px 24px 16px;display:grid;position:relative}.neko-face:before,.neko-face:after{content:"";background:#e7aa8f;border-radius:8px 90% 0;width:42px;height:50px;position:absolute;top:-20px;transform:rotate(23deg)}.neko-face:before{left:8px}.neko-face:after{right:8px;transform:scaleX(-1)rotate(23deg)}.neko-face span,.neko-face i{z-index:1;position:relative}.neko-face span{font-size:12px}.neko-face i{grid-column:1/-1;margin-top:-9px;font-style:normal}.checkpoint-copy{max-width:310px;color:var(--muted);margin:10px auto 20px;line-height:1.5}.session-recap{text-align:left;background:var(--surface);border:1px solid var(--line);border-radius:22px;width:100%;padding:18px}.recap-label{color:var(--muted);text-transform:uppercase;letter-spacing:.12em;margin-bottom:9px;font-size:11px;display:block}.recap-label:not(:first-child){margin-top:18px}.recap-words{flex-wrap:wrap;gap:8px;display:flex}.recap-words>span{background:var(--surface-soft);text-align:center;border-radius:12px;min-width:58px;padding:8px 10px;font:600 19px Noto Sans JP,sans-serif}.recap-words small{color:var(--muted);font-size:10px;font-weight:400;display:block}.session-recap>strong{font:600 22px Noto Sans JP,sans-serif}.checkpoint-actions{grid-template-columns:1fr 1.12fr;gap:10px;width:100%;margin-top:auto;display:grid}.checkpoint-actions .primary-button{margin:0}.equal-choice{color:#766b69;margin:10px 0 0;font-size:11px}.welcome-screen{padding:max(28px, env(safe-area-inset-top)) 24px max(24px, env(safe-area-inset-bottom));flex-direction:column;display:flex}.welcome-mark{align-items:center;gap:10px;display:flex}.welcome-mark>span{background:var(--coral);color:#382522;border-radius:15px;place-items:center;width:45px;height:45px;font:700 22px Noto Sans JP,sans-serif;display:grid}.welcome-mark i{color:var(--muted);font-size:13px;font-style:normal}.welcome-copy{margin-top:9vh}.welcome-copy h1{letter-spacing:-.055em;max-width:390px;margin:0;font-size:clamp(38px,11vw,54px);font-weight:600;line-height:1.05}.welcome-copy>p:last-child{max-width:355px;color:var(--muted);font-size:16px;line-height:1.55}.preview-words{justify-content:center;align-items:end;gap:11px;margin:auto 0 28px;display:flex}.preview-words span{background:var(--surface);border:1px solid var(--line);border-radius:28px;place-items:center;width:88px;height:88px;font:600 31px Noto Sans JP,sans-serif;display:grid;transform:rotate(-3deg)}.preview-words span:nth-child(2){background:var(--surface-warm);transform:translateY(-15px)rotate(2deg)}.preview-words span:nth-child(3){transform:rotate(4deg)}.preview-words small{color:var(--muted);font-size:11px;font-weight:400}.welcome-button{margin-top:0}.modal-backdrop{z-index:20;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0a0809ad;justify-content:center;align-items:end;display:flex;position:fixed;inset:0}.settings-sheet{width:min(100%,470px);padding:10px 20px max(22px, env(safe-area-inset-bottom));box-shadow:var(--shadow);background:#2a2526;border-radius:28px 28px 0 0;animation:.25s rise}.sheet-handle{background:#5a5050;border-radius:9px;width:42px;height:4px;margin:0 auto 19px}.settings-sheet h2{margin:0 0 4px;font-size:23px}.settings-sheet p{color:var(--muted);margin:0 0 20px;font-size:14px}.settings-sheet button{width:100%;min-height:52px;color:var(--text);background:var(--surface-soft);border:1px solid var(--line);cursor:pointer;border-radius:15px;margin-top:9px}.settings-sheet .danger-button{color:#f0a28f}.settings-sheet .close-sheet{color:var(--muted);background:0 0;border:0}.debug-panel{z-index:12;width:min(340px,100vw - 20px);max-height:calc(100dvh - 100px);color:var(--text);border:1px solid var(--line);box-shadow:var(--shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);background:#252122f7;border-radius:20px;padding:15px;position:fixed;top:82px;right:max(10px,50vw - 225px);overflow:auto}.debug-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:start;padding-bottom:12px;display:flex}.debug-heading div{flex-direction:column;display:flex}.debug-heading span,.debug-list span,.debug-list small{color:var(--muted);font-size:11px}.debug-heading button{color:var(--muted);cursor:pointer;background:0 0;border:0;font-size:24px}.debug-list>div{border-bottom:1px solid var(--line);grid-template-columns:48px 1fr;padding:11px 0;display:grid}.debug-list>div strong{font-size:20px}.debug-list>div small{grid-column:2}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes shake{25%{transform:translate(-4px)}50%{transform:translate(4px)}75%{transform:translate(-2px)}}@media (width>=700px){body{padding:24px 0}.app-shell,.welcome-screen{border:1px solid var(--line);border-radius:32px;min-height:calc(100dvh - 48px);box-shadow:0 30px 100px #00000061}.learning-stage{min-height:calc(100dvh - 124px)}}@media (height<=700px){.image-tile{width:min(47vw,190px)}.word-line strong{font-size:42px}.pattern-hero{margin-top:9vh}.welcome-copy{margin-top:4vh}.preview-words{margin-bottom:16px}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
