/* ============================================================
   Chiquilladas — animations.css
   Todas las @keyframes del sitio + el sistema de scroll-reveal
   (IntersectionObserver) + utilidades de microinteracción que no
   pertenecen a un componente visual concreto (ver styles.css).
   ============================================================ */

/* --- Scroll reveal (activado por animations.js) --- */
.reveal { opacity: 0; transform: translateY(26px); transition: opacity .7s ease, transform .7s cubic-bezier(.2,.75,.2,1); will-change: transform, opacity; }
.reveal[data-reveal="left"] { transform: translateX(-34px); }
.reveal[data-reveal="right"] { transform: translateX(34px); }
.reveal[data-reveal="scale"] { transform: scale(.94); }
.reveal.is-visible { opacity: 1; transform: none; }
.reveal.stagger-1 { transition-delay: .08s; }
.reveal.stagger-2 { transition-delay: .16s; }
.reveal.stagger-3 { transition-delay: .24s; }
.reveal.stagger-4 { transition-delay: .32s; }

/* --- Keyframes de marca (orbes, confeti, badges, ticker) --- */
@keyframes floatOrb { 0%, 100% { transform: translate3d(0,0,0) scale(1); } 50% { transform: translate3d(0,-22px,0) scale(1.04); } }
@keyframes confettiFloat { 0%, 100% { translate: 0 0; } 50% { translate: 0 -18px; rotate: 18deg; } }
@keyframes badgeBob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } }
@keyframes ticker { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes starTwinkle { 0%,100% { transform: rotate(10deg) scale(1); } 50% { transform: rotate(-8deg) scale(1.18); } }

.promo-star-one { animation: starTwinkle 2.3s ease-in-out infinite; }
.promo-star-two { animation: starTwinkle 2.7s .35s ease-in-out infinite; }
.promo-star-three { animation: starTwinkle 2s .7s ease-in-out infinite; }

/* --- Contadores animados (nosotros.html) --- */
@keyframes popIn { from { opacity: 0; transform: scale(.7); } to { opacity: 1; transform: scale(1); } }
.counter-value.is-counted { animation: popIn .45s ease; }

/* --- Tabs de filtro (paquetes / galería) --- */
@keyframes tabPop { 0% { transform: scale(.92); } 60% { transform: scale(1.04); } 100% { transform: scale(1); } }
.filter-tab.is-active { animation: tabPop .25s ease; }

/* --- Entrada de tarjetas al filtrar --- */
@keyframes cardFadeIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }
.js-filtered { animation: cardFadeIn .4s ease; }

/* --- Pulso sutil para insignias de urgencia / promo --- */
@keyframes softPulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(216,27,96,.35); } 50% { box-shadow: 0 0 0 10px rgba(216,27,96,0); } }
.pulse-badge { animation: softPulse 2.4s ease-in-out infinite; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; scroll-behavior: auto !important; }
  .reveal { opacity: 1 !important; transform: none !important; }
}
