/* ==========================================================================
   GEO-SUR · animations.css
   Keyframes + scroll-reveal classes + hero entrance + UI motion.
   ========================================================================== */

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(40px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes fadeLeft {
  from { opacity: 0; transform: translateX(-40px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes fadeRight {
  from { opacity: 0; transform: translateX(40px); }
  to   { opacity: 1; transform: translateX(0); }
}
@keyframes fadeScale {
  from { opacity: 0; transform: scale(0.96); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes hero-load {
  from { opacity: 0; transform: translateY(30px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes wa-pulse {
  0%   { transform: scale(1);   opacity: 0.7; }
  100% { transform: scale(1.6); opacity: 0;   }
}
@keyframes check-draw {
  to { stroke-dashoffset: 0; }
}
@keyframes cursor-blink {
  0%, 100% { opacity: 0.8; }
  50%       { opacity: 0;   }
}

/* ---------- Scroll-reveal base ---------- */
.animate-hidden {
  opacity: 0;
}
.fade-up.animate-hidden    { transform: translateY(40px); }
.fade-left.animate-hidden  { transform: translateX(-40px); }
.fade-right.animate-hidden { transform: translateX(40px); }
.fade-scale.animate-hidden { transform: scale(0.96); }

.fade-up,
.fade-left,
.fade-right,
.fade-scale {
  transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
.fade-up.is-visible,
.fade-left.is-visible,
.fade-right.is-visible,
.fade-scale.is-visible {
  opacity: 1;
  transform: none;
}

/* ---------- Hero entrance (auto on load, not scroll-triggered) ---------- */
.hero-animate {
  opacity: 0;
  animation: hero-load 0.9s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
.hero-animate[data-delay="0"]   { animation-delay: 0ms;   }
.hero-animate[data-delay="200"] { animation-delay: 200ms; }
.hero-animate[data-delay="320"] { animation-delay: 320ms; }
.hero-animate[data-delay="400"] { animation-delay: 400ms; }
.hero-animate[data-delay="480"] { animation-delay: 480ms; }
.hero-animate[data-delay="600"] { animation-delay: 600ms; }
.hero-animate[data-delay="800"] { animation-delay: 800ms; }
.hero-animate[data-delay="900"] { animation-delay: 900ms; }

/* ---------- Form success check animation ---------- */
.check-anim path {
  stroke-dasharray: 60;
  stroke-dashoffset: 60;
  animation: check-draw 0.7s 0.2s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .animate-hidden { opacity: 1 !important; transform: none !important; }
  .hero-animate   { opacity: 1 !important; }
  .gps-coords::after { animation: none; opacity: 0.5; }
}
