/**
 * FKLM Africa Foundation — Animation System v2.0
 */

/* ============================================================
   KEYFRAMES
   ============================================================ */
@keyframes fadeIn     { from { opacity: 0; }                          to { opacity: 1; } }
@keyframes fadeInUp   { from { opacity: 0; transform: translateY(24px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeInDown { from { opacity: 0; transform: translateY(-16px); } to { opacity: 1; transform: translateY(0); } }
@keyframes fadeInLeft { from { opacity: 0; transform: translateX(-28px); } to { opacity: 1; transform: translateX(0); } }
@keyframes fadeInRight{ from { opacity: 0; transform: translateX(28px); } to { opacity: 1; transform: translateX(0); } }
@keyframes scaleIn    { from { opacity: 0; transform: scale(0.95); }   to { opacity: 1; transform: scale(1); } }
@keyframes slideDown  { from { opacity: 0; transform: translateY(-12px); } to { opacity: 1; transform: translateY(0); } }

@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } }
@keyframes spin  { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }

/* Shimmer for loading states */
@keyframes shimmer {
  0%   { background-position: -200% center; }
  100% { background-position: 200% center; }
}

/* ============================================================
   SCROLL REVEAL — IntersectionObserver hooks
   ============================================================ */
.reveal {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 0.65s ease, transform 0.65s ease;
}
.reveal.is-visible { opacity: 1; transform: translateY(0); }

.reveal-left {
  opacity: 0; transform: translateX(-28px);
  transition: opacity 0.65s ease, transform 0.65s ease;
}
.reveal-left.is-visible { opacity: 1; transform: translateX(0); }

.reveal-right {
  opacity: 0; transform: translateX(28px);
  transition: opacity 0.65s ease, transform 0.65s ease;
}
.reveal-right.is-visible { opacity: 1; transform: translateX(0); }

.reveal-scale {
  opacity: 0; transform: scale(0.94);
  transition: opacity 0.5s ease, transform 0.5s ease;
}
.reveal-scale.is-visible { opacity: 1; transform: scale(1); }

.reveal-fade {
  opacity: 0;
  transition: opacity 0.8s ease;
}
.reveal-fade.is-visible { opacity: 1; }

/* Stagger delays for child elements */
.stagger > * { transition-delay: 0s; }
.stagger > *:nth-child(1) { transition-delay: 0ms; }
.stagger > *:nth-child(2) { transition-delay: 90ms; }
.stagger > *:nth-child(3) { transition-delay: 180ms; }
.stagger > *:nth-child(4) { transition-delay: 270ms; }
.stagger > *:nth-child(5) { transition-delay: 360ms; }
.stagger > *:nth-child(6) { transition-delay: 450ms; }
.stagger > *:nth-child(7) { transition-delay: 540ms; }
.stagger > *:nth-child(8) { transition-delay: 630ms; }

/* ============================================================
   UTILITY ANIMATION CLASSES
   ============================================================ */
.animate-fade-in    { animation: fadeIn 0.4s ease forwards; }
.animate-fade-in-up { animation: fadeInUp 0.5s ease forwards; }
.animate-scale-in   { animation: scaleIn 0.35s ease forwards; }
.animate-pulse      { animation: pulse 2s ease infinite; }
.animate-spin       { animation: spin 1s linear infinite; }

/* ============================================================
   MICRO-INTERACTION HELPERS
   ============================================================ */

/* Arrow link */
.arrow-link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  transition: gap var(--transition-spring);
}
.arrow-link i { transition: transform var(--transition-spring); }
.arrow-link:hover { gap: var(--space-3); }
.arrow-link:hover i { transform: translateX(4px); }

/* Underline grow */
.underline-grow {
  position: relative;
  display: inline-block;
}
.underline-grow::after {
  content: '';
  position: absolute;
  bottom: -2px; left: 0;
  width: 0; height: 1.5px;
  background: currentColor;
  transition: width var(--transition-base);
}
.underline-grow:hover::after { width: 100%; }

/* Icon spin on hover */
.hover-spin:hover { animation: spin 0.5s ease; }

/* Subtle float */
.hover-float {
  transition: transform var(--transition-base);
}
.hover-float:hover { transform: translateY(-4px); }

/* ============================================================
   NUMBER COUNTER — revealed by JS
   ============================================================ */
[data-counter] {
  display: inline-block;
  transition: transform 0.3s ease;
}

/* ============================================================
   REDUCED MOTION
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
  .reveal, .reveal-left, .reveal-right, .reveal-scale, .reveal-fade {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .section-hero__bg img { animation: none !important; transform: none !important; }
}
