/* ------------------------------------------------------------------ *
 * Scroll-reveal system: elements start in their "from" state and are
 * flipped to the visible state by main.js adding .in-view via
 * IntersectionObserver. Respects reduced-motion preference.
 * ------------------------------------------------------------------ */

[data-animate] {
  opacity: 0;
  transition: opacity .8s cubic-bezier(.25,.1,.25,1), transform .8s cubic-bezier(.25,.1,.25,1);
  will-change: opacity, transform;
}

[data-animate="fade-up"] { transform: translateY(48px); }
[data-animate="fade-down"] { transform: translateY(-48px); }
[data-animate="slide-left"] { transform: translateX(64px); }
[data-animate="slide-right"] { transform: translateX(-64px); }
[data-animate="zoom"] { transform: scale(.88); }
[data-animate="rotate"] { transform: rotate(-6deg) scale(.92); }

[data-animate].in-view {
  opacity: 1;
  transform: none;
}

/* Stagger children of a group via inline --delay custom property */
[data-animate] { transition-delay: var(--delay, 0s); }

@keyframes kenburns {
  0%   { transform: scale(1) translate(0, 0); }
  100% { transform: scale(1.12) translate(-1.5%, -1%); }
}

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

@keyframes pulseRing {
  0% { box-shadow: 0 0 0 0 rgba(37, 211, 102, .55); }
  70% { box-shadow: 0 0 0 16px rgba(37, 211, 102, 0); }
  100% { box-shadow: 0 0 0 0 rgba(37, 211, 102, 0); }
}

@keyframes marqueeScroll {
  0% { transform: translateX(0); }
  100% { transform: translateX(-50%); }
}

@keyframes bounceDown {
  0%, 100% { transform: translateY(0); opacity: 1; }
  50% { transform: translateY(10px); opacity: .5; }
}

@keyframes fadeZoomSlide {
  0% { opacity: 0; transform: scale(1.08); }
  8%, 92% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(1); }
}

@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

@keyframes countPop {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  [data-animate] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .float-anim, .marquee-track, .hero-slide.active .hero-slide-img {
    animation: none !important;
  }
}
