/* Curtain reveal (driven by /reveal.js through --rv: 0 = veiled, 1 = shown). A soft wipe from the top lets the text appear as it is scrolled in,
   while the block sways sideways like a drape settling. Only elements the script marks with .rv are touched. */
.rv {
  --rv: 0;
  opacity: calc(var(--rv) * 1.5);
  -webkit-mask-image: linear-gradient(180deg, #000 calc(var(--rv) * 150% - 50%), transparent calc(var(--rv) * 150%));
  mask-image: linear-gradient(180deg, #000 calc(var(--rv) * 150% - 50%), transparent calc(var(--rv) * 150%));
  transform: translateY(calc((1 - var(--rv)) * 22px));
  transform: translate3d(calc(sin(var(--rv) * 720deg) * (1 - var(--rv)) * 9px), calc((1 - var(--rv)) * 22px), 0) skewX(calc(sin(var(--rv) * 540deg) * (1 - var(--rv)) * 3.5deg));
  transform-origin: 50% 0;
  will-change: transform, opacity;
}
