/* ==========================================================================
   Scoops & Subs — Animations
   ========================================================================== */

/* Scroll-reveal (used with IntersectionObserver in main.js) */
.reveal {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity .8s var(--ease), transform .8s var(--ease);
  will-change: opacity, transform;
}
.reveal.in { opacity: 1; transform: none; }

.reveal--left  { transform: translateX(-50px); }
.reveal--right { transform: translateX(50px); }
.reveal--left.in, .reveal--right.in { transform: none; }
.reveal--zoom  { transform: scale(0.9); }
.reveal--zoom.in { transform: none; }

/* Stagger delays */
.reveal.d1 { transition-delay: .1s; }
.reveal.d2 { transition-delay: .22s; }
.reveal.d3 { transition-delay: .34s; }
.reveal.d4 { transition-delay: .46s; }
.reveal.d5 { transition-delay: .58s; }

/* Hero background slow pan */
@keyframes heroPan {
  0%   { transform: scale(1) translate(0, 0); }
  100% { transform: scale(1.12) translate(-2%, -2%); }
}

/* Scroll cue bob */
@keyframes bob {
  0%, 100% { transform: translate(-50%, 0); }
  50%      { transform: translate(-50%, 8px); }
}

/* Floating CTA pulse */
@keyframes pulse {
  0%   { box-shadow: 0 12px 30px rgba(196,30,58,0.5); }
  50%  { box-shadow: 0 12px 30px rgba(196,30,58,0.5), 0 0 0 12px rgba(196,30,58,0.0); }
  100% { box-shadow: 0 12px 30px rgba(196,30,58,0.5); }
}
@keyframes blink {
  0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(124,252,0,0.7); }
  50%      { opacity: .6; box-shadow: 0 0 0 6px rgba(124,252,0,0); }
}

/* Gentle float for signature visuals */
@keyframes floaty {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-12px); }
}
.floaty { animation: floaty 5s ease-in-out infinite; }

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
  html { scroll-behavior: auto; }
}
