/* Site text materialize — ONE ARRIVAL MOMENT, shared with the mark's tagline.
   JB: "the rest of the text of the site should at the same time as purpose in
   proof out." So there is no per-section trigger and no scroll trigger: the mark
   announces the frame its tagline begins and the whole page answers on that
   frame, with the same 2.4 s raised-cosine feel.

   THE ONE RULE THAT MATTERS: THIS FAILS VISIBLE.
   Text is visible by default. The hidden state exists ONLY under html.js-reveal,
   a class the script adds after it has proven it is running. With JS disabled, a
   thrown script, a blocked script file, or WebGL absent, every word is on the
   page. Under a single shared reveal moment this matters MORE, not less: one
   failure would otherwise hide the entire site's text, which is a total loss on a
   public page and is not a risk worth a fade. */

html.js-reveal .reveal-pending{
  opacity:0;
  transform:translateY(14px);
}
html.js-reveal .reveal-in{
  opacity:1;
  transform:none;
  /* cubic-bezier(.37,0,.63,1) is ease-in-out-sine — the CSS equivalent of the
     raised cosine 0.5-0.5*cos(pi*p) the mark uses for its tagline, at the same
     TAG_DUR of 2.4 s. Same curve, same duration, same moment. */
  transition:opacity 2.4s cubic-bezier(.37,0,.63,1),
             transform 2.4s cubic-bezier(.37,0,.63,1);
}
@media (prefers-reduced-motion:reduce){
  html.js-reveal .reveal-pending{opacity:1;transform:none}
  html.js-reveal .reveal-in{transition:none}
}
