/* SeansMatch 2.9.20.300: Layout stability (scoped, deliberately non-invasive).
   No typography, button, hover, carousel scrolling, or gameplay logic changes. */

/* Async cinema data: keep room for one card row before the API returns.
   Empty/loader only: when content (or an error/empty state) arrives the space is released. */
.cmh-wrap [data-cmh-movies]:empty,
.cmh-wrap [data-cmh-movies]:has(> .cmh-empty.cmh-loading) {
    min-height: 520px;
}
@media (max-width: 900px) {
    .cmh-wrap [data-cmh-movies]:empty,
    .cmh-wrap [data-cmh-movies]:has(> .cmh-empty.cmh-loading) { min-height: 480px; }
}
@media (max-width: 560px) {
    .cmh-wrap [data-cmh-movies]:empty,
    .cmh-wrap [data-cmh-movies]:has(> .cmh-empty.cmh-loading) { min-height: min(129vw, 540px); }
}

/* Known-poster slots retain their image geometry before lazy loading finishes. */
.cmh-card--poster-full .cmh-poster-img {
    display: block;
    aspect-ratio: 2 / 3;
}
.cmh-home-pulse-card img,
.cmh-he-photo img,
.cmh-mgg-card img,
.cmh-nf-feed-card img { display: block; }

/* Keep layout-grid items shrinkable: never disable scrolling inside carousels. */
.cmh-wrap [data-cmh-movies],
.cmh-wrap .cmh-home-searchdeck,
.cmh-wrap .cmh-home-searchdeck__row,
.cmh-wrap .cmh-home-filters,
.cmh-wrap .cmh-home-pulse,
.cmh-wrap .cmh-shorts,
.cmh-wrap .cmh-he-section,
.cmh-wrap .cmh-mgg-home { min-width: 0; box-sizing: border-box; }

/* Restrained mobile containment, no clipping or hidden scrollbars on rails. */
@media (max-width: 760px) {
    html body.cmh-home-wp-page .cmh-home-searchdeck,
    html body.cmh-home-wp-page .cmh-home-flow,
    html body.cmh-home-wp-page .cmh-home-filters { max-width: 100%; }
    html body.cmh-home-wp-page .cmh-home-filters > *,
    html body.cmh-home-wp-page .cmh-home-searchdeck__row > * { min-width: 0; }
}
