/* ==========================================================================
   Motion — one authored entrance (staggered blur-rise) + small loops.
   Everything is switched off under prefers-reduced-motion.
   ========================================================================== */

.rise { animation: rise var(--dur-3) var(--ease-out) both; animation-delay: calc(var(--i, 0) * 70ms); }
@keyframes rise {
  from { opacity: 0.001; transform: translateY(14px); filter: blur(4px); }
  to   { opacity: 1; transform: none; filter: none; }
}

@keyframes ping {
  0%   { transform: scale(0.5); opacity: 0.8; }
  100% { transform: scale(1.6); opacity: 0; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  .rise { animation: none; }
  .pulse::after { animation: none; }
  *, *::before, *::after { transition-duration: 0ms !important; }
}
