/* ============================================
   SNAPPENED — Animations
   ============================================ */

/* --- Keyframes --- */
@keyframes snp-scroll-pulse {
  0%, 100% {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
  }
  50% {
    opacity: 0.5;
    transform: translateX(-50%) translateY(8px);
  }
}

@keyframes snp-fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes snp-slide-up {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* --- GSAP Helper Classes --- */

/* Reveal from bottom (default) */
.snp-reveal {
  opacity: 0;
  transform: translateY(30px);
  will-change: opacity, transform;
}

/* Reveal from left */
.snp-reveal--left {
  opacity: 0;
  transform: translateX(-40px);
  will-change: opacity, transform;
}

/* Reveal from right */
.snp-reveal--right {
  opacity: 0;
  transform: translateX(40px);
  will-change: opacity, transform;
}

/* Reveal with scale */
.snp-reveal--scale {
  opacity: 0;
  transform: scale(0.95);
  will-change: opacity, transform;
}

/* Text split reveal (for hero text) */
.snp-text-reveal {
  overflow: hidden;
  display: inline-block;
}

.snp-text-reveal__inner {
  display: inline-block;
  transform: translateY(100%);
  will-change: transform;
}

/* Stagger children */
.snp-stagger > * {
  opacity: 0;
  transform: translateY(20px);
  will-change: opacity, transform;
}

/* Parallax container */
.snp-parallax {
  will-change: transform;
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .snp-reveal,
  .snp-reveal--left,
  .snp-reveal--right,
  .snp-reveal--scale,
  .snp-stagger > * {
    opacity: 1;
    transform: none;
    will-change: auto;
  }

  .snp-text-reveal__inner {
    transform: none;
  }

  .snp-hero__scroll {
    animation: none;
  }
}
