/* A quiet reading cue; reveals use temporary animations, never hidden content. */
.reading-progress { display: none; position: fixed; inset: 0 0 auto; height: 2px; z-index: 90; pointer-events: none; }
.reading-progress span { display: block; height: 100%; background: #a23829; transform: scaleX(0); transform-origin: left; }
.scroll-motion-on .reading-progress { display: block; }
/* The shared observer owns entrances, including charts redrawn by filters. */
.scroll-motion-on svg.vz, .scroll-motion-on .tm, .scroll-motion-on .icons,
.scroll-motion-on .mini-bar, .scroll-motion-on .mini-dots, .scroll-motion-on .hm-row { animation: none; }
@media (prefers-reduced-motion: reduce) {
  .reading-progress { display: none !important; }
}
@media print {
  .reading-progress { display: none !important; }
  .scroll-reveal { transform: none !important; opacity: 1 !important; clip-path: none !important; }
}
