/* ================================================================
   ANIMACIONES — el titular se "alinea" al cargar + scroll reveal
   ================================================================ */

/* ---------- Hero: palabras desalineadas que se auto-corrigen ---------- */
.snap-word{
  display:inline-block;
  opacity:0;
  transform: translateY(14px) rotate(var(--rot,0deg));
  animation: snapIn var(--dur-slow) var(--ease-snap) forwards;
  animation-delay: var(--d, 0s);
}
.snap-word:nth-child(1){ --rot:-7deg; --d:.05s; }
.snap-word:nth-child(2){ --rot:5deg;  --d:.15s; }
.snap-word:nth-child(3){ --rot:-4deg; --d:.25s; }
.snap-word:nth-child(4){ --rot:6deg;  --d:.34s; }
.snap-word:nth-child(5){ --rot:-3deg; --d:.43s; }

.snap-accent{ color:var(--laser); }

@keyframes snapIn{
  0%{ opacity:0; transform:translateY(14px) rotate(var(--rot,0deg)); }
  60%{ opacity:1; }
  100%{ opacity:1; transform:translateY(0) rotate(0deg); }
}

/* ---------- Scroll hint dot ---------- */
@keyframes scrollDot{
  0%{ top:8px; opacity:1; }
  70%{ opacity:1; }
  100%{ top:24px; opacity:0; }
}

/* ---------- WhatsApp FAB pulse ---------- */
@keyframes fabPulse{
  0%,100%{ box-shadow:0 0 0 0 rgba(212,31,44,.45), var(--glow-cta); }
  50%{ box-shadow:0 0 0 10px rgba(212,31,44,0), var(--glow-cta); }
}

/* ---------- Scroll reveal (IntersectionObserver toggles .is-visible) ---------- */
[data-reveal]{
  opacity:0;
  transform:translateY(22px);
  transition:opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);
}
[data-reveal].is-visible{
  opacity:1;
  transform:translateY(0);
}
/* stagger direct children of grids that reveal together */
.service-grid[data-reveal-group] .service-card,
.video-gauge-row .video-gauge,
.process-rail li,
.faq-list .faq-item{
  opacity:0;
  transform:translateY(18px);
  transition:opacity var(--dur-base) var(--ease-out), transform var(--dur-base) var(--ease-out);
}
.service-card.is-visible,
.video-gauge.is-visible,
.process-rail li.is-visible,
.faq-item.is-visible{
  opacity:1;
  transform:translateY(0);
}

/* ---------- Count-up numeric readouts ---------- */
[data-count-to]{ font-variant-numeric:tabular-nums; }

/* ---------- Header shrink on scroll ---------- */
.site-header.is-scrolled{
  background:rgba(13,13,13,.92);
  box-shadow:0 8px 30px -12px rgba(0,0,0,.6);
}

/* ---------- FAQ open state height handled inline via JS max-height ---------- */
