/* =====================================================================
   Crown Mobile Home Sales — mobile-first overrides (2026-04-23)
   High-specificity last-in-cascade fixes for Divi + DSM carousel + CartFlows.
   Loaded as the final stylesheet so these rules win without !important abuse.
   ===================================================================== */

/* ---------- design tokens ---------- */
:root {
  --cmhs-bg: #ffffff;
  --cmhs-surface: #f7f8fa;
  --cmhs-text: #1a1f2b;
  --cmhs-muted: #4a5160;
  --cmhs-border: #e4e7ee;
  --cmhs-accent: #f2b705;       /* warm gold CTA (matches hero "get in touch" btn) */
  --cmhs-accent-ink: #1a1f2b;
  --cmhs-navy: #0e1524;         /* site hero navy */
  --cmhs-link: #c0392b;         /* red brand links */
  --cmhs-radius: 6px;
  --cmhs-pad: clamp(1rem, 4vw, 2rem);
  --cmhs-gap: clamp(0.75rem, 2vw, 1.25rem);
  --cmhs-max: 1180px;
}

/* ---------- prevent horizontal scroll globally ---------- */
html, body { overflow-x: hidden; max-width: 100%; }
*, *::before, *::after { box-sizing: border-box; }

/* ---------- baseline readable typography ---------- */
body, #et-boc, .et-boc, .et_pb_text_inner, .et_pb_module p, .et_pb_module li {
  font-size: 16px !important;
  line-height: 1.55;
  color: var(--cmhs-text);
  -webkit-text-size-adjust: 100%;
  text-rendering: optimizeLegibility;
}
p { margin: 0 0 0.9em; }
a { color: var(--cmhs-link); }

/* Divi default sets body font at 14px — bump everywhere below 980px */
@media (max-width: 980px) {
  body, .et_pb_text_inner, .et_pb_module p, .et_pb_module li,
  .et_pb_row, .et_pb_column, .et_pb_text,
  .entry-content, .entry-content p, .entry-content li,
  #main-content, #main-content p, #main-content li,
  .post-content, .post-content p,
  .entry-title, .entry-title a,
  .more-link {
    font-size: 16px !important;
  }
}

/* ---------- responsive images: kill fixed-width explosions ---------- */
img, picture, svg, video { max-width: 100%; height: auto; display: block; }
picture img { width: 100%; }

/* If Divi placeholder images fail, hide the ugly broken-image icon behind a grey box */
img[src=""], img:not([src]) { visibility: hidden; }

/* ---------- HEADER: logo + nav ---------- */
#main-header {
  position: sticky; top: 0; z-index: 999;
  background: #fff;
  box-shadow: 0 2px 8px rgba(0,0,0,.06);
  padding: 8px 0;
}
#main-header .container.et_menu_container {
  width: 100%;
  max-width: var(--cmhs-max);
  padding: 0 var(--cmhs-pad);
  display: flex; align-items: center; justify-content: space-between; gap: 1rem;
  position: relative;
}
#main-header .logo_container { position: relative; width: auto; max-width: 180px; flex: 0 0 auto; }
#main-header .logo_container a { display: block; }
#main-header #logo {
  max-height: 56px; width: auto; height: auto;
}

/* Top-menu horizontal on desktop */
#et-top-navigation { padding: 0; display: flex; align-items: center; gap: 1rem; }
#top-menu-nav { width: auto; }
#top-menu {
  display: flex; flex-wrap: wrap; gap: 0.25rem 1.25rem;
  margin: 0; padding: 0; list-style: none;
}
#top-menu li { padding: 0; list-style: none; }
#top-menu li a {
  display: inline-flex; align-items: center; min-height: 44px;
  padding: 10px 6px;
  color: var(--cmhs-text); font-weight: 600;
  text-decoration: none; font-size: 15px;
}
#top-menu li a:hover, #top-menu li.current-menu-item > a { color: var(--cmhs-link); }

/* MOBILE NAV — hamburger drawer (we ship our own so Divi's JS isn't required) */
.cmhs-burger {
  display: none;
  width: 44px; height: 44px; min-width: 44px; min-height: 44px;
  border: 0; background: transparent; cursor: pointer; padding: 0;
  align-items: center; justify-content: center;
  flex: 0 0 auto;
}
.cmhs-burger span { position: relative; display: block; width: 24px; height: 2px; background: var(--cmhs-text); }
.cmhs-burger span::before, .cmhs-burger span::after {
  content: ""; position: absolute; left: 0; width: 24px; height: 2px; background: var(--cmhs-text); transition: transform .2s;
}
.cmhs-burger span::before { top: -7px; }
.cmhs-burger span::after  { top:  7px; }
.cmhs-burger[aria-expanded="true"] span { background: transparent; }
.cmhs-burger[aria-expanded="true"] span::before { transform: translateY(7px) rotate(45deg); }
.cmhs-burger[aria-expanded="true"] span::after  { transform: translateY(-7px) rotate(-45deg); }

@media (max-width: 980px) {
  .cmhs-burger { display: inline-flex; }
  #et-top-navigation { position: static; }
  #top-menu-nav {
    position: absolute;
    top: 100%; left: 0; right: 0;
    background: #fff;
    box-shadow: 0 6px 14px rgba(0,0,0,.08);
    max-height: 0; overflow: hidden; transition: max-height .25s ease;
    border-top: 1px solid var(--cmhs-border);
  }
  #top-menu-nav.cmhs-open { max-height: 80vh; overflow-y: auto; }
  #top-menu { flex-direction: column; gap: 0; padding: 8px 0; }
  #top-menu li { border-bottom: 1px solid var(--cmhs-border); }
  #top-menu li:last-child { border-bottom: 0; }
  #top-menu li a {
    display: flex; width: 100%; min-height: 48px;
    padding: 14px var(--cmhs-pad);
    font-size: 16px;
  }
  #main-header .logo_container { max-width: 140px; }
  #main-header #logo { max-height: 48px; }
}

/* ---------- SECTIONS/ROWS: fluid + padded ---------- */
.et_pb_section { padding: clamp(30px, 6vw, 60px) 0; }
.et_pb_row {
  width: 100%; max-width: var(--cmhs-max);
  padding-left: var(--cmhs-pad); padding-right: var(--cmhs-pad);
  margin-left: auto; margin-right: auto;
}

/* On mobile, columns stack with gap */
@media (max-width: 980px) {
  .et_pb_column {
    width: 100% !important;
    margin-right: 0 !important;
    margin-bottom: var(--cmhs-gap);
  }
  .et_pb_row > .et_pb_column:last-child { margin-bottom: 0; }
}

/* ---------- HERO text ---------- */
.et_pb_text h1, .et_pb_text h2 {
  font-size: clamp(1.65rem, 5.2vw, 2.6rem);
  line-height: 1.2;
  margin: 0 0 0.5em;
}
.et_pb_text h3 { font-size: clamp(1.25rem, 3.4vw, 1.6rem); line-height: 1.25; }

/* ---------- BUTTONS: big touch targets ---------- */
.et_pb_button, a.et_pb_button, button, input[type="submit"], input[type="button"] {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 48px; min-width: 48px;
  padding: 12px 22px;
  font-size: 16px; line-height: 1.2; font-weight: 700;
  border-radius: var(--cmhs-radius);
  text-decoration: none;
  transition: transform .1s, box-shadow .15s;
}
.et_pb_button:hover, button:hover, input[type="submit"]:hover { transform: translateY(-1px); }

/* Extend min touch targets to post-archive listings on mobile */
@media (max-width: 980px) {
  .entry-title { margin: 0; }
  .entry-title a, h2.entry-title a, h3.entry-title a {
    display: block; padding: 10px 0; min-height: 44px;
    font-size: 18px !important; line-height: 1.3;
    text-decoration: none; color: var(--cmhs-text);
  }
  .entry-title a:hover { color: var(--cmhs-link); }
  .more-link, a.more-link {
    display: inline-flex; align-items: center; justify-content: center;
    min-height: 44px; padding: 10px 18px; margin-top: 8px;
    background: var(--cmhs-accent); color: var(--cmhs-accent-ink) !important;
    border-radius: var(--cmhs-radius); font-weight: 700; text-decoration: none;
  }
}

/* Archive post cards */
.et_pb_post, article.post, article.type-post, article.type-crown_homes {
  background: #fff;
  border: 1px solid var(--cmhs-border);
  border-radius: var(--cmhs-radius);
  padding: 16px;
  margin-bottom: var(--cmhs-gap);
}
.et_pb_post .entry-featured-image-url, article .entry-featured-image-url,
article img.attachment-post-thumbnail, article img.wp-post-image {
  display: block; width: 100%; height: auto; margin-bottom: 12px; border-radius: var(--cmhs-radius);
}
.post-content, .et_pb_post .post-content { margin-top: 8px; }

/* ---------- SEARCH FILTER (homepage / new-homes) ---------- */
.bc-search-filter .et_pb_code_inner,
form.bc-search-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
  align-items: end;
  background: var(--cmhs-surface);
  border: 1px solid var(--cmhs-border);
  border-radius: var(--cmhs-radius);
  padding: 16px;
  list-style: none;
}
.bc-search-filter ul, .bc-search-filter ol {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 12px;
  list-style: none;
  margin: 0; padding: 0;
}
.bc-search-filter li { list-style: none; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.bc-search-filter label, .bc-search-filter b, .bc-search-filter strong, .bc-search-filter h4 {
  font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--cmhs-muted);
  margin: 0;
}
.bc-search-filter select, .bc-search-filter input[type="text"], .bc-search-filter input[type="number"] {
  width: 100%; min-height: 44px;
  padding: 10px 12px;
  font-size: 16px;
  background: #fff; border: 1px solid var(--cmhs-border); border-radius: var(--cmhs-radius);
  color: var(--cmhs-text);
  appearance: none; -webkit-appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%234a5160' d='M6 8 0 0h12z'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center;
  padding-right: 36px;
}
.bc-search-filter input[type="submit"], .bc-search-filter button[type="submit"] {
  grid-column: 1 / -1;
  background: var(--cmhs-accent); color: var(--cmhs-accent-ink); border: 0; font-weight: 800;
}
@media (max-width: 600px) {
  .bc-search-filter .et_pb_code_inner, .bc-search-filter ul { grid-template-columns: 1fr; }
}

/* ---------- DSM IMAGE CAROUSEL (inventory page, home hero) ---------- */
.dsm_image_carousel, .dsm_image_carousel_container, .dsm_image_carousel_inner,
.dsm_image_carousel .carousel-track, .dsm_image_carousel .carousel-wrapper {
  width: 100% !important; max-width: 100% !important;
  overflow: hidden;
}
/* Fallback static grid if carousel JS fails / for readability */
.dsm_image_carousel .carousel-list,
.dsm_image_carousel ul {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)) !important;
  gap: var(--cmhs-gap) !important;
  transform: none !important;
  list-style: none;
  margin: 0 !important;
  padding: 0 !important;
  width: 100% !important;
  left: auto !important;
  position: relative !important;
}
.dsm_image_carousel .carousel-slide {
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 !important;
  list-style: none;
  background: #fff;
  border: 1px solid var(--cmhs-border);
  border-radius: var(--cmhs-radius);
  overflow: hidden;
  position: relative !important;
  left: auto !important;
  transform: none !important;
  flex: 0 0 auto;
}
.dsm_image_carousel .carousel-slide .x-el-picture,
.dsm_image_carousel .carousel-slide picture,
.dsm_image_carousel .carousel-slide .x-el-img,
.dsm_image_carousel .carousel-slide img {
  width: 100% !important; height: auto !important; max-width: 100% !important;
  display: block;
  aspect-ratio: 4/3;
  object-fit: cover;
}
/* Hide arrow/nav buttons that break on static (original JS doesn't run cleanly) */
.dsm_image_carousel .carousel-arrow, .dsm_image_carousel .owl-nav, .dsm_image_carousel .carousel-pagination,
.dsm_image_carousel .carousel-dots { display: none !important; }

/* On static mirror, DSM carousel renders 200+ empty slides. Hide ghosts via JS-set .cmhs-empty class + :empty selector */
.dsm_image_carousel .carousel-slide:empty,
.dsm_image_carousel .carousel-slide.cmhs-empty,
.dsm_image_carousel .carousel-slide-loading { display: none !important; }
/* If ALL slides are empty (ghost carousel), collapse the container so it stops taking 600px height */
.dsm_image_carousel.cmhs-ghost { display: none !important; }

/* Home hero image-carousel (3 stacked photos on desktop) — keep nice on mobile */
.et_pb_section_0 .dsm_image_carousel .carousel-list { grid-template-columns: 1fr; gap: 10px; }
@media (min-width: 600px) {
  .et_pb_section_0 .dsm_image_carousel .carousel-list { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
}

/* ---------- INVENTORY list: turn the dumb long <ul> of home names into cards ---------- */
.inventory-list, .et_pb_text_inner ul.home-list,
.post-type-archive-crown_homes .type-crown_homes {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: var(--cmhs-gap);
  list-style: none;
  padding: 0; margin: 0;
}
.inventory-list li, .type-crown_homes {
  list-style: none; padding: 0;
  background: #fff; border: 1px solid var(--cmhs-border); border-radius: var(--cmhs-radius);
}
.inventory-list li a, .type-crown_homes a {
  display: block; padding: 14px; color: var(--cmhs-text); font-weight: 600; text-decoration: none;
  min-height: 44px;
}
.inventory-list li a:hover { color: var(--cmhs-link); }

/* ---------- INVENTORY listings (CartFlows "x-el" sections) ---------- */
/* Each listing is a <section class="x-el-section"> — give it card style and shrink vertical space */
.page-inner .widget-gallery section.x-el-section,
.page-inner .x-el-section {
  background: #fff !important;
  border: 1px solid var(--cmhs-border);
  border-radius: var(--cmhs-radius);
  padding: clamp(14px, 3vw, 22px) !important;
  margin: 0 0 var(--cmhs-gap) !important;
  box-shadow: 0 1px 3px rgba(0,0,0,.04);
  height: auto !important;
  min-height: 0 !important;
}
/* Kill ALL explicit heights inside gallery sections — the ghost carousels reserve 640px each */
.widget-gallery .x-el-section div,
.widget-gallery .x-el-section section {
  min-height: 0 !important;
  height: auto !important;
  max-height: none !important;
  flex-basis: auto !important;
}
/* Nuke the GoDaddy "carousel" (Website Builder v4) ghost carousel that reserves 600px via inline style */
.widget-gallery .carousel,
.widget-gallery .carousel-container-inner,
.widget-gallery .carousel-viewport,
.widget-gallery .carousel-track,
.widget-gallery .carousel-slide,
.x-el-section .carousel,
.x-el-section .carousel-viewport,
.x-el-section .carousel-slide {
  height: auto !important;
  min-height: 0 !important;
  max-height: none !important;
  width: 100% !important;
  min-width: 0 !important;
  overflow: visible !important;
  opacity: 1 !important;
  transform: none !important;
  margin: 0 !important;
  padding: 0 !important;
}
.widget-gallery .carousel:not(:has(img[src])),
.x-el-section .carousel:not(:has(img[src])) {
  display: none !important;
}
/* Hide the gallery-image wrapper entirely when it would be empty (no rendered img content) */
.widget-gallery .dsm_image_carousel.cmhs-ghost,
.widget-gallery .x-el-section .dsm_image_carousel:not(:has(img[src])) {
  display: none !important;
}
/* Reduce huge h2 text on inventory titles — they're 32px but become 40px on certain slots */
.widget-gallery .x-el-h2 {
  font-size: clamp(1.15rem, 3.6vw, 1.5rem) !important;
  line-height: 1.3 !important;
  margin: 0 0 10px !important;
  text-align: left !important;
  color: var(--cmhs-text) !important;
  height: auto !important;
}
/* Layout the inventory page as a 2-col grid on desktop, stack on mobile */
@media (min-width: 700px) {
  .page-inner .widget-gallery > div > div {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
    gap: var(--cmhs-gap);
  }
}
/* The page outer wrapper is one giant div with flex-column — normalize */
.page-inner {
  width: 100% !important;
  max-width: var(--cmhs-max) !important;
  margin: 0 auto !important;
  padding: var(--cmhs-pad) !important;
  height: auto !important;
}

/* ---------- HOME DETAIL PAGE: the "download floor plan" hero + spec grid ---------- */
.et_pb_blurb { background: #fff; border-radius: var(--cmhs-radius); }
.et_pb_blurb .et_pb_main_blurb_image { max-width: 100%; }
.et_pb_blurb img { max-width: 100%; height: auto; }

/* Spec boxes "28x60 / 1580 / 3 or 4 / 2" — make them grid, not one-under-another */
@media (max-width: 980px) {
  .et_pb_section_2 .et_pb_row, .et_pb_section_3 .et_pb_row {
    display: block;
  }
}

/* ---------- TESTIMONIALS ---------- */
.et_pb_testimonial {
  background: var(--cmhs-surface) !important;
  border: 1px solid var(--cmhs-border);
  border-radius: var(--cmhs-radius);
  padding: 20px !important;
  margin-bottom: var(--cmhs-gap);
}
.et_pb_testimonial_description p { font-size: 16px; line-height: 1.55; color: var(--cmhs-text); }
.et_pb_testimonial_author { font-weight: 700; color: var(--cmhs-text); }

/* ---------- FOOTER ---------- */
.et_pb_section_0_tb_footer, #main-footer, footer {
  background: var(--cmhs-navy); color: #d7dbe3;
  padding: clamp(30px, 6vw, 60px) 0;
}
#main-footer a, footer a { color: var(--cmhs-accent); }
#main-footer .et_pb_row, footer .et_pb_row {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 24px;
}
#main-footer .et_pb_column, footer .et_pb_column { margin: 0 !important; width: 100% !important; }
#main-footer ul, footer ul { list-style: none; margin: 0; padding: 0; }
#main-footer ul li, footer ul li { padding: 6px 0; }
#main-footer ul li a, footer ul li a { min-height: 44px; display: inline-flex; align-items: center; font-size: 16px; }

/* ---------- TABLES (wrap via JS) ---------- */
.tbl-scroll { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 1em 0; }
.tbl-scroll > table { min-width: 560px; border-collapse: collapse; }
table th, table td { padding: 10px 12px; border: 1px solid var(--cmhs-border); font-size: 15px; }
table th { background: var(--cmhs-surface); text-align: left; font-weight: 700; }

/* ---------- STICKY MOBILE CALL-NOW FAB ---------- */
.cmhs-fab {
  position: fixed; z-index: 9999;
  right: 16px; bottom: 16px;
  display: none;
  align-items: center; gap: 8px;
  padding: 14px 20px;
  min-height: 52px;
  background: var(--cmhs-accent); color: var(--cmhs-accent-ink);
  font-size: 15px; font-weight: 800; text-decoration: none;
  border-radius: 999px;
  box-shadow: 0 6px 18px rgba(0,0,0,.22);
}
.cmhs-fab svg { width: 18px; height: 18px; }
.cmhs-fab:active { transform: scale(0.97); }
@media (max-width: 980px) {
  .cmhs-fab { display: inline-flex; }
  body { padding-bottom: 76px; }  /* so FAB doesn't cover footer text */
}

/* ---------- readable contrast fixes ---------- */
.et_pb_bg_layout_dark, .et_pb_bg_layout_dark p, .et_pb_bg_layout_dark h1, .et_pb_bg_layout_dark h2, .et_pb_bg_layout_dark h3 { color: #ffffff; }
.et_pb_bg_layout_light, .et_pb_bg_layout_light p, .et_pb_bg_layout_light h1, .et_pb_bg_layout_light h2, .et_pb_bg_layout_light h3 { color: var(--cmhs-text); }
.et_pb_text a { word-break: break-word; }

/* kill default "a" letter burger (Divi font-icon) since we use our own burger */
#et_top_search, .mobile_menu_bar, .mobile_menu_bar:before, .et_mobile_nav_menu { display: none !important; }

/* Divi hero dark section — if it has no images shown, give it a real gradient */
.et_pb_section_0.et_pb_with_background {
  background-image: linear-gradient(135deg, #0e1524 0%, #1f2b47 100%) !important;
  color: #fff;
}
.et_pb_section_0 .et_pb_text h1, .et_pb_section_0 .et_pb_text h2, .et_pb_section_0 .et_pb_text p { color: #fff; }

/* ---------- generic kill horizontal overflow on wide blocks ---------- */
.et_pb_module, .et_pb_row, .et_pb_column { max-width: 100%; }
iframe, embed { max-width: 100%; }

/* ---------- focus-visible for a11y ---------- */
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: 2px solid var(--cmhs-accent); outline-offset: 2px;
}

/* ---------- print cleanup (nice touch) ---------- */
@media print { .cmhs-fab, .cmhs-burger, #top-menu-nav { display: none !important; } }

/* ===================================================================
   STATIC INVENTORY / HOME LISTINGS GRID  (added 2026-04-23)
   Replaces broken wsimg.com CDN gallery with local-image cards.
   =================================================================== */
.cmhs-listings {
  max-width: var(--cmhs-max);
  margin: clamp(1.25rem, 4vw, 3rem) auto;
  padding: clamp(1.25rem, 4vw, 2.5rem) var(--cmhs-pad);
  font-family: "Open Sans", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  color: var(--cmhs-text);
  background: var(--cmhs-bg);
  border-radius: 10px;
}
/* When placed directly on GoDaddy page background (dark body) make container white */
body.x .cmhs-listings { background: #fff; margin-left: 16px; margin-right: 16px; }
.cmhs-listings__head {
  margin: 0 0 clamp(1rem, 3vw, 1.75rem);
  text-align: center;
}
.cmhs-listings__head h2 {
  font-family: "Playfair Display", Georgia, serif;
  font-weight: 700;
  font-size: clamp(1.5rem, 4.2vw, 2.25rem);
  line-height: 1.15;
  margin: 0 0 .4rem;
  color: var(--cmhs-navy) !important;
}
.cmhs-listings__head p {
  margin: 0;
  font-size: clamp(0.95rem, 2.3vw, 1.05rem);
  color: var(--cmhs-muted) !important;
}
.cmhs-listings__head p a { color: var(--cmhs-link); font-weight: 600; }
.cmhs-grid {
  display: grid;
  gap: clamp(0.75rem, 2vw, 1.25rem);
  grid-template-columns: 1fr;
}
@media (min-width: 560px) { .cmhs-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 900px) { .cmhs-grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1180px) { .cmhs-grid--4 { grid-template-columns: repeat(4, 1fr); } }

.cmhs-card {
  display: flex;
  flex-direction: column;
  background: var(--cmhs-bg);
  border: 1px solid var(--cmhs-border);
  border-radius: var(--cmhs-radius);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
  transition: box-shadow .18s ease, transform .18s ease;
  min-height: 100%;
}
.cmhs-card:hover,
.cmhs-card:focus-visible {
  box-shadow: 0 8px 22px rgba(14, 21, 36, 0.12);
  transform: translateY(-2px);
  outline: none;
}
.cmhs-card__media {
  aspect-ratio: 4 / 3;
  width: 100%;
  background: #eef0f3;
  overflow: hidden;
}
.cmhs-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.cmhs-card__body {
  display: flex;
  flex-direction: column;
  gap: .4rem;
  padding: .9rem 1rem 1.1rem;
  flex: 1 1 auto;
}
.cmhs-card__tag {
  font-size: .75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--cmhs-link);
}
.cmhs-card__title {
  margin: 0;
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.35;
  color: var(--cmhs-navy);
  word-break: break-word;
}
.cmhs-card__meta {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem .75rem;
  margin: .15rem 0 .35rem;
  font-size: .85rem;
  color: var(--cmhs-muted);
}
.cmhs-card__meta span { white-space: nowrap; }
.cmhs-card__cta {
  margin-top: auto;
  display: inline-block;
  padding: .55rem .95rem;
  background: var(--cmhs-accent);
  color: var(--cmhs-accent-ink);
  font-weight: 700;
  font-size: .88rem;
  border-radius: 4px;
  text-align: center;
  text-decoration: none;
  min-height: 44px;
  line-height: 1.8;
}
.cmhs-card__cta:hover { background: #d89f00; }
.cmhs-listings__footnote {
  text-align: center;
  margin: clamp(1rem, 3vw, 1.5rem) 0 0;
  font-size: .9rem;
  color: var(--cmhs-muted);
}
.cmhs-listings__footnote a {
  color: var(--cmhs-link);
  font-weight: 600;
  text-decoration: underline;
}

/* ===== Divi blog grid static fix ============================
   Salvattore JS that normally lays out Divi blog posts as a masonry grid
   doesn't run / doesn't layout on the static mirror, so all 24 posts
   stack full-width at ~750px each, blowing up /new-homes/ to 25000px
   of whitespace between the OUR HOMES heading and the footer. Force
   CSS grid so posts sit in a responsive 2-4 column layout.
   ============================================================ */
.et_pb_salvattore_content,
.et_pb_blog_grid .et_pb_salvattore_content,
.et_pb_ajax_pagination_container > .et_pb_salvattore_content {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 1.5rem !important;
  column-count: initial !important;
}
.et_pb_salvattore_content > .column,
.et_pb_salvattore_content > [data-columns] {
  display: contents !important;
}
.et_pb_salvattore_content article.et_pb_post {
  width: 100% !important;
  margin: 0 !important;
  padding: 1rem !important;
  background: #fff;
  border: 1px solid #eee;
  border-radius: 0;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.et_pb_salvattore_content article.et_pb_post .et_pb_image_container {
  margin: 0 0 0.75rem !important;
  max-width: 100%;
}
.et_pb_salvattore_content article.et_pb_post .et_pb_image_container img,
.et_pb_salvattore_content article.et_pb_post img {
  width: 100% !important;
  height: auto !important;
  max-height: 220px !important;
  object-fit: cover !important;
  aspect-ratio: 4 / 3;
  display: block;
}
.et_pb_salvattore_content article.et_pb_post .entry-title {
  font-size: 1.1rem;
  margin: 0.5rem 0 0.3rem;
  line-height: 1.3;
}
.et_pb_salvattore_content article.et_pb_post .post-content,
.et_pb_salvattore_content article.et_pb_post .post-meta {
  font-size: 0.9rem;
  color: #555;
}
@media (max-width: 767px) {
  .et_pb_salvattore_content {
    grid-template-columns: 1fr !important;
    gap: 1rem !important;
  }
  .et_pb_salvattore_content article.et_pb_post img {
    max-height: 200px !important;
  }
}

/* hide the agent-injected duplicate static grid on /new-homes/ since
   the real Divi grid now renders properly above it. also hide on
   homepage ("featured 8") where Divi already shows featured posts. */
body.page-id-614 .cmhs-listings,
body.page-id-614 .cmhs-grid { display: none !important; }

/* Divi waypoint fade-in sets opacity:0 initially and relies on JS to
   fade in when the viewport intersects. The JS doesn't trigger on the
   static mirror, so every blog-grid post stays invisible. Force opacity 1. */
.et_pb_salvattore_content article.et_pb_post,
.et_waypoint,
.et_pb_module.et_waypoint,
.et_pb_post.et_waypoint { opacity: 1 !important; }
