[data-reveal] { opacity: 0; transform: translateY(32px); transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out); }
[data-reveal].is-visible { opacity: 1; transform: translateY(0); }
[data-reveal="scale"] { transform: scale(0.92); }
[data-reveal="scale"].is-visible { transform: scale(1); }
[data-reveal-group] > * { transition-delay: calc(var(--i, 0) * 90ms); }

@keyframes float-y {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-16px); }
}
.float { animation: float-y 5s ease-in-out infinite; }
.float--slow { animation: float-y 7s ease-in-out infinite; }
.float--delay { animation-delay: 1.4s; }

@keyframes steam-rise {
  0% { transform: translateY(0) scaleX(1); opacity: 0; }
  20% { opacity: 0.55; }
  100% { transform: translateY(-120px) scaleX(1.6); opacity: 0; }
}
.steam { animation: steam-rise 4.5s ease-in infinite; }

@keyframes spin-slow {
  to { transform: rotate(360deg); }
}
.spin-slow { animation: spin-slow 22s linear infinite; }

@keyframes confetti-fall {
  0% { transform: translateY(-10vh) rotate(0deg); opacity: 1; }
  100% { transform: translateY(110vh) rotate(540deg); opacity: 0; }
}
.confetti-piece { position: fixed; top: 0; z-index: 800; pointer-events: none; animation: confetti-fall linear forwards; }

@keyframes pop-in {
  0% { transform: scale(0.8); opacity: 0; }
  100% { transform: scale(1); opacity: 1; }
}
.pop-in { animation: pop-in 0.35s var(--ease-out); }

@keyframes marquee-scroll {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
.marquee__track { display: flex; width: max-content; animation: marquee-scroll 28s linear infinite; }

.tilt-card { transition: transform 0.25s var(--ease-out); transform-style: preserve-3d; }
