@keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-14px); } }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes blink { 50% { opacity: 0; } }
@keyframes pulse { 0% { transform: scale(.6); opacity: .9; } 100% { transform: scale(1.5); opacity: 0; } }
@keyframes drift-a { to { transform: translate(8vw, 6vh) scale(1.1); } }
@keyframes drift-b { to { transform: translate(-7vw, -6vh) scale(1.15); } }
@keyframes pop { from { opacity: 0; transform: translateY(18px) scale(.97); } to { opacity: 1; transform: none; } }
@keyframes wiggle { 30% { transform: rotate(-8deg) scale(1.06); } 60% { transform: rotate(6deg) scale(1.06); } }
@keyframes rise { from { opacity: 0; transform: translateY(22px); } to { opacity: 1; transform: none; } }

/* Secuencia de entrada del hero (único momento orquestado) */
.hero-copy > *, .hero-visual, .hero-stats { animation: rise .9s var(--ease) both; }
.hero-copy > *:nth-child(1) { animation-delay: .05s; }
.hero-copy > *:nth-child(2) { animation-delay: .12s; }
.hero-copy > *:nth-child(3) { animation-delay: .19s; }
.hero-copy > *:nth-child(4) { animation-delay: .26s; }
.hero-copy > *:nth-child(5) { animation-delay: .33s; }
.hero-copy > *:nth-child(6) { animation-delay: .40s; }
.hero-copy > *:nth-child(7) { animation-delay: .47s; }
.hero-visual { animation-delay: .25s; }
.hero-stats { animation-delay: .6s; }

/* Revelado al desplazarse (solo si JS está activo) */
.js [data-reveal] { opacity: 0; transform: translateY(18px); transition: opacity .7s var(--ease), transform .7s var(--ease); transition-delay: calc(var(--i, 0) * 60ms); }
.js [data-reveal].is-in { opacity: 1; transform: none; }
