@font-face{font-family:Nunito Variable;font-style:normal;font-display:swap;font-weight:200 1000;src:url(./nunito-latin-wght-normal-BzFMHfZw.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg: #fff8ef;--bg-outer: #f6e8d6;--surface: #ffffff;--surface-2: #fff3e4;--ink: #3b2a24;--ink-2: #6b554b;--muted: #94806f;--line: #f1e0cc;--primary: #ff8a3d;--primary-dark: #e06a1c;--primary-soft: #ffe4cf;--good: #34b36f;--good-dark: #21915a;--good-soft: #dcf5e7;--bad: #ee5f5b;--bad-dark: #c94340;--bad-soft: #ffe4e1;--purple: #8b6cff;--purple-soft: #ece6ff;--radius: 22px;--radius-sm: 14px;--font: "Nunito Variable", "Nunito", "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", "Heiti TC", system-ui, sans-serif;--emoji: "Apple Color Emoji", "Segoe UI Emoji", "Noto Color Emoji", sans-serif;--safe-b: env(safe-area-inset-bottom, 0px);--safe-t: env(safe-area-inset-top, 0px);color-scheme:light}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg-outer);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.5;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior-y:none}button{font:inherit;color:inherit}button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--purple);outline-offset:3px}#root{min-height:100dvh}.app,#root>.screen{max-width:480px;margin:0 auto;min-height:100dvh;background:var(--bg);position:relative}@media(min-width:520px){.app,#root>.screen{box-shadow:0 0 0 1px var(--line),0 20px 60px #7850281f}}.app.with-nav{padding-bottom:calc(76px + var(--safe-b))}.screen{padding:calc(12px + var(--safe-t)) 16px calc(20px + var(--safe-b));display:flex;flex-direction:column;gap:14px}.center-screen,.onboard,.summary{align-items:center;text-align:center;justify-content:center}.center{text-align:center}.muted{color:var(--muted);margin:0}.fine{font-size:.8rem;color:var(--muted);margin:4px 0 0}.error{color:var(--bad-dark);margin:0;font-weight:700}.stack{display:flex;flex-direction:column;gap:10px;width:100%}.card{background:var(--surface);border-radius:var(--radius);padding:18px 16px;box-shadow:0 2px 0 var(--line),0 10px 30px #78502814;width:100%}.notice{margin:0;background:var(--surface-2);border-radius:var(--radius-sm);padding:10px 14px;color:var(--ink-2);font-size:.95rem}.chip{display:inline-flex;align-items:center;gap:4px;font-size:.78rem;font-weight:800;padding:2px 10px;border-radius:999px;background:var(--primary-soft);color:var(--primary-dark);vertical-align:middle}.chip-btn{border:0;cursor:pointer;font-size:.95rem;padding:6px 14px}.badge{display:inline-block;font-weight:900;font-size:.85rem;color:#fff;background:var(--purple);padding:3px 12px;border-radius:999px;margin:0}.btn{--c: var(--primary);--cd: var(--primary-dark);--fg: #fff;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:18px;background:var(--c);color:var(--fg);font-weight:900;letter-spacing:.02em;cursor:pointer;box-shadow:0 5px 0 var(--cd);transform:translateY(0);transition:transform .08s ease,box-shadow .08s ease,filter .15s;-webkit-user-select:none;user-select:none;touch-action:manipulation}.btn:active:not(:disabled){transform:translateY(4px);box-shadow:0 1px 0 var(--cd)}.btn:disabled{cursor:default;filter:grayscale(.6);opacity:.55}.btn-md{min-height:50px;padding:10px 20px;font-size:1.05rem}.btn-lg{min-height:58px;padding:12px 22px;font-size:1.15rem}.btn-sm{min-height:40px;padding:6px 14px;font-size:.92rem;border-radius:14px;box-shadow:0 3px 0 var(--cd)}.btn-block{width:100%}.btn-secondary{--c: #fff;--cd: #ead6bf;--fg: var(--ink);border:2px solid #ead6bf}.btn-ghost{--c: transparent;--cd: transparent;--fg: var(--ink-2);box-shadow:none}.btn-ghost:active:not(:disabled){transform:scale(.97);box-shadow:none}.btn-good{--c: var(--good);--cd: var(--good-dark)}.btn-danger{--c: var(--bad-soft);--cd: #f3c1bc;--fg: var(--bad-dark)}.btn-icon{font-family:var(--emoji);font-size:1.25em;line-height:1}.icon-btn{width:44px;height:44px;border-radius:14px;border:0;background:var(--surface);box-shadow:0 2px 0 var(--line);display:grid;place-items:center;cursor:pointer;color:var(--ink-2);flex:none}.icon-btn svg{width:22px;height:22px}.icon-btn-spacer{width:44px;flex:none}.speak{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:50%;border:0;background:var(--purple-soft);color:var(--purple);cursor:pointer;vertical-align:middle;margin-left:6px;flex:none}.speak svg{width:22px;height:22px}.speak-sm{width:32px;height:32px}.speak-sm svg{width:18px;height:18px}.speak:active{transform:scale(.92)}.topbar{display:flex;align-items:center;gap:8px}.topbar-title{flex:1;text-align:center;font-size:1.2rem;margin:0;font-weight:900}.bar{height:14px;border-radius:999px;background:#f3e3d1;overflow:hidden;flex:none}.session-head .bar{flex:1}.bar-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,#ffb36b,var(--primary));transition:width .5s cubic-bezier(.3,1.4,.5,1);box-shadow:inset 0 -3px #00000014}.bar-green .bar-fill{background:linear-gradient(90deg,#8fdc76,var(--good))}.session-head{display:flex;align-items:center;gap:12px}.session-head.floating{position:absolute;top:calc(12px + var(--safe-t));left:16px;right:16px;z-index:5;justify-content:space-between}.session-count{font-weight:900;color:var(--ink-2);white-space:nowrap;background:#ffffffd9;padding:4px 10px;border-radius:999px}.session-title{flex:1;font-weight:900;text-align:center}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#3b2a2473;display:grid;place-items:center;padding:16px;z-index:50;animation:fade .2s ease}.modal{background:var(--surface);border-radius:26px;padding:22px 18px 18px;width:min(440px,100%);max-height:calc(100dvh - 32px);overflow:auto;display:flex;flex-direction:column;gap:12px;animation:pop-in .28s cubic-bezier(.3,1.5,.6,1);position:relative}.modal-title{margin:0;font-size:1.3rem;font-weight:900;text-align:center}.howto{margin:0;padding-left:1.2em;display:flex;flex-direction:column;gap:8px;color:var(--ink-2)}.code-input{width:100%;border:2px solid var(--line);border-radius:var(--radius-sm);padding:10px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.8rem;resize:vertical;word-break:break-all;background:var(--surface-2)}.bubble{position:relative;background:#fff;border-radius:18px;padding:8px 14px;font-weight:800;box-shadow:0 3px #7850281f;display:inline-flex;flex-direction:column;align-items:center;line-height:1.3;animation:pop-in .3s cubic-bezier(.3,1.5,.6,1);max-width:260px;text-align:center}.bubble small{font-weight:600;color:var(--muted)}.bubble:after{content:"";position:absolute;bottom:-9px;left:50%;transform:translate(-50%);border:10px solid transparent;border-top-color:#fff;border-bottom:0}.bubble-hungry{background:#fff4dd}.bubble-hungry:after{border-top-color:#fff4dd}.bubble-side:after{display:none}.toast{position:fixed;left:50%;bottom:calc(96px + var(--safe-b));transform:translate(-50%);background:var(--ink);color:#fff;padding:10px 18px;border-radius:999px;font-weight:800;z-index:60;animation:pop-in .3s ease}.storage-banner{margin:0;background:var(--bad-soft);color:var(--bad-dark);font-size:.85rem;padding:8px 14px;text-align:center;font-weight:700}.confetti{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden;z-index:0}.confetti span{position:absolute;top:-12px;width:9px;height:14px;border-radius:3px;animation:confetti 2.4s ease-in forwards}.pet,.egg{position:relative;display:inline-block;flex:none;user-select:none;-webkit-user-select:none;max-width:100%}.pet[role=button]{cursor:pointer}.pet svg,.egg svg{display:block;width:100%;height:auto;overflow:visible}.pet-figure,.pet-eyes,.pet-sprout,.pet-shadow,.pet-chew,.wing-l,.wing-r,.egg-shell{transform-box:fill-box}.pet-figure{transform-origin:50% 100%;animation:breathe 2.8s ease-in-out infinite}.pet-eyes{transform-origin:50% 50%;animation:blink 4.8s infinite}.pet-sprout{transform-origin:50% 100%;animation:sway 3.2s ease-in-out infinite}.pet-shadow{transform-origin:50% 50%}.pet-chew{transform-origin:50% 50%;animation:chew .28s ease-in-out infinite alternate}.pet[data-mood=hungry] .pet-figure{animation:droop 3.6s ease-in-out infinite}.pet[data-mood=excited] .pet-figure{animation:hop .7s ease-in-out infinite}.pet[data-mood=excited] .pet-shadow{animation:shadow-hop .7s ease-in-out infinite}.pet[data-mood=confused] .pet-figure{animation:tilt 1.2s ease-in-out}.pet[data-mood=eating] .pet-figure{animation:munch .56s ease-in-out infinite}.pet[data-mood=sleep] .pet-figure{animation:breathe 4.4s ease-in-out infinite}.pet[data-mood=sleep] .pet-eyes{animation:none}.pet-bounce .pet-figure{animation:boing .6s cubic-bezier(.3,1.6,.5,1)}.pet-pop{animation:pop-in .6s cubic-bezier(.3,1.6,.5,1)}.pet[data-act=run]{animation:dash 1.6s ease-in-out infinite}.pet[data-act=run] .pet-figure{animation:run-bob .32s ease-in-out infinite alternate}.pet[data-act=jump] .pet-figure{animation:jump 1s cubic-bezier(.3,.7,.4,1) infinite}.pet[data-act=jump] .pet-shadow{animation:shadow-jump 1s ease-in-out infinite}.pet[data-act=walk] .pet-figure{animation:waddle .7s ease-in-out infinite alternate}.pet[data-act=climb] .pet-figure{animation:climb 1.4s ease-in-out infinite}.pet[data-act=swim] .pet-figure{animation:swim 1.4s ease-in-out infinite}.pet[data-act=fly] .pet-figure{animation:fly 1.8s ease-in-out infinite}.pet[data-act=fly] .pet-shadow{animation:shadow-fly 1.8s ease-in-out infinite}.pet[data-act=read] .pet-figure,.pet[data-act=write] .pet-figure,.pet[data-act=draw] .pet-figure{animation:nod 1.6s ease-in-out infinite}.pet[data-act=cook] .pet-figure,.pet[data-act=sing] .pet-figure{animation:sing 1.1s ease-in-out infinite}.pet[data-act=dance] .pet-figure{animation:dance .9s ease-in-out infinite}.pet[data-act=laugh] .pet-figure{animation:laugh .3s ease-in-out infinite alternate}.pet[data-act=sleep] .pet-figure{animation:breathe 4.4s ease-in-out infinite}.wing-l{transform-origin:100% 50%;animation:flap-l .22s ease-in-out infinite alternate}.wing-r{transform-origin:0% 50%;animation:flap-r .22s ease-in-out infinite alternate}.pet-prop{position:absolute;pointer-events:none;font-family:var(--emoji);font-size:clamp(1.4rem,7vw,2.3rem);line-height:1}.prop-puff{left:-4%;bottom:8%;animation:puff .5s ease-out infinite}.prop-behind{right:-18%;bottom:6%;font-size:clamp(3rem,16vw,5rem);z-index:-1}.prop-wave{bottom:-2%;font-size:clamp(1.6rem,8vw,2.6rem);animation:wave 1.4s ease-in-out infinite}.prop-wave.w1{left:-4%}.prop-wave.w2{left:34%;animation-delay:.3s}.prop-wave.w3{left:70%;animation-delay:.6s}.prop-cloud{left:-16%;bottom:-6%;animation:drift 1.8s ease-in-out infinite}.prop-hold{left:50%;bottom:14%;transform:translate(-50%);font-size:clamp(1.8rem,9vw,2.8rem)}.prop-pencil{right:16%;bottom:30%;animation:scribble .35s ease-in-out infinite alternate}.prop-steam{left:46%;bottom:40%;animation:rise 1.6s ease-out infinite}.prop-note{animation:rise 1.8s ease-out infinite;opacity:0}.prop-note.n1{left:-2%;top:18%}.prop-note.n2{right:-4%;top:6%;animation-delay:.6s}.prop-note.n3{left:40%;top:-8%;animation-delay:1.2s}.prop-question{right:6%;top:0;font-family:var(--font);font-weight:900;font-size:clamp(2rem,9vw,3rem);color:var(--purple);animation:pop-in .4s cubic-bezier(.3,1.6,.5,1)}.egg-wobble .egg-shell{transform-origin:50% 100%;animation:wobble 2.4s ease-in-out infinite}.egg[data-crack="3"] .egg-shell{animation:wobble-fast .5s ease-in-out infinite}.egg-crack{stroke-dasharray:80;stroke-dashoffset:80;animation:draw .4s ease-out forwards}.welcome{justify-content:space-between;padding-top:calc(40px + var(--safe-t))}.welcome-hero{display:flex;flex-direction:column;align-items:center;gap:4px}.logo{margin:0;font-size:3rem;font-weight:900;letter-spacing:.08em;color:var(--primary-dark);line-height:1.1;display:flex;flex-direction:column;align-items:center}.logo span{font-size:1rem;letter-spacing:.3em;color:var(--muted)}.tagline{margin:4px 0 0;font-size:1.1rem;font-weight:800;color:var(--ink-2)}.welcome-points{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px;width:100%;text-align:left}.welcome-points li{background:var(--surface);border-radius:var(--radius-sm);padding:12px 14px;font-weight:700;display:flex;align-items:center;gap:12px;box-shadow:0 2px 0 var(--line)}.welcome-points span{font-family:var(--emoji);font-size:1.5rem}.welcome-actions{width:100%;display:flex;flex-direction:column;align-items:center;gap:6px}.onboard-title{margin:0;font-size:1.5rem;font-weight:900}.onboard-sub{margin:-8px 0 0;color:var(--muted)}.egg-stage{padding:20px 0 6px}.egg-picker{display:flex;gap:14px;justify-content:center}.egg-dot{width:46px;height:56px;border-radius:50% 50% 46% 46%/60% 60% 40% 40%;border:3px solid;cursor:pointer;transition:transform .15s}.egg-dot.on{transform:scale(1.18) translateY(-4px);box-shadow:0 0 0 4px #fff,0 0 0 7px var(--primary)}.egg-name{margin:0;font-weight:800;color:var(--ink-2)}.egg-mini{display:flex;align-items:center;gap:12px;width:100%;text-align:left}.bubble-text{margin:0;background:#fff;border-radius:18px;padding:10px 14px;font-weight:700;box-shadow:0 2px 0 var(--line);flex:1}.name-input{width:100%;border:3px solid var(--line);background:#fff;border-radius:18px;padding:12px 16px;font:inherit;font-size:1.4rem;font-weight:900;text-align:center;color:var(--ink)}.name-input.small{font-size:1.05rem;padding:8px 12px;text-align:left}.name-ideas{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.hatch-stage{padding:30px 0 10px;cursor:pointer;position:relative;z-index:1}.hatch-stage.burst .egg{animation:burst .9s ease-in forwards}.hatch{position:relative;overflow:hidden}.quiz{display:flex;flex-direction:column;gap:14px}.quiz-prompt{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center}.quiz-ask{margin:0;font-weight:800;color:var(--ink-2)}.quiz-emoji{font-family:var(--emoji);font-size:3.6rem;line-height:1.1;animation:pop-in .35s cubic-bezier(.3,1.6,.5,1)}.quiz-zh{margin:0;font-size:1.2rem;font-weight:900;display:flex;align-items:center}.big-speaker{width:84px;height:84px;border-radius:50%;border:0;background:var(--purple);color:#fff;display:grid;place-items:center;cursor:pointer;box-shadow:0 5px #6b4fe0;animation:pulse 2s ease-in-out infinite}.big-speaker svg{width:42px;height:42px}.big-speaker:active{transform:translateY(4px);box-shadow:0 1px #6b4fe0}.options{display:grid;grid-template-columns:1fr 1fr;gap:10px}.option{border:3px solid var(--line);background:#fff;border-radius:18px;padding:10px 8px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:64px;font-weight:800;box-shadow:0 3px 0 var(--line);transition:transform .08s,border-color .15s,background .15s;touch-action:manipulation}.option:active:not(:disabled){transform:translateY(2px);box-shadow:0 1px 0 var(--line)}.option:disabled{cursor:default}.option.right{border-color:var(--good);background:var(--good-soft);box-shadow:0 3px 0 var(--good);animation:boing .5s cubic-bezier(.3,1.6,.5,1)}.option.wrong{border-color:var(--bad);background:var(--bad-soft);box-shadow:0 3px 0 var(--bad);animation:shake .4s}.option.dim{opacity:.45}.option-emoji{font-family:var(--emoji);font-size:2.2rem;line-height:1.1}.option-zh{font-size:.95rem}.option-en{font-size:1.25rem;padding:8px 0}.option-chip{min-height:52px;min-width:84px;font-size:1.25rem;padding:6px 18px}.feedback{border-radius:18px;padding:12px 14px;display:flex;flex-direction:column;gap:10px;animation:slide-up .25s ease}.feedback-wrong{background:#fff1e6}.feedback-right{background:var(--good-soft)}.feedback-title{margin:0;font-weight:900;color:var(--ink-2)}.feedback-answer{margin:2px 0 0;font-size:1.15rem;display:flex;align-items:center;flex-wrap:wrap;gap:6px}.feedback-answer span{font-family:var(--emoji)}.feedback-tip{margin:0;color:var(--ink-2)}.spell-slots{display:flex;justify-content:center;flex-wrap:wrap;gap:6px}.spell-slot{width:40px;height:50px;border:0;border-bottom:4px solid #e3cdb4;background:var(--surface-2);border-radius:10px 10px 4px 4px;font-size:1.6rem;font-weight:900;cursor:pointer;padding:0}.spell-slot.full{background:#fff;border-bottom-color:var(--primary);animation:pop-in .18s ease}.spell-slots.right .spell-slot{border-bottom-color:var(--good);background:var(--good-soft)}.spell-slots.wrong .spell-slot{border-bottom-color:var(--bad);background:var(--bad-soft);animation:shake .4s}.spell-gap{width:14px}.spell-answer{font-size:1.5rem;letter-spacing:.08em}.tiles{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.tile{width:48px;height:52px;border:0;border-radius:14px;background:#fff;box-shadow:0 4px #e3cdb4,inset 0 0 0 2px #f1e0cc;font-size:1.5rem;font-weight:900;cursor:pointer;touch-action:manipulation}.tile:active:not(:disabled){transform:translateY(3px);box-shadow:0 1px #e3cdb4,inset 0 0 0 2px #f1e0cc}.tile.used{opacity:.2}.quiz-tools{display:flex;justify-content:center;gap:4px}.builder,.blank{display:flex;flex-direction:column;gap:12px;align-items:center;text-align:center}.builder-ask{margin:0;font-weight:800;color:var(--ink-2)}.builder-zh{margin:-6px 0 0;font-size:1.15rem;font-weight:900}.builder-line{display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-end;gap:6px;min-height:56px;padding:8px;border-radius:16px;background:var(--surface-2);width:100%}.builder-line.right{background:var(--good-soft)}.word-slot{min-width:56px;height:44px;border:0;border-bottom:3px dashed #dcc3a6;background:transparent;font-size:1.2rem;font-weight:900;padding:0 8px;cursor:pointer;border-radius:10px 10px 0 0}.word-slot.full{background:#fff;border-bottom:3px solid var(--primary);animation:pop-in .18s ease}.builder-line.right .word-slot{border-bottom-color:var(--good)}.word-slot.wrong{background:var(--bad-soft);border-bottom-color:var(--bad);animation:shake .4s}.builder-end{font-size:1.5rem;font-weight:900;padding-bottom:4px}.word-tiles{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.word-tile{border:0;background:#fff;border-radius:14px;padding:10px 16px;font-size:1.2rem;font-weight:900;box-shadow:0 4px #e3cdb4,inset 0 0 0 2px #f1e0cc;cursor:pointer;touch-action:manipulation}.word-tile:active:not(:disabled){transform:translateY(3px);box-shadow:0 1px #e3cdb4,inset 0 0 0 2px #f1e0cc}.word-tile.used{opacity:.2}.blank-line{margin:0;font-size:1.5rem;font-weight:900;line-height:1.6}.blank-slot{display:inline-block;min-width:70px;border-bottom:4px solid #dcc3a6;color:var(--muted);padding:0 6px}.blank-slot.right{color:var(--good-dark);border-bottom-color:var(--good);animation:pop-in .3s ease}.blank-slot.wrong{color:var(--good-dark);border-bottom-color:var(--good)}.blank-options{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.word-card,.word-detail{display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center}.word-card-title{margin:0;font-weight:800;color:var(--muted);font-size:.9rem}.word-card-emoji{font-family:var(--emoji);font-size:4.4rem;line-height:1.1;animation:pop-in .45s cubic-bezier(.3,1.6,.5,1)}.word-card-en{font-size:2.2rem;font-weight:900;display:flex;align-items:center;letter-spacing:.02em;line-height:1.2}.word-card-zh{font-size:1.25rem;font-weight:800;display:flex;align-items:center;gap:8px}.word-card-ex{width:100%;background:var(--surface-2);border-radius:16px;padding:10px 12px;margin:6px 0 8px}.word-card-ex p{margin:0}.word-card-ex p:first-child{font-weight:800}.pattern-card{display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center}.pattern-form{margin:0;font-size:1.7rem;font-weight:900;color:var(--purple);line-height:1.25}.pattern-zh{margin:0;font-size:1.15rem;font-weight:900}.pattern-use{margin:0;color:var(--ink-2)}.pattern-tips{text-align:left;margin:0;padding:12px 14px 12px 32px;background:var(--purple-soft);border-radius:16px;display:flex;flex-direction:column;gap:6px;width:100%}.pattern-examples{width:100%;display:flex;flex-direction:column;gap:8px}.pattern-example{background:var(--surface-2);border-radius:14px;padding:8px 12px}.pattern-example p{margin:0}.pattern-example p:first-child{font-weight:800}.room{position:relative;height:clamp(270px,46vh,400px);border-radius:28px;overflow:hidden;flex:none;box-shadow:inset 0 0 0 3px #fff9,0 2px 0 var(--line)}.room-wall{position:absolute;top:0;right:0;bottom:30%;left:0;background:radial-gradient(circle at 12px 12px,rgba(255,255,255,.55) 2.5px,transparent 3px) 0 0 / 28px 28px,linear-gradient(#fdeed8,#fbe1c2)}.room-floor{position:absolute;top:70%;right:0;bottom:0;left:0;background:repeating-linear-gradient(90deg,#e8bf94 0,#e8bf94 58px,#e2b587 58px,#e2b587 60px);box-shadow:inset 0 6px #a064321f}.room-rug{position:absolute;left:50%;top:34%;width:66%;height:46%;transform:translate(-50%);border-radius:50%;background:radial-gradient(ellipse,#ffd9c0 0,#ffd9c0 55%,#ffc6a5 56%,#ffc6a5);opacity:.9}.room-window{position:absolute;left:8%;top:10%;width:28%;aspect-ratio:1 / 1.1;border-radius:18px;background:#fff;padding:7px;box-shadow:0 4px #a0643226}.room-window-sky{position:relative;width:100%;height:100%;border-radius:12px;overflow:hidden;background:linear-gradient(#8fd3ff,#d9f2ff);font-family:var(--emoji)}.sky-dusk .room-window-sky{background:linear-gradient(#ff9a6b,#ffd29c)}.sky-night .room-window-sky{background:linear-gradient(#26305e,#4a4f8f)}.win-sun,.win-moon{position:absolute;right:12%;top:10%;font-size:clamp(1rem,5vw,1.6rem)}.win-cloud{position:absolute;left:-10%;bottom:16%;font-size:clamp(1rem,5vw,1.6rem);animation:drift-slow 14s linear infinite}.win-star{position:absolute;color:#fff7c2;font-size:.8rem;animation:twinkle 2s ease-in-out infinite}.win-star.s1{left:20%;top:30%}.win-star.s2{left:50%;top:60%;animation-delay:1s}.room-shelf{position:absolute;right:7%;top:22%;width:36%;min-height:12px;border-bottom:9px solid #d9a877;border-radius:2px;display:flex;justify-content:center;align-items:flex-end;gap:2px;font-family:var(--emoji);font-size:clamp(1rem,5vw,1.5rem);line-height:1;padding-bottom:2px}.room-stage,.place-stage{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;padding-bottom:6%;gap:4px}.home-bubble{min-height:56px;display:flex;align-items:flex-end}.scene-screen{padding:0 0 calc(16px + var(--safe-b));gap:0}.place-scene{position:relative;height:clamp(250px,44vh,380px);overflow:hidden;flex:none}.place-sky{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(var(--sky1),var(--sky2))}.place-ground{position:absolute;left:-20%;right:-20%;bottom:0;height:34%;background:var(--ground);border-radius:50% 50% 0 0/34% 34% 0 0;box-shadow:inset 0 8px #ffffff40}.place-decor{position:absolute;font-family:var(--emoji);line-height:1}.walking .place-decor{animation:scroll-by 1.9s linear}.pet-walk-in{animation:walk-in 1.9s ease-out}.scene-caption{text-align:center;font-weight:900;color:var(--ink-2);font-size:1.2rem;margin:20px 0}.card.sheet{margin-top:-28px;position:relative;border-radius:28px 28px var(--radius) var(--radius);width:calc(100% - 24px);align-self:center;animation:slide-up .3s ease}.arrive{display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center}.arrive-title{margin:0;font-size:1.25rem;font-weight:900}.arrive-en{margin:0;font-size:1.15rem}.mystery{position:absolute;right:14%;bottom:18%;width:70px;height:70px;border-radius:50%;border:0;background:radial-gradient(circle,#fff 0,#fff 40%,#fff0 70%);font-size:2.4rem;cursor:pointer;font-family:var(--emoji);animation:pulse 1.2s ease-in-out infinite}.found-item{position:absolute;right:16%;bottom:18%;font-family:var(--emoji);font-size:2.8rem;animation:pop-in .5s cubic-bezier(.3,1.6,.5,1)}.place-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.place-card{border:0;border-radius:22px;padding:14px 10px 12px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px;background:linear-gradient(var(--sky1) 0 62%,var(--ground) 62%);box-shadow:0 4px #78502826;min-height:150px;touch-action:manipulation}.place-card:active:not(:disabled){transform:translateY(3px);box-shadow:0 1px #78502826}.place-card.locked{background:#efe3d4;cursor:default;color:var(--muted)}.place-card-emoji{font-family:var(--emoji);font-size:2.8rem;line-height:1.15}.place-card-zh{font-weight:900;font-size:1.1rem;background:#ffffffd9;padding:0 10px;border-radius:999px}.place-card-en{font-weight:800;font-size:.9rem}.place-card-note{font-size:.78rem;font-weight:800;background:#ffffffbf;padding:1px 8px;border-radius:999px}.unlock-banner{margin:0;background:var(--purple-soft);color:var(--purple);padding:10px 16px;border-radius:999px;font-weight:800}.home-head{display:flex;justify-content:space-between;align-items:center}.home-name{margin:0;font-size:1.5rem;font-weight:900;line-height:1.2}.home-stats{display:flex;gap:8px}.stat{display:flex;align-items:baseline;gap:3px;background:var(--surface);border-radius:999px;padding:6px 12px;box-shadow:0 2px 0 var(--line)}.stat span{font-family:var(--emoji)}.stat b{font-size:1.15rem}.stat small{color:var(--muted);font-weight:700}.growth{background:var(--surface);border-radius:var(--radius-sm);padding:10px 14px;display:flex;flex-direction:column;gap:6px;box-shadow:0 2px 0 var(--line)}.growth-row{display:flex;justify-content:space-between;gap:8px;font-weight:800;font-size:.92rem}.home-actions{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.home-actions .btn{flex-direction:column;gap:2px;padding:10px 4px;min-height:86px;font-size:1.02rem}.home-actions .btn-icon{font-size:1.9rem}.today{margin:0;text-align:center;font-size:.85rem;color:var(--muted)}.play-screen{min-height:100dvh}.feed-stage{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-height:150px;padding-top:6px}.bite{position:absolute;bottom:0;left:50%;font-family:var(--emoji);font-size:2.4rem;animation:bite .65s cubic-bezier(.4,0,.6,1) forwards;pointer-events:none}.quiz-card{animation:slide-up .25s ease}.summary{position:relative;overflow:hidden;padding-top:calc(30px + var(--safe-t))}.summary>*{position:relative;z-index:1}.summary-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;width:100%}.summary-stats div,.book-summary div{background:var(--surface);border-radius:18px;padding:10px 6px;display:flex;flex-direction:column;box-shadow:0 2px 0 var(--line)}.summary-stats b,.book-summary b{font-size:1.6rem;font-weight:900;line-height:1.2}.summary-stats small,.book-summary small{color:var(--muted);font-weight:700}.summary-words{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.summary-words li{background:var(--surface);border-radius:999px;padding:6px 12px;display:flex;gap:6px;align-items:center;box-shadow:0 2px 0 var(--line)}.summary-words li span{font-family:var(--emoji)}.summary-words .ok small{color:var(--good-dark);font-weight:800}.summary-words .retry small{color:var(--primary-dark);font-weight:800}.evolve{display:flex;flex-direction:column;align-items:center;gap:10px;position:relative}.evolve>*:not(.confetti){position:relative;z-index:1}.action-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.action-card{border:0;background:var(--surface);border-radius:18px;padding:12px 6px;display:flex;flex-direction:column;align-items:center;box-shadow:0 3px 0 var(--line);cursor:pointer;touch-action:manipulation}.action-card:active{transform:translateY(2px);box-shadow:0 1px 0 var(--line)}.action-card span{font-family:var(--emoji);font-size:2.2rem;line-height:1.2}.action-card b{font-size:1.1rem}.action-card small{color:var(--muted);font-weight:700}.book-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;text-align:center}.tabs{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{border:0;background:var(--surface);border-radius:999px;padding:8px 14px;font-weight:800;white-space:nowrap;cursor:pointer;box-shadow:0 2px 0 var(--line)}.tab.on{background:var(--primary);color:#fff;box-shadow:0 2px 0 var(--primary-dark)}.word-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.word-tile-book{border:0;background:var(--surface);border-radius:16px;padding:10px 4px 8px;display:flex;flex-direction:column;align-items:center;gap:1px;box-shadow:0 2px 0 var(--line);cursor:pointer;min-height:112px;overflow:hidden}.word-tile-book b{font-size:.98rem;line-height:1.2}.word-tile-book small{color:var(--muted);font-weight:700;font-size:.78rem}.word-tile-book.unknown{background:#f3e7d8;cursor:default;box-shadow:none;justify-content:center}.wt-emoji{font-family:var(--emoji);font-size:2rem;line-height:1.2}.unknown .wt-emoji{font-family:var(--font);color:#d6c0a8;font-weight:900}.wt-dots{display:flex;gap:2px;margin-top:3px}.wt-dots i{width:7px;height:7px;border-radius:50%;background:#eedcc8}.m-new .wt-dots i.on{background:#ffb36b}.m-remembered .wt-dots i.on{background:var(--good)}.m-fluent .wt-dots i.on{background:var(--purple)}.pattern-list{display:flex;flex-direction:column;gap:10px}.pattern-row{border:0;background:var(--surface);border-radius:18px;padding:12px 16px;display:flex;flex-direction:column;align-items:flex-start;text-align:left;cursor:pointer;box-shadow:0 2px 0 var(--line)}.pattern-row b{color:var(--purple);font-size:1.15rem}.pattern-row small{color:var(--muted)}.set-group{background:var(--surface);border-radius:var(--radius);padding:14px 16px;display:flex;flex-direction:column;gap:10px;box-shadow:0 2px 0 var(--line)}.set-group h2{margin:0;font-size:.95rem;color:var(--muted);font-weight:900}.set-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.set-row p{margin:0;font-weight:800}.set-row small{color:var(--muted)}.segmented{display:flex;background:var(--surface-2);border-radius:14px;padding:4px;gap:4px;flex:none}.segmented button{border:0;background:transparent;border-radius:10px;width:44px;height:38px;font-weight:900;cursor:pointer}.segmented button.on{background:var(--primary);color:#fff}.switch{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:54px;height:32px;border-radius:999px;background:#e8d7c4;position:relative;cursor:pointer;flex:none;transition:background .2s;margin:0}.switch:after{content:"";position:absolute;top:3px;left:3px;width:26px;height:26px;border-radius:50%;background:#fff;box-shadow:0 2px 4px #00000026;transition:transform .2s}.switch:checked{background:var(--good)}.switch:checked:after{transform:translate(22px)}.switch:disabled{opacity:.5}.bottom-nav{position:fixed;bottom:0;left:50%;transform:translate(-50%);width:min(480px,100%);display:grid;grid-template-columns:repeat(3,1fr);background:#fffffff5;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-top:2px solid var(--line);padding:6px 8px calc(6px + var(--safe-b));z-index:20}.nav-btn{border:0;background:transparent;display:flex;flex-direction:column;align-items:center;gap:0;font-weight:800;font-size:.8rem;color:var(--muted);padding:4px;border-radius:14px;cursor:pointer;min-height:56px;justify-content:center}.nav-btn span{font-family:var(--emoji);font-size:1.5rem;line-height:1.1;filter:grayscale(.7);opacity:.7}.nav-btn.on{color:var(--primary-dark);background:var(--primary-soft)}.nav-btn.on span{filter:none;opacity:1}@keyframes fade{0%{opacity:0}}@keyframes pop-in{0%{transform:scale(.6);opacity:0}to{transform:scale(1);opacity:1}}@keyframes slide-up{0%{transform:translateY(16px);opacity:0}}@keyframes breathe{0%,to{transform:scale(1)}50%{transform:scale(1.03,.97)}}@keyframes blink{0%,93%,to{transform:scaleY(1)}96%{transform:scaleY(.1)}}@keyframes sway{0%,to{transform:rotate(-5deg)}50%{transform:rotate(6deg)}}@keyframes chew{0%{transform:scaleY(1)}to{transform:scaleY(.25)}}@keyframes droop{0%,to{transform:translateY(0) scale(1)}50%{transform:translateY(3px) scale(1.04,.95)}}@keyframes hop{0%,to{transform:translateY(0) scale(1.04,.96)}50%{transform:translateY(-14px) scale(.97,1.03)}}@keyframes shadow-hop{50%{transform:scale(.8);opacity:.6}}@keyframes tilt{0%,to{transform:rotate(0)}30%,70%{transform:rotate(-9deg)}}@keyframes munch{0%,to{transform:scale(1)}50%{transform:scale(1.05,.94)}}@keyframes boing{0%{transform:scale(1)}30%{transform:scale(1.12,.88)}60%{transform:scale(.94,1.06)}to{transform:scale(1)}}@keyframes dash{0%,to{transform:translate(-22%)}50%{transform:translate(22%)}}@keyframes run-bob{0%{transform:translateY(0) rotate(-5deg)}to{transform:translateY(-10px) rotate(5deg)}}@keyframes jump{0%{transform:translateY(0) scale(1.12,.88)}30%{transform:translateY(-34%) scale(.92,1.08)}55%{transform:translateY(-34%) scale(1)}82%{transform:translateY(0) scale(1.14,.86)}to{transform:translateY(0) scale(1)}}@keyframes shadow-jump{30%,55%{transform:scale(.55);opacity:.5}}@keyframes waddle{0%{transform:rotate(-5deg) translateY(0)}to{transform:rotate(5deg) translateY(-4px)}}@keyframes climb{0%,to{transform:translateY(0) rotate(-6deg)}25%{transform:translateY(-10%) rotate(6deg)}50%{transform:translateY(-20%) rotate(-6deg)}75%{transform:translateY(-10%) rotate(6deg)}}@keyframes swim{0%,to{transform:translateY(8%) rotate(-6deg)}50%{transform:translateY(2%) rotate(6deg)}}@keyframes fly{0%,to{transform:translateY(-18%)}50%{transform:translateY(-28%)}}@keyframes shadow-fly{0%,to{transform:scale(.6);opacity:.5}50%{transform:scale(.5);opacity:.4}}@keyframes flap-l{0%{transform:rotate(-30deg)}to{transform:rotate(18deg)}}@keyframes flap-r{0%{transform:rotate(30deg)}to{transform:rotate(-18deg)}}@keyframes nod{0%,to{transform:rotate(0) translateY(0)}50%{transform:rotate(3deg) translateY(2px)}}@keyframes sing{0%,to{transform:rotate(-6deg)}50%{transform:rotate(6deg) scale(1.02,.98)}}@keyframes dance{0%,to{transform:rotate(-12deg) translateY(0)}25%{transform:rotate(0) translateY(-12px)}50%{transform:rotate(12deg) translateY(0)}75%{transform:rotate(0) translateY(-12px)}}@keyframes laugh{0%{transform:translate(-3px) rotate(-3deg)}to{transform:translate(3px) rotate(3deg)}}@keyframes puff{0%{transform:translate(0) scale(.6);opacity:1}to{transform:translate(-30px) scale(1.2);opacity:0}}@keyframes wave{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drift{0%,to{transform:translate(0)}50%{transform:translate(16px)}}@keyframes drift-slow{0%{transform:translate(0)}to{transform:translate(160%)}}@keyframes scribble{0%{transform:rotate(-12deg) translate(-3px)}to{transform:rotate(12deg) translate(3px)}}@keyframes rise{0%{transform:translateY(10px) scale(.6);opacity:0}25%{opacity:1}to{transform:translateY(-40px) scale(1.1);opacity:0}}@keyframes wobble{0%,70%,to{transform:rotate(0)}78%{transform:rotate(-7deg)}86%{transform:rotate(6deg)}94%{transform:rotate(-3deg)}}@keyframes wobble-fast{0%,to{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}@keyframes draw{to{stroke-dashoffset:0}}@keyframes burst{0%{transform:scale(1)}60%{transform:scale(1.15) rotate(6deg)}to{transform:scale(1.6);opacity:0}}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.07)}}@keyframes shake{0%,to{transform:translate(0)}25%{transform:translate(-6px)}75%{transform:translate(6px)}}@keyframes bite{0%{transform:translate(-50%,70px) scale(1.1);opacity:0}20%{opacity:1}to{transform:translate(-50%,-60px) scale(.3);opacity:0}}@keyframes confetti{0%{transform:translateY(0) rotate(0);opacity:1}to{transform:translateY(110vh) rotate(720deg);opacity:.8}}@keyframes twinkle{50%{opacity:.3}}@keyframes scroll-by{0%{transform:translate(60vw)}to{transform:translate(0)}}@keyframes walk-in{0%{transform:translate(-70%)}to{transform:translate(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}
