/* =========================================================
   Motion — scroll reveal, shared keyframes, and the reduced-motion override (must load last).
   ========================================================= */

/* ---------- Scroll reveal: two-axis "plotter" move ---------- */
.js .reveal { opacity: 0; translate: 0 24px; }
.js .reveal.is-in { animation: boot .95s var(--mech) both; animation-delay: calc(var(--d, 0) * 110ms); }

/* ---------- Keyframes ---------- */
@keyframes boot {
  0%   { opacity: 0; translate: -12px 24px; }
  50%  { opacity: 1; translate: -12px 0; }
  100% { opacity: 1; translate: 0 0; }
}
@keyframes drop {
  0%   { opacity: 0; transform: translateY(-.55em); }
  55%  { opacity: 1; }
  100% { opacity: 1; transform: none; }
}
@keyframes blink { 50% { opacity: 0; } }
@keyframes eyeblink { 0%, 92%, 100% { transform: scaleY(1); } 95% { transform: scaleY(.1); } }
@keyframes ping {
  0% { box-shadow: 0 0 0 0 rgba(31, 180, 106, .5); }
  80%, 100% { box-shadow: 0 0 0 8px rgba(31, 180, 106, 0); }
}
@keyframes marquee { to { transform: translateX(-50%); } }
@keyframes spin { to { transform: rotate(360deg); } }
@keyframes sweep {
  0%, 12%  { transform: rotate(-55deg); }
  42%, 58% { transform: rotate(50deg); }
  88%, 100% { transform: rotate(-55deg); }
}
@keyframes blip { 0%, 40% { opacity: 0; transform: scale(.4); } 50% { opacity: 1; transform: scale(1.3); } 100% { opacity: 0; transform: scale(1); } }
@keyframes scan { 0%, 100% { transform: translateX(-7px); } 50% { transform: translateX(7px); } }
@keyframes bob { 50% { transform: translateY(-1.5px); } }
@keyframes arm-nod { 0%, 15%, 100% { transform: rotate(0deg); } 45%, 65% { transform: rotate(-16deg); } }
@keyframes core { 50% { transform: scale(.72); opacity: .65; } }
@keyframes nozzle { 0%, 100% { transform: translateX(-9px); } 50% { transform: translateX(9px); } }

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: 1ms !important;
    animation-delay: 0ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
    transition-delay: 0ms !important;
  }
}
