/* ============================================================
   SCROLL REVEAL
   Each block arrives as the page reaches it: a short rise and a fade, once.
   The hidden state hangs off .reveal-ready, a class Assets/Scripts/reveal.js
   puts on <html> — so with no JavaScript, or with reduced motion (where the
   script returns before setting it), every block renders as it always did.
   Nothing here is ever the only thing making content visible.
   ============================================================ */
.reveal-ready .reveal {
  opacity: 0;
  /* Short. The page should feel like it is settling, not assembling. */
  transform: translateY(16px);
  transition: opacity 0.62s cubic-bezier(0.22, 1, 0.36, 1),
    transform 0.62s cubic-bezier(0.22, 1, 0.36, 1);
  will-change: opacity, transform;
}

.reveal-ready .reveal.is-in {
  opacity: 1;
  transform: none;
  /* Dropped once it has arrived: a page of promoted layers costs memory for
     an animation that will not run again. */
  will-change: auto;
}

/* A belt to the script's braces: if the class is ever set in a reduced-motion
   session, the blocks still sit still. */
@media (prefers-reduced-motion: reduce) {
  .reveal-ready .reveal,
  .reveal-ready .reveal.is-in {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
