/* ===== GSD Unlimited — Animations ===== */

/* Liquid metal shimmer on headings */
@keyframes metalShimmer {
  0% { background-position: -200% center; }
  100% { background-position: 200% center; }
}

.text-metallic {
  background: linear-gradient(90deg, #B8D4FF 0%, #1A6FFF 30%, #D0E4FF 50%, #1A6FFF 70%, #B8D4FF 100%);
  background-size: 200% auto;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  animation: metalShimmer 4s linear infinite;
}

/* Scroll reveal base class */
.reveal {
  opacity: 0;
  transform: translateY(40px);
  transition: opacity 0.7s ease, transform 0.7s ease;
}

.reveal.revealed {
  opacity: 1;
  transform: translateY(0);
}

/* Staggered reveals */
.reveal-delay-1 { transition-delay: 0.1s; }
.reveal-delay-2 { transition-delay: 0.2s; }
.reveal-delay-3 { transition-delay: 0.3s; }
.reveal-delay-4 { transition-delay: 0.4s; }

/* Glow pulse for CTA buttons */
@keyframes glowPulse {
  0%, 100% { box-shadow: 0 0 20px rgba(26, 111, 255, 0.4); }
  50% { box-shadow: 0 0 40px rgba(26, 111, 255, 0.8), 0 0 80px rgba(26, 111, 255, 0.2); }
}

.glow-pulse {
  animation: glowPulse 3s ease-in-out infinite;
}

/* Scroll indicator bounce */
@keyframes scrollBounce {
  0%, 100% { transform: translateY(0); opacity: 0.6; }
  50% { transform: translateY(12px); opacity: 1; }
}

.scroll-indicator {
  animation: scrollBounce 2s ease-in-out infinite;
}

/* Shimmer sweep for buttons */
@keyframes shimmerSweep {
  0% { left: -100%; }
  100% { left: 100%; }
}

/* Gradient diagonal animation for CTA banner */
@keyframes gradientShift {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* Noise grain texture overlay */
.grain-overlay::before {
  content: '';
  position: fixed;
  inset: 0;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.5'/%3E%3C/svg%3E");
  opacity: 0.03;
  pointer-events: none;
  z-index: 1000;
}

/* Fade in up */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.fade-in-up {
  animation: fadeInUp 0.8s ease forwards;
}

/* Counter number scale pop */
@keyframes numberPop {
  0% { transform: scale(0.5); opacity: 0; }
  80% { transform: scale(1.05); }
  100% { transform: scale(1); opacity: 1; }
}
