:root{--bg: #F1F5E9;--bg-deep: #E5EDD9;--surface: #FFFFFF;--ink: #23301F;--ink-soft: #5C6B58;--ink-faint: #93A08E;--rule: #D8E2CB;--accent: #E0743C;--accent-deep: #C25A25;--accent-soft: #FBE3D4;--fam-move: #4C8DD6;--fam-move-deep: #2E5F98;--fam-act: #6BAE4A;--fam-act-deep: #4A8531;--fam-repeat: #C98A12;--fam-repeat-deep: #9C6A08;--fam-time: #7E6BC4;--fam-time-deep: #5B4A9B;--fam-event: #D2569B;--fam-event-deep: #A83B78;--fam-sense: #14988C;--fam-sense-deep: #0C6E65;--fam-own: #8358C9;--fam-own-deep: #5F3A9B;--gr-ground: #D9E9C2;--gr-ground-alt: #D0E2B5;--gr-edge: #BBD39B;--gr-wall: #93897A;--gr-wall-top: #ABA193;--gr-goal: #E0743C;--gr-goal-ring: #F3B48D;--gr-seed: #F0B429;--volt-body: #4C8DD6;--volt-dark: #2E5F98;--volt-eye: #FFFFFF;--shadow-sm: 0 2px 0 rgba(35, 48, 31, .16);--shadow-md: 0 6px 18px rgba(35, 48, 31, .12);--radius: 18px}*{box-sizing:border-box}html,body{height:100%;margin:0;overscroll-behavior:none}body{background:var(--bg);color:var(--ink);font-family:"Baloo 2",ui-rounded,Segoe UI Rounded,system-ui,sans-serif;font-weight:600;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}#app{height:100%}button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;touch-action:manipulation}button:focus-visible{outline:3px solid var(--fam-move-deep);outline-offset:3px}.screen{height:100%;max-width:720px;margin:0 auto;display:flex;flex-direction:column}.icon-btn{width:48px;height:48px;border-radius:14px;background:var(--surface);box-shadow:var(--shadow-sm);font-size:1.1rem;display:grid;place-items:center;flex:none}.icon-btn:active{transform:translateY(1px);box-shadow:none}.star{color:var(--rule);font-size:1.1rem;line-height:1}.star.is-earned{color:var(--gr-seed)}.map-screen{padding:20px 18px 24px;gap:18px;overflow-y:auto}.map-head{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center}.map-brand{flex:1;min-width:0;display:flex;align-items:center;gap:12px}.map-meta{order:2;flex-basis:100%;display:flex;justify-content:space-between;align-items:baseline;color:var(--ink-soft);font-size:.95rem}.map-meta .dim{color:var(--ink-faint)}.map-brand h1{font-size:2rem;font-weight:800;margin:0;letter-spacing:-.02em}.map-ripple{width:34px;height:34px;border-radius:50%;flex:none;background:radial-gradient(circle,var(--fam-move) 0 18%,transparent 19%),radial-gradient(circle,transparent 0 32%,var(--fam-move) 33% 40%,transparent 41%),radial-gradient(circle,transparent 0 56%,var(--fam-move) 57% 63%,transparent 64%);opacity:.9}.world-list{display:flex;flex-direction:column;gap:12px}.world-card{background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-sm);overflow:hidden}.world-card.is-locked{background:var(--bg-deep);box-shadow:none}.world-card.is-gate .world-badge{background:var(--accent-soft);color:var(--accent-deep)}.world-head{width:100%;display:flex;align-items:center;gap:14px;padding:14px 16px;text-align:left;min-height:72px}.world-head:disabled{cursor:default;opacity:.55}.world-badge{width:44px;height:44px;border-radius:13px;background:var(--bg-deep);display:grid;place-items:center;font-size:1.15rem;font-weight:800;flex:none}.world-text{display:flex;flex-direction:column;flex:1;min-width:0}.world-name{font-size:1.15rem;font-weight:700}.world-sub{font-size:.85rem;color:var(--ink-faint);font-weight:500}.world-chevron{color:var(--ink-faint);font-size:.9rem}.level-dots{display:flex;flex-wrap:wrap;gap:10px;padding:0 16px 16px}.level-dot{width:62px;height:66px;border-radius:16px;background:var(--bg-deep);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px}.level-dot.is-done{background:var(--accent-soft)}.level-dot:active{transform:translateY(1px)}.dot-n{font-size:1.2rem;font-weight:800}.dot-stars{display:flex;gap:1px;font-size:.62rem;line-height:1}.dot-stars i{color:var(--rule);font-style:normal}.dot-stars i.on{color:var(--gr-seed)}.map-foot{color:var(--ink-faint);font-size:.8rem;text-align:center;font-weight:500}.level-screen{padding:14px 14px 0;gap:10px;min-height:0}.level-screen>.stage{min-height:120px}.hud{display:flex;align-items:center;gap:12px}.hud-title{flex:1;display:flex;flex-direction:column;line-height:1.15}.hud-world{font-size:1.05rem;font-weight:700}.hud-level{font-size:.8rem;color:var(--ink-faint);font-weight:500}.hud-stars{display:flex;gap:3px}.stage{flex:1;min-height:180px;background:var(--bg-deep);border-radius:var(--radius);overflow:hidden;position:relative}.world{width:100%;height:100%;display:block}.level-screen.is-miss .stage{animation:shake .42s ease}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-6px)}45%{transform:translate(5px)}70%{transform:translate(-3px)}}.ipo{display:flex;justify-content:center;gap:26px}.ipo-dot{font-size:.55rem;color:var(--rule);transition:color .18s ease,transform .18s ease}.ipo-dot.is-lit{transform:scale(1.7)}.ipo-in.is-lit{color:var(--fam-move)}.ipo-process.is-lit{color:var(--fam-repeat)}.ipo-out.is-lit{color:var(--accent)}.builder{display:flex;flex-direction:column;gap:12px}.builder.is-locked .palette-block{opacity:.45;pointer-events:none}.strip-row{display:flex;gap:10px;align-items:stretch}.strip{flex:1;display:flex;gap:7px;padding:9px;background:var(--surface);border-radius:var(--radius);box-shadow:inset 0 2px #23301f0d;overflow-x:auto;scrollbar-width:none;min-height:78px}.strip::-webkit-scrollbar{display:none}.strip.is-target{background:var(--accent-soft)}.strip.is-full{animation:nudge .3s ease}@keyframes nudge{0%,to{transform:translate(0)}30%{transform:translate(5px)}65%{transform:translate(-4px)}}.slot{width:58px;flex:none;border-radius:14px;border:2px dashed var(--rule)}.slot.drop-here{border-color:var(--accent);background:var(--accent-soft)}.undo{width:58px;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm);font-size:1.5rem;color:var(--ink-soft);flex:none}.undo:disabled{opacity:.35}.undo:not(:disabled):active{transform:translateY(2px);box-shadow:none}.palette{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.block{width:58px;height:58px;flex:none;border-radius:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;color:#fff;background:var(--fam);box-shadow:0 3px 0 var(--fam-deep);--fam: var(--fam-move);--fam-deep: var(--fam-move-deep)}.block--move{--fam: var(--fam-move);--fam-deep: var(--fam-move-deep)}.block--act{--fam: var(--fam-act);--fam-deep: var(--fam-act-deep)}.block--repeat{--fam: var(--fam-repeat);--fam-deep: var(--fam-repeat-deep)}.block--time{--fam: var(--fam-time);--fam-deep: var(--fam-time-deep)}.block--event{--fam: var(--fam-event);--fam-deep: var(--fam-event-deep)}.block--sense{--fam: var(--fam-sense);--fam-deep: var(--fam-sense-deep)}.block--own{--fam: var(--fam-own);--fam-deep: var(--fam-own-deep)}.palette-block{width:72px;height:72px}.palette-block:active{transform:translateY(3px);box-shadow:none}.palette-block.is-source{opacity:.4}.block-glyph{font-size:1.5rem;line-height:1}.palette-block .block-glyph{font-size:1.9rem}.block-label{font-size:.62rem;font-weight:700;letter-spacing:.02em}.palette-block .block-label{font-size:.72rem}.block.placed{animation:pop .18s ease}@keyframes pop{0%{transform:scale(.7);opacity:0}to{transform:scale(1);opacity:1}}.block.is-running{transform:translateY(-5px) scale(1.08);box-shadow:0 6px 0 var(--fam-deep),0 0 0 4px var(--accent);transition:transform .12s ease}.ghost{position:fixed;z-index:50;transform:translate(-50%,-50%) scale(1.1);pointer-events:none;opacity:.92}.controls{display:flex;align-items:center;justify-content:center;gap:14px}.go{min-width:148px;height:76px;border-radius:24px;background:var(--accent);color:#fff;box-shadow:0 5px 0 var(--accent-deep);display:flex;align-items:center;justify-content:center;gap:10px;font-size:1.5rem;font-weight:800;letter-spacing:.06em}.go:not(:disabled):active{transform:translateY(4px);box-shadow:0 1px 0 var(--accent-deep)}.go:disabled{background:var(--rule);box-shadow:0 5px #c4cfb6;color:#fff;cursor:default}.go-glyph{font-size:1.15rem}.go.is-stepping{animation:breathe 1.4s ease-in-out infinite}@keyframes breathe{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.step-btn{height:56px;padding:0 18px;border-radius:18px;background:var(--surface);box-shadow:var(--shadow-sm);color:var(--ink-soft);font-size:.85rem;font-weight:700;display:flex;align-items:center;gap:8px}.overlay{position:absolute;inset:0;background:#23301f57;display:grid;place-items:center;z-index:20;animation:fade .2s ease}.level-screen{position:relative}@keyframes fade{0%{opacity:0}to{opacity:1}}.win-card{background:var(--surface);border-radius:28px;padding:26px 30px;display:flex;flex-direction:column;align-items:center;gap:14px;box-shadow:var(--shadow-md);animation:rise .3s cubic-bezier(.2,1.1,.4,1)}@keyframes rise{0%{transform:translateY(20px) scale(.9);opacity:0}to{transform:none;opacity:1}}.sticker{font-size:3.6rem;line-height:1;animation:pop .35s ease .1s backwards}.win-stars{display:flex;gap:6px;font-size:1.9rem}.win-actions{display:flex;align-items:center;gap:12px;margin-top:4px}.ghost-btn{height:56px;padding:0 20px;border-radius:18px;background:var(--bg-deep);color:var(--ink-soft);font-weight:700}.next-btn{width:76px;height:56px;border-radius:18px;background:var(--accent);color:#fff;font-size:1.3rem;box-shadow:0 4px 0 var(--accent-deep)}.next-btn:active{transform:translateY(3px);box-shadow:none}@media(max-height:680px){.stage{min-height:140px}.go{height:66px;min-width:132px}.palette-block{width:64px;height:64px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.identity-screen{padding:28px 18px 24px;gap:10px;overflow-y:auto}.identity-brand{justify-content:center;margin-bottom:8px}.identity-q{margin:10px 0 2px;text-align:center;color:var(--ink-soft);font-size:1rem}.nick-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}.nick{height:52px;border-radius:14px;background:var(--surface);box-shadow:var(--shadow-sm);font-size:.95rem;font-weight:700}.nick.is-picked{background:var(--fam-move);color:#fff;box-shadow:0 3px 0 var(--fam-move-deep)}.avatar-row{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.avatar{width:52px;height:52px;border-radius:50%;box-shadow:var(--shadow-sm);background:var(--av)}.avatar.is-picked{outline:4px solid var(--ink);outline-offset:3px}.av_blue{--av: #4C8DD6}.av_green{--av: #6BAE4A}.av_amber{--av: #E8A33D}.av_rose{--av: #E0748C}.av_violet{--av: #8358C9}.av_teal{--av: #14988C}.av_sand{--av: #C9A227}.av_plum{--av: #9B4A7E}.prologue-screen{padding:18px 18px 22px;gap:14px}.prologue-head{display:flex;align-items:center;gap:12px}.prologue-dots{display:flex;gap:6px;flex:1}.pdot{width:9px;height:9px;border-radius:50%;background:var(--rule)}.pdot.is-done{background:var(--fam-move)}.pdot.is-now{background:var(--accent);transform:scale(1.35)}.skip-btn{color:var(--ink-faint);font-size:.9rem;font-weight:600;padding:8px}.prologue-prompt{margin:0;text-align:center;font-size:1.25rem;font-weight:700;min-height:1.6em;text-wrap:balance}.prologue-hint{margin:0;text-align:center;color:var(--ink-faint);min-height:1.4em;font-size:.95rem}.prologue-stage{flex:1;display:flex;flex-direction:column;gap:14px;justify-content:center}.pond-wrap{border-radius:var(--radius);overflow:hidden;box-shadow:inset 0 2px #23301f0f;height:190px;flex:none}.pond{display:block;width:100%;height:100%;cursor:pointer}.ipo-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.ipo-panel{border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm);padding:16px 8px 12px;display:flex;flex-direction:column;align-items:center;gap:8px;min-height:118px;justify-content:center;opacity:.5;transition:opacity .25s ease,transform .25s ease}.ipo-panel:disabled{cursor:default}.ipo-panel.is-lit{opacity:1;transform:translateY(-4px)}.ipo-panel.is-found{box-shadow:0 0 0 3px var(--fam-act),var(--shadow-sm)}.ipo-panel.is-wrong{animation:nudge .3s ease}.ipo-glyph{font-size:2.3rem;line-height:1}.ipo-caption{font-size:.76rem;color:var(--ink-soft);text-align:center;line-height:1.25}.prologue-next{min-width:110px}.review-screen{padding:20px 18px 24px;gap:14px}.review-head{display:flex;flex-direction:column;align-items:center}.review-title{font-size:1.3rem;font-weight:800}.review-world{font-size:.85rem;color:var(--ink-faint);font-weight:600}.review-stage{flex:1;display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap}.review-stage.layout-strip{gap:8px}.review-tile{width:108px;min-height:112px;border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:12px 8px}.tile-glyph{font-size:2.1rem;line-height:1}.tile-label{font-size:.8rem;color:var(--ink-soft);font-weight:700}.review-opt{width:64px;height:64px}.review-tile.is-right,.review-opt.is-right{box-shadow:0 0 0 4px var(--fam-act),var(--shadow-sm)}.is-nudge{animation:nudge .3s ease}.badge-card{display:flex;flex-direction:column;align-items:center;gap:10px}.badge-big{font-size:5rem;line-height:1;animation:rise .45s cubic-bezier(.2,1.1,.4,1)}.badge-word{margin:0;font-size:1.3rem;font-weight:800}.book-screen{padding:16px 16px 24px;gap:14px}.book-body{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:18px}.book-world-head{display:flex;align-items:center;gap:10px;margin-bottom:8px}.book-badge{font-size:1.5rem;filter:grayscale(1);opacity:.3}.book-badge.is-owned{filter:none;opacity:1}.book-world-name{font-size:1rem;font-weight:700}.sticker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:8px}.sticker-cell{aspect-ratio:1;border-radius:14px;background:var(--bg-deep);display:grid;place-items:center;font-size:1.6rem;filter:grayscale(1) opacity(.22)}.sticker-cell.is-owned{background:var(--surface);box-shadow:var(--shadow-sm);filter:none}.go.is-waiting{background:var(--surface);color:var(--ink-faint);box-shadow:0 5px 0 var(--rule)}.go.is-waiting .go-glyph{opacity:.45}.level-screen.is-predicting .stage{box-shadow:inset 0 0 0 3px var(--fam-move)}.level-screen.is-knew .stage{animation:knew .9s ease}@keyframes knew{0%{box-shadow:inset 0 0 0 3px var(--fam-move)}35%{box-shadow:inset 0 0 0 8px var(--fam-act)}to{box-shadow:inset 0 0 0 0 var(--fam-act)}}.knew-badge{font-size:1.6rem;color:var(--fam-act);line-height:1;margin-top:-6px}.ipo-panel.is-armed{opacity:1;cursor:pointer;animation:breathe 1.8s ease-in-out infinite}.ipo-panel.is-armed .ipo-glyph{transform:scale(1.06)}.choice-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.choice{border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm);padding:14px 8px;display:flex;flex-direction:column;align-items:center;gap:6px;min-height:104px;justify-content:center}.choice .ipo-glyph{font-size:2.1rem}.choice.is-right{box-shadow:0 0 0 4px var(--fam-act),var(--shadow-sm)}.choice.is-dimmed{opacity:.4}.choice.is-nudge{animation:nudge .3s ease}.stage-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:10px;background:var(--bg-deep)}.stage-loading[hidden]{display:none}.stage-loading i{width:12px;height:12px;border-radius:50%;background:var(--fam-move);opacity:.3;animation:dropDot 1.2s ease-in-out infinite}.stage-loading i:nth-child(2){animation-delay:.15s}.stage-loading i:nth-child(3){animation-delay:.3s}@keyframes dropDot{0%,to{opacity:.25;transform:translateY(0)}40%{opacity:.9;transform:translateY(-7px)}}.level-screen:not(.is-ready) .palette,.level-screen:not(.is-ready) .undo,.level-screen:not(.is-ready) .go{opacity:.45;pointer-events:none}.nick-skeleton{background:var(--bg-deep);box-shadow:none;animation:shimmer 1.4s ease-in-out infinite}@keyframes shimmer{0%,to{opacity:.55}50%{opacity:.95}}.strip{background:var(--zone-plan);box-shadow:inset 0 2px #23301f0f}.palette{background:var(--zone-pick);border-radius:var(--radius);padding:10px;margin:0 -2px}.level-screen .controls{position:sticky;bottom:0;background:var(--zone-act);border-radius:var(--radius) var(--radius) 0 0;padding:12px 14px calc(12px + env(safe-area-inset-bottom,0px));margin:4px -14px 0;box-shadow:0 -2px #23301f0d;flex:none;z-index:5}:root{--zone-plan: #FFFFFF;--zone-pick: #E8EFDC;--zone-act: #DDE8CD}.palette-block.is-held{transform:translateY(2px) scale(1.06);box-shadow:0 2px 0 var(--fam-deep),0 0 0 4px var(--accent-soft)}.book-screen{position:relative}.sticker-cell.is-owned{cursor:pointer}.sticker-cell.is-owned:active{transform:scale(.94)}.sticker-pop{background:#23301f6b}.sticker-pop.is-closing{opacity:0;transition:opacity .2s ease}.pop-card{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;padding:34px 44px 26px;border-radius:30px;background:var(--surface);box-shadow:var(--shadow-md);animation:popIn .5s cubic-bezier(.18,1.3,.42,1)}@keyframes popIn{0%{transform:scale(.4) rotate(-8deg);opacity:0}60%{transform:scale(1.08) rotate(2deg);opacity:1}to{transform:scale(1) rotate(0);opacity:1}}.pop-sticker{font-size:5.5rem;line-height:1;animation:popWobble 2.4s ease-in-out .4s infinite}@keyframes popWobble{0%,to{transform:rotate(-4deg)}50%{transform:rotate(4deg)}}.pop-caption{margin:0;font-size:.9rem;font-weight:700;color:var(--ink-faint)}.pop-burst{position:absolute;inset:0;pointer-events:none}.pop-burst i{position:absolute;top:50%;left:50%;width:11px;height:11px;margin:-5px 0 0 -5px;border-radius:50%;background:var(--gr-seed);opacity:0;animation:petal .85s ease-out var(--d, 0s) 1}.pop-burst i:nth-child(2n){background:var(--fam-move)}@keyframes petal{0%{transform:rotate(var(--a)) translate(0) scale(.4);opacity:0}25%{opacity:1}to{transform:rotate(var(--a)) translate(110px) scale(.9);opacity:0}}@media(prefers-reduced-motion:reduce){.pop-burst{display:none}}.palette{display:flex;align-items:center;justify-content:center;gap:16px;flex-wrap:wrap}.pad{display:grid;grid-template-columns:repeat(3,auto);grid-template-areas:".    back  ." "left .     right" ".    front .";gap:6px;place-items:center}.pad-back{grid-area:back}.pad-left{grid-area:left}.pad-right{grid-area:right}.pad-front{grid-area:front}.pad .palette-block{width:64px;height:64px}.pad .palette-block .block-glyph{font-size:1.7rem}.palette-extra{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}@media(max-height:680px){.pad .palette-block{width:56px;height:56px}}
