/* ============================================================================
   animations.css — movimiento y efectos
   ========================================================================== */
@keyframes blink { 0%, 49% { opacity: 1; } 50%, 100% { opacity: 0; } }
@keyframes pulse { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: .55; transform: scale(.85); } }
@keyframes rise { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }

/* entrada escalonada al cargar */
[data-rise] { opacity: 0; animation: rise .6s var(--ease) forwards; }
[data-rise]:nth-child(1) { animation-delay: .02s; }
[data-rise]:nth-child(2) { animation-delay: .09s; }
[data-rise]:nth-child(3) { animation-delay: .16s; }
[data-rise]:nth-child(4) { animation-delay: .23s; }
[data-rise]:nth-child(5) { animation-delay: .30s; }
[data-rise]:nth-child(6) { animation-delay: .37s; }

/* revelado al hacer scroll */
.reveal { opacity: 0; transform: translateY(20px); transition: opacity .6s var(--ease), transform .6s var(--ease); }
.reveal.in { opacity: 1; transform: none; }

/* feedback al copiar */
@keyframes pop { 0% { transform: scale(1); } 40% { transform: scale(1.08); } 100% { transform: scale(1); } }
.codeblock__copy.copied { animation: pop .3s var(--ease); }

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