/* ==========================================================================
   ANIMATIONS
   ========================================================================== */
[data-reveal] {
  opacity: 0; transform: translateY(28px);
  transition: opacity 0.9s var(--ease-out), transform 0.9s var(--ease-out);
}
[data-reveal].in-view { opacity: 1; transform: translateY(0); }
[data-reveal="scale"] { transform: translateY(0) scale(0.94); }
[data-reveal="scale"].in-view { transform: scale(1); }

[data-reveal-group] > * { transition-delay: calc(var(--i, 0) * 90ms); }

@keyframes floaty { 0%, 100% { transform: translateY(0);} 50% { transform: translateY(-14px);} }
.float { animation: floaty 6s ease-in-out infinite; }

@keyframes pulseGlow { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } }
.pulse-glow { animation: pulseGlow 2.6s ease-in-out infinite; }

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

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { opacity: 1; transform: none; transition: none; }
  .float, .pulse-glow, .spin-slow { animation: none; }
}
