/* ==========================================================================
   ANIMATIONS.CSS
   ========================================================================== */

@keyframes pulseDot {
  0%, 100% { transform: scale(1); opacity: 1; }
  50% { transform: scale(1.6); opacity: 0.4; }
}

@keyframes scrollLine {
  0% { transform: translateY(-100%); opacity: 0; }
  50% { opacity: 1; }
  100% { transform: translateY(100%); opacity: 0; }
}

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(28px); }
  to { opacity: 1; transform: translateY(0); }
}

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

@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-10px); }
}

@keyframes drawLine {
  from { stroke-dashoffset: var(--dash, 1000); }
  to { stroke-dashoffset: 0; }
}

@keyframes spin { to { transform: rotate(360deg); } }

/* Page load sequence for hero */
.hero-tag { animation: fadeInUp 0.7s ease both; animation-delay: 0.05s; }
.hero h1 { animation: fadeInUp 0.8s ease both; animation-delay: 0.15s; }
.hero .lead { animation: fadeInUp 0.8s ease both; animation-delay: 0.28s; }
.hero-actions { animation: fadeInUp 0.8s ease both; animation-delay: 0.4s; }
.hero-floating-stats { animation: fadeInUp 0.9s ease both; animation-delay: 0.55s; }
.hero-elevation { animation: fadeIn 1.4s ease both; animation-delay: 0.3s; }

/* Scroll reveal (driven by IntersectionObserver toggling .in-view) */
.reveal { opacity: 0; transform: translateY(32px); transition: opacity 700ms cubic-bezier(.4,0,.2,1), transform 700ms cubic-bezier(.4,0,.2,1); }
.reveal.in-view { opacity: 1; transform: translateY(0); }
.reveal-stagger.in-view > * { animation: fadeInUp 650ms cubic-bezier(.4,0,.2,1) both; }
.reveal-stagger.in-view > *:nth-child(1) { animation-delay: 0ms; }
.reveal-stagger.in-view > *:nth-child(2) { animation-delay: 80ms; }
.reveal-stagger.in-view > *:nth-child(3) { animation-delay: 160ms; }
.reveal-stagger.in-view > *:nth-child(4) { animation-delay: 240ms; }
.reveal-stagger.in-view > *:nth-child(5) { animation-delay: 320ms; }
.reveal-stagger.in-view > *:nth-child(6) { animation-delay: 400ms; }

@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-stagger > * { opacity: 1 !important; transform: none !important; animation: none !important; }
}

/* Loading screen */
.page-loader {
  position: fixed; inset: 0; z-index: 5000; background: var(--color-dark);
  display: flex; align-items: center; justify-content: center; transition: opacity 500ms ease, visibility 500ms ease;
}
.page-loader.loaded { opacity: 0; visibility: hidden; }
.page-loader .loader-mark { width: 56px; height: 56px; position: relative; }
.page-loader .loader-mark svg { width: 100%; height: 100%; animation: spin 1.4s linear infinite; }

.timeline-step { opacity: 0; transform: translateY(20px); transition: opacity 600ms ease, transform 600ms ease; }
.timeline-step.in-view { opacity: 1; transform: translateY(0); }

.gallery-item { opacity: 0; transform: scale(0.96); transition: opacity 500ms ease, transform 500ms ease; }
.gallery-item.in-view { opacity: 1; transform: scale(1); }
