/* AOS-style scroll animations via Intersection Observer */
[data-aos] { opacity: 0; transform: translateY(30px); transition: opacity 0.6s ease, transform 0.6s ease; }
[data-aos].aos-animate { opacity: 1; transform: translateY(0); }
[data-aos][data-aos-delay="100"] { transition-delay: 0.1s; }
[data-aos][data-aos-delay="200"] { transition-delay: 0.2s; }
[data-aos][data-aos-delay="300"] { transition-delay: 0.3s; }
[data-aos][data-aos-delay="400"] { transition-delay: 0.4s; }
[data-aos][data-aos-delay="500"] { transition-delay: 0.5s; }

/* Pulse glow */
@keyframes pulseGlow {
  0%, 100% { box-shadow: 0 0 0 0 rgba(0,255,212,0); }
  50% { box-shadow: 0 0 20px 6px rgba(0,255,212,0.2); }
}
.pulse-glow { animation: pulseGlow 3s ease-in-out infinite; }

/* Shimmer */
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
.shimmer {
  background: linear-gradient(90deg, transparent 25%, rgba(0,255,212,0.1) 50%, transparent 75%);
  background-size: 200% 100%;
  animation: shimmer 2s infinite;
}

/* Fade in up */
@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
.fade-in-up { animation: fadeInUp 0.6s ease forwards; }
