:root{--fx-pink:#f77c96;--fx-gold:#ffd875;--fx-teal:#73c6b7;--fx-ink:#24424a}
.fx-layer{position:fixed;z-index:9999;inset:0;pointer-events:none;overflow:hidden}
.fx-particle{--tx:0px;--ty:-90px;--spin:180deg;position:fixed;left:var(--x);top:var(--y);display:grid;place-items:center;width:24px;height:24px;margin:-12px;color:#fff;font-size:18px;font-weight:1000;text-shadow:0 2px 3px rgba(45,49,36,.25);animation:fxBurst .78s cubic-bezier(.18,.75,.22,1) forwards}
.fx-particle.coin{border-radius:48% 52% 45% 55%;background:linear-gradient(145deg,#ffe894,#e7aa42);border:2px solid #bc7d26;color:#624719;font-size:11px;text-shadow:none;box-shadow:inset 0 2px 2px #fff6c8,0 3px 4px rgba(75,52,22,.24)}
.fx-particle.cafe{color:#fff0ae}.fx-particle.post{color:#fff;background:#de6f79;border-radius:4px;font-size:13px;box-shadow:0 3px 4px rgba(75,52,22,.2)}
.fx-particle.water{color:#b7f1ff;font-size:22px}.fx-particle.leaf{font-size:16px}
.fx-celebrate{animation:fxCelebrate .5s cubic-bezier(.2,.9,.25,1.3)}
.fx-nudge{animation:fxNudge .34s ease}
.fx-screen-glow:after{content:"";position:fixed;z-index:9997;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 50%,rgba(255,241,153,.32),transparent 46%);animation:fxGlow .65s ease-out forwards}
[data-scene-toy]{touch-action:manipulation}
[data-scene-toy].toy-active{animation:toyWiggle .5s ease}
.scene-wonder{position:absolute;z-index:3;display:block;min-width:44px;min-height:44px;margin:0;padding:0;border:0;border-radius:28%;background:transparent;box-shadow:none;color:transparent;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.scene-wonder:focus-visible{outline:4px solid rgba(255,241,161,.96);outline-offset:3px;background:rgba(255,235,137,.08)}
.scene-wonder::before,.scene-wonder::after{position:absolute;display:block;pointer-events:none;opacity:0}
[data-character-bounce-control]{touch-action:manipulation;cursor:pointer;-webkit-tap-highlight-color:transparent}
[data-character-bounce-target]{pointer-events:auto!important;transform-origin:50% 100%!important;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
[data-character-bounce-control]:not(button):not(a):focus-visible{outline:4px solid #fff0a8;outline-offset:3px;border-radius:24px}
[data-character-drag-host]{translate:calc(var(--character-base-x,0px) + var(--character-drag-x,0px)) calc(var(--character-base-y,0px) + var(--character-drag-y,0px));will-change:translate}
[data-character-drag-pointer],[data-character-drag-control]{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
[data-character-drag-pointer]{touch-action:none!important;cursor:grab;-webkit-user-drag:none}
[data-character-drag-host].is-character-dragging,[data-character-dragging]{cursor:grabbing!important}
[data-character-drag-control]:focus{outline:none}
[data-character-drag-control]:focus-visible [data-character-drag-target]{filter:drop-shadow(0 0 10px rgba(255,240,168,.98)) drop-shadow(0 8px 5px rgba(49,29,16,.3))}
.fx-character-bounce{transform-origin:50% 100%;animation:fxCharacterBounce .65s cubic-bezier(.2,.82,.22,1)!important}
.fx-character-tap{filter:drop-shadow(0 0 9px rgba(255,224,130,.92))}
.fx-character-tap-motion{transform-origin:50% 100%;animation:fxCharacterTap .28s cubic-bezier(.2,.7,.25,1)!important}
.tap-squish{scale:.96!important}
@keyframes fxBurst{0%{opacity:0;transform:translate(0,0) scale(.35) rotate(0)}16%{opacity:1}100%{opacity:0;transform:translate(var(--tx),var(--ty)) scale(.9) rotate(var(--spin))}}
@keyframes fxCelebrate{45%{transform:translateY(-4px) scale(1.025)}75%{transform:translateY(1px) scale(.995)}}
@keyframes fxNudge{25%{transform:translateX(-5px) rotate(-.5deg)}70%{transform:translateX(5px) rotate(.5deg)}}
@keyframes fxGlow{0%{opacity:0}35%{opacity:1}100%{opacity:0}}
@keyframes toyWiggle{25%{transform:rotate(-5deg) scale(1.05)}60%{transform:rotate(5deg) scale(1.07)}}
@keyframes fxCharacterBounce{0%,100%{transform:translateY(0) scale(1)}20%{transform:translateY(3%) scale(1.06,.92)}48%{transform:translateY(-13%) scale(.95,1.07)}72%{transform:translateY(0) scale(1.035,.97)}86%{transform:translateY(-3%) scale(.99,1.02)}}
@keyframes fxCharacterTap{0%,100%{transform:translateY(0) scale(1)}32%{transform:translateY(1.5%) scale(1.035,.965)}68%{transform:translateY(-4%) scale(.99,1.02)}}
@media(prefers-reduced-motion:reduce){.fx-particle{animation-duration:.18s}.fx-celebrate,.fx-nudge,[data-scene-toy].toy-active,.fx-character-bounce{animation:none!important}.fx-screen-glow:after{animation:none!important;opacity:0}.tap-squish{scale:1!important}.scene-wonder.is-active::before,.scene-wonder.is-active::after{animation:none!important;opacity:.72}}
[data-motion="reduced"] .fx-particle{animation-duration:.18s}[data-motion="reduced"] .fx-celebrate,[data-motion="reduced"] .fx-nudge,[data-motion="reduced"] [data-scene-toy].toy-active,[data-motion="reduced"] .fx-character-bounce{animation:none!important}[data-motion="reduced"] .fx-screen-glow:after{animation:none!important;opacity:0}[data-motion="reduced"] .tap-squish{scale:1!important}[data-motion="reduced"] .scene-wonder.is-active::before,[data-motion="reduced"] .scene-wonder.is-active::after{animation:none!important;opacity:.72}
[data-motion="reduced"] .bank-wonder::before{display:none!important}[data-motion="reduced"] .bank-wonder.is-active::after{animation:none!important;opacity:.78}
@media(prefers-reduced-motion:reduce){[data-character-bounce-target].fx-character-tap-motion{animation:fxCharacterTap .28s cubic-bezier(.2,.7,.25,1)!important}}
[data-motion="reduced"] [data-character-bounce-target].fx-character-tap-motion{animation:fxCharacterTap .28s cubic-bezier(.2,.7,.25,1)!important}
