.stage{background-color:#16130f;background-image:linear-gradient(to bottom, #100d0c0a, #100d0c3d), var(--stage-background);background-position:50%;background-size:cover;animation:.42s ease-out stage-enter;position:absolute;inset:0;overflow:hidden}@keyframes stage-enter{0%{transform:scale(1.008)}to{transform:scale(1)}}.stage__canvas{cursor:grab;-webkit-user-select:none;user-select:none;position:absolute;inset:0}.stage__canvas:active{cursor:grabbing}.stage__canvas canvas{width:100%;height:100%;display:block}.stage__portrait-preview{object-fit:contain;object-position:center bottom;filter:drop-shadow(0 22px 38px #00000047);width:min(72vw,700px);height:102%;animation:5.8s ease-in-out infinite preview-breathe;position:absolute;bottom:-6%;left:50%;transform:translate(-50%)}@keyframes preview-breathe{0%,to{transform:translate(-50%)translateY(0)scale(1)}48%{transform:translate(-50%)translateY(-3px)scale(1.004)}}@media (prefers-reduced-motion:reduce){.stage,.stage__portrait-preview{animation:none}}.challenge{border-top:1px solid #b9aa9b33;flex-direction:column;gap:12px;margin-top:14px;padding-top:14px;display:flex}.challenge__prompt{color:var(--text);flex-wrap:wrap;align-items:center;gap:10px;margin:0;font-size:.92rem;display:flex}.challenge__badge{letter-spacing:.09em;color:var(--text-dim);background:#f0eae00f;border:1px solid #b9aa9b73;border-radius:999px;padding:3px 9px;font-size:.68rem}.challenge__listen{min-height:48px;color:var(--text);font:inherit;cursor:pointer;background:#f0eae01a;border:1px solid #f0eae06b;border-radius:999px;align-self:flex-start;align-items:center;gap:11px;padding:0 22px 0 14px;font-size:.95rem;font-weight:600;transition:border-color .15s,background .15s,transform .15s;display:inline-flex}.challenge__listen:hover:not(:disabled),.challenge__listen:focus-visible{border-color:var(--paper);background:#f0eae02b;transform:translateY(-1px)}.challenge__listen:disabled{opacity:.5;cursor:default}.challenge__listen-icon{background:#f0eae029;border-radius:50%;place-items:center;width:28px;height:28px;padding-left:2px;font-size:.72rem;display:grid}.challenge__choices{flex-wrap:wrap;gap:12px;display:flex}.challenge__choice{min-width:118px;min-height:104px;color:var(--text);font:inherit;cursor:pointer;background:#f0eae00a;border:1px solid #b9aa9b57;border-radius:14px;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:12px 18px;transition:border-color .15s,background .15s,transform .15s,opacity .15s;display:flex;position:relative}.challenge__choice:hover:not(:disabled),.challenge__choice:focus-visible{border-color:var(--paper);background:#f0eae01a;transform:translateY(-1px)}.challenge__choice-hanzi{font-family:var(--font-hanzi);font-size:2.2rem;line-height:1.1}.challenge__choice-reading{min-height:2.1em;color:var(--text-dim);flex-direction:column;align-items:center;gap:1px;font-size:.72rem;display:flex}.challenge__choice-reading b{color:var(--text);letter-spacing:.02em;font-size:.86rem}.challenge__choice-mark{border:1px solid;border-radius:50%;place-items:center;width:22px;height:22px;font-size:.72rem;line-height:1;display:grid;position:absolute;top:8px;right:9px}.challenge__choice-mark kbd{font:inherit;color:var(--text-dim);font-size:.66rem}.challenge__choice:not(.is-missed) .challenge__choice-mark:has(kbd){border-color:#b9aa9b66}.challenge__choice.is-missed{opacity:.62;cursor:default;border-style:dashed;border-color:color-mix(in srgb, var(--verdict-miss) 60%, transparent);background:var(--verdict-miss-tint);transform:none}.challenge__choice.is-missed .challenge__choice-mark{border-color:var(--verdict-miss);color:var(--verdict-miss)}.challenge__choice.is-answer{border-color:var(--verdict-ok);background:var(--verdict-ok-tint);opacity:1;border-width:2px}.challenge__choice.is-answer .challenge__choice-mark{background:var(--verdict-ok);color:var(--paper);border-color:var(--verdict-ok);font-weight:700}.challenge__card{display:flex}@media (min-width:720px){.challenge[data-kind=gloss]{grid-template-columns:auto 1fr;grid-template-areas:"prompt prompt""card options""verdict verdict";align-items:start;column-gap:18px;display:grid}.challenge[data-kind=gloss] .challenge__prompt{grid-area:prompt}.challenge[data-kind=gloss] .challenge__card{grid-area:card}.challenge[data-kind=gloss] .challenge__options{grid-area:options}.challenge[data-kind=gloss] .challenge__verdict{grid-area:verdict}}.challenge__card-word{color:var(--text);background:#f0eae012;border:1px solid #f0eae04d;border-radius:14px;padding:10px 20px;font-size:1.5rem;transition:border-color .15s,background .15s;display:inline-block}.challenge__card-word:hover,.challenge__card-word:focus-within{border-color:var(--paper);background:#f0eae021}.challenge__options{flex-direction:column;gap:8px;display:flex}.challenge__option{text-align:left;min-height:46px;color:var(--text);font:inherit;cursor:pointer;background:#f0eae00a;border:1px solid #b9aa9b57;border-radius:11px;align-items:center;gap:12px;padding:8px 16px;font-size:.95rem;transition:border-color .15s,background .15s,opacity .15s;display:flex}.challenge__option:hover:not(:disabled),.challenge__option:focus-visible{border-color:var(--paper);background:#f0eae01a}.challenge__option.is-missed{opacity:.62;cursor:default;border-style:dashed;border-color:color-mix(in srgb, var(--verdict-miss) 60%, transparent);background:var(--verdict-miss-tint)}.challenge__option.is-missed .challenge__option-mark{border-color:var(--verdict-miss);color:var(--verdict-miss)}.challenge__option.is-answer{border-color:var(--verdict-ok);background:var(--verdict-ok-tint);opacity:1;border-width:2px}.challenge__option-mark{border:1px solid #b9aa9b66;border-radius:50%;flex:none;place-items:center;width:24px;height:24px;font-size:.74rem;line-height:1;display:grid}.challenge__option-mark kbd{font:inherit;color:var(--text-dim);font-size:.68rem}.challenge__option.is-answer .challenge__option-mark{background:var(--verdict-ok);color:var(--paper);border-color:var(--verdict-ok);font-weight:700}.challenge__slots{background:#0000002e;border:1px dashed #b9aa9b61;border-radius:12px;flex-wrap:wrap;align-items:center;gap:8px;min-height:62px;padding:8px 12px;display:flex}.challenge__slot{min-width:52px;min-height:52px;font-family:var(--font-hanzi);color:var(--text-dim);background:0 0;border:1px solid #b9aa9b38;border-radius:9px;place-items:center;padding:0;font-size:1.7rem;display:grid}.challenge__slot i{font-family:var(--font-ui);opacity:.5;font-size:.78rem;font-style:normal}button.challenge__slot{font:inherit;font-family:var(--font-hanzi);cursor:pointer;font-size:1.7rem;transition:border-color .15s,background .15s}.challenge__slot.is-filled{color:var(--text);background:#f0eae014;border-color:#f0eae073}button.challenge__slot:hover,button.challenge__slot:focus-visible{border-color:var(--paper);background:#f0eae029}.challenge__bank{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.challenge__chip{min-height:56px;color:var(--text);font:inherit;cursor:pointer;background:#f0eae00d;border:1px solid #b9aa9b57;border-radius:10px;flex-direction:column;align-items:center;gap:1px;padding:6px 16px;transition:border-color .15s,background .15s,transform .15s;display:flex}.challenge__chip:hover,.challenge__chip:focus-visible{border-color:var(--paper);background:#f0eae01c;transform:translateY(-1px)}.challenge__chip span{font-family:var(--font-hanzi);font-size:1.5rem;line-height:1.15}.challenge__chip small{color:var(--text-dim);font-size:.66rem}.challenge__bank-empty{color:var(--text-dim);font-size:.8rem}.challenge__slot.is-given{color:var(--text);cursor:default;background:#b8a8d91f;border-color:#b8a8d98c}.challenge__hint{border-left:3px solid var(--lavender);color:var(--text);background:#b8a8d91f;border-radius:10px;align-items:baseline;gap:10px;margin:0;padding:9px 13px;font-size:.85rem;animation:.22s ease-out challenge-verdict-in;display:flex}.challenge__hint-badge{color:var(--lavender);letter-spacing:.16em;flex:none;font-size:.6rem;font-weight:750}.challenge__actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.challenge__reset,.challenge__help,.challenge__give-up{min-height:40px;color:var(--text-dim);font:inherit;cursor:pointer;background:0 0;border:1px solid #b9aa9b42;border-radius:9px;padding:0 14px;font-size:.82rem;transition:color .15s,border-color .15s,background .15s}.challenge__reset:hover,.challenge__reset:focus-visible,.challenge__give-up:hover,.challenge__give-up:focus-visible{color:var(--text);border-color:var(--greige)}.challenge__help{color:var(--lavender);border-color:#b8a8d973}.challenge__help:hover,.challenge__help:focus-visible{border-color:var(--lavender);background:#b8a8d924}.challenge__give-up{opacity:.78;margin-left:auto;font-size:.76rem}.challenge__solved{flex-direction:column;gap:6px;display:flex}.challenge__solved-translation{color:var(--text-dim);margin:0;font-size:.86rem}.challenge__verdict{min-height:46px;color:var(--text-dim);border-radius:10px;align-items:center;gap:11px;margin:0;padding:0;font-size:.88rem;transition:background .18s;display:flex}.challenge__verdict.is-solved,.challenge__verdict.is-missed,.challenge__verdict.is-revealed{color:var(--text);border-left:3px solid;padding:9px 14px;animation:.22s ease-out challenge-verdict-in}.challenge__verdict.is-revealed{border-left-color:var(--lavender);background:#b8a8d91f}.challenge__verdict.is-revealed .challenge__verdict-mark{border:1px solid var(--lavender);color:var(--lavender);font-family:var(--font-hanzi)}.challenge__verdict.is-solved{background:var(--verdict-ok-tint);border-left-color:var(--verdict-ok)}.challenge__verdict.is-missed{background:var(--verdict-miss-tint);border-left-color:var(--verdict-miss);animation:.26s ease-out challenge-verdict-nudge}@keyframes challenge-verdict-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes challenge-verdict-nudge{0%{transform:translate(0)}25%{transform:translate(-5px)}55%{transform:translate(4px)}to{transform:translate(0)}}.challenge__verdict-mark{border-radius:50%;flex:none;place-items:center;width:26px;height:26px;font-size:.8rem;line-height:1;display:grid}.challenge__verdict.is-solved .challenge__verdict-mark{background:var(--verdict-ok);color:var(--paper);font-weight:700}.challenge__verdict.is-missed .challenge__verdict-mark{border:1px solid var(--verdict-miss);color:var(--verdict-miss)}.challenge__verdict-text b{margin-right:8px;font-size:.9rem}@media (max-width:640px){.challenge__choice{flex:40%;min-width:0}.challenge__chip{flex:26%}}.dialogue{z-index:2;padding:0 clamp(12px, 4vw, 48px) max(16px, env(safe-area-inset-bottom));flex-direction:column;align-items:center;display:flex;position:absolute;inset:auto 0 0}.dialogue__panel{background:linear-gradient(135deg,#302b27e0,#191613eb);border:1px solid #e2d4c53d;border-radius:18px;width:min(920px,100%);padding:clamp(16px,2.4vw,25px);position:relative;overflow:hidden;box-shadow:0 24px 70px #0000004d,inset 0 1px #ffffff0a}:root[data-blur=on] .dialogue__panel{-webkit-backdrop-filter:blur(18px)saturate(115%);backdrop-filter:blur(18px)saturate(115%)}:root[data-blur=off] .dialogue__panel{background:linear-gradient(135deg,#2c2723f7,#151210fa)}.dialogue__panel:before{content:"";background:linear-gradient(180deg, transparent, var(--tone-1) 35%, transparent 88%);opacity:0;width:3px;position:absolute;inset:0 auto 0 0}.dialogue__panel--speech:before{opacity:.9}.dialogue__meta{justify-content:space-between;align-items:center;gap:16px;min-height:25px;margin-bottom:12px;display:flex}.dialogue__speaker{border:1px solid color-mix(in srgb, var(--speaker-color,var(--greige)) 42%, transparent);width:-moz-fit-content;width:fit-content;color:var(--text);background:color-mix(in srgb, var(--speaker-color,var(--greige)) 16%, transparent);letter-spacing:.04em;border-radius:999px;align-items:center;gap:7px;padding:4px 11px 4px 8px;font-size:.78rem;font-weight:650;display:inline-flex}.dialogue__speaker i{background:var(--speaker-color,var(--greige));width:7px;height:7px;box-shadow:0 0 9px var(--speaker-color,var(--greige));border-radius:50%}.dialogue__narration{color:#f0eae07a;letter-spacing:.2em;font-size:.62rem;font-weight:700}.dialogue__study-hint{color:#f0eae07a;font-size:.72rem}.dialogue__reading{flex-direction:column;justify-content:center;min-height:clamp(104px,13vh,146px);display:flex}.dialogue__ja{margin:0;font-size:clamp(1rem,2.2vw,1.2rem);line-height:1.9}.dialogue__translation{color:var(--text);background:#f0eae012;border:1px solid #e2d4c538;border-radius:9px;align-items:baseline;gap:10px;margin:12px 0 0;padding:11px 12px;font-size:.95rem;line-height:1.8;display:flex}.dialogue__translation span{color:var(--greige);letter-spacing:.08em;flex:none;font-size:.65rem;font-weight:700}.dialogue__controls{border-top:1px solid #e2d4c521;align-items:center;gap:8px;margin-top:16px;padding-top:13px;display:flex}.dialogue__secondary-actions{flex-wrap:wrap;gap:8px;display:flex}.dialogue__spacer{flex:1}.dialogue__ending{min-width:112px;color:var(--text);text-align:center;background:#b9aa9b14;border:1px solid #b9aa9b61;border-radius:10px;margin:0;padding:7px 14px;line-height:1.25}.dialogue__ending small{color:var(--greige);letter-spacing:.14em;font-size:.56rem;font-weight:750;display:block}.btn{min-height:44px;color:var(--text);font:inherit;cursor:pointer;background:0 0;border:1px solid #b9aa9b4d;border-radius:10px;justify-content:center;align-items:center;gap:7px;padding:0 16px;font-size:.9rem;transition:transform .15s,border-color .15s,background .15s,box-shadow .15s;display:inline-flex}.btn:hover,.btn:focus-visible{border-color:var(--greige);background:#f0eae00d;transform:translateY(-1px)}.btn:disabled{cursor:default;opacity:.55;transform:none}.btn__icon{font-size:1.1rem;line-height:1}.btn__icon--text{border:1px solid;border-radius:4px;place-items:center;width:18px;height:18px;font-size:.66rem;display:grid}.btn--primary{border-color:var(--tone-1);min-width:100px;color:var(--paper);background:linear-gradient(135deg,#ed5a40,#c93928);font-weight:700;box-shadow:0 8px 22px #e14b323d}.btn--primary:hover,.btn--primary:focus-visible{background:linear-gradient(135deg,#f16449,#d54431);border-color:#f77b66}.btn--secondary{color:var(--text-dim);background:#f0eae008}.btn--secondary:hover,.btn--secondary:focus-visible{color:var(--text)}.btn:focus-visible,.word:focus-visible,.gloss__close:focus-visible{outline-offset:2px;outline:3px solid #f0eae0c7}.btn__arrow{font-size:1.1rem;transition:transform .15s}.btn--primary:hover .btn__arrow{transform:translate(3px)}.hanzi-line{font-family:var(--font-hanzi);font-size:clamp(1.5rem,4vw,2.1rem);line-height:2.4;display:block}.word{color:inherit;font:inherit;cursor:pointer;background-color:#0000;background-image:linear-gradient(#f0eae042,#f0eae042);background-position:0 calc(100% - 2px);background-repeat:no-repeat;background-size:100% 1px;border:0;border-radius:4px;padding:0 1px;transition:background-color .14s;display:inline}.word:hover,.word:focus-visible{background-color:#f0eae01f;background-image:linear-gradient(var(--greige), var(--greige))}.word--trap[data-revealed=true]{-webkit-text-decoration:underline wavy var(--tone-4);text-decoration:underline wavy var(--tone-4);text-underline-offset:6px}.punct{font-family:var(--font-hanzi)}.btn__kbd{font-family:var(--font-ui);letter-spacing:.04em;opacity:.75;border:1px solid #f0eae052;border-radius:5px;padding:2px 6px;font-size:.66rem;line-height:1.3}@media (hover:none){.btn__kbd{display:none}}ruby rt{font-family:var(--font-ui);color:var(--tone,var(--text-dim));font-size:.42em;font-weight:500;transform:translateY(2px)}.gloss{z-index:4;pointer-events:none;justify-content:center;align-items:flex-end;padding:16px;display:flex;position:absolute;inset:0}.gloss__scrim{cursor:pointer;pointer-events:auto;background:#0a080747;border:0;position:absolute;inset:0}.gloss__card{pointer-events:auto;border-radius:var(--radius);background:#16130ff0;border:1px solid #b9aa9b4d;max-width:min(520px,92vw);max-height:min(50dvh,360px);margin-bottom:0;padding:14px 16px;position:relative;overflow-y:auto;box-shadow:0 18px 50px #00000059}.gloss__close{width:32px;height:32px;color:var(--text-dim);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:50%;font-size:1.2rem;position:absolute;top:8px;right:8px}.gloss__close:hover,.gloss__close:focus-visible{color:var(--text);background:#f0eae014}.gloss__head{align-items:baseline;gap:10px;display:flex}.gloss__hanzi{font-family:var(--font-hanzi);font-size:1.6rem}.gloss__pinyin{color:var(--text-dim)}.gloss__ja{margin:6px 0 0}.gloss__note{border-left:2px solid var(--tone-4);color:var(--text-dim);margin:10px 0 0;padding-left:10px;font-size:.88rem;line-height:1.7}@media (max-width:560px){.dialogue{padding-inline:9px;padding-bottom:max(10px, env(safe-area-inset-bottom))}.dialogue__panel{border-radius:15px;max-height:min(62dvh,480px);overflow-y:auto}.dialogue__study-hint{display:none}.dialogue__controls{flex-direction:column-reverse;align-items:stretch;gap:9px}.dialogue__secondary-actions{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.dialogue__spacer{display:none}.btn{padding-inline:12px;font-size:.82rem}.btn--primary{width:100%;min-height:50px}.dialogue__secondary-actions .btn{width:100%;padding-inline:8px;font-size:.78rem}.gloss{align-items:center;padding:12px}.gloss__card{width:min(100%,360px)}}@media (max-height:620px){.dialogue{padding-bottom:max(6px, env(safe-area-inset-bottom))}.dialogue__panel{max-height:min(62dvh,340px);padding:12px}.dialogue__meta{min-height:20px;margin-bottom:4px}.hanzi-line{font-size:clamp(1.25rem,4vw,1.75rem);line-height:2.05}.dialogue__translation{margin-top:6px;padding:7px 9px;line-height:1.45}.dialogue__controls{margin-top:8px}.dialogue__reading{min-height:86px}}.scene-overlay{z-index:20;padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));background:#0a0807b8;place-items:center;display:grid;position:fixed;inset:0}:root[data-blur=on] .scene-overlay{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}:root[data-blur=off] .scene-overlay{background:#0a0807e6}.conversation-log,.restart-dialog{background:#1e1a16fa;border:1px solid #b9aa9b4d;border-radius:16px;width:min(760px,100%);box-shadow:0 24px 80px #0000006b}.conversation-log{flex-direction:column;max-height:min(84dvh,780px);display:flex;overflow:hidden}.conversation-log__header{border-bottom:1px solid #b9aa9b2e;flex:none;justify-content:space-between;align-items:center;gap:16px;padding:18px clamp(18px,4vw,28px);display:flex}.conversation-log__header h2,.restart-dialog h2{margin:2px 0 0;font-size:clamp(1.2rem,3vw,1.55rem)}.conversation-log__eyebrow{color:var(--tone-1);letter-spacing:.12em;margin:0;font-size:.72rem;font-weight:700}.conversation-log__progress{color:var(--text-dim);margin:4px 0 0;font-size:.78rem}.conversation-log__header-actions{flex:none;align-items:center;gap:8px;display:flex}.scene-dialog__close,.scene-dialog__button,.conversation-log__current-button,.conversation-log__replay{min-height:44px;color:var(--text);font:inherit;cursor:pointer;background:0 0;border:1px solid #b9aa9b4d;border-radius:8px}.scene-dialog__close,.conversation-log__current-button{padding:0 14px}.conversation-log__current-button{color:var(--text-dim);font-size:.82rem}.conversation-log__list{overscroll-behavior:contain;scrollbar-color:var(--greige) transparent;margin:0;padding:14px clamp(16px,4vw,28px) 28px;overflow-y:auto}.conversation-log__entry{list-style:none}.conversation-log__scene-heading{gap:2px;margin:18px 0 10px;padding:0 2px;display:grid}.conversation-log__entry:first-child .conversation-log__scene-heading{margin-top:2px}.conversation-log__scene-heading span{color:var(--tone-1);letter-spacing:.08em;font-size:.7rem;font-weight:700}.conversation-log__scene-heading strong{font-size:.96rem}.conversation-log__scene-heading small{color:var(--text-dim);font-size:.74rem}.conversation-log__card{background:#fffaf208;border:1px solid #b9aa9b29;border-radius:12px;padding:15px 16px 16px 20px;position:relative}.conversation-log__entry+.conversation-log__entry .conversation-log__card{margin-top:8px}.conversation-log__entry--current .conversation-log__card{background:#c5a16b14;border-color:#c5a16bad}.conversation-log__card:before{background:var(--greige);content:"";border-radius:50%;width:5px;height:5px;position:absolute;top:22px;left:8px}.conversation-log__entry--current .conversation-log__card:before{background:var(--tone-1);box-shadow:0 0 0 4px #c5a16b29}.conversation-log__meta{align-items:center;gap:8px;min-height:18px;display:flex}.conversation-log__sequence{color:var(--text-dim);font-variant-numeric:tabular-nums;font-size:.7rem}.conversation-log__speaker{color:var(--tone-1);font-size:.8rem;font-weight:700}.conversation-log__now{color:var(--tone-1);background:#c5a16b29;border-radius:999px;margin-left:auto;padding:2px 7px;font-size:.68rem;font-weight:700}.conversation-log__hanzi,.conversation-log__pinyin,.conversation-log__translation,.conversation-log__narration{margin:0}.conversation-log__hanzi{font-family:var(--font-hanzi);margin-top:7px;font-size:clamp(1.25rem,3.5vw,1.65rem);line-height:1.5}.conversation-log__pinyin{color:var(--text-dim);margin-top:2px;font-size:.82rem}.conversation-log__translation,.conversation-log__narration{margin-top:8px;line-height:1.75}.conversation-log__translation{color:var(--text-dim);font-size:.92rem}.conversation-log__replay{min-height:36px;margin-top:11px;padding:0 12px;font-size:.8rem}.conversation-log__empty{color:var(--text-dim);text-align:center;margin:0;padding:32px 24px}.scene-dialog__close:hover,.scene-dialog__close:focus-visible,.scene-dialog__button:hover,.scene-dialog__button:focus-visible,.conversation-log__current-button:hover,.conversation-log__current-button:focus-visible,.conversation-log__replay:hover,.conversation-log__replay:focus-visible{border-color:var(--greige);background:#f0eae014}.restart-dialog{width:min(440px,100%);padding:clamp(22px,5vw,32px)}.restart-dialog>p:not(.conversation-log__eyebrow){color:var(--text-dim);margin:14px 0 0;line-height:1.7}.restart-dialog__controls{justify-content:flex-end;gap:10px;margin-top:24px;display:flex}.scene-dialog__button{padding:0 18px}.scene-dialog__button--danger{border-color:var(--tone-1);background:var(--tone-1);color:var(--paper)}.scene-dialog__button--danger:hover,.scene-dialog__button--danger:focus-visible{border-color:var(--tone-1);background:color-mix(in srgb, var(--tone-1) 88%, white)}@media (max-width:480px){.scene-overlay{padding-inline:max(10px, env(safe-area-inset-left)) max(10px, env(safe-area-inset-right))}.conversation-log{max-height:88dvh}.conversation-log__header{align-items:flex-start;padding-block:14px}.conversation-log__header-actions{gap:5px}.scene-dialog__close,.conversation-log__current-button{padding-inline:10px}.conversation-log__current-button{font-size:0}.conversation-log__current-button:after{content:"現在地";font-size:.76rem}.conversation-log__card{padding-inline:17px 12px}}@media (max-height:620px){.scene-overlay{padding-block:max(8px, env(safe-area-inset-top)) max(8px, env(safe-area-inset-bottom));align-items:stretch}.conversation-log{max-height:100%}.conversation-log__header{padding-block:9px}.conversation-log__list{min-height:0;padding-bottom:12px}.conversation-log__scene-heading{margin-top:10px}.restart-dialog{max-height:100%;padding-block:16px;overflow-y:auto}.restart-dialog__controls{margin-top:14px}}.bgm-volume-control{color:inherit;grid-template-columns:2.75rem minmax(5rem,auto);align-items:center;gap:.45rem .65rem;display:grid}.bgm-volume-control__mute{width:2.75rem;height:2.75rem;color:inherit;cursor:pointer;touch-action:manipulation;background:0 0;border:1px solid;border-radius:999px;place-items:center;padding:0;display:grid}.bgm-volume-control__mute svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;width:1.25rem;height:1.25rem}.bgm-volume-control__mute:focus-visible,.bgm-volume-control__range:focus-visible{outline-offset:3px;outline:3px solid}.bgm-volume-control__label{justify-content:space-between;gap:.75rem;font-size:.75rem;line-height:1.2;display:flex}.bgm-volume-control__range{accent-color:currentColor;cursor:pointer;touch-action:manipulation;grid-column:2;width:100%;min-width:7rem;min-height:2.75rem}@media (prefers-reduced-motion:reduce){.bgm-volume-control__range{scroll-behavior:auto}}.onboarding{z-index:40;padding:max(16px, env(safe-area-inset-top)) max(16px, env(safe-area-inset-right)) max(16px, env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));outline:none;place-items:center;display:grid;position:fixed;inset:0}.onboarding__backdrop{background:#0e0c0ac7;position:absolute;inset:0}.onboarding__card{width:min(100%,420px);min-height:min(630px,100dvh - 32px);color:var(--text,#f0eae0);background:linear-gradient(145deg,#2f2a25fa,#181512fc);border:1px solid #f0eae033;border-radius:24px;flex-direction:column;padding:clamp(20px,6vw,30px);display:flex;position:relative;box-shadow:0 28px 80px #00000073}.onboarding__topline,.onboarding__actions{justify-content:space-between;align-items:center;gap:12px;display:flex}.onboarding__eyebrow,.onboarding__step{color:var(--greige,#b9aa9b);letter-spacing:.16em;margin:0;font-size:.67rem;font-weight:750}.onboarding__skip{min-height:44px;color:var(--text-dim,#c7bcae);font:inherit;text-underline-offset:3px;cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0 8px;font-size:.82rem;text-decoration:underline}.onboarding__progress{gap:6px;margin:20px 0 8px;display:flex}.onboarding__progress span{background:#f0eae029;border-radius:999px;flex:1;height:4px}.onboarding__progress .is-current,.onboarding__progress .is-done{background:#e2d4c5}.onboarding__demo{background:radial-gradient(circle at 50% 20%,#e2d4c51f,#0000 42%),#f0eae008;border:1px solid #f0eae01a;border-radius:18px;place-content:center;height:180px;margin:14px 0 24px;display:grid;position:relative;overflow:hidden}.onboarding__demo--tap{grid-auto-flow:column;gap:14px}.onboarding__hanzi,.onboarding__sentence,.onboarding__speech{font-family:var(--font-hanzi,serif)}.onboarding__hanzi{background:#f0eae012;border:1px solid #f0eae040;border-radius:14px;place-items:center;width:68px;height:68px;font-size:2.4rem;display:grid}.onboarding__tap-ring{border:2px solid #e2d4c5;border-radius:50%;width:62px;height:62px;animation:1.7s ease-in-out infinite onboarding-pulse;position:absolute;top:50%;left:calc(50% - 41px);transform:translate(-50%,-50%)}.onboarding__tap-cursor{color:#e2d4c5;font-size:2rem;position:absolute;top:58%;left:calc(50% - 8px);transform:rotate(-30deg)translate(-50%,-50%)}.onboarding__demo--translate{grid-template-columns:auto auto;align-content:center;gap:12px}.onboarding__listen{color:#e2d4c5;border:1px solid #f0eae040;border-radius:50%;grid-row:span 2;place-items:center;width:42px;height:42px;font-size:1.15rem;display:grid}.onboarding__sentence{font-size:1.75rem}.onboarding__translation{color:var(--text-dim,#c7bcae);font-size:.93rem}.onboarding__demo--speak{gap:18px}.onboarding__speech{letter-spacing:.08em;font-size:2.1rem}.onboarding__wave{justify-content:center;align-items:center;gap:6px;height:38px;display:flex}.onboarding__wave i{background:#e2d4c5;border-radius:999px;width:4px;height:14px;animation:.85s ease-in-out infinite alternate onboarding-wave}.onboarding__wave i:nth-child(2){height:28px;animation-delay:.13s}.onboarding__wave i:nth-child(3){height:20px;animation-delay:.26s}.onboarding__wave i:nth-child(4){height:10px;animation-delay:.39s}.onboarding__cards{gap:12px;display:flex}.onboarding__cards b{width:58px;height:58px;font-family:var(--font-hanzi,serif);background:#f0eae012;border:1px solid #f0eae040;border-radius:12px;place-items:center;font-size:1.9rem;font-weight:400;display:grid}.onboarding h2{margin:8px 0 0;font-size:clamp(1.35rem,6vw,1.75rem);line-height:1.35}.onboarding__body{color:var(--text-dim,#c7bcae);margin:14px 0 0;font-size:.96rem;line-height:1.8}.onboarding__tip{border-left:2px solid var(--greige,#b9aa9b);color:var(--text,#f0eae0);background:#f0eae00d;border-radius:0 8px 8px 0;margin:14px 0 0;padding:11px 12px;font-size:.84rem;line-height:1.6}.onboarding__actions{margin-top:auto;padding-top:24px}.onboarding__button{min-width:104px;min-height:48px;color:var(--text,#f0eae0);font:inherit;cursor:pointer;background:0 0;border:1px solid #f0eae047;border-radius:12px;padding:0 17px;font-weight:700}.onboarding__button--primary{color:#2a2724;background:#e2d4c5;border-color:#e2d4c5}.onboarding__skip:hover,.onboarding__skip:focus-visible,.onboarding__button:hover,.onboarding__button:focus-visible{outline:none;box-shadow:0 0 0 3px #e2d4c54d}@keyframes onboarding-pulse{0%,to{opacity:.35;transform:translate(-50%,-50%)scale(.84)}55%{opacity:1;transform:translate(-50%,-50%)scale(1.04)}}@keyframes onboarding-wave{0%{opacity:.48;transform:scaleY(.48)}to{opacity:1;transform:scaleY(1)}}@media (max-height:680px){.onboarding__card{min-height:0}.onboarding__demo{height:128px;margin:10px 0 16px}.onboarding__body{line-height:1.55}.onboarding__tip{margin-top:10px}.onboarding__actions{padding-top:16px}}@media (prefers-reduced-motion:reduce){.onboarding *,.onboarding :before,.onboarding :after{transition:none!important;animation:none!important}}.title{width:100%;height:100%;padding:max(28px, env(safe-area-inset-top)) clamp(24px, 8vw, 96px) max(28px, env(safe-area-inset-bottom));color:var(--text);background-color:#16130f;background-image:linear-gradient(90deg,#0c0a09e0 0%,#0c0a099e 46%,#0c0a092e 100%),url(/assets/backgrounds/city-gate.webp);background-position:50%;background-size:cover;align-content:center;justify-items:start;gap:clamp(22px,5vh,44px);display:grid;position:relative;overflow:hidden}.title__plate{justify-items:start;gap:6px;display:grid}.title__plate p{max-width:34ch}.title__eyebrow{color:var(--greige);letter-spacing:.24em;font-size:.66rem;font-weight:750}.title h1{font-family:var(--font-hanzi);letter-spacing:.14em;white-space:nowrap;text-shadow:0 4px 30px #0009;margin:0;font-size:clamp(2.8rem,9vw,4.6rem);font-weight:500;line-height:1.05}.title__plate p{color:var(--text-dim);margin:4px 0 0;font-size:.92rem;line-height:1.7}.title__actions{gap:10px;width:min(360px,100%);display:grid}.title__action{min-height:64px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:linear-gradient(#2a2724c7,#14110ed6);border:1px solid #e2d4c542;border-radius:13px;justify-items:start;gap:2px;padding:11px 18px;transition:border-color .16s,background .16s,transform .16s;display:grid}.title__action:hover,.title__action:focus-visible{border-color:var(--greige);transform:translateY(-1px)}.title__action b{letter-spacing:.06em;font-size:1rem;font-weight:650}.title__action small{color:var(--text-dim);font-size:.74rem}.title__action--primary{background:linear-gradient(#662a20d1,#341611e0);border-color:#e14b328c}.title__action--primary:hover,.title__action--primary:focus-visible{border-color:var(--tone-1)}.title__confirm{background:#14110ee0;border:1px solid #e2d4c538;border-radius:13px;padding:14px 16px}.title__confirm p{color:var(--text-dim);margin:0 0 12px;font-size:.82rem;line-height:1.6}.title__confirm div{gap:8px;display:flex}.title__confirm button{min-height:42px;color:var(--text);font:inherit;cursor:pointer;background:0 0;border:1px solid #e2d4c542;border-radius:9px;padding:0 14px;font-size:.82rem}.title__confirm-go{color:#f4c4b8!important;border-color:#e14b3299!important}.title__chapters{gap:12px;width:min(420px,100%);display:grid}.title__chapters header{justify-content:space-between;align-items:center;display:flex}.title__back{min-height:36px;color:var(--text-dim);font:inherit;cursor:pointer;background:0 0;border:1px solid #e2d4c53d;border-radius:999px;padding:0 12px;font-size:.76rem}.title__chapters ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.title__chapter{width:100%;min-height:62px;color:var(--text);font:inherit;text-align:left;cursor:pointer;background:linear-gradient(#2a2724c2,#14110ed1);border:1px solid #e2d4c53d;border-radius:12px;justify-items:start;gap:3px;padding:10px 16px;display:grid}.title__chapter:hover:not(:disabled),.title__chapter:focus-visible{border-color:var(--greige)}.title__chapter:disabled{cursor:not-allowed;opacity:.42}.title__chapter-name{font-family:var(--font-hanzi);letter-spacing:.08em;align-items:center;gap:9px;font-size:1.02rem;display:flex}.title__chapter-name b{color:#7fd0b0;font-family:var(--font-ui);letter-spacing:.1em;background:#2f8f6f38;border-radius:999px;padding:2px 8px;font-size:.62rem;font-weight:750}.title__chapter small{color:var(--text-dim);font-size:.74rem}.title__note{color:var(--text-dim);margin:0;font-size:.7rem;line-height:1.6}@media (max-width:480px){.title{justify-items:stretch}.title__actions,.title__chapters{width:100%}}:root{--tone-1:#e14b32;--tone-2:#3fa37a;--tone-3:#4a7fa8;--tone-4:#6b4a8c;--tone-5:#5a5550;--verdict-ok:#2f8f6f;--verdict-ok-tint:#2f8f6f29;--verdict-miss:#a8564a;--verdict-miss-tint:#a8564a26;--paper:#f0eae0;--ink:#2a2724;--greige:#b9aa9b;--lavender:#b8a8d9;--bg:#16130f;--surface:#2a2724d1;--text:var(--paper);--text-dim:#c7bcae;--font-ui:system-ui, -apple-system, "Segoe UI", "Hiragino Sans", "Noto Sans JP", sans-serif;--font-hanzi:"Songti SC", "SimSun", "Noto Serif SC", "Hiragino Mincho ProN", serif;--radius:10px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font-ui);overscroll-behavior:none;-webkit-text-size-adjust:100%;overflow:hidden}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.app{width:100%;height:100%;position:relative;overflow:hidden}.app:after{content:"";z-index:1;pointer-events:none;background:linear-gradient(#0000 0%,#120f0c47 38%,#120f0cb8 70%,#120f0cf0 100%);height:48%;position:absolute;inset:auto 0 0}.app__utilities{z-index:5;top:max(12px, env(safe-area-inset-top));right:max(12px, env(safe-area-inset-right));align-items:center;gap:8px;display:flex;position:absolute}.app__hud{z-index:5;top:max(16px, env(safe-area-inset-top));left:max(20px, env(safe-area-inset-left));width:min(248px,100vw - 150px);color:var(--text);text-shadow:0 2px 16px #000000b3,0 0 4px #00000073;pointer-events:none;gap:1px;display:grid;position:absolute}.app__hud strong{font-family:var(--font-hanzi);letter-spacing:.06em;font-size:clamp(.92rem,1.6vw,1.08rem);font-weight:500;line-height:1.35;transition:opacity .9s}.app__eyebrow{color:var(--greige);letter-spacing:.22em;font-size:.62rem;font-weight:750}.app__hud[data-quiet] strong{opacity:.5}.app__hud[data-quiet] .app__progress-meter{opacity:.32}.app__progress-meter{background:#f0eae038;border-radius:999px;width:92px;height:2px;margin-top:7px;transition:opacity .9s;display:block;overflow:hidden}.app__progress-meter i{border-radius:inherit;background:var(--paper);height:100%;transition:width .4s cubic-bezier(.22,1,.36,1);display:block}.app__utility{min-height:44px;color:var(--text);font:inherit;cursor:pointer;background:linear-gradient(#2a2724c7,#16130fd1);border:1px solid #b9aa9b47;border-radius:999px;align-items:center;gap:7px;padding:0 14px 0 11px;font-size:.82rem;transition:transform .16s,border-color .16s,background .16s;display:inline-flex;box-shadow:0 8px 24px #0000001f}.app__utility svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;opacity:.78;width:16px;height:16px}.app__utility:hover,.app__utility:focus-visible{border-color:var(--greige);background:#2a2724e6;transform:translateY(-1px)}.app__utility:disabled{cursor:progress;opacity:.72}.app__menu-scrim{z-index:11;cursor:default;background:0 0;border:0;padding:0;position:absolute;inset:0}.app__menu{z-index:12;top:max(62px, calc(env(safe-area-inset-top) + 52px));right:max(12px, env(safe-area-inset-right));width:min(304px,100vw - 24px);color:var(--text);background:linear-gradient(145deg,#2a2622f7,#12100efa);border:1px solid #e2d4c542;border-radius:16px;gap:2px;padding:8px;animation:.16s cubic-bezier(.22,1,.36,1) both menu-in;display:grid;position:absolute;box-shadow:0 18px 50px #00000061}.app__menu-item{min-height:52px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:10px;align-items:center;gap:12px;padding:8px 10px;transition:background .14s;display:flex}.app__menu-item:hover,.app__menu-item:focus-visible{background:#f0eae017}.app__menu-item span{gap:1px;display:grid}.app__menu-item b{font-size:.88rem;font-weight:600}.app__menu-item small{color:var(--text-dim);font-size:.68rem}.app__menu svg{fill:none;stroke:currentColor;stroke-width:1.7px;stroke-linecap:round;stroke-linejoin:round;opacity:.7;flex:none;width:17px;height:17px}.app__menu-sound,.app__menu-keys{border-top:1px solid #e2d4c51f;padding:10px}.app__menu-label{align-items:center;gap:9px;margin-bottom:9px;font-size:.78rem;font-weight:600;display:flex}.app__menu-label em{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto;font-size:.66rem;font-style:normal}.app__menu-keys dl{grid-template-columns:auto 1fr;align-items:center;gap:6px 12px;margin:0;display:grid}.app__menu-keys dt{gap:4px;display:flex}.app__menu-keys dd{color:var(--text-dim);margin:0;font-size:.72rem}.app__menu-keys kbd{min-width:22px;font-family:var(--font-ui);text-align:center;background:#f0eae012;border:1px solid #e2d4c542;border-radius:5px;padding:2px 5px;font-size:.64rem;display:inline-block}.app__menu-note{color:var(--text-dim);padding:2px 10px 6px;font-size:.64rem}@keyframes menu-in{0%{opacity:0;transform:translateY(-8px)scale(.98)}to{opacity:1;transform:none}}.review-book-loading{z-index:40;color:var(--paper);background:#1e1916d1;place-items:center;display:grid;position:fixed;inset:0}.scene-transition{z-index:20;color:var(--text);pointer-events:all;cursor:pointer;will-change:opacity;background:#110f0df7;place-content:center;justify-items:center;gap:9px;animation:.9s linear both scene-veil;display:grid;position:absolute;inset:0}.scene-transition:before{content:"";background:linear-gradient(90deg, transparent, var(--greige), transparent);width:min(280px,68vw);height:1px;margin-bottom:7px}.scene-transition__skip{bottom:max(26px, env(safe-area-inset-bottom));color:var(--text-dim);letter-spacing:.18em;opacity:.55;font-size:.62rem;position:absolute}.scene-transition p{justify-items:center;gap:9px;margin:0;display:grid}.scene-transition span,.scene-transition small{color:var(--greige);letter-spacing:.24em;font-size:.62rem;font-weight:750}.scene-transition strong{font-family:var(--font-hanzi);letter-spacing:.12em;font-size:clamp(1.35rem,5vw,2.25rem);font-weight:500}.scene-transition[data-kind=chapter]{gap:26px;animation-name:chapter-veil;animation-duration:1.9s}.scene-transition[data-kind=chapter] .scene-transition__cleared{animation:.52s ease-out both transition-stage}.scene-transition[data-kind=chapter] .scene-transition__cleared strong{color:var(--text-dim);font-size:clamp(1.1rem,4vw,1.7rem)}.scene-transition[data-kind=chapter] .scene-transition__next{animation:.52s ease-out .62s both transition-stage}.scene-transition[data-kind=chapter] .scene-transition__next:before{content:"";background:linear-gradient(90deg, transparent, var(--greige), transparent);width:min(200px,52vw);height:1px;margin-bottom:4px;display:block}@keyframes transition-stage{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@keyframes scene-veil{0%{opacity:0}16%,74%{opacity:1}to{opacity:0}}@keyframes chapter-veil{0%{opacity:0}9%,86%{opacity:1}to{opacity:0}}@media (max-width:480px){.app__utility{justify-content:center;width:44px;padding:0}.app__utility>span{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}.app__hud{top:max(14px, env(safe-area-inset-top));left:max(14px, env(safe-area-inset-left));width:min(196px,100vw - 120px)}.app__hud strong{font-size:.86rem}.app__menu{top:max(62px, calc(env(safe-area-inset-top) + 50px));right:max(8px, env(safe-area-inset-right))}}:root[data-blur=on] .app__utility{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}:root[data-blur=off] .app__utility{background:linear-gradient(#282522f2,#14110ef5)}@media (prefers-reduced-motion:reduce){.app__menu,.scene-transition [class$=__cleared],.scene-transition [class$=__next]{animation:none}}
