/* One quiet entrance per reading unit, with no change to document layout. */
.scroll-reveal {
  transition: opacity var(--reveal-duration, .45s) cubic-bezier(.22,.61,.36,1),
    filter var(--reveal-duration, .45s) cubic-bezier(.22,.61,.36,1),
    translate var(--reveal-duration, .45s) cubic-bezier(.22,.61,.36,1);
  transition-delay: var(--reveal-delay, 0ms);
}
.scroll-reveal:not(.scroll-revealed) {
  opacity: .25;
  filter: none;
  translate: 0 6px;
}
.scroll-reveal.scroll-revealed { opacity: 1; filter: none; translate: 0 0; }
.scroll-reveal:focus-within { opacity: 1; filter: none; translate: 0 0; transition: none; }
@media (prefers-reduced-motion: reduce) {
  .scroll-reveal, .scroll-reveal:not(.scroll-revealed) {
    opacity: 1; filter: none; translate: none; transition: none;
  }
}
@media print {
  .scroll-reveal, .scroll-reveal:not(.scroll-revealed) {
    opacity: 1; filter: none; translate: none; transition: none;
  }
}

/* Slower first impression, faster reading; blur only on small hero text. */
.hero .scroll-reveal { --reveal-duration: 1.05s; }
.hero .scroll-reveal:not(.scroll-revealed) { opacity:.08; filter:blur(3px); translate:0 10px; }
@media(prefers-reduced-motion:reduce), print { .hero .scroll-reveal:not(.scroll-revealed) { opacity:1; filter:none; translate:none; } }
