.reveal{opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s var(--ease-smooth)}.reveal.is-visible{opacity:1;transform:none}.squish-button:hover{animation:buttonSquish .55s var(--ease-pop)}.character-card[data-reaction="bounce"]:hover img{animation:charBounce .62s var(--ease-pop)}.character-card[data-reaction="tilt"]:hover img{transform:scale(1.07) rotate(5deg)}.character-card[data-reaction="side-eye"]:hover img{transform:scale(1.08) translateX(3px)}.character-card[data-reaction="jitter"]:hover img{animation:charJitter .35s ease 1}.character-card[data-reaction="glow"]:hover img{filter:saturate(1.25) brightness(1.08);transform:scale(1.07);animation:glowPulse .9s ease infinite alternate}.character-card[data-reaction="roll"]:hover img{transform:scale(1.05) rotate(7deg) translateX(4px)}.character-card[data-reaction="sway"]:hover img{animation:charSway .8s ease-in-out}.character-card[data-reaction="squish"]:hover img{transform:scaleX(1.08) scaleY(.94)}.character-card[data-reaction="nap"]:hover img{transform:scale(1.04) translateY(7px);filter:saturate(.9)}.character-card[data-reaction="pop"]:hover img{animation:charPop .55s var(--ease-pop)}
@keyframes marquee{to{transform:translateX(-50%)}}@keyframes secretPulse{50%{transform:scale(1.35) rotate(20deg);filter:drop-shadow(0 0 16px #fff)}}@keyframes nodePulse{50%{transform:scale(1.25);box-shadow:0 0 0 12px rgba(255,191,63,.04),0 0 28px var(--sun)}}@keyframes buttonSquish{30%{transform:scaleX(1.07) scaleY(.91)}60%{transform:scaleX(.97) scaleY(1.04)}100%{transform:none}}@keyframes charBounce{35%{transform:translateY(-12px) scaleY(1.04)}60%{transform:translateY(2px) scaleY(.96)}100%{transform:none}}@keyframes charJitter{25%{transform:rotate(-4deg) scale(1.04)}50%{transform:rotate(4deg) scale(1.07)}75%{transform:rotate(-2deg) scale(1.05)}}@keyframes glowPulse{to{filter:saturate(1.4) brightness(1.14) drop-shadow(0 0 14px rgba(141,133,255,.5))}}@keyframes charSway{25%{transform:rotate(-4deg) scale(1.04)}75%{transform:rotate(4deg) scale(1.05)}}@keyframes charPop{45%{transform:scale(1.12) translateY(-8px)}70%{transform:scale(.97) translateY(1px)}}@keyframes lightRun{50%{background:var(--sun);box-shadow:0 0 16px var(--sun)}}
.intro.is-playing .intro__squish{animation:introBlob 2.4s var(--ease-pop) forwards}.intro.is-playing .intro__wordmark{animation:introTitle 2.4s var(--ease-smooth) forwards}.intro.is-playing .intro__spark{animation:introSpark 2.1s ease forwards}.intro.is-playing .intro__spark--b{animation-delay:.18s}@keyframes introBlob{0%{transform:translateY(130px) scale(.4,.25);opacity:0}20%{opacity:1;transform:translateY(40px) scale(1.08,.87)}42%{transform:translateY(5px) scale(.93,1.08)}58%{transform:translateY(0) scale(1)}76%{transform:translateY(-50px) scale(.55);opacity:1}100%{transform:translateY(-120px) scale(.1);opacity:0}}@keyframes introTitle{0%,45%{opacity:0;transform:translateY(32px) scale(.92)}68%{opacity:1;transform:translateY(0) scale(1.04)}100%{opacity:1;transform:none}}@keyframes introSpark{0%,50%{opacity:0;transform:scale(.3)}70%{opacity:1;transform:scale(1.3) rotate(25deg)}100%{opacity:.7;transform:scale(1)}}
.confetti{position:fixed;z-index:2000;width:9px;height:14px;border-radius:3px;background:var(--c);left:var(--x);top:var(--y);pointer-events:none;animation:confettiFly .9s ease-out forwards}@keyframes confettiFly{to{transform:translate(var(--dx),var(--dy)) rotate(var(--rot));opacity:0}}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.reveal{opacity:1;transform:none}.pointer-blob{display:none}.hero__marquee span{animation:none}.map-node span{animation:none}.intro{display:none!important}}
