/* Lagoon of Randomness™ — motion layer styles (paired with /assets/motion.js).
   Nothing is hidden unless motion.js has run and set html.mo, so crawlers,
   no-JS visitors and reduced-motion users always get the full static page. */

/* Headline words */
html.mo .mo-split .mo-w{
  display:inline-block;
  opacity:0;
  transform:translateY(.55em) rotate(2deg);
  filter:blur(6px);
  transition:opacity .55s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1),filter .55s ease;
  transition-delay:calc(var(--i,0) * 38ms);
  will-change:transform,opacity;
}
html.mo .mo-split.mo-in .mo-w{opacity:1;transform:none;filter:none}
/* Exit fast and all together so leaving the viewport never feels sluggish */
html.mo .mo-split:not(.mo-in) .mo-w{transition-delay:0s;transition-duration:.3s}

/* Body text */
html.mo .mo-t{
  opacity:0;
  transform:translateY(16px);
  transition:opacity .6s cubic-bezier(.2,.7,.2,1),transform .6s cubic-bezier(.2,.7,.2,1);
}
html.mo .mo-t.mo-in{opacity:1;transform:none}
html.mo .mo-t:not(.mo-in){transition-duration:.35s}

/* Existing .reveal blocks also exit (motion.js toggles .visible both ways) */
html.mo .reveal:not(.visible){transition-duration:.35s}

/* Counters keep a steady width while they tick */
.mo-n{font-variant-numeric:tabular-nums}

@media (prefers-reduced-motion:reduce){
  html.mo .mo-split .mo-w,html.mo .mo-t{opacity:1!important;transform:none!important;filter:none!important;transition:none!important}
}
