/* Optional shared primitives; markup contract is in scroll.js. */
[data-scroll-act] { --p: 1; }
[data-scroll-pinned] {
  display: flow-root;
  min-height: calc(var(--scroll-stage-height) + var(--scroll-distance));
}
[data-scroll-pinned] > [data-scroll-stage] {
  position: sticky;
  top: var(--scroll-top, 0px);
}
[data-scroll-reveal][data-scroll-ready][data-scroll-entered] {
  transition: opacity 400ms ease;
}
[data-scroll-reveal][data-scroll-ready]:not([data-scroll-entered]) {
  opacity: 0;
}
.scroll-debug {
  position: fixed;
  inset: auto 8px 8px auto;
  z-index: 100;
  max-width: calc(100vw - 16px);
  max-height: 40vh;
  overflow: auto;
  pointer-events: none;
  margin: 0;
  padding: 8px;
  background: #071827;
  color: #fff;
  font: 12px/1.5 monospace;
}
@media (prefers-reduced-motion: reduce), print {
  [data-scroll-act] { --p: 1 !important; }
  [data-scroll-pinned] { min-height: 0; }
  [data-scroll-pinned] > [data-scroll-stage] { position: static; }
  [data-scroll-act][data-scroll-reveal][data-scroll-ready] {
    opacity: 1;
    transition: none;
  }
  .scroll-debug { display: none; }
}
