/* Core PHP conversion safeguards. Preserve the original HEAL colors and visual design. */
html,body{max-width:100%;overflow-x:hidden;}
*,*:before,*:after{box-sizing:border-box;}
img,video,iframe{max-width:100%;}
.elementor-widget-image img{max-width:100%;height:auto;}
.elementor-section,.elementor-container,.elementor-column,.elementor-widget-wrap,.e-con,.e-con-inner{min-width:0;}

/* Elementor animations are hidden until WordPress JS initialises them. In the Core PHP
   build they must remain readable even if an optional upstream script is unavailable. */
.heal-js-fallback .elementor-invisible,
.elementor-invisible.heal-force-visible{
  visibility:visible!important;
  opacity:1!important;
  transform:none!important;
  animation:none!important;
}

/* Preserve carousel/gallery data when Swiper/Elementor JS is not available. These rules
   only activate in fallback mode and do not override the original live carousel. */
.heal-js-fallback .swiper:not(.swiper-initialized){overflow:visible!important;}
.heal-js-fallback .swiper:not(.swiper-initialized) .swiper-wrapper{
  transform:none!important;
  display:grid!important;
  grid-template-columns:repeat(auto-fit,minmax(min(240px,100%),1fr));
  gap:18px;
  height:auto!important;
}
.heal-js-fallback .swiper:not(.swiper-initialized) .swiper-slide{
  width:auto!important;
  height:auto!important;
  margin:0!important;
  opacity:1!important;
  visibility:visible!important;
  transform:none!important;
}
.heal-js-fallback .swiper:not(.swiper-initialized) .swiper-button-prev,
.heal-js-fallback .swiper:not(.swiper-initialized) .swiper-button-next,
.heal-js-fallback .swiper:not(.swiper-initialized) .swiper-pagination{display:none!important;}

/* Keep Elementor columns aligned when page-specific WordPress CSS is temporarily
   unreachable. Existing Elementor/page CSS still takes priority wherever available. */
.heal-js-fallback .elementor-section.elementor-section-boxed>.elementor-container{
  width:100%;max-width:1200px;margin-left:auto;margin-right:auto;
}
.heal-js-fallback .elementor-container{width:100%;}
.heal-js-fallback .elementor-column{display:flex;position:relative;}
.heal-js-fallback .elementor-widget-wrap{display:flex;position:relative;width:100%;flex-wrap:wrap;align-content:flex-start;}
.heal-js-fallback .elementor-widget{max-width:100%;}
.heal-js-fallback .elementor-widget:not(:last-child){margin-bottom:20px;}

/* Remote original-image failures should never collapse the surrounding layout. */
img.heal-media-unavailable{min-height:120px;object-fit:contain;}

@media(max-width:1024px){
  .heal-js-fallback .elementor-container{flex-wrap:wrap;}
}
@media(max-width:767px){
  .elementor iframe{max-width:100%;}
  .heal-js-fallback .elementor-column{width:100%!important;}
  .heal-js-fallback .elementor-section.elementor-section-boxed>.elementor-container{max-width:100%;}
  .heal-js-fallback .swiper:not(.swiper-initialized) .swiper-wrapper{grid-template-columns:1fr;}
}

/* Homepage "Our Posts" regression fix.
   The Plus Addons sets every .animate-general block to opacity:0 until its
   WordPress waypoint/Velocity animation runs. In the Core PHP build that
   initializer can fail, leaving the post cards present but fully transparent.
   Limit the fallback to this one post-list wrapper so layout, colors and other
   animations remain unchanged. */
#pt-plus-blog-post-list.animate-general{
  opacity:1!important;
  visibility:visible!important;
}

/* Two-page Elementor visibility fallback.
   These two downloaded pages can retain runtime opacity/visibility states when the
   original WordPress animation initialiser is unavailable. Only elements explicitly
   marked by core-parity.js inside the page content roots are affected. */
.elementor-3656 .heal-page-force-visible,
.elementor-3676 .heal-page-force-visible{
  opacity:1!important;
  visibility:visible!important;
}
