/* mth-textreveal: word-by-word text reveal for the FROM MEMBER TO HOST showcases.
   Same method as uxpeak's "outcome copy" (per-word masks that rise, label letters rise, label tracking settles,
   paragraph words fade up), in tribeCast orange. Hidden states only apply once the JS has wrapped the words
   (html.rvx), so no JS = plain readable text. The JS is skipped entirely for prefers-reduced-motion. */
.rtw{display:inline-block;overflow:hidden;vertical-align:top;padding:.08em 0 .14em;margin:-.08em 0 -.14em}
.rtw>span{display:inline-block}
.rpw{display:inline-block}
.rnn{display:inline-block;overflow:hidden;vertical-align:top;margin-right:.5em}
.rnn>span{display:inline-block}
.rnt{display:inline-block}

html.rvx .rtw>span{transform:translateY(108%);color:#FF7A29}
html.rvx .rpw{opacity:0;transform:translateY(10px)}
html.rvx .rnn>span{transform:translateY(110%)}
html.rvx .rnt{opacity:0;letter-spacing:.42em}

html.rvx .rvx-in .rtw>span{transform:none;color:inherit;transition:transform 1s cubic-bezier(.22,1,.36,1) calc(var(--i) * 46ms + 120ms),color 1.1s ease calc(var(--i) * 46ms + 520ms)}
html.rvx .rvx-in .rpw{opacity:1;transform:none;transition:opacity .7s ease calc(var(--i) * 16ms + 560ms),transform .9s cubic-bezier(.22,1,.36,1) calc(var(--i) * 16ms + 560ms)}
html.rvx .rvx-in .rnn>span{transform:none;transition:transform .8s cubic-bezier(.22,1,.36,1) calc(var(--i) * 70ms)}
html.rvx .rvx-in .rnt{opacity:1;letter-spacing:inherit;transition:opacity .9s ease .2s,letter-spacing 1.2s cubic-bezier(.22,1,.36,1) .1s}

@media (prefers-reduced-motion:reduce){
  html.rvx .rtw>span,html.rvx .rpw,html.rvx .rnn>span,html.rvx .rnt{transform:none!important;opacity:1!important;color:inherit!important;letter-spacing:inherit!important;transition:none!important}
}
