/* Line letter rise: the hidden start state. part.js marks <html class="llr-js"> (not under reduced motion), so
   without JS, or with reduced motion, the text simply shows. */
.llr-js [data-llr]:not(.llr-on) { opacity: 0; }          /* the frame before the split */
.llr-w, .llr-c { display: inline-block; }
[data-llr="chars"] .llr-w { white-space: nowrap; }
[data-llr]:not([data-llr="chars"]):not([data-llr-preset="pop"]).llr-held .llr-w,
[data-llr="chars"].llr-held .llr-c { opacity: .001; transform: translateY(var(--llr-y, 24px)); }
.llr-sr { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* pop preset (data-llr-preset="pop"): letters held at scale 0 + rotateY 10deg, opacity 1 (part.js writes --llr-pop) */
[data-llr-preset="pop"]:not([data-llr="words"]) .llr-w { white-space: nowrap; }
[data-llr][data-llr-preset="pop"]:not([data-llr="words"]).llr-held .llr-c,
[data-llr="words"][data-llr-preset="pop"].llr-held .llr-w { opacity: 1; transform: var(--llr-pop, scale(0) rotateY(10deg)); }
