/* Fade-in on load (for hero section) */
.fade-in-load {
  opacity: 0;
  transform: translateY(30px);
  animation: fadeInLoad 1s cubic-bezier(0.23, 1, 0.32, 1) forwards;
}
@keyframes fadeInLoad {
  to {
    opacity: 1;
    transform: none;
  }
}

/* Scroll-triggered fade/slide animations */
.fade-in-up {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);
}
.fade-in-left {
  opacity: 0;
  transform: translateX(-30px);
  transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);
}
.fade-in-right {
  opacity: 0;
  transform: translateX(30px);
  transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1), transform 0.7s cubic-bezier(0.23, 1, 0.32, 1);
}
.fade-in {
  opacity: 0;
  transition: opacity 0.7s cubic-bezier(0.23, 1, 0.32, 1);
}
.fade-in-up.visible,
.fade-in-left.visible,
.fade-in-right.visible,
.fade-in.visible {
  opacity: 1;
  transform: none;
}

/* Delay utilities for staggered effects */
.delay-100 { transition-delay: 100ms; }
.delay-200 { transition-delay: 200ms; }
.delay-300 { transition-delay: 300ms; }
.delay-400 { transition-delay: 400ms; }
.delay-500 { transition-delay: 500ms; }
