/* ===== Keyframes ===== */
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeInUp { from { opacity: 0; transform: translateY(22px); } to { opacity: 1; transform: translateY(0); } }
@keyframes floaty { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }

.page-transition { animation: fadeIn 0.35s var(--ease); }

/* ===== Scroll reveal ===== */
.reveal,
.service-card,
.review-card,
.team-member,
.stat-block {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.7s var(--ease), transform 0.7s var(--ease);
  will-change: opacity, transform;
}

.reveal.active,
.service-card.active,
.review-card.active,
.team-member.active,
.stat-block.active {
  opacity: 1;
  transform: translateY(0);
}

/* Stagger dentro de grillas */
.grid-3 .service-card:nth-child(3n+2),
.grid-4 .review-card:nth-child(4n+2),
.stats-row .stat-block:nth-child(2) { transition-delay: 0.08s; }
.grid-3 .service-card:nth-child(3n+3),
.grid-4 .review-card:nth-child(4n+3),
.stats-row .stat-block:nth-child(3) { transition-delay: 0.16s; }
.grid-4 .review-card:nth-child(4n+4),
.stats-row .stat-block:nth-child(4) { transition-delay: 0.24s; }

/* Elementos flotantes del hero */
.hero-float-badge { animation: floaty 4.5s ease-in-out infinite; }
.hero-stat-card { animation: floaty 5.5s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition-duration: 0.01ms !important; }
  .reveal, .service-card, .review-card, .team-member, .stat-block { opacity: 1; transform: none; }
  html { scroll-behavior: auto; }
}
