/* ═══════════════════════════════════════════════════════════
   ARIA — ANIMATIONS  (shared, page-agnostic)
   Every @keyframes plus the generic motion utilities that drive
   them. Section-specific elements (dial orbits, journey rail,
   product sheen…) reference these keyframes from their own files.
   Honour reduced motion — see the block at the foot of this file.
═══════════════════════════════════════════════════════════ */

/* ── entrance: one-shot fade-up (hero) ── */
.fade-up{opacity:0;transform:translateY(26px);animation:fadeUp 1s cubic-bezier(.2,.7,.3,1) forwards}
.d1{animation-delay:.12s}.d2{animation-delay:.28s}.d3{animation-delay:.44s}
.d4{animation-delay:.6s}.d5{animation-delay:.76s}.d6{animation-delay:.92s}
@keyframes fadeUp{to{opacity:1;transform:translateY(0)}}

/* ── scroll reveal (IntersectionObserver adds .in) ── */
.reveal{opacity:0;transform:translateY(38px);transition:all .9s cubic-bezier(.2,.7,.3,1)}
.reveal.in{opacity:1;transform:none}

/* ── rotation primitive (dial rings + orbits) ── */
.spin{transform-box:fill-box;transform-origin:center}
@keyframes rot{to{transform:rotate(360deg)}}

/* ── hero dial core pulse ── */
@keyframes coreP{0%,100%{opacity:.07}50%{opacity:.18}}

/* ── floating chips ── */
@keyframes floaty2{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}

/* ── journey rail: running light + node pulse ── */
@keyframes flowRun{0%{left:0%;opacity:0}9%{opacity:1}91%{opacity:1}100%{left:100%;opacity:0}}
@keyframes nodePulse{0%,55%,100%{box-shadow:0 0 0 5px rgba(200,149,26,.15)}28%{box-shadow:0 0 0 7px rgba(255,204,0,.35),0 0 20px 5px rgba(255,204,0,.65)}}

/* ── product mock: glass sheen sweep ── */
@keyframes sheen{0%{transform:translateX(-180%) skewX(-18deg)}55%{transform:translateX(360%) skewX(-18deg)}100%{transform:translateX(360%) skewX(-18deg)}}

/* ── product radar sweep ── */
@keyframes radarSweep{to{transform:rotate(360deg)}}

/* ── final CTA: expanding pulse rings ── */
@keyframes ripple{0%{transform:scale(.35);opacity:.75}100%{transform:scale(4);opacity:0}}

/* ── difference: signal path self-draw ── */
@keyframes dvDraw{to{stroke-dashoffset:0}}

/* ── respect the user's motion preference ── */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
  .fade-up,.reveal{opacity:1;transform:none}
}
