/* Scroll-reveal — defined once, enqueued globally.
   Hidden state only applies when JS is active (html.gmppf-js), so content is
   never permanently hidden if JS fails or a block is taller than the viewport. */
.gmppf-js .gmppf-fade-up { opacity: 0; transform: translateY(24px); transition: opacity .6s ease, transform .6s ease; }
.gmppf-fade-up.is-visible { opacity: 1; transform: none; }

.gmppf-js .gmppf-fade-up-stagger .gmppf-fade-up-item {
  opacity: 0; transform: translateY(24px);
  transition: opacity .6s ease, transform .6s ease;
}
.gmppf-fade-up-stagger.is-visible .gmppf-fade-up-item { opacity: 1; transform: none; }
.gmppf-fade-up-stagger.is-visible .gmppf-fade-up-item:nth-child(2) { transition-delay: .1s; }
.gmppf-fade-up-stagger.is-visible .gmppf-fade-up-item:nth-child(3) { transition-delay: .2s; }
.gmppf-fade-up-stagger.is-visible .gmppf-fade-up-item:nth-child(4) { transition-delay: .3s; }

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