/* Sticky header states (.ctws-site-header) live in site-chrome.css, next to
   the rest of the header's own styling. */

/* Scroll-reveal utility classes — add these under Advanced > CSS Classes on any
   Elementor Free widget/section/column. Initial (pre-animation) states only;
   scroll-reveal.js animates them into their natural position/opacity. */
.reveal-up,
.reveal-left,
.reveal-right,
.reveal-stagger > * {
  opacity: 0;
}
.reveal-up {
  transform: translateY(36px);
}
.reveal-left {
  transform: translateX(-36px);
}
.reveal-right {
  transform: translateX(36px);
}
.reveal-stagger > * {
  transform: translateY(24px);
}

.parallax {
  will-change: transform;
}

@media (prefers-reduced-motion: reduce) {
  .reveal-up,
  .reveal-left,
  .reveal-right,
  .reveal-stagger > * {
    opacity: 1;
    transform: none;
  }
}

/* Fail-safe: if GSAP/ScrollTrigger never loads (blocked CDN, offline, script
   error), scroll-reveal.js adds this class so content is never stuck hidden. */
.no-gsap-reveal .reveal-up,
.no-gsap-reveal .reveal-left,
.no-gsap-reveal .reveal-right,
.no-gsap-reveal .reveal-stagger > * {
  opacity: 1 !important;
  transform: none !important;
}
