.hero {
  z-index: 1;
}

.hp-testimonials .glob-bg {
  background-position: center;
}
/* =============================================================================================
 * CRRE Featured Properties — ported from the parent (Group C item 3a, 2026-08-01).
 *
 * WHY THIS EXISTS
 * The 3a rebuild renames the two Splide ROOT classes so the parent's properties() mounter
 * self-gates out (assets/js/scripts.js:209) without editing any parent file:
 *     .hp-property-images  ->  .crre-fp-images
 *     .fp-content-slides   ->  .crre-fp-content-slides
 * Renaming a root orphans every parent CSS rule that selects through it. Exactly FIVE rules in
 * the parent's compiled homepage.css did so — all of them via .hp-property-images. They are
 * re-homed here against the new root.
 *
 * /!\ .fp-content-slides needed NO port: no parent selector referenced it. The content track's
 * styling hangs off .fp-content / .fp-content-slide / .fp-pagination / .fp-prev / .fp-next, all
 * of which the rebuild kept unchanged, so those 15 rules still apply untouched. The ancestor
 * chain (.fp-qc-wrap > .hp-featured-properties) also survives — it is section/widget wrapper
 * markup outside the widget body, which the bridge does not replace.
 *
 * Cascade: this file is enqueued as `aios-mobile-first-homepage-child` at priority 999 and loads
 * AFTER both parent homepage sheets (`homepage-style`, `aios-starter-theme-home`), so identical
 * specificity resolves in the child's favour. Verified in the rendered <head>, not assumed.
 * ============================================================================================= */

.fp-qc-wrap .hp-featured-properties .crre-fp-images {
	width: 55.3%;
}

.fp-qc-wrap .hp-featured-properties .crre-fp-images .fp-image a {
	display: block;
	position: relative;
}

/* /!\ CANVAS -> IMG CONVERSION. The parent held the image box open with an empty
 * <canvas width="685" height="606"> whose intrinsic ratio reserved the space, then stacked the
 * real <img> on top with position:absolute/inset-0. That is a pre-`aspect-ratio` hack, and it
 * cost an empty non-semantic element per slide plus an <img> that auditors and crawlers saw as
 * decorative.
 *
 * The rebuild drops the canvas and gives the <img> the ratio directly. The two parent rules this
 * replaces were:
 *     ... .hp-property-images .fp-image a canvas { display:block; width:100% }
 *     ... .hp-property-images .fp-image a img    { position:absolute; top:0; left:0;
 *                                                  width:100%; height:100%;
 *                                                  object-fit:cover; object-position:center center }
 * Same painted box, same cover crop — but the alt text becomes real and the DOM loses 8 elements.
 * The intrinsic 685x606 also travels on the <img> width/height attributes, so the space is
 * reserved before CSS applies (no layout shift). */
.fp-qc-wrap .hp-featured-properties .crre-fp-images .fp-image a img {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 685 / 606;
	object-fit: cover;
	object-position: center center;
}

@media only screen and (max-width: 991px) {
	.fp-qc-wrap .hp-featured-properties .crre-fp-images {
		width: 100%;
	}
}

/* =============================================================================================
 * CRRE Hero video — replaces the AIOS-slider instance (Phase 2, 2026-08-02).
 *
 * WHY THIS EXISTS
 * Exactly TWO of the parent's thirteen #hero rules died with the slider instance, and they were
 * the two that gave the hero its height. Both hardcoded the instance ID *and* the plugin's
 * <canvas>, so a bare <video> matches neither:
 *     #hero .slideshow #aios-slider-hp-slideshow-auto-generated .aios-slider-splide
 *           .aios-slider-img canvas,
 *     #hero .slideshow #aios-slider-hp-slideshow-auto-generated .aios-slider-splide
 *           .aios-slider-custom-video canvas   { min-height: 650px }
 * ...and the same selector at max-width:991px setting min-height:unset.
 *
 * Everything else the parent supplies still applies untouched — #hero{z-index:100},
 * #hero,#hero .slideshow{position:relative}, and the :before/:after gradient overlays all select
 * through markup home.php still emits.
 *
 * /!\ CANVAS -> ASPECT-RATIO CONVERSION, same as the Featured Properties port above (:40-54).
 * The plugin held the box open with an empty <canvas width="1600" height="740"> at width:100%,
 * whose intrinsic ratio reserved the space, then stacked the real <video> on top with
 * position:absolute/inset-0. The rebuild drops the canvas and gives the <video> the ratio
 * directly. Same painted box, same cover crop, one fewer non-semantic element. The intrinsic
 * 1600x740 also travels on the <video> width/height attributes, so the space is reserved before
 * CSS applies (no layout shift).
 *
 * The 650px floor and the 991px release are carried over verbatim from the parent rules above —
 * this is a re-home, not a redesign.
 *
 * Cascade: this file is enqueued as `aios-mobile-first-homepage-child` at priority 999 and loads
 * AFTER both parent homepage sheets, so identical specificity resolves in the child's favour.
 * ============================================================================================= */

#hero .slideshow video {
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 1600 / 740;
	object-fit: cover;
	object-position: center center;
	min-height: 650px;
}

@media only screen and (max-width: 991px) {
	#hero .slideshow video {
		min-height: unset;
	}
}

/* =============================================================================================
 * CRRE Latest News — canvas to aspect-ratio conversion (Phase 3, 2026-08-02).
 *
 * WHY THIS EXISTS
 * The AIOS category widget held each card's image box open with an empty
 * <canvas width="443" height="243"> at width:100%, whose intrinsic ratio reserved the space, and
 * stacked the real <img> on top with position:absolute/inset-0. The child rebuild
 * (inc/crre-latest-news.php) drops the canvas and gives the <img> the ratio directly — the same
 * conversion already applied to Featured Properties above (:40-54), for the same reasons.
 *
 * The two parent rules this replaces are:
 *     #hp-latet-news .blog-list .blog-img canvas { display:block; width:100% }
 *     #hp-latet-news .blog-list .blog-img img    { position:absolute; top:0; left:0;
 *                                                  width:100%; height:100%;
 *                                                  object-fit:cover; object-position:center center }
 * Same painted box, same cover crop, one fewer non-semantic element per card. The parent's canvas
 * rule is now inert (no canvas is emitted) and is left untouched — no parent edit.
 *
 * /!\ position:static is REQUIRED, not decorative. The parent rule above absolutely positions the
 * <img> against .blog-img, which was only correct while the canvas supplied the box. With the
 * canvas gone, an absolutely-positioned <img> has nothing holding the parent open and the card
 * collapses to zero height. This rule must therefore beat it on both position and sizing.
 *
 * /!\ The misspelled #hp-latet-news is intentional — it is the parent's hook for this whole
 * section (25 rules). See home.php and inc/crre-latest-news.php.
 *
 * Cascade: this file is enqueued as `aios-mobile-first-homepage-child` at priority 999 and loads
 * AFTER both parent homepage sheets, so equal specificity resolves in the child's favour.
 * ============================================================================================= */

#hp-latet-news .blog-list .blog-img img {
	position: static;
	display: block;
	width: 100%;
	height: auto;
	aspect-ratio: 443 / 243;
	object-fit: cover;
	object-position: center center;
}
