/* Scroll-reveal — subtle, calm. Defined once, enqueued globally.
   .pxy-fade-up          : the wrapper fades up as a whole.
   .pxy-fade-up-stagger  : children (.pxy-fade-up-item) stagger in.
   The .is-visible class is added by header.js on intersection.

   Progressive enhancement: the initial hidden state is gated on `.pxy-js`
   (added to <html> by an inline head script). Without JS — or before it runs —
   content is fully visible, so a no-JS/JS-error visitor never sees a blank page. */

.pxy-js .pxy-fade-up {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .7s ease, transform .7s cubic-bezier(.2, .7, .2, 1);
  will-change: opacity, transform;
}
.pxy-js .pxy-fade-up.is-visible {
  opacity: 1;
  transform: none;
}

.pxy-js .pxy-fade-up-stagger .pxy-fade-up-item {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .6s ease, transform .6s cubic-bezier(.2, .7, .2, 1);
}
.pxy-js .pxy-fade-up-stagger.is-visible .pxy-fade-up-item { opacity: 1; transform: none; }
.pxy-fade-up-stagger.is-visible .pxy-fade-up-item:nth-child(1) { transition-delay: .05s; }
.pxy-fade-up-stagger.is-visible .pxy-fade-up-item:nth-child(2) { transition-delay: .13s; }
.pxy-fade-up-stagger.is-visible .pxy-fade-up-item:nth-child(3) { transition-delay: .21s; }
.pxy-fade-up-stagger.is-visible .pxy-fade-up-item:nth-child(4) { transition-delay: .29s; }
.pxy-fade-up-stagger.is-visible .pxy-fade-up-item:nth-child(5) { transition-delay: .37s; }
.pxy-fade-up-stagger.is-visible .pxy-fade-up-item:nth-child(6) { transition-delay: .45s; }

@media (prefers-reduced-motion: reduce) {
  .pxy-js .pxy-fade-up,
  .pxy-js .pxy-fade-up-stagger .pxy-fade-up-item {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
}
