/* Scroll-linked reveals (driven by js/lib/reveal.js through --p, 0 → 1).
   Uses the individual translate/scale properties so it never fights a
   component's own transform (magnetic buttons, hover lifts). */
[data-rv] {
  opacity: var(--p, 1);
  translate: 0 calc((1 - var(--p, 1)) * 44px);
  filter: blur(calc((1 - var(--p, 1)) * 5px));
  will-change: opacity, translate;
}
[data-rv="pop"] {
  scale: calc(0.9 + 0.1 * var(--p, 1));
  translate: 0 calc((1 - var(--p, 1)) * 36px);
}
[data-rv="wipe"] {
  opacity: 1;
  filter: none;
  translate: 0 calc((1 - var(--p, 1)) * 0.3em);
  clip-path: inset(-10% -10% calc((1 - var(--p, 1)) * 110%) -10%);
}
@media print { [data-rv] { --p: 1 !important; } }
@media (prefers-reduced-motion: reduce) { [data-rv] { --p: 1 !important; } }
