/* Reveal Elementor sections that normally wait for the Elementor JS to remove
   `.elementor-invisible`. Without the WP/Elementor runtime, the JS never fires
   and the entire page stays blank. */
.elementor-invisible {
  visibility: visible !important;
  opacity: 1 !important;
}

/* animate.css entrance animations start at opacity:0 and rely on JS (WOW.js)
   to add the visible class. Force them visible and skip the animation. */
.animated,
.fadeIn, .fadeInUp, .fadeInDown, .fadeInLeft, .fadeInRight,
.bounceIn, .bounceInUp, .bounceInDown, .bounceInLeft, .bounceInRight,
.zoomIn, .slideInUp, .slideInDown, .slideInLeft, .slideInRight,
.wow {
  opacity: 1 !important;
  visibility: visible !important;
  animation-name: none !important;
  animation: none !important;
}

/* Slick carousels render as inline grid until JS initializes (which it won't,
   for now). Keeps the testimonials and industries items visible. */
.slick-slider:not(.slick-initialized) {
  display: block !important;
}
.slick-slider:not(.slick-initialized) .slick-list,
.slick-slider:not(.slick-initialized) .slick-track {
  display: flex !important;
  flex-wrap: wrap !important;
  transform: none !important;
  width: 100% !important;
  gap: 16px;
}
.slick-slider:not(.slick-initialized) .slick-slide {
  display: block !important;
  width: calc(33.333% - 16px) !important;
  float: none !important;
}

/* Owl carousel fallback */
.owl-carousel:not(.owl-loaded) .owl-stage-outer,
.owl-carousel:not(.owl-loaded) .owl-stage {
  display: flex !important;
  flex-wrap: wrap !important;
  gap: 16px;
}
.owl-carousel:not(.owl-loaded) .owl-item {
  flex: 0 0 calc(33.333% - 16px) !important;
}

/* The WP theme adds a fixed preloader overlay that fades out via JS on load.
   Hide it so it doesn't cover the page if any markup includes it. */
#preloader, .preloader, .loader-wrap, .ctn-preloader {
  display: none !important;
}
