/* ============================================================
   AGGARWAL TAXI — ANIMATIONS.CSS
   Reveal-on-scroll, floats, shimmer, timeline draw, pulses.
   All disabled under prefers-reduced-motion.
   ============================================================ */

/* ---------- Reveal on scroll ---------- */
.reveal {
  opacity: 1;
  transform: translateY(0);
  transition: opacity .7s ease, transform .7s cubic-bezier(.2,.7,.3,1);
}

.reveal.in {
  opacity: 1;
  transform: translateY(0);
}
.reveal-left { opacity: 0; transform: translateX(-30px); transition: opacity .7s ease, transform .7s cubic-bezier(.2,.7,.3,1); }
.reveal-left.in { opacity: 1; transform: translateX(0); }
.reveal-right { opacity: 0; transform: translateX(30px); transition: opacity .7s ease, transform .7s cubic-bezier(.2,.7,.3,1); }
.reveal-right.in { opacity: 1; transform: translateX(0); }
.reveal-zoom { opacity: 0; transform: scale(.94); transition: opacity .6s ease, transform .6s cubic-bezier(.2,.7,.3,1); }
.reveal-zoom.in { opacity: 1; transform: scale(1); }

/* ---------- Keyframes ---------- */
@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-12px); }
}
@keyframes fabPulse {
  0% { transform: scale(1); opacity: .8; }
  70% { transform: scale(1.55); opacity: 0; }
  100% { transform: scale(1.55); opacity: 0; }
}
@keyframes shimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}
@keyframes roadDash {
  to { stroke-dashoffset: 0; }
}
@keyframes pinDrop {
  0% { transform: translateY(-14px) scale(.8); opacity: 0; }
  60% { transform: translateY(2px) scale(1.05); opacity: 1; }
  100% { transform: translateY(0) scale(1); opacity: 1; }
}

/* ---------- Shimmering gold text ---------- */
.gold-shimmer {
  background: linear-gradient(110deg, var(--gold-500) 30%, #F4E3B2 48%, var(--gold-500) 62%);
  background-size: 200% auto; -webkit-background-clip: text; background-clip: text;
  -webkit-text-fill-color: transparent; color: transparent;
  animation: shimmer 6s linear infinite;
}

/* ---------- Route timeline draw-in ---------- */
.route-tl::before { transform-origin: top; transform: scaleY(0); transition: transform 1.4s cubic-bezier(.2,.7,.3,1); }
.route-tl.drawn::before { transform: scaleY(1); }
.route-tl .tl-item { opacity: 0; transform: translateY(14px); transition: opacity .5s ease, transform .5s ease; }
.route-tl.drawn .tl-item { opacity: 1; transform: translateY(0); }
.route-tl.drawn .tl-item:nth-child(1) { transition-delay: .15s; }
.route-tl.drawn .tl-item:nth-child(2) { transition-delay: .3s; }
.route-tl.drawn .tl-item:nth-child(3) { transition-delay: .45s; }
.route-tl.drawn .tl-item:nth-child(4) { transition-delay: .6s; }
.route-tl.drawn .tl-item:nth-child(5) { transition-delay: .75s; }
.route-tl.drawn .tl-item:nth-child(6) { transition-delay: .9s; }
.route-tl.drawn .tl-item:nth-child(7) { transition-delay: 1.05s; }
.route-tl.drawn .tl-item:nth-child(8) { transition-delay: 1.2s; }
.route-tl.drawn .tl-item:nth-child(9) { transition-delay: 1.35s; }
.route-tl.drawn .tl-item:nth-child(10) { transition-delay: 1.5s; }

/* ---------- Hero entrance ---------- */
.hero-enter { opacity: 0; transform: translateY(24px); animation: heroIn .9s cubic-bezier(.2,.7,.3,1) forwards; }
.hero-enter.d1 { animation-delay: .12s; }
.hero-enter.d2 { animation-delay: .26s; }
.hero-enter.d3 { animation-delay: .4s; }
@keyframes heroIn { to { opacity: 1; transform: translateY(0); } }

/* ---------- Button press feedback ---------- */
.btn { will-change: transform; }

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .reveal, .reveal-left, .reveal-right, .reveal-zoom,
  .route-tl .tl-item, .hero-enter { opacity: 1 !important; transform: none !important; transition: none !important; animation: none !important; }
  .route-tl::before { transform: scaleY(1) !important; transition: none !important; }
  .gold-shimmer { animation: none; -webkit-text-fill-color: currentColor; color: var(--gold-500); background: none; }
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}
