/* Base hidden states for JS/GSAP-driven reveals (progressive enhancement:
   if JS fails to load, .js-ready never gets added and these stay visible) */
.reveal-up, .reveal-fade, .reveal-scale {
  opacity: 1;
}
.js-ready .reveal-up { opacity: 0; transform: translateY(40px); }
.js-ready .reveal-fade { opacity: 0; }
.js-ready .reveal-scale { opacity: 0; transform: scale(0.92); }

.no-scroll { overflow: hidden !important; height: 100dvh; }

@keyframes whatsappPulse {
  0% { transform: scale(1); opacity: 0.6; }
  100% { transform: scale(1.6); opacity: 0; }
}
.pulse-ring.is-pulsing { animation: whatsappPulse 2.2s ease-out infinite; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    scroll-behavior: auto !important;
  }
  .js-ready .reveal-up, .js-ready .reveal-fade, .js-ready .reveal-scale {
    opacity: 1 !important; transform: none !important;
  }
  #loader { display: none !important; }
  .pulse-ring { display: none !important; }
}
