/* fx-text-reveal: headline words (or whole lines) rise out of a mask on load or on view.
   Gated on html.fx-js so the text shows without JS. Transform only: no layout shift. */
.fx-tr .tr-w{display:inline-block;overflow:hidden;vertical-align:bottom;padding:0 .05em .08em 0;margin:0 -.05em -.08em 0}
.fx-tr .tr-i{display:inline-block}
.fx-js .fx-tr .tr-i{transform:translateY(108%)}
.fx-js .fx-tr.tr-in .tr-i{transform:none;transition:transform var(--tr-dur,.8s) var(--tr-ease,cubic-bezier(.2,.7,.1,1)) calc(var(--tr-delay,0s) + var(--i,0) * var(--tr-step,.06s))}
@media (prefers-reduced-motion:reduce){.fx-js .fx-tr .tr-i{transform:none!important;transition:none!important}}
/* no flash of the unsplit heading before the script runs; a 1.2 s failsafe shows it if the script never does */
@keyframes trFail{to{opacity:1}}
.fx-js [data-fx~="text-reveal"]:not(.fx-tr){opacity:0;animation:trFail 0s 1.2s forwards}
@media (prefers-reduced-motion:reduce){.fx-js [data-fx~="text-reveal"]:not(.fx-tr){opacity:1;animation:none}}
