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

@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Scroll-triggered Animations (IntersectionObserver hooks) */
.animate-on-scroll {
  opacity: 0;
  transition: opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1), transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  will-change: opacity, transform;
}

/* Initial States */
.animate-on-scroll.fade-in-up {
  transform: translateY(30px);
}

.animate-on-scroll.fade-in {
  transform: none;
}

.animate-on-scroll.scale-in {
  transform: scale(0.95);
}

/* Triggered State (Active/Animated) */
.animate-on-scroll.animated {
  opacity: 1;
  transform: translateY(0) scale(1);
}
