/* ===== Scroll reveal (ativado via IntersectionObserver em animations.js) ===== */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  will-change: opacity, transform;
}

[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}

[data-reveal="fade"] { transform: none; }
[data-reveal="left"] { transform: translateX(-32px); }
[data-reveal="left"].is-visible { transform: translateX(0); }
[data-reveal="right"] { transform: translateX(32px); }
[data-reveal="right"].is-visible { transform: translateX(0); }
[data-reveal="scale"] { transform: scale(0.92); }
[data-reveal="scale"].is-visible { transform: scale(1); }

/* stagger helper: aplicado via JS somando delay */
[data-reveal-group] > * { transition-delay: calc(var(--stagger-i, 0) * 90ms); }

/* Respeita usuários que pedem menos movimento */
@media (prefers-reduced-motion: reduce) {
  [data-reveal] {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .wa-float { animation: none; }
  .scroll-cue .line { animation: none; }
}

/* Contadores animados */
.count-up { font-variant-numeric: tabular-nums; }

/* Fade-in geral de página */
body.is-ready .page-fade { animation: pageFade 0.6s var(--ease) both; }

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