/* ============================================================
   animations.css — reveals, hero pulse, micro-interactions
   ============================================================ */

/* Scroll reveal (toggled by script.js via IntersectionObserver) */
[data-reveal] { opacity: 0; transform: translateY(24px); transition: opacity .7s var(--ease), transform .7s var(--ease); }
[data-reveal].in { opacity: 1; transform: none; }
[data-reveal][data-delay="1"] { transition-delay: .08s; }
[data-reveal][data-delay="2"] { transition-delay: .16s; }
[data-reveal][data-delay="3"] { transition-delay: .24s; }
[data-reveal][data-delay="4"] { transition-delay: .32s; }

/* Hero heartbeat line draw */
.hero__pulse path {
  stroke-dasharray: 600;
  stroke-dashoffset: 600;
  animation: drawPulse 2.6s var(--ease) .4s forwards;
}
@keyframes drawPulse { to { stroke-dashoffset: 0; } }

/* Gentle floating badges */
.hero__badge--tl { animation: floatY 5s ease-in-out infinite; }
.hero__badge--br { animation: floatY 5.6s ease-in-out infinite .6s; }
@keyframes floatY { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }

/* Soft pulse ring on call CTA */
.fab--call { position: relative; }
.fab--call::before {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  border: 2px solid var(--teal); animation: ring 2s ease-out infinite;
}
@keyframes ring { 0% { transform: scale(1); opacity: .7; } 100% { transform: scale(1.6); opacity: 0; } }

/* Link arrow nudge already handled in style via gap; underline shimmer for nav */
.nav__menu a { position: relative; }

@media (prefers-reduced-motion: reduce) {
  .hero__pulse path { stroke-dashoffset: 0; animation: none; }
  .hero__badge--tl, .hero__badge--br, .fab--call::before { animation: none; }
  [data-reveal] { opacity: 1; transform: none; }
}
