/* Char sweep reveal (see part.js). */
:root {
  /* Framer spring, duration .4 s bounce 0 (Sadewa's --spring-fast), baked by spring-to-linear: the fallback when
     part.js runs without ../spring-to-linear/part.js loaded */
  --csr-spring: linear(0, 0.0229, 0.0788, 0.1532, 0.2361, 0.3208, 0.403, 0.4802, 0.5509, 0.6146, 0.6711, 0.7207, 0.7638, 0.801, 0.8329, 0.8601, 0.8832, 0.9027, 0.9191, 0.9329, 0.9445, 0.9541, 0.9621, 0.9688, 0.9743, 0.9789, 0.9827, 0.9858, 0.9884, 0.9905, 0.9922, 0.9936, 0.9948, 0.9958, 0.9965, 0.9972, 0.9977, 0.9981, 0.9985, 0.9988, 1);
  --csr-dur: 400ms;
}
@supports not (transition-timing-function: linear(0, 1)) { :root { --csr-spring: cubic-bezier(.22, 1, .36, 1); } }

/* hidden only once JS is known to run (part.js marks <html> in <head>) until split */
html.csr-js [data-sweep]:not(.csr-armed) { visibility: hidden; }

.csr-wd { display: inline-block; white-space: nowrap; }            /* a word never breaks inside */
.csr-u { display: inline-block; will-change: transform, opacity; }  /* a char (chars mode) or a word (words mode) */
.csr-armed:not(.csr-in) .csr-u { opacity: .001; transform: translateX(var(--csr-x, 20px)); }

/* the readable copy for screen readers; the split copy is aria-hidden */
.csr-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

@media (prefers-reduced-motion: reduce) { html.csr-js [data-sweep] { visibility: visible; } }
