/* Blur-focus scroll reveal for headings — opt in with class "rt".
   Words start blurred, faint and slightly low, then sharpen and settle
   with a per-word stagger as the heading scrolls into view. Pure CSS
   transitions (works without GSAP); reveal-text.js splits + observes.
   No overflow clip, so descenders are safe. */

.rt-w {
  display: inline-block;
  white-space: pre;   /* keeps the trailing space inside each word span */
  transition: opacity 0.8s cubic-bezier(0.22, 1, 0.36, 1),
              filter 0.8s cubic-bezier(0.22, 1, 0.36, 1),
              transform 0.9s cubic-bezier(0.19, 1, 0.22, 1);
}
/* hidden state applies only once JS has prepared the element (no FOUC) */
.rt-ready .rt-w {
  opacity: 0;
  filter: blur(12px);
  transform: translateY(0.3em);
  will-change: opacity, filter, transform;
}
.rt-ready.rt-in .rt-w {
  opacity: 1;
  filter: blur(0);
  transform: none;
}

@media (prefers-reduced-motion: reduce) {
  .rt-ready .rt-w { opacity: 1 !important; filter: none !important; transform: none !important; transition: none; }
}
