/*
Theme Name: Edge GoGreen
Description: Custom Divi 5 Child Theme for Edge GoGreen
Version: 1.0.0
Author: Reston Tech Wiz
Author URI: https://restontechwiz.com
Theme URI: https://edge-gogreen.com
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Template: Divi
*/

/* ========== Custom CSS from Generator ========== */

/* ── EDGE Divi shell integration ─────────────────────────────────────
   The converted pages carry their own hero/heading, so hide Divi's
   default page title rendered by the theme template. */
.edge-shell .entry-title.main_title { display: none !important; }

/* ── Divi shell: let edge.css own the vertical rhythm ─────────────────
   Divi's default .et_pb_section{padding:4% 0} was doubling the spacing
   around every converted section. Zero the structural wrappers so the
   edge.css .section padding is the only vertical spacing.
   VB-editability: paddings here are DEFAULTS — the :where() keeps them at
   (0,1,1), above Divi's base .et_pb_section (0,1,0) but below the VB's own
   emissions (.et_pb_section_N.et_pb_section, (0,2,0); rows emit !important),
   so spacing set in the Visual Builder always wins. */
:where(body:not(.nd-page) .edge-shell) div.et_pb_section { padding: 0; }
body:not(.nd-page) .edge-shell .et_pb_row,
body:not(.nd-page) .edge-shell .et_pb_row_inner { padding: 0; width: 100%; max-width: 100% !important; }
body:not(.nd-page) .edge-shell .et_pb_column { padding: 0; }
body:not(.nd-page) .edge-shell .et_pb_text { margin-bottom: 0; }

/* The EDGE header is sticky/in-flow (not Divi's fixed header), so drop the
   ~80px top reserve Divi puts on #page-container — otherwise an empty band
   sits above the eyebar on every page. */
.edge-shell { padding-top: 0 !important; }

/* Tighten the section vertical rhythm — the design's clamp(40px,5vw,74px) is too
   airy on real content pages (gave ~144px between every section). */
.edge-shell section.section { padding-block: clamp(26px, 3.1vw, 48px); }
.edge-shell .section-head { max-width: 760px; }
.edge-shell .section-head.center { margin-inline: auto; }

/* The converter copied Elementor's oversized inline padding onto .wrap
   (e.g. padding:120px 20px). .section already owns the vertical rhythm, so
   strip the inline top/bottom padding the converter left on section wraps. */
.edge-shell section.section > .wrap,
.edge-shell section.section > div > .wrap { padding-top: 0 !important; padding-bottom: 0 !important; }

/* ── Polish pass (all pages) ──────────────────────────────────────────
   1) Cards used without an inner .card__body (rebuilt service pages and
      the converted .card.svc-card blocks) had content flush to the border. */
.edge-shell .card:not(:has(.card__body)) { padding: 24px 26px; }
.edge-shell .card:not(:has(.card__body)) > :first-child { margin-top: 0; }
.edge-shell .card:not(:has(.card__body)) > :last-child  { margin-bottom: 0; }
/* 2) Cap the oversized inline headings the converter copied from Elementor
      (font-size:100px / 60px) back to the design's responsive scale. */
.edge-shell .h1[style*="font-size"] { font-size: clamp(34px,5vw,62px) !important; line-height: 1.05; }
.edge-shell .h2[style*="font-size"] { font-size: clamp(28px,3.7vw,48px) !important; }
.edge-shell h3[style*="font-size: 60px"], .edge-shell h3[style*="font-size:60px"] { font-size: clamp(26px,3.2vw,40px) !important; }
/* 3) Keep icon tiles centered even if an inline display slipped in. */
.edge-shell .itile { display: grid !important; place-items: center; }

/* ── Spacing between every section ────────────────────────────────────
   Each converted/rebuilt section is wrapped in its own .et_pb_section.
   A consistent top gap separates blocks. (No hairline divider — removed
   per design: section padding + background alternation mark boundaries.) */
.edge-shell #et-main-area .et_pb_section + .et_pb_section {
	margin-top: clamp(25px, 3.4vw, 56px);
}
/* …except between two PLAIN (unbanded) sections: both render white, so the
   transparent margin just exposed a gray dead strip between them. Colored/panel bands keep their separation. */
/* Deliberately follower-only (NOT both-plain): band→plain junctions
   must sit flush —
   anything flowing INTO a plain white area collapses; anything flowing into
   a band keeps the gap. */
.edge-shell #et-main-area .et_pb_section + .et_pb_section:not([class*="section--"]):not(.edge_panel):not([class*="edge-panel"]):not(:has(section[class*="section--"])):not(:has(.edge_navy_cta)) {
	margin-top: 0;
}

/* 5-up grid (energy-audit "what we inspect" strip); collapses on small screens */
.edge-shell .grid.grid-5 { grid-template-columns: repeat(5, 1fr); }
@media (max-width: 1024px) { .edge-shell .grid.grid-5 { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 600px)  { .edge-shell .grid.grid-5 { grid-template-columns: repeat(2, 1fr); } }

/* Gap before the footer so the last section isn't stuck to it
   (especially when the last section is also navy, e.g. a navy CTA/form). */
.edge-shell .footer { margin-top: clamp(40px, 4vw, 64px); }
/* Mobile footer: brand full-width + the 4 link sections as a clean, aligned 2×2 grid
   (no dividers — separation via spacing only). Fixes the masonry jumble where columns
   didn't differentiate. Overrides edge.css (.footer__top 2-col) at the same ≤560 breakpoint. */
@media (max-width:560px){
  .footer .footer__top { grid-template-columns:1fr 1fr; gap:30px 22px; }
  .footer .footer__brand { grid-column:1 / -1; }
}

/* FAQ answers: comfortable spacing on open. Only <p> was padded before, so
   answers with lists (and the gap from the question) were cramped. */
.edge-shell .acc__a > :first-child { padding-top: 8px; }
.edge-shell .acc__a > :last-child  { padding-bottom: 26px; }
.edge-shell .acc__a ul, .edge-shell .acc__a ol { margin: 0; padding: 2px 25px 16px 48px; color: var(--muted); line-height: 1.6; }
.edge-shell .acc__a li { margin-bottom: 6px; }

/* Centered section heads: center the lead block too. .lead has max-width:62ch
   and is a left-aligned block, so without this the subtitle sits left of the
   centered heading (looks misaligned). */
.edge-shell .section-head.center > * { margin-left: auto; margin-right: auto; }

/* Inline .textlink in body copy should match the surrounding text size/weight.
   The standalone-CTA textlink style (15px/700) made inline links in paragraphs
   look like a different text size. Keep only the link color. */
.edge-shell .lead .textlink,
.edge-shell p .textlink { font-size: inherit; font-weight: inherit; }

/* ── EDGE modules in Divi columns: grid parity ───────────────────────
   Divi columns don't equalize height or add a wrap-gap like edge.css
   `.grid` does. Make module cards fill their column (equal height within
   a row) and restore the vertical gap between wrapped/chunked module rows. */
.edge-shell #et-main-area .et_pb_column:has(> .edge_service_card),
.edge-shell #et-main-area .et_pb_column:has(> .edge_feature),
.edge-shell #et-main-area .et_pb_column:has(> .edge_image_card),
.edge-shell #et-main-area .et_pb_column:has(> .edge_quote) { display: flex; align-items: stretch; }
.edge-shell #et-main-area .et_pb_column > .edge_service_card,
.edge-shell #et-main-area .et_pb_column > .edge_feature,
.edge-shell #et-main-area .et_pb_column > .edge_image_card,
.edge-shell #et-main-area .et_pb_column > .edge_quote { width: 100%; height: 100%; }
/* image cards (team / projects / gallery): make every card identical height.
   The photo keeps its 4:3 ratio; the caption reserves a consistent block so a
   one-line and a three-line caption produce the same card height. */
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_image_card) { align-items: stretch; }
.edge-shell #et-main-area .edge_image_card,
.edge-shell #et-main-area .edge_image_card .card { height: 100%; }
.edge-shell #et-main-area .edge_image_card .card { display: flex; flex-direction: column; }
.edge-shell #et-main-area .edge_image_card .card > .ph { flex: 0 0 auto; }
.edge-shell #et-main-area .edge_image_card .card > div:last-child {
  flex: 1 1 auto;
  min-height: 102px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}
/* vertical gap between consecutive module rows (and heading→grid) */
.edge-shell #et-main-area .et_pb_row + .et_pb_row:has(.edge_service_card),
.edge-shell #et-main-area .et_pb_row + .et_pb_row:has(.edge_feature),
.edge-shell #et-main-area .et_pb_row + .et_pb_row:has(.edge_image_card),
.edge-shell #et-main-area .et_pb_row + .et_pb_row:has(.edge_quote),
.edge-shell #et-main-area .et_pb_row + .et_pb_row:has(.edge_stat),
.edge-shell #et-main-area .et_pb_row + .et_pb_row:has(.edge_step) { margin-top: clamp(24px, 2.8vw, 38px) !important; }

/* ── Consistent section width: constrain module-grid rows to the .wrap width ──
   Full-bleed `.et_pb_row{max-width:100%}` (for EdgeHtml/full-section modules
   whose own .wrap controls width) was leaving the module-GRID rows (cards,
   stats, features, quotes, headings) full-screen-wide on large monitors. Pull
   those rows back to the same 1260px the .wrap sections use, centered. */
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_service_card),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_feature),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_stat),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_quote),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_step),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_section_head),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_image_card),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_faq_item),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_media_text) {
  max-width: min(1080px, calc(100% - 48px)) !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

/* ════════════════════════════════════════════════════════════════════
   Content-width colored panels + readability + spacing  (2026-06-16)
   ════════════════════════════════════════════════════════════════════ */
:root { --edge-panel-r: 0px; }  /* colored section panels: square corners (no radius) */

/* (1a) Class-based colored sections (hero/case-study/prose/navy-cta): move the
   fill from the full-width <section> onto its inner .wrap (≤1260, centered). */
.edge-shell #et-main-area section.section--sage,
.edge-shell #et-main-area section.section--mist,
.edge-shell #et-main-area section.section--navy,
.edge-shell #et-main-area section.section--blue { background: transparent !important; }

.edge-shell #et-main-area section.section--sage > .wrap { background: var(--sage); }
.edge-shell #et-main-area section.section--mist > .wrap { background: var(--mist); }
.edge-shell #et-main-area section.section--navy > .wrap { background: var(--navy); }
.edge-shell #et-main-area section.section--blue > .wrap { background: var(--blue); }

.edge-shell #et-main-area section.section--sage > .wrap,
.edge-shell #et-main-area section.section--mist > .wrap,
.edge-shell #et-main-area section.section--navy > .wrap,
.edge-shell #et-main-area section.section--blue > .wrap {
  border-radius: var(--edge-panel-r);
  padding: clamp(34px, 4vw, 58px) clamp(26px, 3.4vw, 52px) !important;
  max-width: var(--maxw);
}

/* (1b) Divi module-grid sections coloured via the order class are tagged
   `.edge-panel` — constrain that fill to content width, centered + square. */
.edge-shell #et-main-area .et_pb_section.edge-panel {
  max-width: var(--maxw) !important;
  margin-left: auto !important;
  margin-right: auto !important;
  border-radius: var(--edge-panel-r);
  padding: clamp(34px, 4vw, 52px) clamp(26px, 3.4vw, 52px);
}
.edge-shell #et-main-area .et_pb_section.edge-panel--sage { background: var(--sage); }
.edge-shell #et-main-area .et_pb_section.edge-panel--mist { background: var(--mist); }
.edge-shell #et-main-area .et_pb_section.edge-panel--navy { background: var(--navy); }
.edge-shell #et-main-area .et_pb_section.edge-panel--blue { background: var(--blue); }
.edge-shell #et-main-area .et_pb_section.edge-panel .et_pb_row { max-width: 100% !important; }

/* (1c) The hero is exempt — it keeps its original full-bleed sage banner. */
.edge-shell #et-main-area .edge_hero section.section--sage { background: var(--sage); }
.edge-shell #et-main-area .edge_hero section.section--sage > .wrap {
  background: transparent !important;
  padding: 0 var(--gut) !important;
  border-radius: 0 !important;
  max-width: var(--maxw);
}

/* (2) Readability safety net: white text left inside a LIGHT prose block (copy
   lifted from an old dark band) is forced to a dark, legible color. */
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color:#fff" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color: #fff" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color:white" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color: white" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgba(255,255,255" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgba(255, 255, 255" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgb(255,255,255" i],
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgb(255, 255, 255" i] {
  color: var(--navy);
}
/* …and their (possibly unstyled) descendants that inherit the white color */
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color:#fff" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color: #fff" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color:white" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="color: white" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgba(255,255,255" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgba(255, 255, 255" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgb(255,255,255" i] *,
.edge-shell .edge_prose section.section:not(.section--navy):not(.section--blue) [style*="rgb(255, 255, 255" i] * {
  color: var(--navy);
}

/* (3) Spacing rhythm inside prose: keep images, paragraphs, headings and lists
   from butting against each other. */
.edge-shell .edge_prose__c > * + * { margin-top: clamp(14px, 1.4vw, 20px); }
.edge-shell .edge_prose__c h2,
.edge-shell .edge_prose__c h3,
.edge-shell .edge_prose__c h4 { margin-top: 1.3em; line-height: 1.2; }
.edge-shell .edge_prose__c p  { line-height: 1.65; margin: 0; }
.edge-shell .edge_prose__c ul,
.edge-shell .edge_prose__c ol { padding-left: 1.3em; line-height: 1.7; margin: 0; }
.edge-shell .edge_prose__c li + li { margin-top: .4em; }
.edge-shell .edge_prose__c img { display: block; max-width: 100%; height: auto; border-radius: 14px; }
.edge-shell .edge_prose__c img + img,
.edge-shell .edge_prose__c p + img,
.edge-shell .edge_prose__c img + p { margin-top: clamp(16px, 1.8vw, 24px); }

/* ── Feature cards get the same boxed look as service cards ───────────
   "Why Homeowners Choose EDGE" (edge_feature) previously rendered as a
   borderless icon+text row; box it like .card (edge_service_card) so the
   two grids match: white card, hairline border, radius, icon stacked on top. */
.edge-shell #et-main-area .edge_feature {
  background: #fff;
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  padding: 24px 26px;
  display: block;
}
.edge-shell #et-main-area .edge_feature .edge_feature__icon { margin-bottom: 16px; }
.edge-shell #et-main-area .edge_feature .edge_feature__body { display: block; width: 100%; }

/* Equalise card heights within a row: the Divi row is display:block (columns
   don't equalise), so make rows that hold our cards flex so every card in a
   row matches the tallest. */
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_feature),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_service_card),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_image_card),
.edge-shell #et-main-area .et_pb_row:has(> .et_pb_column .edge_quote) {
  display: flex !important;
  flex-wrap: wrap;
  align-items: stretch;
}

/* ════════════════════════════════════════════════════════════════════
   HOMEPAGE RESTYLE — "clean-energy premium" (2026-06-17) — reversible,
   scoped to body.home, visual polish only (no layout/content changes).
   ════════════════════════════════════════════════════════════════════ */
@keyframes edge-rise { from { opacity:0; transform:translateY(20px); } to { opacity:1; transform:none; } }
@keyframes edge-fade { from { opacity:0; transform:scale(.985); } to { opacity:1; transform:none; } }

/* Hero — atmospheric sage gradient + soft energy glows + entrance motion */
body.home #et-main-area .edge_hero section.section--sage {
  background: radial-gradient(135% 120% at 82% -10%, #F8FAFC 0%, #F1F5F9 52%, #E7EDF4 100%);
  position: relative; overflow: hidden;
}
body.home #et-main-area .edge_hero section.section--sage::before {
  content:""; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(38% 50% at 10% 22%, rgba(20, 184, 166,.08), transparent 70%),
    radial-gradient(46% 56% at 96% 86%, rgba(37, 99, 235,.06), transparent 72%);
}
body.home #et-main-area .edge_hero .wrap { position:relative; z-index:1; }
body.home #et-main-area .edge_hero .h1 { letter-spacing:-.035em; line-height:1.0; animation:edge-rise .9s cubic-bezier(.2,.7,.2,1) both; }
body.home #et-main-area .edge_hero .edge_hero__btns,
body.home #et-main-area .edge_hero .mt-3 { animation:edge-rise .9s .12s cubic-bezier(.2,.7,.2,1) both; }
body.home #et-main-area .edge_hero .edge_hero__sub { animation:edge-rise .9s .22s cubic-bezier(.2,.7,.2,1) both; }
body.home #et-main-area .edge_hero__img { box-shadow:0 34px 64px -32px rgba(15,23,42,.5); animation:edge-fade 1.1s .15s ease both; }
@media (prefers-reduced-motion: reduce) {
  body.home #et-main-area .edge_hero .h1,
  body.home #et-main-area .edge_hero .mt-3,
  body.home #et-main-area .edge_hero .edge_hero__sub,
  body.home #et-main-area .edge_hero__img { animation: none !important; }
}
body.home #et-main-area .edge_hero__thumbs > div { box-shadow:0 12px 30px -14px rgba(15,23,42,.4); transition:transform .4s cubic-bezier(.2,.7,.3,1); }
body.home #et-main-area .edge_hero__thumbs > div:hover { transform:translateY(-5px); }

/* Cards — refined depth, lift + green accent on hover */
body.home #et-main-area .card,
body.home #et-main-area .edge_feature {
  border:1px solid rgba(15,23,42,.07);
  box-shadow:0 1px 2px rgba(15,23,42,.04), 0 14px 34px -22px rgba(15,23,42,.16);
  transition:transform .4s cubic-bezier(.2,.7,.3,1), box-shadow .4s, border-color .4s;
}
body.home #et-main-area .card:hover,
body.home #et-main-area .edge_feature:hover {
  transform:translateY(-7px);
  box-shadow:0 2px 4px rgba(15,23,42,.05), 0 34px 56px -30px rgba(15,23,42,.26);
  border-color:rgba(20, 184, 166,.3);
}

/* Navy icon tiles — gradient + glow + playful hover */
body.home #et-main-area .itile--navy {
  background:linear-gradient(150deg, #1E293B 0%, #0F172A 55%, #0B1220 100%);
  box-shadow:0 10px 22px -12px rgba(15,23,42,.55), inset 0 1px 0 rgba(255,255,255,.08);
  transition:transform .4s cubic-bezier(.2,.7,.3,1);
}
body.home #et-main-area .card:hover .itile--navy,
body.home #et-main-area .edge_feature:hover .itile--navy { transform:translateY(-2px) scale(1.06) rotate(-3deg); }

/* Buttons — gradient fills, lift, animated chip */
body.home #et-main-area .btn--primary { background:linear-gradient(135deg,#4A6CF7 0%,#2563EB 100%); box-shadow:0 12px 26px -12px rgba(37, 99, 235,.65); transition:transform .25s cubic-bezier(.2,.7,.3,1), box-shadow .25s, filter .25s; }
body.home #et-main-area .btn--primary:hover { transform:translateY(-2px); box-shadow:0 18px 34px -14px rgba(37, 99, 235,.78); filter:saturate(1.08); }
/* Home header CTA: smaller button (was 15px / 14-24 padding, 56px tall → ~46px) */
body.home .nav__right .btn--primary { font-size:13.5px !important; padding:11px 14px 11px 20px !important; }
body.home .nav__right .btn--primary .chip { width:22px !important; height:22px !important; }

/* ── Tighter top chrome + hero box (too much white space at the
   top, esp. the header). Slims the eyebar + nav band, kills the leftover gap above
   the hero, and trims the hero box's top padding. Overrides plugin edge.css (kept
   pristine). All chrome/structural — no VB-editable content spacing touched. */
body .eyebar .wrap { min-height:34px !important; }
body .nav__row { min-height:64px !important; }
body.edge-native #et-main-area .et_pb_section.edge_hero { margin-top:0; padding-top:32px; }
/* nav CTA: consistent compact size on ALL pages so it fits the slimmer header (was only on home) */
body .nav__right .btn--primary { font-size:13.5px !important; padding:10px 14px 10px 20px !important; }
body .nav__right .btn--primary .chip { width:22px !important; height:22px !important; }

/* ════ TrooSolar-style overlay header . The nav floats
   transparently over the sage hero (no white bar), green accent on links, and
   drops to a solid white bar fixed on scroll (.is-stuck added by JS). Scoped to
   edge-native pages (which all open with the sage hero). ════ */
body.edge-native header.nav { position:absolute !important; top:34px; left:0; right:0; z-index:60; background:transparent !important; box-shadow:none !important; transition:background .25s ease, box-shadow .25s ease; }
html body.edge-native #et-main-area .et_pb_section.section.section--sage.edge_hero { padding-top:96px; }   /* clear the floating nav (max spec to beat Divi et-cache) */
/* same clearance for EVERY edge-native page's first section (FAQ/Team/Projects etc.
   open with a plain .section--sage, no .edge_hero — they were sliding under the nav) */
html body.edge-native #et-main-area .et_builder_inner_content > .et_pb_section:first-child,
html body.edge-native #et-main-area > .et_pb_section:first-child { padding-top:96px; }

/* ════ Dark TrooSolar-style header (match dev2): solid dark bar, white menu, green
   accents, light logo. Overrides the earlier transparent overlay + its nav clearance. ════ */
body.edge-native header.nav, body header.nav { position:sticky !important; top:0 !important; left:auto !important; right:auto !important; background:#0F172A !important; box-shadow:0 6px 22px -12px rgba(0,0,0,.6) !important; z-index:200 !important; }
body.edge-native header.nav.is-stuck, body header.nav.is-stuck { background:#0F172A !important; }
/* header back in normal flow → no floating clearance, modest hero top padding */
html body.edge-native #et-main-area .et_pb_section.section.section--sage.edge_hero,
html body.edge-native #et-main-area .et_builder_inner_content > .et_pb_section:first-child,
html body.edge-native #et-main-area > .et_pb_section:first-child { padding-top:38px !important; }
/* white menu + green hover */
body.edge-native header.nav .nav__link, body header.nav .nav__link { color:#fff !important; }
body.edge-native header.nav .nav__link:hover, body header.nav .nav__link:hover,
body.edge-native header.nav .has-mega:hover > .nav__link, body header.nav .has-mega:hover > .nav__link { color:var(--green) !important; }
body header.nav .nav__search { color:#fff !important; background:transparent !important; border:1.5px solid rgba(255,255,255,.32) !important; }
body header.nav .nav__search svg, body header.nav .nav__search svg path { stroke:#fff !important; fill:#fff !important; color:#fff !important; }
body header.nav .burger span { background:#fff !important; }
/* green CTA button (TrooSolar accent) */
body header.nav .nav__right .btn--primary { background:var(--green) !important; background-image:none !important; box-shadow:0 10px 24px -12px rgba(20, 184, 166,.55) !important; }
/* bigger header (match dev2 scale): taller bar + larger logo */
body .nav__row { min-height:94px !important; }
body header.nav .logo img { height:48px !important; }
body header.nav .nav__link { font-size:15.5px !important; }
body header.nav .nav__right .btn--primary { font-size:14.5px !important; padding:13px 18px 13px 24px !important; }
/* wider layout — match dev2's larger-screen feel (header, content rows, footer) */
:root { --maxw:1080px; } /* desktop content width = 1080px  — sections/.wrap flow from this token */
body .wrap, body .footer .wrap { max-width:1080px !important; }
body.edge-native #et-main-area .et_pb_row { width:100% !important; max-width:1080px !important; } /* rows fill the section content box - sections' own 49px padding is the single side inset */
body.edge-native .nav__link:hover,
body.edge-native .nav__menu .has-mega:hover > .nav__link { color:var(--green) !important; }
body.edge-native header.nav.is-stuck { position:fixed !important; top:0; background:#fff !important; box-shadow:0 6px 24px -12px rgba(15,23,42,.22) !important; }
@media (max-width:820px){ /* no eyebar on mobile → nav floats from the very top */
  body.edge-native header.nav { top:0; }
}

/* ════ Blog → TrooSolar-style full-width card grid .
   Kills the empty right sidebar, lays posts in a 2-up card grid. ════ */
body.blog #main-content .container { max-width:1080px !important; }
body.blog #left-area { width:100% !important; float:none !important; padding:0; display:grid !important; grid-template-columns:repeat(2,1fr); gap:36px; }
body.blog #sidebar { display:none !important; }
body.blog #left-area .et_pb_post { margin:0; padding:0; background:#fff; border:1px solid rgba(15,23,42,.08); border-radius:18px; overflow:hidden; box-shadow:0 1px 2px rgba(15,23,42,.04), 0 18px 34px -24px rgba(15,23,42,.18); display:flex; flex-direction:column; transition:transform .3s ease, box-shadow .3s ease; }
body.blog #left-area .et_pb_post:hover { transform:translateY(-4px); box-shadow:0 26px 44px -22px rgba(15,23,42,.30); }
body.blog .et_pb_post .entry-featured-image-url { margin:0; border-radius:0; }
body.blog .et_pb_post .entry-featured-image-url img { aspect-ratio:16/10; object-fit:cover; width:100% !important; height:auto !important; display:block; }
body.blog .et_pb_post .entry-title { padding:20px 24px 0; font-size:21px !important; line-height:1.3; margin:0; }
body.blog .et_pb_post .post-meta { padding:10px 24px 0; margin:0; font-size:13px; }
body.blog .et_pb_post .post-content, body.blog .et_pb_post .post-content-inner, body.blog .et_pb_post > p { padding:12px 24px 24px; margin:0; }
body.blog .et_pb_post .more-link, body.blog .et_pb_post .post-meta a:hover { color:var(--green); }
@media (max-width:780px){ body.blog #left-area { grid-template-columns:1fr; gap:26px; } }

/* blog card refinement: pad ALL content (excerpt was flush to the edge), even bottoms,
   kill the leftover sidebar divider line */
body.blog #left-area .et_pb_post > :not(.entry-featured-image-url) { padding-left:24px; padding-right:24px; }
body.blog #left-area .et_pb_post > :last-child { padding-bottom:24px; }
body.blog #left-area, body.blog #content-area, body.blog #sidebar, body.blog #main-content .container { border:none; }
body.blog #left-area::after, body.blog #content-area::after, body.blog #main-content .container::after { display:none !important; }

/* footer section headings: green accent (TrooSolar) */
body .footer h5 { color:var(--green) !important; }
body.home #et-main-area .btn--green { background:linear-gradient(135deg,#25a35a 0%,#1c8d49 100%); box-shadow:0 12px 26px -12px rgba(20, 184, 166,.6); }
body.home #et-main-area .btn .chip { transition:transform .3s cubic-bezier(.2,.7,.3,1); }
body.home #et-main-area .btn:hover .chip { transform:translateX(4px); }

/* Typography — editorial refinement */
body.home #et-main-area .eyebrow { letter-spacing:.16em; font-weight:700; }
body.home #et-main-area .h1 { letter-spacing:-.03em; }
body.home #et-main-area .h2 { letter-spacing:-.022em; line-height:1.06; }
body.home #et-main-area .stat__num { letter-spacing:-.03em; }

/* Testimonials — soft cards + gold stars */
body.home #et-main-area .quote { box-shadow:0 1px 2px rgba(15,23,42,.04), 0 18px 40px -26px rgba(15,23,42,.2); transition:transform .4s cubic-bezier(.2,.7,.3,1), box-shadow .4s; }
body.home #et-main-area .quote:hover { transform:translateY(-5px); box-shadow:0 28px 50px -30px rgba(15,23,42,.3); }
body.home #et-main-area .quote__stars svg { color:#F5B958; }

/* Team / image cards — subtle image zoom on hover */
body.home #et-main-area .edge_image_card .card { overflow:hidden; }
body.home #et-main-area .edge_image_card .ph img { transition:transform .6s cubic-bezier(.2,.7,.3,1); }
body.home #et-main-area .edge_image_card:hover .ph img { transform:scale(1.05); }

/* A touch more breathing room between sections */
body.home #et-main-area section.section { padding-block:clamp(40px,4.6vw,78px); }

/* About EDGE / "Built on Experience" — cohesive centered stats strip with
   dividers (replaces the two stats floating far apart). Homepage only. */
body.home #et-main-area .et_pb_section:has(.edge_media_text) .et_pb_row:has(.edge_stat) {
  display: flex !important;
  justify-content: center;
  align-items: stretch;
  gap: clamp(34px, 5vw, 80px);
  border-top: 1px solid rgba(15,23,42,.14);
  padding-top: clamp(30px, 3.2vw, 48px) !important;
  margin-top: clamp(30px, 3.2vw, 48px) !important;
}
body.home #et-main-area .et_pb_section:has(.edge_media_text) .et_pb_row:has(.edge_stat) > .et_pb_column {
  width: auto !important;
  flex: 0 0 auto;
  margin: 0 !important;
  display: flex; flex-direction: column; justify-content: center;
}
/* the "|" divider between stats */
body.home #et-main-area .et_pb_section:has(.edge_media_text) .et_pb_row:has(.edge_stat) > .et_pb_column + .et_pb_column {
  border-left: 1px solid rgba(15,23,42,.18);
  padding-left: clamp(34px, 5vw, 80px) !important;
}
/* bigger, bolder numbers + refined uppercase label */
body.home #et-main-area .edge_media_text ~ * .stat__num,
body.home #et-main-area .et_pb_section:has(.edge_media_text) .stat__num {
  font-size: clamp(32px, 3.6vw, 46px) !important;
  letter-spacing: -.03em;
  line-height: 1;
}
body.home #et-main-area .et_pb_section:has(.edge_media_text) .stat__label {
  text-transform: uppercase;
  letter-spacing: .09em;
  font-size: 12px !important;
  font-weight: 600;
  color: var(--muted);
  margin-top: 9px;
}

/* Quote form (homepage footer) — contain heading + form in a delimited card
   so it no longer floats in empty space. Homepage only. */
body.home #et-main-area .edge_form_section .wrap {
  max-width: 900px;
  background: linear-gradient(180deg, #ffffff 0%, #fafbfc 100%);
  border: 1px solid rgba(15,23,42,.12);
  border-radius: 24px;
  padding: clamp(34px, 4vw, 58px) clamp(28px, 3.6vw, 56px) !important;
  box-shadow: 0 1px 2px rgba(15,23,42,.04), 0 32px 72px -42px rgba(15,23,42,.26);
}
/* a slender brand accent bar at the top of the card */
body.home #et-main-area .edge_form_section .wrap {
  position: relative; overflow: hidden;
}
body.home #et-main-area .edge_form_section .wrap::before {
  content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px;
  background: linear-gradient(90deg, #4A6CF7 0%, #63E6DB 100%);
}

/* Hero — stretch the right-hand image to match the (taller) left content
   column so it no longer looks small. Homepage only. */
body.home #et-main-area .edge_hero .split { align-items: stretch !important; }
body.home #et-main-area .edge_hero .split > div:last-child { display: flex; }
body.home #et-main-area .edge_hero__img {
  height: 100% !important;
  width: 100%;
  min-height: clamp(400px, 44vw, 600px);
}

/* Colored content panels (sage/mist) — define them with a subtle brand-green
   hairline border + soft depth so they read as premium panels, not flat fills.
   Square corners kept. Homepage only. */
body.home #et-main-area .et_pb_section.edge-panel--sage,
body.home #et-main-area .et_pb_section.edge-panel--mist {
  border: 1px solid rgba(20, 184, 166,.16);
  box-shadow: 0 1px 2px rgba(15,23,42,.03), 0 26px 54px -40px rgba(15,23,42,.18);
}
body.home #et-main-area .et_pb_section.edge-panel--mist {
  border-color: rgba(37, 99, 235,.12);
}

/* ===== NATIVE HOMEPAGE (sandbox dev) — make native Divi modules match edge.css ===== */
body.edge-native #et-main-area .et_pb_row {
  max-width: min(1080px, calc(100% - 48px)) !important;
  margin-left: auto !important; margin-right: auto !important;
}
/* section vertical padding now set per-section in the editor (block attrs) */
/* colored section fill (sage) — content-width handled by row constraint */
body.edge-native #et-main-area .et_pb_section.section--sage { background: radial-gradient(135% 120% at 82% -10%, #F8FAFC 0%, #F1F5F9 52%, #E7EDF4 100%); }
/* native icon -> navy tile */
body.edge-native #et-main-area .et_pb_icon.itile--navy { width:58px; height:58px; border-radius:15px; background:linear-gradient(150deg,#1E293B,#0F172A); color:#F5B958; display:grid; place-items:center; margin-bottom:16px; font-size:26px !important; }
/* card columns: equal height + the .card border look already from edge.css */
body.edge-native #et-main-area .et_pb_column.card { display:flex; flex-direction:column; }

/* native homepage card layout + icon tile + hero pieces (sandbox dev) */
body.edge-native #et-main-area .et_pb_column.card { display:block !important; }
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.card { padding:26px 28px; }
body.edge-native #et-main-area .et_pb_column.card > .et_pb_module { float:none !important; clear:both; width:100% !important; }
body.edge-native #et-main-area .itile--navy {
  width:58px !important; height:58px !important; border-radius:15px;
  background:linear-gradient(150deg,#1E293B,#0F172A);
  display:flex !important; align-items:center; justify-content:center; margin:0 0 16px 0;
}
body.edge-native #et-main-area .itile--navy .et_pb_icon { color:#F5B958; font-size:26px !important; line-height:1; margin:0; }
body.edge-native #et-main-area .et_pb_column.card .h3 { margin:0 0 8px; }
body.edge-native #et-main-area .et_pb_column.card .et_pb_text p { color:var(--muted); margin:0; }
/* hero buttons row */
body.edge-native #et-main-area .edge_hero__btns { display:flex !important; gap:20px; align-items:center; margin-top:26px; }
body.edge-native #et-main-area .edge_hero__btns .et_pb_button { margin:0; }
/* hero thumbnails row */
body.edge-native #et-main-area .edge_hero__thumb img { border-radius:16px; }
/* number-counter: show the value, navy + big */
body.edge-native #et-main-area .et_pb_number_counter .percent, 
body.edge-native #et-main-area .et_pb_number_counter .percent-value { font-size:clamp(32px,3.6vw,46px) !important; color:var(--navy); font-family:var(--font-head) !important; font-weight:800; }

/* ===== NATIVE HOMEPAGE comprehensive mapping (sandbox dev, page-id-21028) ===== */
body.edge-native #et-main-area a.et_pb_button.btn--primary {
  background:linear-gradient(90deg,#4A6CF7 0%,#63E6DB 100%); color:#fff;
  border:0; border-radius:13px; padding:15px 28px;
  font-family:var(--font-head) !important; font-weight:500; font-size:15px !important;
  box-shadow:0 12px 26px -12px rgba(20,184,166,.6); transition:transform .25s, box-shadow .25s;
}
body.edge-native #et-main-area a.et_pb_button.btn--primary:hover { transform:translateY(-2px); }
body.edge-native #et-main-area a.et_pb_button.btn--primary::after { content:"\f061" !important; opacity:1 !important; margin-left:10px; font-size:14px; }
/* icon tile: small navy square, not a full-width bar */
body.edge-native #et-main-area .et_pb_icon.itile--navy {
  width:58px !important; min-width:58px; height:58px !important; max-width:58px;
  border-radius:15px; background:linear-gradient(150deg,#1E293B,#0F172A);
  display:inline-flex !important; align-items:center !important; justify-content:center !important;
  margin:0 0 16px; padding:0;
}
body.edge-native #et-main-area .et_pb_icon.itile--navy .et-pb-icon { color:#F5B958; font-size:26px !important; width:auto !important; height:auto !important; line-height:1; }
body.edge-native #et-main-area .et_pb_icon.itile--navy .et_pb_icon_wrap { width:auto !important; }
/* card column: stacked, padded, edge.css .card border + restyle depth/hover */
body.edge-native #et-main-area .et_pb_column.card {
  display:block !important; padding:26px 28px; background:#fff;
  border:1px solid rgba(15,23,42,.07); border-radius:var(--r-lg);
  box-shadow:0 1px 2px rgba(15,23,42,.04), 0 14px 34px -22px rgba(15,23,42,.16);
  transition:transform .4s cubic-bezier(.2,.7,.3,1), box-shadow .4s, border-color .4s;
}
body.edge-native #et-main-area .et_pb_column.card:hover { transform:translateY(-7px); box-shadow:0 2px 4px rgba(15,23,42,.05), 0 34px 56px -30px rgba(15,23,42,.26); border-color:rgba(20, 184, 166,.3); }
body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 .et_pb_heading_container,
body.edge-native #et-main-area .et_pb_column.card .h3 { margin:0 0 8px; }
body.edge-native #et-main-area .et_pb_column.card .et_pb_text { color:var(--muted); }
/* stat: big navy number + uppercase label */
body.edge-native #et-main-area .et_pb_heading.stat__num h1,
body.edge-native #et-main-area .et_pb_heading.stat__num h2,
body.edge-native #et-main-area .et_pb_heading.stat__num h3 { font-family:var(--font-head) !important; font-weight:800; color:var(--navy); letter-spacing:-.03em; margin:0; line-height:1; }
body.edge-native #et-main-area .et_pb_text.stat__label p { text-transform:uppercase; letter-spacing:.09em; font-weight:600; color:var(--muted); margin:9px 0 0; }
/* testimonial native -> quote card */
body.edge-native #et-main-area .et_pb_testimonial { background:#fff; border:1px solid var(--line); border-radius:var(--r-lg); padding:30px 28px; box-shadow:0 1px 2px rgba(15,23,42,.04), 0 18px 40px -26px rgba(15,23,42,.2); }
body.edge-native #et-main-area .et_pb_testimonial .et_pb_testimonial_description_inner p { color:var(--ink); line-height:1.6; }
body.edge-native #et-main-area .et_pb_testimonial_author { color:var(--navy); font-weight:700; font-style:normal; }
/* hero pieces */
body.edge-native #et-main-area .edge_hero__btns { display:flex !important; gap:20px; align-items:center; margin-top:26px; }
body.edge-native #et-main-area .edge_hero__thumb img { border-radius:16px; height:190px; object-fit:cover; width:100%; }
body.edge-native #et-main-area .edge_hero__img img { border-radius:8px; box-shadow:0 34px 64px -32px rgba(15,23,42,.5); }

/* native homepage: sage/navy panels, eyebrow/lead, journal, polish (page-id-21028) */
body.edge-native #et-main-area .et_pb_section.section--sage { background:radial-gradient(135% 120% at 82% -10%,#F8FAFC,#F1F5F9 52%,#E7EDF4); }
body.edge-native #et-main-area .et_pb_section.section--navy { background:var(--navy); }
body.edge-native #et-main-area .et_pb_section.section--navy .h2 h1,
body.edge-native #et-main-area .et_pb_section.section--navy .h2 h2,
body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_text p { color:#fff; }
body.edge-native #et-main-area .et_pb_section.section--navy .eyebrow { color:rgba(255,255,255,.7); }
/* eyebrow + lead inside native text modules */
body.edge-native #et-main-area .et_pb_text .eyebrow { color:var(--green); font-weight:700; letter-spacing:.16em; text-transform:uppercase; display:inline-block; }
body.edge-native #et-main-area .et_pb_text .eyebrow::before { content:"// "; }
body.edge-native #et-main-area .et_pb_text .lead { color:#525869; line-height:1.6; }
/* section-head centering + heading colors */
body.edge-native #et-main-area .et_pb_column.section-head.center { text-align:center; }
body.edge-native #et-main-area .et_pb_heading.h1 h1, body.edge-native #et-main-area .et_pb_heading.h1 h2 { font-family:var(--font-head) !important; font-weight:800; color:var(--navy); letter-spacing:-.03em; line-height:1.04; }
body.edge-native #et-main-area .et_pb_heading.h2 h1, body.edge-native #et-main-area .et_pb_heading.h2 h2 { font-family:var(--font-head) !important; font-weight:800; color:var(--navy); letter-spacing:-.022em; }
body.edge-native #et-main-area .et_pb_heading.h3 h1, body.edge-native #et-main-area .et_pb_heading.h3 h2 { font-family:var(--font-head) !important; font-weight:700; color:var(--navy); }
/* stat label + hero phone */
body.edge-native #et-main-area .et_pb_text.edge_hero__phone .muted { color:var(--muted); margin:0; }
/* hero split: stretch image + align */
body.edge-native #et-main-area .edge_hero .et_pb_row { display:flex !important; align-items:stretch; gap:40px; }
body.edge-native #et-main-area .edge_hero__img, body.edge-native #et-main-area .edge_hero__img img { height:100% !important; object-fit:cover; }

/* native eyebrow/lead/stat-label at MODULE level (page-id-21028) */
body.edge-native #et-main-area .et_pb_text.eyebrow p { color:var(--green); font-weight:700; letter-spacing:.16em; text-transform:uppercase; margin:0 0 6px; }
body.edge-native #et-main-area .et_pb_text.eyebrow p::before { content:"// "; color:var(--green); }
body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_text.eyebrow p { color:var(--gold); }
body.edge-native #et-main-area .et_pb_text.lead p { color:#525869; line-height:1.6; margin:14px 0 0; }
body.edge-native #et-main-area .et_pb_text.stat__label p { text-transform:uppercase; letter-spacing:.09em; font-weight:600; color:var(--muted); margin:9px 0 0; }
body.edge-native #et-main-area .et_pb_text.edge_hero__phone p:first-child { color:var(--muted); margin:0; }
body.edge-native #et-main-area .et_pb_text.edge_hero__phone p:last-child { font-weight:600; margin:0; }

/* native quote cards (page-id-21028) */
body.edge-native #et-main-area .et_pb_column.quote { text-align:left; }
body.edge-native #et-main-area .et_pb_column.quote .et_pb_text.quote__stars p { color:#F5B958; letter-spacing:3px; margin:0 0 14px; }
body.edge-native #et-main-area .et_pb_column.quote .et_pb_text:not(.quote__stars):not(.quote__by) p { color:var(--ink); line-height:1.62; margin:0 0 16px; }
body.edge-native #et-main-area .et_pb_column.quote .et_pb_text.quote__by p { color:var(--navy); font-weight:700; margin:0; padding-top:14px; border-top:1px solid var(--line); }

/* native icon tiles using EDGE SVG images (page-id-21028) */
body.edge-native #et-main-area .et_pb_image.itile--navy { width:58px !important; height:58px !important; border-radius:15px; background:linear-gradient(150deg,#1E293B,#0F172A); display:inline-flex !important; align-items:center; justify-content:center; margin:0 0 16px; padding:0; }
body.edge-native #et-main-area .et_pb_image.itile--navy .et_pb_image_wrap, body.edge-native #et-main-area .et_pb_image.itile--navy img { width:28px !important; height:28px !important; }

/* native form card (page-id-21028) */
body.edge-native #et-main-area .edge_form_section .wrap {
  max-width:900px; background:linear-gradient(180deg,#fff,#fafbfc);
  border:1px solid rgba(15,23,42,.12); border-radius:24px;
  padding:clamp(34px,4vw,58px) clamp(28px,3.6vw,56px) !important;
  box-shadow:0 1px 2px rgba(15,23,42,.04), 0 32px 72px -42px rgba(15,23,42,.26);
  position:relative; overflow:hidden;
}
body.edge-native #et-main-area .edge_form_section .wrap::before { content:""; position:absolute; top:0; left:0; right:0; height:4px; background:linear-gradient(90deg,#4A6CF7 0%,#63E6DB 100%); }

/* native About stats strip (centered + | divider + top line) — page-id-21028 */
body.edge-native #et-main-area .et_pb_section.section--sage .et_pb_row:has(.stat__num) {
  display:flex !important; justify-content:center; align-items:stretch; gap:clamp(34px,5vw,80px);
  border-top:1px solid rgba(15,23,42,.14); padding-top:20px !important; margin-top:16px !important; /* was 46+46px at 1440  */
}
body.edge-native #et-main-area .et_pb_section.section--sage .et_pb_row:has(.stat__num) > .et_pb_column { width:auto !important; flex:0 0 auto; margin:0 !important; display:flex; flex-direction:column; justify-content:center; }
body.edge-native #et-main-area .et_pb_section.section--sage .et_pb_row:has(.stat__num) > .et_pb_column + .et_pb_column { border-left:1px solid rgba(15,23,42,.18); padding-left:clamp(34px,5vw,80px) !important; }

/* native: sage CONTENT sections -> content-width panel (flat sage, border, square),
   hero stays full-bleed; + vertical gap between card rows (page-id-21028) */
body.edge-native #et-main-area .et_pb_section.section--sage:not(.edge_hero) {
  background: var(--sage);
  max-width: var(--maxw) !important; margin-left:auto !important; margin-right:auto !important;
  border:1px solid rgba(20, 184, 166,.16); border-radius:0;
  box-shadow:0 1px 2px rgba(15,23,42,.03), 0 26px 54px -40px rgba(15,23,42,.18);
}
/* lateral padding split out at (0,1,1) — same VB-editable tier as the mobile
   lateral defaults so the responsive cascade resolves purely by source order */
:where(body.edge-native #et-main-area) div.et_pb_section:where(.section--sage:not(.edge_hero)) {
  padding-left:clamp(28px,3.4vw,52px); padding-right:clamp(28px,3.4vw,52px);
}
body.edge-native #et-main-area .et_pb_section.section--sage:not(.edge_hero) .et_pb_row { max-width:100% !important; }
/* MOBILE only: the EDGE Services intro panel (.edge_intro) is not .section--sage, so its row keeps
   the global 48px gutter and sits too far from the screen edges. Make it full-width on phones to
   match the other sections (this is structural row containment — !important required to beat the
   global row rule, and it was never a VB-editable property; no padding/margins touched). */
@media (max-width:600px){
  body.edge-native #et-main-area .et_pb_section.edge_intro .et_pb_row { max-width:100% !important; }
  /* white panel section: its 30px vertical padding makes the VISIBLE gap to the neighbouring
     sections 55/69px instead of the 25px section margin. Zero it so the panel IS the box and the
     perceived gap equals the 25px margin. (Section padding was already !important/locked.) */
  body.edge-native #et-main-area .et_pb_section.section.edge_intro { padding-top:0; padding-bottom:0; }
  body.edge-native #et-main-area .et_pb_section.section.edge_intro > .et_pb_row { margin-bottom:0 !important; }
}
/* navy journal -> content-width panel too (match real), keep navy */
body.edge-native #et-main-area .et_pb_section.section--navy {
  max-width:var(--maxw) !important; margin-left:auto !important; margin-right:auto !important; border-radius:0;
}
body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_row { max-width:100% !important; }
/* vertical gap between consecutive card rows */
body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.card) + .et_pb_row:has(> .et_pb_column.card) { margin-top:clamp(24px,2.8vw,38px) !important; }

/* eyebrow: edge.css .eyebrow::before already prints "//" — drop my duplicate (page-id-21028) */
body.edge-native #et-main-area .et_pb_text.eyebrow p::before { content:none !important; }

/* native: equal-height cards within a row (page-id-21028) */
body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.card) {
  display:flex !important; flex-wrap:wrap; align-items:stretch;
}
body.edge-native #et-main-area .et_pb_column.card { display:flex !important; flex-direction:column; }

/* native hero: stretch image to content height + heading spacing (page-id-21028) */
body.edge-native #et-main-area .edge_hero > .et_pb_row { display:flex !important; align-items:stretch !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:last-child { display:flex !important; align-items:stretch; }
body.edge-native #et-main-area .et_pb_image.edge_hero__img { height:100% !important; width:100%; }
body.edge-native #et-main-area .et_pb_image.edge_hero__img .et_pb_image_wrap { height:100% !important; display:block; }
body.edge-native #et-main-area .et_pb_image.edge_hero__img img { height:100% !important; width:100% !important; object-fit:cover; border-radius:8px; box-shadow:0 34px 64px -32px rgba(15,23,42,.5); }
/* MOBILE: the desktop "fill the column" height:100% leaves a tall empty gap below the last hero
   image (module stays ~400px while the img is capped at 190px). Collapse the image module + its
   column to content height on phones. Touches ONLY image/column sizing (not a VB-editable setting)
   — no padding/margins changed, so VB editability stays intact. */
@media (max-width:600px){
  body.edge-native #et-main-area .edge_hero .et_pb_image.edge_hero__img,
  body.edge-native #et-main-area .edge_hero .et_pb_image.edge_hero__img .et_pb_image_wrap { height:auto !important; min-height:0 !important; }
  body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:last-child { flex:0 0 auto !important; height:auto !important; min-height:0 !important; }
}
/* heading spacing to match edge.css rhythm */
body.edge-native #et-main-area .et_pb_heading.h1 .et_pb_module_header { margin-bottom:8px; }
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_heading.h2 + .et_pb_text.lead,
body.edge-native:not(.page-id-17258) #et-main-area .section-head .et_pb_text.lead { margin-top:13px; }
body.edge-native #et-main-area .section-head .et_pb_heading.h2 { margin-top:10px; }
/* Team page (17258): native_emit builds section-head columns as display:block, where the
   mobile `.section-head{row-gap:8px}` rhythm rule is ignored → eyebrow touches title on
   phones. Other native pages get flex from the real converter; force it just for this page,
   MOBILE ONLY (so desktop margins stay collapsed/unchanged; structural display only — does
   not lock any VB-editable spacing). */
@media (max-width:600px){
  body.page-id-17258 #et-main-area .et_pb_column.section-head { display:flex !important; flex-direction:column !important; }
}

/* native image-cards (team/projects): edge-to-edge 4:3 photo, caption below (page-id-21028) */
body.edge-native #et-main-area .et_pb_column.imgcard { overflow:hidden; }
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.imgcard { padding:0 !important; }
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_image { width:100%; }
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.imgcard .et_pb_image { margin:0 !important; }
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_image .et_pb_image_wrap { display:block; width:100%; }
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_image img { aspect-ratio:4/3; object-fit:cover; width:100% !important; height:auto !important; border-radius:0; display:block; }
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_text { flex:1 1 auto; display:flex; align-items:center; min-height:78px; }
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.imgcard .et_pb_text { padding:16px 20px !important; }
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_text p { color:var(--ink); margin:0 !important; }

/* native: zero Divi's default module bottom-margins so edge.css rhythm rules; tighten section padding to match real (page-id-21028) */
body.edge-native #et-main-area .et_pb_text,
body.edge-native #et-main-area .et_pb_heading,
body.edge-native #et-main-area .et_pb_image,
body.edge-native #et-main-area .et_pb_button,
body.edge-native #et-main-area .et_pb_number_counter { margin-bottom:0; }

/* head row -> first content row gap */
body.edge-native #et-main-area .et_pb_row.section-head, 
body.edge-native #et-main-area .et_pb_row:has(.section-head) { margin-bottom:clamp(28px,3vw,48px) !important; }

/* native: center eyebrow + heading + lead inside centered section-heads (page-id-21028) */
body.edge-native #et-main-area .et_pb_column.section-head.center .et_pb_text,
body.edge-native #et-main-area .et_pb_column.section-head.center .et_pb_text p,
body.edge-native #et-main-area .et_pb_column.section-head.center .et_pb_heading,
body.edge-native #et-main-area .et_pb_column.section-head.center .et_pb_module_header { text-align:center !important; }
body.edge-native #et-main-area .et_pb_column.section-head.center .et_pb_text.lead p { margin-left:auto; margin-right:auto; max-width:62ch; }

/* native: center the section-head container on screen (760px, centered) — page-id-21028 */
body.edge-native #et-main-area .et_pb_column.section-head {
  max-width: 760px !important;
  margin-left: auto !important;
  margin-right: auto !important;
  float: none !important;
}

/* ===== NATIVE: exact-match measured real-homepage values (page-id-21028) ===== */
/* h2 color #333 + spacing (measured) */
body.edge-native #et-main-area .et_pb_heading.h2 h1, body.edge-native #et-main-area .et_pb_heading.h2 h2 { color:#333; margin-top:10px; line-height:1.06; letter-spacing:-.022em; }
/* lead color/size (measured) */
body.edge-native #et-main-area .et_pb_text.lead p { color:rgb(109,117,133); line-height:1.62; margin-top:13px; }
/* eyebrow text muted, only "//" green (measured: text=#6d7585) */
body.edge-native #et-main-area .et_pb_text.eyebrow p { color:rgb(109,117,133); }
/* stars exact (measured: #F5B958 14px) */
body.edge-native #et-main-area .quote__stars p { color:#F5B958; letter-spacing:3px; }
/* card shadow exact (measured) */
body.edge-native #et-main-area .et_pb_column.card { box-shadow:rgba(15,23,42,0.04) 0px 1px 2px 0px, rgba(15,23,42,0.16) 0px 14px 34px -22px; border:1px solid rgba(15,23,42,0.07); border-radius:22px; }
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.card { padding:24px 26px; }
/* quote card padding exact (measured: 30px) */
body.edge-native #et-main-area .et_pb_column.quote { padding:30px; }
/* sage panel padding exact (measured: 52px top, 49px sides) — (0,1,1) tier */
:where(body.edge-native #et-main-area) div.et_pb_section:where(.section--sage:not(.edge_hero)) { padding-left:49px; padding-right:49px; }
/* hero thumbnails: 120 / 120 / wide, 190 tall (measured) */
body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row { display:flex !important; gap:20px; flex-wrap:nowrap; max-width:none !important; }
body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row > .et_pb_column { width:120px !important; flex:0 0 120px; margin:0 !important; }
body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row > .et_pb_column:last-child { flex:1 1 auto; width:auto !important; }
body.edge-native #et-main-area .edge_hero__thumb img { width:100% !important; height:190px !important; object-fit:cover; border-radius:16px; }
/* MOBILE only: make the 3 hero thumbnails ~35% shorter (190px -> 124px). Desktop unchanged. */
@media (max-width:600px){
  body.edge-native #et-main-area .edge_hero__thumb img { height:124px !important; }
}
/* about image crop (measured: cover, ~490x300) */
body.edge-native #et-main-area .edge_about__img img { width:100% !important; aspect-ratio:490/300; object-fit:cover; height:auto !important; border-radius:8px; }
/* why-choose big image: 4:3 full width (measured 1160x870) */
body.edge-native #et-main-area .edge_bigimg img { width:100% !important; aspect-ratio:4/3; object-fit:cover; height:auto !important; border-radius:8px; }

/* ===== NATIVE: exact text sizes measured from real (page-id-21028) ===== */
/* h2 = 48px at desktop (was 46) */
/* hero subhead "20 Years Strong" = 18px (was 30) */
body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h1, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h2, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h3 { font-weight:700; margin-bottom:10px; letter-spacing:0; }
/* card title = 22px / 1 line / mb 8px (was 19px/2ln) */
body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h1, body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h2 { margin-bottom:8px; line-height:1.2; }
/* lead = 19.44px */
/* quote text = 16px */

/* team/project image-cards exact (measured: padding 0, caption 18px/500/#333) — page-id-21028 */
body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.card.imgcard { padding:0 !important; }
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_text p { font-weight:500; color:#333; }

/* ===== NATIVE exact-match round 2 (page-id-21028) ===== */
/* team/project caption: Archivo (real uses heading font, not Open Sans) */
body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_text p { font-family:var(--font-head) !important; }
/* icons: real SVG sized in the navy tile */
body.edge-native #et-main-area .et_pb_image.itile--navy img { width:28px !important; height:28px !important; }
/* testimonials: border, stars (SVG), author avatar+name+meta — all measured from real */
body.edge-native #et-main-area .et_pb_column.quote { border:1px solid rgb(228,232,238); display:flex !important; flex-direction:column; }
body.edge-native #et-main-area .et_pb_image.quote__stars { width:92px !important; margin:0 0 15px; }
body.edge-native #et-main-area .et_pb_image.quote__stars img { width:92px !important; height:16px !important; }
body.edge-native #et-main-area .et_pb_text.quote__text p { color:var(--navy); line-height:1.6; margin:0 0 16px; }
body.edge-native #et-main-area .et_pb_text.quote__by { display:flex !important; align-items:center; gap:13px; border-top:1px solid rgb(228,232,238); padding-top:18px; margin-top:auto !important; }
body.edge-native #et-main-area .et_pb_text.quote__by::before { flex:0 0 46px; width:46px; height:46px; border-radius:50%; background:rgb(233,240,253); color:var(--blue); font-weight:800; font-size:12.5px; font-family:Manrope,sans-serif; display:flex; align-items:center; justify-content:center; }
body.edge-native #et-main-area .et_pb_text.qav-cs::before { content:"CS"; }
body.edge-native #et-main-area .et_pb_text.qav-g::before { content:"G"; }
body.edge-native #et-main-area .et_pb_text.qav-mb::before { content:"MB"; }
body.edge-native #et-main-area .et_pb_text.quote__by .et_pb_text_inner { flex:1 1 auto; }
body.edge-native #et-main-area .et_pb_text.quote__by .et_pb_text_inner p { margin:0; color:rgb(109,117,133); line-height:1.45; font-family:Manrope,sans-serif !important; }
body.edge-native #et-main-area .et_pb_text.quote__by .et_pb_text_inner p strong { display:block; color:var(--navy); font-weight:700; }

/* fix double divider in reviews: drop the old border-top on the quote__by <p> (page-id-21028) */
body.edge-native #et-main-area .et_pb_text.quote__by .et_pb_text_inner p { border-top:none; padding-top:0; }

/* ===== font-weight/family corrections from sweep (page-id-21028) ===== */
/* hero subhead weight 500 (was 700) */
body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h1, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h2, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h3 { font-weight:500; }
/* card title weight 500 (was 700) */
body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h1, body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h2 { font-weight:500; }
/* quote name font Archivo (was Manrope) */
body.edge-native #et-main-area .et_pb_text.quote__by .et_pb_text_inner p strong { font-family:var(--font-head) !important; }

/* hero: left column natural height (don't stretch children); image column still matches it (page-id-21028) */
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { align-self:flex-start !important; }
body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead * { height:auto !important; }
/* About h2 marginTop 20px (measured; section-heads stay 10px) */
body.edge-native #et-main-area .et_pb_column:not(.section-head) .et_pb_heading.h2 h1, body.edge-native #et-main-area .et_pb_column:not(.section-head) .et_pb_heading.h2 h2 { margin-top:20px; }

/* hero subhead: divider + spacing above "20 Years Strong" (measured from real) — page-id-21028 */
body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead { border-top:1px solid rgb(214,217,207); padding-top:30px; margin-top:30px; height:auto !important; }

/* hero button: arrow chip + padding + button/phone flex row (measured from real) — page-id-21028 */
body.edge-native #et-main-area a.et_pb_button.btn--primary { padding:17px 18px 17px 30px; display:inline-flex !important; align-items:center; gap:10px; }
body.edge-native #et-main-area a.et_pb_button.btn--primary::after {
  font-family:inherit !important; content:"" !important; opacity:1 !important; position:static !important; margin:0;
  display:inline-flex !important; width:26px; height:26px; border-radius:50%;
  background-color:rgba(255,255,255,.22);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E");
  background-size:14px; background-position:center; background-repeat:no-repeat;
}
body.edge-native #et-main-area a.et_pb_button.btn--primary::before { display:none !important; }
/* button + phone side by side, centered, gap 20px */
body.edge-native #et-main-area .edge_hero__btns { display:flex !important; flex-direction:row !important; align-items:center !important; gap:20px !important; }
body.edge-native #et-main-area .edge_hero__btns .et_pb_button_module_wrapper { margin:0; }

/* hero spacing to match real block structure (measured) — page-id-21028 */
body.edge-native #et-main-area .edge_hero .et_pb_heading.h1 .et_pb_module_header { margin-bottom:8px !important; line-height:1.04 !important; }
body.edge-native #et-main-area .edge_hero__btns { margin-top:30px; }
/* MOBILE only: ~70% less space above & below the hero buttons column (30px -> 9px). Kept
   non-!important so the VB can still override both margins (and desktop stays 30px, editable). */
@media (max-width:600px){
  body.edge-native #et-main-area .edge_hero .edge_hero__btns { margin-top:9px; }
  body.edge-native #et-main-area .et_block_row .et_pb_column.edge_hero__btns { margin-bottom:9px; }
}
body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h1, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h2, body.edge-native #et-main-area .et_pb_heading.edge_hero__subhead h3 { line-height:1.2; }

/* hero thumbnails: 30px gap above (measured) — page-id-21028 */
body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row { margin-top:30px !important; }

/* hero left column: flex-column so children stack in order (the button column was floating, breaking the divider position) — page-id-21028 */
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { display:flex !important; flex-direction:column !important; align-items:stretch; align-self:flex-start !important; }
body.edge-native #et-main-area .edge_hero__btns { float:none !important; width:100% !important; }

/* hero left content width = 620px like real (so text wraps identically) — page-id-21028 */
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { align-items:flex-start !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child > * { max-width:620px !important; width:100% !important; }

/* hero: 3rd thumbnail fills to 340 + columns 620/gap72/432 like real — page-id-21028 */
body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row > .et_pb_column:last-child { flex:1 1 0 !important; min-width:0 !important; width:auto !important; max-width:none !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row { justify-content:flex-start !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { flex:0 0 620px !important; max-width:620px !important; margin:0 !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:last-child { flex:0 0 432px !important; max-width:432px !important; margin:0 0 0 72px !important; }

/* hero thumbnail image module fills its column (page-id-21028) */
body.edge-native #et-main-area .et_pb_image.edge_hero__thumb { width:100% !important; }
body.edge-native #et-main-area .et_pb_image.edge_hero__thumb .et_pb_image_wrap { width:100% !important; display:block !important; }

/* hero fine-tune: thumbnail gap 16 (thumb3 wider) + image closer to thumbnails (page-id-21028) */
body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row { gap:16px !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:last-child { margin-left:12px !important; }

/* hero: centered content + clean row gap (override fragile flex-start + margin-left that broke VB & centering) — page-id-21028 */
body.edge-native #et-main-area .edge_hero > .et_pb_row { justify-content:center !important; gap:72px !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { flex:0 0 620px !important; max-width:620px !important; margin:0 !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:last-child { flex:0 0 432px !important; max-width:432px !important; margin:0 !important; }

/* hero EXACT centering (gap double-counted; use margin) + button arrow vertical-center — page-id-21028 */
body.edge-native #et-main-area .edge_hero > .et_pb_row { justify-content:center !important; gap:0 !important; }
body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { margin:0 72px 0 0 !important; }
body.edge-native #et-main-area a.et_pb_button.btn--primary { display:inline-flex !important; align-items:center !important; }
body.edge-native #et-main-area a.et_pb_button.btn--primary::after { align-self:center !important; vertical-align:middle !important; margin-top:0; }

/* button arrow: kill Divi's translateY(-13px) that lifts the chip off-center — page-id-21028 */
body.edge-native #et-main-area a.et_pb_button.btn--primary::after { transform:none !important; top:auto !important; }
body.edge-native #et-main-area a.et_pb_button.btn--primary:hover::after { transform:none !important; }

/* hero background as a content-width panel (1260px), not full-screen — page-id-21028 */
body.edge-native #et-main-area .et_pb_section.edge_hero {
  max-width:var(--maxw) !important; margin-left:auto !important; margin-right:auto !important;
  border:1px solid rgba(20, 184, 166,.16); border-radius:0;
}
body.edge-native #et-main-area .et_pb_section.edge_hero > .et_pb_row {
  max-width:100% !important; margin-left:0 !important; margin-right:0 !important; width:100% !important;
}

/* hero panel: no border + soft fading edges (sage fades to transparent toward the panel edges) — page-id-21028 */
body.edge-native #et-main-area .et_pb_section.edge_hero {
  border:none; border-radius:0;
  background:radial-gradient(135% 145% at 50% 22%, #F4F7FB 0%, #EDF2F8 50%, rgba(237,242,248,0.5) 80%, rgba(237,242,248,0) 100%);
}



/* section vertical padding baseline 52px (also set per-section in editor; VB edits override) — page-id-21028.
   (0,1,1) via :where — above Divi's base .et_pb_section (0,1,0), below the VB
   emission (.et_pb_section_N.et_pb_section, (0,2,0)) so VB edits really DO override. */
:where(body.edge-native #et-main-area) div.et_pb_section:where(.section) { padding-top:52px; padding-bottom:52px; }

/* ===== PREMIUM panels for ALL native pages: mist + navy = content-width with border + shadow (match the premium sage panels) ===== */
body.edge-native #et-main-area .et_pb_section.section--mist,
body.edge-native #et-main-area .et_pb_section.section--navy:not(.edge_hero) {
  max-width:var(--maxw) !important; margin-left:auto !important; margin-right:auto !important; border-radius:0;
  box-shadow:0 1px 2px rgba(15,23,42,.03), 0 26px 54px -40px rgba(15,23,42,.18);
}
/* lateral padding split out at the same (0,1,1) VB-editable tier (see sage) */
:where(body.edge-native #et-main-area) div.et_pb_section:where(.section--mist, .section--navy:not(.edge_hero)) {
  padding-left:48.96px; padding-right:48.96px;
}
body.edge-native #et-main-area .et_pb_section.section--mist { background:var(--mist); border:1px solid rgba(37, 99, 235,.12); }
body.edge-native #et-main-area .et_pb_section.section--navy:not(.edge_hero) { background:var(--navy); border:none; }
body.edge-native #et-main-area .et_pb_section.section--mist > .et_pb_row,
body.edge-native #et-main-area .et_pb_section.section--navy:not(.edge_hero) > .et_pb_row { max-width:100% !important; }
/* navy panel text white */
body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_heading h1, body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_heading h2,
body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_text p { color:#fff; }

/* book page: form card (premium) — all native pages */
body.edge-native #et-main-area .edge_form_card { max-width:760px; margin:0 auto; background:linear-gradient(180deg,#fff,#fafbfc); border:1px solid rgba(15,23,42,.12); border-radius:24px; padding:clamp(30px,3.6vw,52px); box-shadow:0 1px 2px rgba(15,23,42,.04), 0 32px 72px -42px rgba(15,23,42,.26); position:relative; overflow:hidden; }
body.edge-native #et-main-area .edge_form_card::before { content:""; position:absolute; top:0; left:0; right:0; height:4px; background:linear-gradient(90deg,#4A6CF7 0%,#63E6DB 100%); }

/* ════════════════════════════════════════════════════════════════════
   FAQ toggles (divi/toggle) — collapsed by default, premium accordion.
   Divi 5 doesn't regenerate per-module toggle CSS on WP-CLI content
   updates, so we own the collapse state + the +/− affordance here.
   (2026-06-18)
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .edge_faq .et_pb_toggle {
  background:#fff; border:1px solid rgba(15,23,42,.12); border-radius:16px;
  margin:0 0 14px; padding:0; overflow:hidden;
  box-shadow:0 1px 2px rgba(15,23,42,.04), 0 18px 40px -34px rgba(15,23,42,.22);
  transition:box-shadow .2s ease, border-color .2s ease;
}
body.edge-native #et-main-area .edge_faq .et_pb_toggle:hover { border-color:rgba(37, 99, 235,.35); }
body.edge-native #et-main-area .edge_faq .et_pb_toggle_title {
  margin:0; padding:20px 60px 20px 26px; cursor:pointer; position:relative;
  font-family:"Archivo",sans-serif; font-weight:700; line-height:1.4; color:#0F172A;
}
/* +/− pill on the right */
body.edge-native #et-main-area .edge_faq .et_pb_toggle_title::after {
  content:"+"; position:absolute; right:22px; top:50%; transform:translateY(-50%);
  width:30px; height:30px; display:grid; place-items:center; border-radius:50%;
  background:rgba(37, 99, 235,.10); color:#2563EB; font-size:22px; font-weight:600; line-height:1;
  transition:background .2s ease, color .2s ease;
}
body.edge-native #et-main-area .edge_faq .et_pb_toggle_open .et_pb_toggle_title::after {
  content:"−"; background:#2563EB; color:#fff;
}
/* collapse / expand (override Divi's missing per-module rule) */
body.edge-native #et-main-area .edge_faq .et_pb_toggle_close .et_pb_toggle_content { display:none !important; }
body.edge-native #et-main-area .edge_faq .et_pb_toggle_open  .et_pb_toggle_content { display:block !important; }
body.edge-native #et-main-area .edge_faq .et_pb_toggle_content {
  padding:0 26px 22px; color:#5b6472; line-height:1.62;
}
body.edge-native #et-main-area .edge_faq .et_pb_toggle_content p { margin:0 0 10px; }
body.edge-native #et-main-area .edge_faq .et_pb_toggle_content :last-child { margin-bottom:0; }

/* ════════════════════════════════════════════════════════════════════
   Premium checklists (service cards) + ENERGY STAR logo sizing (2026-06-18)
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .checklist { list-style:none !important; margin:16px 0 0; padding:0; text-align:left; }
body.edge-native #et-main-area .checklist li { position:relative; padding-left:28px; margin:0 0 11px; color:var(--muted); line-height:1.5; }
body.edge-native #et-main-area .checklist li::before { content:""; position:absolute; left:0; top:2px; width:18px; height:18px; border-radius:50%; background:rgba(20, 184, 166,.12); }
body.edge-native #et-main-area .checklist li::after { content:""; position:absolute; left:6px; top:5px; width:5px; height:9px; border:solid var(--green); border-width:0 2px 2px 0; transform:rotate(45deg); }
body.edge-native #et-main-area .edge_es__logo img { max-width:230px; width:100%; height:auto; }

/* ════════════════════════════════════════════════════════════════════
   Match-homepage polish: card icon tiles, checklist, card rhythm (2026-06-18)
   CLI-applied image modules skip Divi's per-module sizing, so the navy icon
   tiles render as wide bars — clamp them to the homepage's 58px square here.
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .et_pb_image.itile--navy {
  width:58px !important; min-width:58px !important; max-width:58px !important;
  height:58px !important; flex:0 0 58px !important; padding:0;
  overflow:hidden; margin:0 0 18px;
}
body.edge-native #et-main-area .et_pb_image.itile--navy .et_pb_image_wrap { width:30px !important; height:30px !important; display:block; line-height:0; }
body.edge-native #et-main-area .et_pb_image.itile--navy img { width:30px !important; height:30px !important; max-width:30px !important; object-fit:contain; }

/* checklist inside service cards (Divi quote-mangles the class, so target by context) */
body.edge-native #et-main-area .et_pb_column.card .et_pb_text ul { list-style:none !important; margin:13px 0 0; padding:0; text-align:left; }
body.edge-native #et-main-area .et_pb_column.card .et_pb_text li { position:relative; padding-left:26px; margin:0 0 10px; color:var(--muted); line-height:1.5; }
body.edge-native #et-main-area .et_pb_column.card .et_pb_text li:last-child { margin-bottom:0; }
body.edge-native #et-main-area .et_pb_column.card .et_pb_text li::before { content:""; position:absolute; left:0; top:2px; width:18px; height:18px; border-radius:50%; background:rgba(20, 184, 166,.12); }
body.edge-native #et-main-area .et_pb_column.card .et_pb_text li::after { content:""; position:absolute; left:6px; top:5px; width:5px; height:9px; border:solid var(--green); border-width:0 2px 2px 0; transform:rotate(45deg); }

/* card content: left-aligned, tight icon→title→list rhythm (match homepage cards) */
body.edge-native #et-main-area .et_pb_column.card { text-align:left; }
body.edge-native #et-main-area .et_pb_column.card .h3 { margin:0 0 4px; }

/* eyebrow: block (not Divi's default flex, which centered it) so it follows its
   column alignment — left in split columns, centered in .section-head.center */
body.edge-native #et-main-area .et_pb_text.eyebrow { display:block !important; }
body.edge-native #et-main-area .et_pb_text.eyebrow .et_pb_text_inner { display:block !important; }

/* ════════════════════════════════════════════════════════════════════
   About Us section layout fixes — equal cards, even stats, aligned splits
   (semantic classes are unique to /about-us/, so the homepage is untouched)
   (2026-06-18)
   ════════════════════════════════════════════════════════════════════ */
/* tighten the head → content gap (was up to 48px, read as "too much space") */
body.edge-native #et-main-area .edge_statband .et_pb_row:has(.section-head),
body.edge-native #et-main-area .edge_servicecards .et_pb_row:has(.section-head) { margin-bottom:22px !important; }
/* (stat-band gap + even-column fixes live in the high-specificity block below —
   they must out-rank the .et_pb_section.section--sage stat-row rule at line ~561) */

/* (A) SERVICE CARDS — 3 equal, centered, equal-height (was 193/193/256, left-clustered) */
body.edge-native #et-main-area .edge_servicecards .et_pb_row:has(> .et_pb_column.card) {
  display:flex !important; flex-wrap:nowrap !important; justify-content:center !important;
  align-items:stretch !important; gap:26px !important; max-width:1160px; margin-left:auto !important; margin-right:auto !important;
}
body.edge-native #et-main-area .edge_servicecards .et_pb_row > .et_pb_column.card {
  flex:1 1 0 !important; width:auto !important; max-width:none !important; min-width:0 !important; margin:0 !important;
}
/* tight icon → title → list rhythm inside the card (the card is flex-column with a
   ~30px flex GAP — zero it so spacing comes only from the intended margins) */
body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { gap:0 !important; justify-content:flex-start !important; }
body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .et_pb_image.itile--navy { margin:0 0 16px; }
body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .h3 { margin:0 0 6px; }
body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .et_pb_text ul { margin-top:4px; }

/* (B) STAT BAND — 4 EVEN columns, centered, clean divider, tight gap.
   Selector includes .et_pb_section.section--sage.edge_statband to OUT-RANK the
   generic .et_pb_section.section--sage .et_pb_row:has(.stat__num) rule (~line 561)
   which forced 46px margin-top + 46px padding-top (the "too much space"). */
body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) {
  display:flex !important; flex-wrap:nowrap !important; justify-content:center !important; gap:0 !important;
  max-width:1040px !important; width:100% !important;
  margin:6px auto 0 !important; padding-top:30px !important;
  border-top:1px solid rgba(15,23,42,.14) !important;
}
body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) > .et_pb_column {
  flex:1 1 0 !important; width:auto !important; max-width:none !important; min-width:0 !important; margin:0 !important;
  padding:4px 18px !important; text-align:center !important;
  display:flex !important; flex-direction:column; align-items:center; justify-content:center;
  border-left:1px solid rgba(15,23,42,.14) !important;
}
body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) > .et_pb_column:first-child { border-left:none !important; padding-left:0 !important; }
body.edge-native #et-main-area .edge_statband .stat__num h1,
body.edge-native #et-main-area .edge_statband .stat__num h2,
body.edge-native #et-main-area .edge_statband .stat__num h3,
body.edge-native #et-main-area .edge_statband .stat__label p { text-align:center; }

/* (C) WHAT-WE-BELIEVE — a distinct WHITE BORDERED PANEL (content-width card) with a
   framed ENERGY STAR credential badge, vertically-centred split */
body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) {
  max-width:var(--maxw) !important; margin:0 auto !important;
  background:linear-gradient(180deg,#ffffff,#f8fafc);
  border:1px solid rgba(15,23,42,.12); border-radius:18px;
  box-shadow:0 1px 2px rgba(15,23,42,.03), 0 24px 52px -38px rgba(15,23,42,.18);
  padding:clamp(38px,4vw,60px) clamp(30px,3.4vw,56px); position:relative; overflow:hidden;
}
/* thin accent rule along the top edge (brand gradient) */
body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip)::before {
  content:""; position:absolute; top:0; left:0; right:0; height:4px;
  background:linear-gradient(90deg,#4A6CF7 0%,#63E6DB 100%);
}
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) > .et_pb_row { display:flex !important; align-items:center !important; gap:clamp(36px,4vw,64px); max-width:100% !important; }
/* framed ENERGY STAR badge column */
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .et_pb_column.edge_es__frame {
  background:rgba(244,247,250,.75); border:1px solid rgba(15,23,42,.1); border-radius:16px;
  padding:26px 22px; display:flex !important; flex-direction:column; align-items:center; gap:14px;
}
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .edge_es__frame .edge_es__logo { display:flex; justify-content:center; margin:0; }
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .edge_es__frame .edge_es__logo img { max-width:172px; }
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .edge_es__cap p { font-weight:600; color:var(--navy); text-align:center; line-height:1.45; margin:0; }

/* (D) CASE STUDY split — vertically centred so the button sits with the copy (not floating low) */
body.edge-native #et-main-area .edge_case > .et_pb_row { display:flex !important; align-items:center !important; gap:clamp(36px,4vw,60px); }
body.edge-native #et-main-area .edge_case .et_pb_button { margin-top:22px; }
body.edge-native #et-main-area .edge_case .edge_about__img img { aspect-ratio:4/3; }

/* ════════════════════════════════════════════════════════════════════
   Eyebrow "//" on the SAME LINE as the label (2026-06-18)
   The "//" was a ::before on the block-level text MODULE, but the label sits
   in a nested block <p> — so "//" wrapped to its own line. Render it INSIDE the
   <p> (inline) and drop the module-level mark.
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .et_pb_text.eyebrow::before { content:none !important; }
body.edge-native #et-main-area .et_pb_text.eyebrow p::before { content:"// " !important; color:var(--green); font-weight:700; }
body.edge-native #et-main-area .et_pb_section.section--navy .et_pb_text.eyebrow p::before { color:var(--gold); }

/* ════════════════════════════════════════════════════════════════════
   About Us: tighten stats + service cards (too much internal space) (2026-06-18)
   ════════════════════════════════════════════════════════════════════ */
/* smaller section padding */
body.edge-native #et-main-area .et_pb_section.edge_statband,
body.edge-native #et-main-area .et_pb_section.edge_servicecards { padding-top:40px; padding-bottom:42px; }
/* head -> content gap (was 82-88px) */
body.edge-native #et-main-area .edge_statband .et_pb_row:has(.section-head),
body.edge-native #et-main-area .edge_servicecards .et_pb_row:has(.section-head) { margin-bottom:14px !important; }
/* stat row: tighter divider gap (was margin 6 + padding 30) */
body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) { margin-top:4px !important; padding-top:18px !important; }
/* SERVICE CARDS: EQUAL height (stretch), top-aligned content, tight spacing */
body.edge-native #et-main-area .edge_servicecards .et_pb_row:has(> .et_pb_column.card) { align-items:stretch !important; margin-top:0 !important; }
body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { padding:24px 24px; justify-content:flex-start !important; }
body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .et_pb_text li { margin-bottom:9px; }

/* ════════════════════════════════════════════════════════════════════
   About Us: EVEN + tight rhythm. Divi 5 sets section flex row-gap:60px and
   column flex row-gap:30px; combined with module margins that made spacing
   both excessive AND uneven (eyebrow→title 40, title→para 43, para→content 74).
   Set even flex gaps and zero the stacking margins so the gap alone governs. (2026-06-18)
   ════════════════════════════════════════════════════════════════════ */
/* section: rows 24px apart (head → content) */
body.edge-native #et-main-area .et_pb_section.edge_statband,
body.edge-native #et-main-area .et_pb_section.edge_servicecards,
body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip),
body.edge-native #et-main-area .et_pb_section.edge_case { row-gap:24px !important; }
/* head columns: even 12px between eyebrow / title / paragraph */
body.edge-native #et-main-area .edge_statband .section-head,
body.edge-native #et-main-area .edge_servicecards .section-head { row-gap:12px !important; }
/* split text columns (believe / case): even 14px between eyebrow / title / paragraph / button */
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) > .et_pb_row > .et_pb_column,
body.edge-native #et-main-area .edge_case > .et_pb_row > .et_pb_column { row-gap:14px !important; }
/* zero module margins + inner heading/text margins so the flex gap alone governs (even) */
body.edge-native #et-main-area .edge_statband .section-head > *,
body.edge-native #et-main-area .edge_servicecards .section-head > *,
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) > .et_pb_row > .et_pb_column > *,
body.edge-native #et-main-area .edge_case > .et_pb_row > .et_pb_column > * { margin-top:0; margin-bottom:0; }
body.edge-native #et-main-area .edge_statband .section-head :is(h1,h2,p),
body.edge-native #et-main-area .edge_servicecards .section-head :is(h1,h2,p),
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) :is(h1,h2) , body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .et_pb_text p,
body.edge-native #et-main-area .edge_case :is(h1,h2), body.edge-native #et-main-area .edge_case .et_pb_text p { margin-top:0; margin-bottom:0; }
/* let the section gap govern head→content (zero row margins) */
body.edge-native #et-main-area .edge_statband .et_pb_row,
body.edge-native #et-main-area .edge_servicecards .et_pb_row { margin-top:0 !important; margin-bottom:0 !important; }

/* ════════════════════════════════════════════════════════════════════
   Buttons: arrow AFTER the text, not under it (2026-06-18)
   Native (et_flex_module) buttons default to flex-direction:column, stacking the
   arrow below the label. Force row so the arrow sits inline after the text.
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .et_pb_button.et_flex_module,
body.edge-native #et-main-area a.et_pb_button { flex-direction:row !important; align-items:center !important; }

/* the .lead module keeps a 13px margin-top (line ~604) that out-specifies the
   generic reset → uneven title→paragraph gap. Zero it at higher specificity. */
body.edge-native #et-main-area .edge_statband .section-head .et_pb_text.lead,
body.edge-native #et-main-area .edge_servicecards .section-head .et_pb_text.lead,
body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .et_pb_text.lead,
body.edge-native #et-main-area .edge_case .et_pb_text.lead { margin-top:0; }

/* FAQ: hide Divi's own toggle icon (ETmodules ::before) so only our blue +/− pill
   shows. On VB-saved pages (insulation/solar/hvac/electrification) Divi generated
   its icon, doubling up with ours. (2026-06-18) */
body.edge-native #et-main-area .edge_faq .et_pb_toggle_title::before { display:none !important; content:none !important; }

/* ════════════════════════════════════════════════════════════════════
   edge_hero: full content-width row + balanced split (2026-06-18)
   Service-page hero rows are plain (no display:block), so Divi caps them at
   ~1080px → the image overhangs the panel. Force content width + center the text
   so all heroes match About Us (1260px, balanced). */
body.edge-native #et-main-area .et_pb_section.edge_hero > .et_pb_row {
  max-width:var(--maxw) !important; width:100% !important; margin-left:auto !important; margin-right:auto !important;
}
body.edge-native #et-main-area .et_pb_section.edge_hero > .et_pb_row > .et_pb_column:first-child {
  display:flex !important; flex-direction:column; justify-content:center;
}

/* ════════════════════════════════════════════════════════════════════
   edge_panel — generic bordered card panel (same chrome as believe/estrip).
   Gives "Recent installs" + "About EDGE / Built on Experience" the contained,
   bordered look the user asked for (hpwh). Scoped to the panel classes only. (2026-06-18)
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .et_pb_section.edge_panel {
  max-width:var(--maxw) !important; margin:clamp(34px,3.4vw,56px) auto 0 !important;
  background:linear-gradient(180deg,#ffffff,#f8fafc);
  border:1px solid rgba(15,23,42,.12); border-radius:18px;
  box-shadow:0 1px 2px rgba(15,23,42,.03), 0 24px 52px -38px rgba(15,23,42,.18);
  padding:clamp(38px,4vw,60px) clamp(30px,3.4vw,56px); position:relative; overflow:hidden;
}
/* thin brand-gradient accent rule on the top edge (matches estrip/believe) */
body.edge-native #et-main-area .et_pb_section.edge_panel::before {
  content:""; position:absolute; top:0; left:0; right:0; height:4px;
  background:linear-gradient(90deg,#4A6CF7 0%,#63E6DB 100%);
}
/* main service pages put "Built on Experience" on a section--sage band; that rule
   (style.css ~510) ties edge_panel on specificity and keeps the sage bg. Out-specify it
   so the panel reads as a WHITE card everywhere (consistent with hpwh). (2026-06-19) */
body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel {
  background:linear-gradient(180deg,#ffffff,#f8fafc);
}
/* edge_panel uses margin:0 auto (no vertical margin), so two STACKED bordered panels
   touched ("lipite", e.g. RECOGNIZED + ABOUT EDGE on hpi/hpwh). Add breathing room
   between any two consecutive bordered panels. (2026-06-19) */
body.edge-native #et-main-area .et_pb_section:is(.edge_panel,.edge_estrip,.edge_believe)
  + .et_pb_section:is(.edge_panel,.edge_estrip,.edge_believe) {
  margin-top:clamp(32px,3.4vw,52px);
}

/* ════════════════════════════════════════════════════════════════════
   Panel VARIETY — too many panels looked identical (white card, text-left /
   image-right). Differentiate by (a) tinted backgrounds and (b) flipping the
   split so the image sits on the LEFT (zig-zag). (2026-06-19)
   Roles: estrip = white + framed badge (credential signature); intro split
   ("We Keep" / "Stop Drafts") = sage tint; about ("Built on Experience") =
   mist tint + flipped; installs gallery = white (distinct layout).
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .et_pb_section.edge_panel.edge_tint-sage,
body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel.edge_tint-sage {
  background:linear-gradient(180deg,#f3f8f3,#e7f0e9);
  border-color:rgba(20, 184, 166,.18);
}
body.edge-native #et-main-area .et_pb_section.edge_panel.edge_tint-mist,
body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel.edge_tint-mist {
  background:linear-gradient(180deg,#f5f8fc,#e9f1fa);
  border-color:rgba(37, 99, 235,.18);
}
/* flip ONLY the split row (the one holding the image) — never the stats row */
body.edge-native #et-main-area .edge_flip > .et_pb_row:has(.edge_about__img) {
  flex-direction:row-reverse !important;
}

/* even head -> content rhythm inside the panel */
body.edge-native #et-main-area .et_pb_section.edge_panel { row-gap:24px !important; }
body.edge-native #et-main-area .edge_panel .section-head { row-gap:12px !important; }
body.edge-native #et-main-area .edge_panel .section-head > *,
body.edge-native #et-main-area .edge_panel .section-head :is(h1,h2,p) { margin-top:0; margin-bottom:0; }
body.edge-native #et-main-area .edge_panel .et_pb_row { margin-top:0 !important; margin-bottom:0 !important; }

/* About split inside a panel — vertically centre text + image, rounded image */
body.edge-native #et-main-area .edge_about > .et_pb_row { display:flex !important; align-items:center !important; gap:clamp(36px,4vw,64px); max-width:100% !important; }
body.edge-native #et-main-area .edge_about > .et_pb_row > .et_pb_column { row-gap:14px !important; }
body.edge-native #et-main-area .edge_about > .et_pb_row > .et_pb_column > * { margin-top:0; margin-bottom:0; }
body.edge-native #et-main-area .edge_about .et_pb_text.lead { margin-top:0; }
body.edge-native #et-main-area .edge_about .edge_about__img img { border-radius:14px; aspect-ratio:4/3; object-fit:cover; width:100% !important; height:auto !important; }

/* ════════════════════════════════════════════════════════════════════
   User (2026-06-19): too many sections had the colored gradient accent line
   on top — remove it. Panels stay defined by border + tint + shadow.
   (Reversible: delete this block to bring the accent line back.)
   ════════════════════════════════════════════════════════════════════ */
body.edge-native #et-main-area .et_pb_section:is(.edge_panel,.edge_estrip,.edge_believe)::before {
  display:none !important; content:none !important;
}

/* ════════════════════════════════════════════════════════════════════
   RESPONSIVE STACKING — DESKTOP DESIGN UNCHANGED (2026-06-19)
   The large-screen design stays EXACTLY as designed. These rules ONLY take
   effect on smaller devices: Divi 5 generated fixed-px column widths with no
   responsive breakpoints, so on tablet/phone columns didn't shrink/stack and
   the page overflowed horizontally. Add tablet/phone breakpoints only.
   Nothing here applies above 980px. Reversible: delete this block.
   ════════════════════════════════════════════════════════════════════ */

/* ═══ TABLET ≤ 980px — stack 2-col splits, card grids go 2-up ═══ */


/* ===== EDITABLE FONT SIZES (desktop defaults; Divi VB overrides; mobile @media below overrides these) ===== */
:where(body.edge-native) :where(.checklist) li { font-size:15.5px; }
:where(body.edge-native) :where(.et_pb_text) .eyebrow { font-size:13px; }
:where(body.edge-native) :where(.et_pb_text) .lead { font-size:clamp(16px,1.4vw,19px); }
:where(body.edge-native) :where(.edge_faq) .et_pb_toggle_title { font-size:clamp(16px,1.15vw,18px); }
:where(body.edge-native) :where(.edge_faq) .et_pb_toggle_content { font-size:15.5px; }
:where(body.edge-native) :where(.et_pb_text.stat__label) .et_pb_text_inner { font-size:12px; }
:where(body.edge-native) :where(.et_pb_testimonial .et_pb_testimonial_description_inner) .et_pb_text_inner { font-size:15px; }
:where(body.edge-native) :where(.et_pb_text.eyebrow) .et_pb_text_inner { font-size:13px; }
:where(body.edge-native) :where(.et_pb_column.card .et_pb_text) li { font-size:15px; }
:where(body.edge-native) :where(.et_pb_column.quote .et_pb_text.quote__stars) .et_pb_text_inner { font-size:18px; }
:where(body.edge-native) :where(.et_pb_column.quote .et_pb_text.quote__by) .et_pb_text_inner { font-size:14px; }
:where(body.edge-native) :where(:is(.edge_believe,.edge_estrip) .edge_es__cap) .et_pb_text_inner { font-size:13px; }
:where(body.edge-native) :where(.et_pb_column.quote .et_pb_text:not(.quote__stars):not(.quote__by)) .et_pb_text_inner { font-size:15px; }
:where(body.edge-native) :where(.quote__stars) .et_pb_text_inner { font-size:14px; }
:where(body.edge-native) .et_pb_heading.stat__num h1, :where(body.edge-native) .et_pb_heading.stat__num h2, :where(body.edge-native) .et_pb_heading.stat__num h3 { font-size:clamp(32px,3.6vw,46px); }
:where(body.edge-native) .et_pb_heading.h1 h1, :where(body.edge-native) .et_pb_heading.h1 h2 { font-size:clamp(34px,5vw,62px); }
:where(body.edge-native) .et_pb_heading.h2 h1, :where(body.edge-native) .et_pb_heading.h2 h2 { font-size:clamp(28px,3.7vw,46px); }
:where(body.edge-native) .et_pb_heading.h3 h1, :where(body.edge-native) .et_pb_heading.h3 h2 { font-size:19px; }
:where(body.edge-native) :where(.et_pb_text.lead) .et_pb_text_inner { font-size:clamp(16px,1.4vw,19px); }
:where(body.edge-native) :where(.et_pb_text.stat__label) .et_pb_text_inner { font-size:12px; }
:where(body.edge-native) :where(.et_pb_text.lead) .et_pb_text_inner { font-size:19px; }
:where(body.edge-native) .et_pb_heading.h2 h1, :where(body.edge-native) .et_pb_heading.h2 h2 { font-size:clamp(30px,3.35vw,48px); }
:where(body.edge-native) .et_pb_heading.edge_hero__subhead h1, :where(body.edge-native) .et_pb_heading.edge_hero__subhead h2, :where(body.edge-native) .et_pb_heading.edge_hero__subhead h3 { font-size:18px; }
:where(body.edge-native) :where(.et_pb_text.lead) .et_pb_text_inner { font-size:19.44px; }
:where(body.edge-native) :where(.et_pb_text.quote__text) .et_pb_text_inner { font-size:16px; }
:where(body.edge-native) :where(.et_pb_column.imgcard .et_pb_text) .et_pb_text_inner { font-size:14px; }
:where(body.edge-native) :where(.et_pb_column.imgcard .et_pb_text) .et_pb_text_inner { font-size:18px; }
:where(body.edge-native) :where(.et_pb_text.quote__by .et_pb_text_inner) .et_pb_text_inner { font-size:12.5px; }
:where(body.edge-native) :where(.et_pb_text.quote__by .et_pb_text_inner) .et_pb_text_inner strong { font-size:14.5px; }
:where(body.edge-native) :where(.et_pb_column.card) .et_pb_heading.h3 h1, :where(body.edge-native) :where(.et_pb_column.card) .et_pb_heading.h3 h2 { font-size:22px; }
:where(body.edge-native) :where(.et_pb_column.quote .et_pb_text:not(.quote__stars):not(.quote__by)) .et_pb_text_inner { font-size:16px; }

@media (max-width:980px){
  body.edge-native #et-main-area .et_pb_row { flex-wrap:wrap !important; }
  /* stack the top-level split / hero / case columns (image under text) */
  body.edge-native #et-main-area :is(.edge_hero,.edge_estrip,.edge_believe,.edge_case) > .et_pb_row { flex-direction:column !important; }
  body.edge-native #et-main-area :is(.edge_hero,.edge_estrip,.edge_believe,.edge_case) > .et_pb_row > .et_pb_column { flex:1 1 100% !important; max-width:100% !important; width:100% !important; }
  /* generic 2-col sections (non-card) stack too — but NOT stat rows (keep numbers side by side) */
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row > .et_pb_column:not(.card):not(.imgcard):not(:has(.stat__num)):not(:has(.edge_partner_logo)):not(:has(.edge_grid_photo)) { flex:1 1 100% !important; max-width:100% !important; width:100% !important; }
  /* stat rows stay HORIZONTAL on mobile (numbers + separator, like desktop) */
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:has(.stat__num) { flex:1 1 0 !important; max-width:none !important; min-width:0 !important; width:auto !important; }
  /* About EDGE: stack ONLY the image-split row, but KEEP the stats row HORIZONTAL
     (2-3 numbers + separator, just like desktop — preserve the template) */
  body.edge-native #et-main-area .edge_about > .et_pb_row:has(.edge_about__img) { flex-direction:column !important; }
  body.edge-native #et-main-area .edge_about > .et_pb_row:has(.edge_about__img) > .et_pb_column { flex:1 1 100% !important; max-width:100% !important; width:100% !important; }
  /* tighten the big space above & below the stacked image (was 36px flex-gap + 30px Divi column
     margin ≈ 66px). Non-!important so the VB can still override these margins.
     gap:0 — the stacked text column already carries the 12px !important margin (rule ~1735),
     so any flex gap ADDS to it; 12+16=28px read as "paragraph far from photo" . */
  body.edge-native #et-main-area .edge_about > .et_pb_row:has(.edge_about__img) { gap:0; }
  body.edge-native #et-main-area .edge_about > .et_pb_row:has(.edge_about__img) > .et_pb_column { margin-top:0; margin-bottom:0; }
  /* below the image: pull the stats row (divider) closer (was ~46px). These were already pinned
     !important by the generic stat-row rule, so !important is needed to win — but scoped to .edge_about.
     margin-top 12 = same 12px the photo has above it (divider line sits at the midpoint). */
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_about .et_pb_row:has(.stat__num) { margin-top:12px !important; padding-top:16px !important; }
  body.edge-native #et-main-area .edge_about > .et_pb_row:not(:has(.edge_about__img)) > .et_pb_column { flex:1 1 0 !important; max-width:none !important; min-width:0 !important; width:auto !important; }
  /* card grids: EVEN gaps between cards (row had no gap → cards were touching) + 2 per row */
  body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.card),
  body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.imgcard) { display:flex !important; flex-wrap:wrap !important; gap:22px !important; justify-content:center !important; }
  body.edge-native #et-main-area .et_pb_column.card,
  body.edge-native #et-main-area .et_pb_column.imgcard { flex:0 1 calc(50% - 11px) !important; max-width:calc(50% - 11px) !important; width:auto !important; margin:0 !important; }
  /* keep the hero's 3 thumbnails in a row, evenly gapped */
  body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row { display:flex !important; gap:12px !important; }
  body.edge-native #et-main-area .edge_hero .et_pb_column .et_pb_row > .et_pb_column { flex:1 1 0 !important; max-width:none !important; width:auto !important; margin:0 !important; }
}

/* ═══ PHONE ≤ 600px — splits 1-col, CARDS stay 2x2, smaller text/padding ═══ */
@media (max-width:600px){
  /* EVERY section (all pages) gets a side gutter so no colour band / bordered-panel border
     sits flush against the screen edge. Selectors match the desktop band rules' specificity
     (section--sage/navy use :not(.edge_hero) = 3 classes) so the margin actually wins.
     Rounded a touch so insetted bands read as cards. (transparent sections get it too — harmless) */
  body.edge-native #et-main-area .et_pb_section.section,
  body.edge-native #et-main-area .et_pb_section.section--sage:not(.edge_hero),
  body.edge-native #et-main-area .et_pb_section.section--navy:not(.edge_hero),
  body.edge-native #et-main-area .et_pb_section.section--mist,
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel,
  body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) {
    margin-left:10px; margin-right:10px; width:auto !important; max-width:none !important; box-sizing:border-box !important;
    border-radius:16px; overflow:hidden; }
  body.edge-native #et-main-area .et_pb_section.section.edge_hero { border-radius:18px; }
  /* split / panel / hero columns stack to a single column — but NOT stat rows */
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row > .et_pb_column:not(.card):not(.imgcard):not(:has(.stat__num)):not(:has(.edge_partner_logo)):not(:has(.edge_grid_photo)) { flex:1 1 100% !important; max-width:100% !important; width:100% !important; }
  /* stat rows stay HORIZONTAL (numbers + separator side by side, like desktop) */
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:has(.stat__num) { flex:1 1 0 !important; max-width:none !important; min-width:0 !important; width:auto !important; }
  /* CARDS stay 2 per row (2x2) on mobile — denser, more premium than a long list */
  body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.card),
  body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.imgcard) { gap:12px !important; }
  body.edge-native #et-main-area .et_pb_column.card,
  body.edge-native #et-main-area .et_pb_column.imgcard { flex:0 1 calc(50% - 6px) !important; max-width:calc(50% - 6px) !important; width:auto !important; margin:0 !important; }
  body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.card { padding:16px 15px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { padding:16px 15px; }
  /* card TITLES were too big in the 2-up cards — shrink on phones */
  body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h1,
  body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h2,
  body.edge-native #et-main-area .et_pb_column.card .h3 { line-height:1.22; }
  /* REVIEWS/testimonials: one below another (full width). 2-up made the tall
     quote cards stretch the page too much. */
  body.edge-native #et-main-area .et_pb_column:has(.quote__by),
  body.edge-native #et-main-area .et_pb_column:has(.quote__stars),
  body.edge-native #et-main-area .et_pb_column.quote,
  body.edge-native #et-main-area .et_pb_column:has(.et_pb_testimonial) { flex:1 1 100% !important; max-width:100% !important; width:100% !important; }
  /* icon TILES (the navy box) smaller — must override min/max-width + flex:0 0 58px (line 871) */
  body.edge-native #et-main-area .itile.itile--navy,
  body.edge-native #et-main-area .et_pb_image.itile--navy,
  body.edge-native #et-main-area .et_pb_icon.itile--navy {
    width:40px !important; min-width:40px !important; max-width:40px !important;
    height:40px !important; flex:0 0 40px !important;
    font-size:18px !important; margin-bottom:10px; border-radius:11px; }
  /* the image WRAP stayed 30px (line 875 is more specific) so the 22px icon sat top-left,
     off-centre by 4px. Force the wrap to 22px + flex-centre so the SVG is centred. */
  body.edge-native #et-main-area .et_pb_image.itile--navy .et_pb_image_wrap,
  body.edge-native #et-main-area .itile--navy .et_pb_image_wrap,
  body.edge-native #et-main-area .itile--navy .et_pb_icon,
  body.edge-native #et-main-area .itile--navy .et-pb-icon,
  body.edge-native #et-main-area .itile--navy .et-pb-icon-svg { font-size:18px !important; width:22px !important; height:22px !important; display:flex !important; align-items:center !important; justify-content:center !important; }
  body.edge-native #et-main-area .itile.itile--navy img,
  body.edge-native #et-main-area .et_pb_image.itile--navy img { width:22px !important; height:22px !important; max-width:22px !important; display:block !important; }
  /* stat LABELS: smaller + tighter so they don't wrap into an ugly tall block */
  body.edge-native #et-main-area .et_pb_text.stat__label p,
  body.edge-native #et-main-area .stat__label p { letter-spacing:.03em; line-height:1.35; }
  /* CENTER the stats truly on mobile. Desktop (style.css:565-566) gives stat columns
     flex:0 0 auto + padding-left:34px on the 2nd+ column (the separator), which made columns
     unequal and shoved the number right. Match that selector's specificity to override:
     equal flex columns + symmetric padding → numbers/labels centre; keep the 1px separator. */
  body.edge-native #et-main-area .et_pb_section.section--sage .et_pb_row:has(.stat__num) > .et_pb_column,
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:has(.stat__num) {
    flex:1 1 0 !important; width:auto !important; min-width:0 !important; box-sizing:border-box !important;
    padding-left:10px !important; padding-right:10px !important; margin:0 !important;
    text-align:center !important; align-items:center !important; }
  body.edge-native #et-main-area .et_pb_section.section--sage .et_pb_row:has(.stat__num) > .et_pb_column + .et_pb_column {
    padding-left:10px !important; border-left:1px solid rgba(15,23,42,.18) !important; }
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .stat__num,
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .et_pb_heading.stat__num,
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .et_pb_heading.stat__num h3,
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .et_pb_heading_container,
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .et_pb_text.stat__label,
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .et_pb_text.stat__label p { text-align:center; }
  /* smaller headings on phones (incl. section titles) */
  body.edge-native #et-main-area .et_pb_heading.h1 h1,
  body.edge-native #et-main-area .et_pb_heading.h2 h1,
  body.edge-native #et-main-area .et_pb_heading.stat__num h3,
  body.edge-native #et-main-area .et_pb_number_counter .percent-value { font-size:clamp(28px,8vw,36px) !important; }
  body.edge-native #et-main-area .et_pb_text.lead p,
  /* general body paragraphs (e.g. About EDGE description = plain 16px) smaller on phones */
  body.edge-native #et-main-area .et_pb_text:not(.eyebrow):not(.lead):not(.stat__label):not(.quote__by) p { line-height:1.55; }
  /* team / image-card photos: 4:3 centre-crop was cutting faces — bias the crop toward the top */
  body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_image img { object-position:50% 22% !important; }
  /* team names + image-card captions smaller on phones */
  body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_text p { line-height:1.4 !important; }
  /* testimonials/reviews: smaller, tighter quote text on phones */
  body.edge-native #et-main-area .et_pb_column.quote .et_pb_text:not(.quote__stars):not(.quote__by) p,
  body.edge-native #et-main-area .et_pb_testimonial_description p,
  body.edge-native #et-main-area .et_pb_testimonial .et_pb_testimonial_description_inner p { line-height:1.5; }
  /* tighter vertical rhythm on phones */
  :where(body.edge-native #et-main-area) div.et_pb_section:where(.section) { padding-top:30px; padding-bottom:30px; }
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) { padding:26px 18px; }
  /* CONSISTENT inside side-padding on ALL bands (sage/navy/mist) — mist kept the desktop ~49px
     while sage was 18px, so sections looked uneven. Match the case-study reference (18px).
     Generic variants sit at (0,1,1) so the LATER 16px uniform shorthand (and any
     VB edit) wins — same 16px outcome the old high-specificity final rule gave. */
  :where(body.edge-native #et-main-area) div.et_pb_section:where(.section--sage:not(.edge_hero), .section--navy:not(.edge_hero), .section--mist:not(.edge_hero)) { padding-left:18px; padding-right:18px; }
  body.edge-native #et-main-area .et_pb_section.section--mist.edge_servicecards,
  body.edge-native #et-main-area .et_pb_section.section--mist.edge_case { padding-left:18px; padding-right:18px; }

  /* ── About-Us / service-card fixes ── */
  /* "What We Do" service cards have long checklists — 3-up was unreadably narrow (one letter
     per line). Stack them 1 per row so each card is full-width and legible. */
  body.edge-native #et-main-area .edge_servicecards .et_pb_row:has(> .et_pb_column.card) { display:block !important; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { flex:1 1 100% !important; max-width:100% !important; width:100% !important; margin:0 0 16px; }
  /* "By the numbers" = 4 stats; 4-across overlapped → 2x2 grid, no vertical separators.
     Must match the desktop rule's specificity (.section--sage.edge_statband, style:930). */
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) { flex-wrap:wrap !important; row-gap:24px !important; }
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) > .et_pb_column {
    flex:0 1 50% !important; max-width:50% !important; width:auto !important; min-width:0 !important; box-sizing:border-box !important;
    border-left:none !important; padding-left:8px !important; padding-right:8px !important; }
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) > .et_pb_column:first-child { padding-left:8px !important; }
  /* BUTTONS too big on mobile → smaller padding + font (site-wide) */
  body.edge-native #et-main-area a.et_pb_button,
  body.edge-native #et-main-area .et_pb_button.et_pb_module,
  body.edge-native #et-main-area .et_pb_button.btn { font-size:13.5px !important; padding:12px 16px 12px 22px; }
  /* HEADER CTA button (.nav__right .btn) was huge on mobile (~199px wide, crowding the logo/menu)
     — shrink padding, font and the arrow chip so the header reads cleanly. */
  .nav__right .btn--primary,
  .nav__right .btn { font-size:13px !important; padding:9px 13px 9px 16px !important; gap:.35em !important; }
  .nav__right .btn .chip { width:19px !important; height:19px !important; }
  .nav__right .btn .chip svg { width:11px !important; height:11px !important; }
  /* shorten "Get a Solar Quote" -> "Get a Quote" on mobile (hide the word "Solar") */
  .nav__right .btn .nav-cta-solar { display:none !important; }
  /* smaller hamburger lines */
  .burger span { width:16px !important; }

  /* TEAM (About Us): members live in 3 Divi-rows (3+3+1) so they reflowed to a staggered
     2+1 per row. Flatten the member rows (display:contents) into ONE flex grid so all
     members flow as a clean continuous 2x2. Header row (no image) stays full width. */
  /* team is rebuilt as ONE row of image-cards → mobile 2-up handled by the generic .imgcard rule */

  /* editable font-size (Divi VB wins; sorted to preserve cascade) */
  :where(body.edge-native) :where(.et_pb_text.stat__label) .et_pb_text_inner, :where(body.edge-native) :where(.stat__label) .et_pb_text_inner { font-size:10.5px; }
  :where(body.edge-native) .et_pb_heading.h1 h1, :where(body.edge-native) .et_pb_heading.h1 h2 { font-size:clamp(24px,6.6vw,31px); }
  :where(body.edge-native) .et_pb_heading.h2 h1, :where(body.edge-native) .et_pb_heading.h2 h2 { font-size:clamp(18px,4.9vw,23px); }
  :where(body.edge-native) :where(.et_pb_text) .lead, :where(body.edge-native) :where(.et_pb_text.lead) .et_pb_text_inner { font-size:15.5px; }
  :where(body.edge-native) :where(.et_pb_column.imgcard .et_pb_text) .et_pb_text_inner { font-size:12.5px; }
  :where(body.edge-native) :where(.et_pb_column.card) .et_pb_heading.h3 h1, :where(body.edge-native) :where(.et_pb_column.card) .et_pb_heading.h3 h2, :where(body.edge-native) :where(.et_pb_column.card) .h3 { font-size:15.5px; }
  :where(body.edge-native) :where(.et_pb_text:not(.eyebrow):not(.lead):not(.stat__label):not(.quote__by)) .et_pb_text_inner { font-size:14px; }
  :where(body.edge-native) :where(.et_pb_column.quote .et_pb_text:not(.quote__stars):not(.quote__by)) .et_pb_text_inner, :where(body.edge-native) :where(.et_pb_testimonial .et_pb_testimonial_description_inner) .et_pb_text_inner, :where(body.edge-native) :where(.et_pb_testimonial_description) .et_pb_text_inner { font-size:13.5px; }
}

/* Team grid (.edge_team section): rows of member cards. The grid FOLLOWS the
   VB row structure on desktop — 1_4 columns render 4-up, 1_3 render 3-up, 1_2
   render 2-up (anything else falls back to 3-up) — so editors can add/clone
   rows and columns freely in the Visual Builder and the layout tracks their
   choice. Tablet (601-980) is 3-up, phone 2-up (media blocks below). */
body.edge-native #et-main-area .edge_team .et_pb_row:has(> .et_pb_column.imgcard) { display:flex !important; flex-wrap:wrap !important; gap:26px !important; justify-content:center !important; }
body.edge-native #et-main-area .edge_team .et_pb_column.imgcard { flex:0 1 calc(33.333% - 18px) !important; max-width:calc(33.333% - 18px) !important; width:auto !important; }
@media (min-width:981px){
  body.edge-native #et-main-area .edge_team .et_pb_column.imgcard.et_pb_column_1_4 { flex:0 1 calc(25% - 19.5px) !important; max-width:calc(25% - 19.5px) !important; }
  body.edge-native #et-main-area .edge_team .et_pb_column.imgcard.et_pb_column_1_2 { flex:0 1 calc(50% - 13px) !important; max-width:calc(50% - 13px) !important; }
}
@media (max-width:980px){
  /* mobile rows are display:contents (columns flex inside the SECTION), so line
     centering must live on the section — a lone wrapped member card centers
     instead of hugging the left edge; full 2-up lines are unaffected */
  body.edge-native #et-main-area .et_pb_section.edge_team { justify-content:center !important; }
}
/* member headshots: portrait crop biased toward the face — the sitewide imgcard
   4:3 landscape crop was cutting heads off the portrait source photos */
body.edge-native #et-main-area .edge_team .et_pb_column.imgcard .et_pb_image img { aspect-ratio:4/5; object-position:50% 20%; }

/* ── Team grid v2 (2026-07-27): ONE column (.edge_team_grid) holding one Blurb
   module PER MEMBER (photo + caption in a single unit) — editors clone a
   member (right-click → duplicate) and drag-drop to reorder; the grid reflows
   automatically at any member count. 4-up desktop, 3-up tablet, 2-up phone;
   a partial last row aligns left. Card anatomy is structural; caption typography sits at
   :where() strength so VB design tweaks on a blurb still win. */
/* The LAYOUT (grid, 4/3/2 columns, gaps) is NATIVE Divi 5 — set as VB layout
   values on the .edge_team_grid column itself (display:grid + gridColumnCount
   per breakpoint), so the builder renders it, drag-drop targets any grid slot,
   and editors can retune columns/gaps in the VB. A partial last row aligns
   LEFT (standard grid auto-placement). Theme CSS only provides the member-card anatomy below. Selectors
   are wrapper-agnostic so the VB canvas styles match the front end. */
/* display bridge: Divi emits the grid template/gap vars from the column's VB
   layout attrs but omits `display:grid` inside legacy et_block sections —
   provide it (plus the gap mapping) so the native emissions take effect. */
.et_pb_column.edge_team_grid {
  display:grid;
  gap:var(--vertical-gap, 26px) var(--horizontal-gap, 26px);
}
.et_pb_column.edge_team_grid > .et_pb_blurb {
  margin-bottom:0; background:#fff; border-radius:18px; overflow:hidden;
  box-shadow:0 4px 34px rgba(15,23,42,.07);
}
.edge_team_grid .et_pb_blurb_content { max-width:100%; }
.edge_team_grid .et_pb_main_blurb_image { margin:0; line-height:0; }
.edge_team_grid .et_pb_main_blurb_image .et_pb_image_wrap { display:block; width:100%; }
.edge_team_grid .et_pb_main_blurb_image img {
  width:100%; aspect-ratio:4/5; object-fit:cover; object-position:50% 20%; display:block; border-radius:0;
}
.edge_team_grid .et_pb_blurb_container { padding:16px 20px; text-align:left; }
:where(.edge_team_grid) .et_pb_module_header {
  font-size:15px; line-height:1.45; font-weight:600; color:var(--ink, #14223f); margin:0; padding:0;
}
body.edge-native:not(.page-id-17258) #et-main-area .edge_team .et_pb_column.imgcard { margin:0 !important; }
/* ── Team page (17258): module spacing fully VB-editable ───────────────────────────────
   The design-system spacing locks above are excluded for this page via :not(.page-id-17258).
   These defaults carry NO !important, so they hold the look by default but lose to the VB's
   own spacing output (which is !important) → padding & margins can be freely ADDED to cards,
   images, card text, paragraphs and the lead here. Structural rules (3-up grid sizing,
   edge-to-edge 4:3 photo, caption flex) stay global so the card layout can't break. */
body.page-id-17258 #et-main-area .et_pb_column.imgcard { padding:0; } /* edge-to-edge photo: outer padding stays structural (the card's own .et_pb_text caption padding + image/card margins below ARE editable) */
body.page-id-17258 #et-main-area .et_pb_column.imgcard .et_pb_image { margin:0; }
body.page-id-17258 #et-main-area .et_pb_column.imgcard .et_pb_text { padding:16px 20px; }
body.page-id-17258 #et-main-area .edge_team .et_pb_column.imgcard { margin:0; }
body.page-id-17258 #et-main-area .section-head .et_pb_text.lead { margin-top:13px; }
@media (max-width:600px){
  body.edge-native #et-main-area .edge_team .et_pb_row:has(> .et_pb_column.imgcard) { gap:14px !important; }
  body.edge-native #et-main-area .edge_team .et_pb_column.imgcard { flex:0 1 calc(50% - 7px) !important; max-width:calc(50% - 7px) !important; }
}

/* ── mobile fixes batch (2026-06-19) ── */
@media (max-width:600px){
  /* BUTTONS: the .btn--lg padding (17px/30px) kept winning — target it directly */
  body.edge-native #et-main-area a.et_pb_button.btn--lg,
  body.edge-native #et-main-area .et_pb_button.btn.btn--lg,
  body.edge-native #et-main-area a.et_pb_button.btn,
  body.edge-native #et-main-area a.et_pb_button { padding:11px 18px 11px 22px; font-size:13px !important; }
  /* WHAT WE DO: stacked cards were touching (margin 0) + too much inside space */
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { margin:0 0 14px; padding:18px 18px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card:last-child { margin-bottom:0; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .itile--navy { margin-bottom:8px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card li { margin-bottom:5px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .et_pb_heading.h3 { margin-bottom:8px; }
  /* BY THE NUMBERS: restore separators in the 2x2 (cross divider) */
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) > .et_pb_column:nth-child(even) { border-left:1px solid rgba(15,23,42,.16) !important; }
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) > .et_pb_column:nth-child(n+3) { border-top:1px solid rgba(15,23,42,.16) !important; padding-top:20px !important; }
}

/* Our Work gallery rebuilt as one row — 3-up desktop, 2-up mobile (like team) */
body.edge-native #et-main-area .edge_gallery .et_pb_row:has(> .et_pb_column.imgcard) { display:flex !important; flex-wrap:wrap !important; gap:20px !important; justify-content:center !important; }
body.edge-native #et-main-area .edge_gallery .et_pb_column.imgcard { flex:0 1 calc(33.333% - 14px) !important; max-width:calc(33.333% - 14px) !important; width:auto !important; margin:0; }
@media (max-width:600px){
  body.edge-native #et-main-area .edge_gallery .et_pb_row:has(> .et_pb_column.imgcard) { gap:12px !important; }
  body.edge-native #et-main-area .edge_gallery .et_pb_column.imgcard { flex:0 1 calc(50% - 6px) !important; max-width:calc(50% - 6px) !important; }
  /* stats: number → label gap was too big */
  body.edge-native #et-main-area .edge_statband .et_pb_text.stat__label p,
  body.edge-native #et-main-area .edge_statband .stat__label p { margin-top:5px; }
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) .et_pb_text.stat__label { margin-top:0; }
}

@media (max-width:600px){
  /* tighter section-head rhythm: eyebrow → title → lead were too far apart */
  body.edge-native #et-main-area .section-head .et_pb_module { margin-top:0; margin-bottom:7px; }
  body.edge-native #et-main-area .section-head .et_pb_module:last-child { margin-bottom:0; }
  body.edge-native #et-main-area .section-head .et_pb_text.eyebrow p { margin:0; }
  body.edge-native #et-main-area .section-head .et_pb_heading h1,
  body.edge-native #et-main-area .section-head .et_pb_heading h2 { margin:0; }
  body.edge-native #et-main-area .section-head .et_pb_text p { margin:0; }
  /* head row → content gap smaller */
  body.edge-native #et-main-area .et_pb_row:has(.section-head) { margin-bottom:14px !important; }
}

@media (max-width:600px){
  /* hero image a bit smaller on phones */
  body.edge-native #et-main-area .edge_hero .edge_hero__img img,
  body.edge-native #et-main-area .edge_hero > .et_pb_row > .et_pb_column:last-child img { max-height:190px !important; object-fit:cover !important; width:100% !important; }
}

@media (max-width:600px){
  /* section-head column had flex row-gap:30px → that was the big eyebrow→title gap */
  body.edge-native #et-main-area .section-head { row-gap:8px; }
  body.edge-native #et-main-area .section-head .et_pb_module { margin-bottom:0; }
  /* stats numbers/labels a bit smaller on phones */
  body.edge-native #et-main-area .edge_statband .et_pb_heading.stat__num h3,

  /* editable font-size (Divi VB wins; sorted to preserve cascade) */
  :where(body.edge-native) :where(.edge_statband .stat__label) .et_pb_text_inner { font-size:9.5px; }
  :where(body.edge-native) :where(.edge_statband) .et_pb_heading.stat__num h3, :where(body.edge-native) :where(.et_pb_column:has(.stat__num) .stat__num) h3 { font-size:25px; }
}

@media (max-width:600px){
  /* What We Do: stack as BLOCKS with a clear gap. NOTE: the desktop rule at ~line 911
     (.edge_servicecards .et_pb_row > .et_pb_column.card) sets flex:1 1 0 + margin:0 at
     high specificity — under flex-direction:column that basis:0 collapses each card to
     ~38px and overflow:hidden clips the content. So the row must be display:block and
     the override must MATCH that selector's specificity (.et_pb_row >) to win. */
  body.edge-native #et-main-area .edge_servicecards .et_pb_row:has(> .et_pb_column.card) { display:block !important; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_row > .et_pb_column.card { flex:0 0 auto !important; width:100% !important; max-width:100% !important; margin:0 0 18px !important; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_row > .et_pb_column.card:last-child { margin-bottom:0 !important; }
  /* Case studies: image ALWAYS below the text on mobile (was inconsistent: one top, one bottom) */
  body.edge-native #et-main-area .edge_case > .et_pb_row { flex-direction:column !important; }
  body.edge-native #et-main-area .edge_case > .et_pb_row > .et_pb_column:has(img) { order:2 !important; }
  body.edge-native #et-main-area .edge_case > .et_pb_row > .et_pb_column:not(:has(img)) { order:1 !important; }
}

@media (max-width:600px){
  /* HERO: image (and text) were flush to the section edges — add inner side padding */
  body.edge-native #et-main-area .et_pb_section.edge_hero { padding-left:16px; padding-right:16px; }
  /* OUR WORK gallery: Divi 5 section flex row-gap:60px made a huge space between the
     title and the photos — tighten it (matches edge_servicecards/edge_case treatment) */
  body.edge-native #et-main-area .et_pb_section.edge_gallery { row-gap:20px; }
  body.edge-native #et-main-area .edge_gallery .et_pb_row:has(.section-head) { margin-bottom:0 !important; }
}

/* ═══ VB-EDITABLE: neutralize deep-element font-size pins (edge.css + own) so the element
   inherits its .et_pb_text_inner, where Divi's per-module size from the Visual Builder lands.
   This block loads AFTER edge.css and all earlier rules → wins on equal specificity.
   Scoped to native pages. Nav (.mega__*) + footer (.footer*) intentionally excluded
   (not Divi-editable content). ═══ */
:where(body.edge-native) .quote p,
:where(body.edge-native) .quote__by b,
:where(body.edge-native) .quote__by span,
:where(body.edge-native) .quote__by strong,
:where(body.edge-native) .feature p,
:where(body.edge-native) .feature h3,
:where(body.edge-native) .step p,
:where(body.edge-native) .et_pb_column.card .et_pb_text li,
:where(body.edge-native) .checklist li { font-size: inherit; }

/* ═══ Pricing(67) / FAQ(2949) / Contact(61): tightened size scheme as an EDITABLE default.
   :where() keeps specificity at (0,2,1)/(0,2,0) — beats the site-wide defaults by source order
   (35px shows by default) but yields to Divi's per-module CSS, so the VB control still resizes
   text in either direction. NO !important. Scoped to these 3 pages. ═══ */
:where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h1 h1,
:where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h1 h2,
:where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h2 h1,
:where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h2 h2,
:where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.stat__num h3 { font-size:35px; }
:where(body.page-id-67,body.page-id-2949,body.page-id-61) :where(.et_pb_text.lead) .et_pb_text_inner { font-size:18px; }
:where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_toggle_title { font-size:16px; }
@media (max-width:600px){
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h1 h1,
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h1 h2 { font-size:25px; }
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h2 h1,
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.h2 h2,
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_heading.stat__num h3 { font-size:20px; }
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) :where(.et_pb_text.lead) .et_pb_text_inner { font-size:14px; }
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) :where(.et_pb_text.eyebrow) .et_pb_text_inner,
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) :where(.et_pb_text.stat__label) .et_pb_text_inner { font-size:10px; }
  :where(body.page-id-67,body.page-id-2949,body.page-id-61) .et_pb_toggle_title { font-size:14px; }
}

/* Section backgrounds now set via STABLE section classes (section--mist/section--sage) added to
   the content (add_classes.py) — survives VB edits, unlike et_pb_section_N CSS which broke when
   Divi renumbered sections on edit. The classes carry the template's contained+tinted treatment. */

/* ═══ Pricing fixes (CSS only, page-scoped) ═══ */
/* 1) Hero image is a tall portrait (483px) vs template's landscape (~333px) → cap it so the
   hero isn't oversized with empty sage space. object-fit:cover crops cleanly. */
body.page-id-67 #et-main-area .edge_hero__img img,
body.page-id-67 #et-main-area .edge_hero__img .et_pb_image_wrap { height:340px !important; max-height:340px !important; object-fit:cover !important; }
/* 2) Stray duplicate heading section "Our teams are ready to help!" (SEC 7 = et_pb_section_6)
   sits right before the real form (SEC 8), which renders its OWN same title → hide the stray. */
body.page-id-67 #et-main-area .et_pb_section_6 { display:none !important; }

/* Pricing hero: heading is shorter (1 line @35px) than template's 2-line heading, so the
   top-aligned text leaves empty sage below. Center it vertically → balanced like the template. */
body.page-id-67 #et-main-area .edge_hero > .et_pb_row > .et_pb_column:first-child { align-self:center !important; }

/* Pricing: hide the stray duplicate "Our teams are ready to help!" heading section (the real
   form section right after it renders its own title). Stable class added to content (add_classes). */
body.edge-native .edge-dup-hide { display:none !important; }


/* ═══════ MOBILE WHITESPACE COMPACTION (2026-07-06: too much white space
   on mobile — all site, sections AND cards). Appended last so it wins the cascade
   over the earlier 30px/30px mobile rhythm. Structural/theme spacing only. ═══════ */
@media (max-width:600px){
  /* sections: 30+30 → 22+22 between bands (VB-editable default, see 52px rule) */
  :where(body.edge-native #et-main-area) div.et_pb_section:where(.section) { padding-top:22px; padding-bottom:22px; }
  /* first section under the sticky header: 38px of dead air → 18px (hero included) */
  html body.edge-native #et-main-area .et_pb_section.section.section--sage.edge_hero,
  html body.edge-native #et-main-area .et_builder_inner_content > .et_pb_section:first-child,
  html body.edge-native #et-main-area > .et_pb_section:first-child { padding-top:18px !important; }
  /* section-head → content gap: clamp(28..48) → 16px */
  body.edge-native #et-main-area .et_pb_row.section-head,
  body.edge-native #et-main-area .et_pb_row:has(.section-head) { margin-bottom:16px !important; }
  /* stacked (non-card) columns: Divi's ~30px stack margin → 14px, none after the last */
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:not(.card):not(.imgcard):not(:has(.stat__num)):not(:has(.edge_partner_logo)):not(:has(.edge_grid_photo)) { margin-bottom:14px !important; }
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:not(.card):not(.imgcard):not(:has(.stat__num)):last-child { margin-bottom:0 !important; }
  /* stacked rows inside sections: kill leftover row bottom margins */
  body.edge-native #et-main-area .et_pb_section.section .et_pb_row:last-child { margin-bottom:0 !important; }
  /* hero: 40px flex gap between text and image stack → 16px; buttons closer to copy */
  body.edge-native #et-main-area .edge_hero .et_pb_row,
  body.edge-native #et-main-area .edge_hero > .et_pb_row { gap:16px !important; }
  body.edge-native #et-main-area .edge_hero__btns { margin-top:16px; }
  /* splits/about: stacked image gap 16 stays; stat rows tighter */
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) { row-gap:16px !important; }
  /* cards: inside padding 16/15 → 14px (denser, still breathable) */
  body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.card { padding:14px 13px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { padding:15px 15px; margin:0 0 12px; }
  /* panels / CTA bands / e-strip: 26px 18px → 20px 16px */
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) { padding:20px 16px; }
  /* form card: clamp(30..52) inner padding → 20px 16px */
  body.edge-native #et-main-area .edge_form_card { padding:20px 16px; }
  /* quote/testimonial cards: 30px desktop padding → 16px, tighter inner rhythm + stacking */
  body.edge-native #et-main-area .et_pb_column.quote,
  body.edge-native #et-main-area .et_pb_column:has(.quote__by) { padding:16px; margin-bottom:12px; }
  body.edge-native #et-main-area .et_pb_image.quote__stars { margin:0 0 8px; }
  body.edge-native #et-main-area .et_pb_text.quote__text p { margin:0 0 10px; }
  body.edge-native #et-main-area .et_pb_text.quote__by { padding-top:12px; gap:10px; }
  body.edge-native #et-main-area .et_pb_text.quote__by::before { flex:0 0 38px !important; width:38px !important; height:38px !important; font-size:11px !important; }
  body.edge-native #et-main-area .et_pb_testimonial { padding:16px; margin-bottom:12px; }
  /* footer: 54px top → 32px; column gap 28 → 20; tighter bottom bar */
  body .footer { padding-top:32px !important; }
  body .footer__top { gap:20px !important; padding-bottom:26px !important; }
  body .footer__bottom { padding-top:16px !important; padding-bottom:18px !important; }
}
/* blog grid (body.blog is not edge-native): tighter card gap + top padding on phones */
@media (max-width:780px){
  body.blog #left-area { gap:18px; }
  body.blog #main-content .container { padding-top:20px; }
}

/* ═══════ MOBILE UNIFORM RHYTHM (2026-07-06: ALL content equally spaced —
   same space inside and outside sections, cards aligned). ONE system:
   OUTER = 12px (section inset + space between section pills + every gap between
   cards/blocks), INNER = 16px (every section/card/panel/form padding, all sides).
   Appended last → overrides the mixed values above. ═══════ */
@media (max-width:600px){
  /* sections: 12px outer inset all around, 16px inner padding all sides.
     Selectors mirror the earlier inset rules' specificity so they win. */
  body.edge-native #et-main-area .et_pb_section.section,
  body.edge-native #et-main-area .et_pb_section.section--sage:not(.edge_hero),
  body.edge-native #et-main-area .et_pb_section.section--navy:not(.edge_hero),
  body.edge-native #et-main-area .et_pb_section.section--mist,
  body.edge-native #et-main-area .et_pb_section.section--mist.edge_servicecards,
  body.edge-native #et-main-area .et_pb_section.section--mist.edge_case,
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel,
  body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) {
    margin:0 12px 12px; }
  /* the 16px INNER padding on the generic band variants is a VB-editable default:
     (0,1,1) via :where — section padding emissions carry no !important, so the
     old (1,3,1) selectors silently beat every VB edit. Component sections
     (servicecards/case/panel/believe/estrip) keep their locked anatomy below. */
  :where(body.edge-native #et-main-area) div.et_pb_section:where(.section, .section--sage:not(.edge_hero), .section--navy:not(.edge_hero), .section--mist) { padding:16px; }
  body.edge-native #et-main-area .et_pb_section.section--mist.edge_servicecards,
  body.edge-native #et-main-area .et_pb_section.section--mist.edge_case,
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel,
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband,
  body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) { padding:16px; }
  /* bordered PANELS: the base band rules (~1078 estrip/believe `margin:0 auto
     !important`, ~1198 edge_panel `margin:clamp(34px..) auto 0 !important`) are
     structural locks the unlock skipped (margin:auto centering) — on phones they
     beat the non-important default above and gave 34px above / 0 below ("Built on
     Experience" prea sus + lipită de "Why Choose Us", estrip lipită; 2026-07-07).
     Band margins are already a deliberate structural lock, so lock the phone
     value too: back to the approved 12px pill rhythm. */
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_panel,
  body.edge-native #et-main-area .et_pb_section:is(.edge_believe,.edge_estrip) {
    margin:0 12px 12px !important; }
  /* same story for the SIDE gutters: the desktop band-centering rules (sage 661,
     navy 682/937, mist 935, hero 916 — `margin-left/right:auto !important`) beat
     the phone gutter once it lost its !important in the unlock → colour bands sat
     flush against the screen edges. Side margins are band centering = structural,
     never VB-editable; re-lock the 12px inset (matches the white pills). */
  body.edge-native #et-main-area .et_pb_section.section--sage:not(.edge_hero),
  body.edge-native #et-main-area .et_pb_section.section--navy:not(.edge_hero),
  body.edge-native #et-main-area .et_pb_section.section--mist,
  body.edge-native #et-main-area .et_pb_section.section.edge_hero {
    margin-left:12px !important; margin-right:12px !important; }
  html body.edge-native #et-main-area .et_pb_section.section.section--sage.edge_hero,
  html body.edge-native #et-main-area .et_builder_inner_content > .et_pb_section:first-child,
  html body.edge-native #et-main-area > .et_pb_section:first-child { margin-top:12px; padding:16px; }
  /* rows span the section's inner box exactly → card edges align with text edges */
  body.edge-native #et-main-area .et_pb_section.section .et_pb_row { max-width:100% !important; width:100% !important; }
  /* ALL gaps = 12px: title→content, stacked columns, card grids, hero, stats, team/gallery */
  body.edge-native #et-main-area .et_pb_row.section-head,
  body.edge-native #et-main-area .et_pb_row:has(.section-head) { margin-bottom:12px !important; }
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:not(.card):not(.imgcard):not(:has(.stat__num)):not(:has(.edge_partner_logo)):not(:has(.edge_grid_photo)) { margin-bottom:12px !important; }
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:not(.card):not(.imgcard):not(:has(.stat__num)):last-child { margin-bottom:0 !important; }
  body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.card),
  body.edge-native #et-main-area .et_pb_row:has(> .et_pb_column.imgcard) { gap:12px !important; }
  body.edge-native #et-main-area .et_pb_column.card,
  body.edge-native #et-main-area .et_pb_column.imgcard { flex:0 1 calc(50% - 6px) !important; max-width:calc(50% - 6px) !important; }
  body.edge-native #et-main-area .edge_team .et_pb_row:has(> .et_pb_column.imgcard),
  body.edge-native #et-main-area .edge_gallery .et_pb_row:has(> .et_pb_column.imgcard) { gap:12px !important; }
  body.edge-native #et-main-area .edge_team .et_pb_column.imgcard,
  body.edge-native #et-main-area .edge_gallery .et_pb_column.imgcard { flex:0 1 calc(50% - 6px) !important; max-width:calc(50% - 6px) !important; }
  body.edge-native #et-main-area .edge_hero .et_pb_row,
  body.edge-native #et-main-area .edge_hero > .et_pb_row { gap:12px !important; }
  body.edge-native #et-main-area .et_pb_section.section--sage.edge_statband .et_pb_row:has(.stat__num) { row-gap:12px !important; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { margin:0 0 12px; }
  /* reviews: one below the other, full width (3 rows). They carry .card too, so
     undo the 2-up card sizing; the row's 12px flex gap spaces them (no extra margin) */
  body.edge-native #et-main-area .et_pb_column.quote,
  body.edge-native #et-main-area .et_pb_column.card.quote,
  body.edge-native #et-main-area .et_pb_column:has(.quote__by) { flex:1 1 100% !important; max-width:100% !important; margin:0; }
  body.edge-native #et-main-area .et_pb_section.section .et_pb_row:last-child { margin-bottom:0 !important; }
  /* ALL card interiors = 16px, matching the section's inner padding */
  body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.card { padding:16px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card { padding:16px; }
  body.edge-native #et-main-area .et_pb_column.quote { padding:16px; }
  body.edge-native #et-main-area .et_pb_testimonial { padding:16px; }
  body.edge-native #et-main-area .edge_form_card { padding:16px; }
  body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.imgcard .et_pb_text { padding:12px 16px !important; }
  /* the collapsed photo-band section (edge_bigimg renders 0-height) shows as an
     empty pill between sections → hide the photo-only section on phones */
  body.edge-native #et-main-area .et_pb_section:has(.edge_bigimg):not(:has(.et_pb_heading)):not(:has(.et_pb_text)) { display:none !important; }
  /* hero buttons: same 12px rhythm above AND below (was 24px above / 69px below on
     home — 30px margin + 30px padding on the "20 Years Strong" divider block; 20px
     above the button on service heroes) */
  body.edge-native #et-main-area .edge_hero .et_pb_heading.h1 { margin-bottom:0; }
  body.edge-native #et-main-area .edge_hero .et_pb_heading.h1 h1,
  body.edge-native #et-main-area .edge_hero .et_pb_heading.h1 h2,
  body.edge-native #et-main-area .edge_hero .et_pb_heading.h1 .et_pb_module_header { margin-bottom:0 !important; }
  body.edge-native #et-main-area .edge_hero__btns { margin:12px 0 0; }
  body.edge-native #et-main-area .edge_hero .edge_hero__subhead { margin-top:12px; padding-top:12px; }
  body.edge-native #et-main-area .edge_hero .et_pb_button_module_wrapper { margin:12px 0 0; }
}

/* ═══════ MOBILE UNIFORM TEXT RHYTHM (2026-07-06,  space around paragraphs
   and titles must be equal). ONE rule: exactly 12px between every module (eyebrow,
   title, paragraph, button, divider, image) and between paragraphs — matching the
   sitewide 12px gap system. Targeted repeats below beat older !important rules. ═══════ */
@media (max-width:600px){
  /* every module: no own margins; each one sits exactly 12px under the previous.
     .edge_team_grid excluded: its blurbs sit in a native GRID whose gap is the
     rhythm — a sibling margin would shift cards inside their grid cells. */
  body.edge-native #et-main-area .et_pb_column:not(.edge_team_grid) > .et_pb_module { margin-top:0; margin-bottom:0; }
  body.edge-native #et-main-area .et_pb_column:not(.edge_team_grid) > .et_pb_module + .et_pb_module { margin-top:12px; }
  /* Divi 5 flex columns (About, intro band …) add their own 8-14px row-gap ON TOP of
     module margins → zero it; the 12px module margin is the single source of rhythm.
     Repeats at the old rules' specificity (edge_case/edge_about 14px, section-head 8-12px,
     flex sections 20-24px) so the later rule wins. */
  body.edge-native #et-main-area .et_pb_column:not(.edge_team_grid) { row-gap:0; }
  body.edge-native #et-main-area .edge_case > .et_pb_row > .et_pb_column,
  body.edge-native #et-main-area .edge_about > .et_pb_row > .et_pb_column,
  body.edge-native #et-main-area .edge_servicecards .section-head,
  body.edge-native #et-main-area .edge_panel .section-head,
  body.edge-native #et-main-area .et_pb_column.section-head { row-gap:0 !important; }
  /* flex SECTIONS: rows are spaced by one 12px margin, not by section row-gap */
  body.edge-native #et-main-area .et_pb_section.section,
  body.edge-native #et-main-area .et_pb_section.edge_case,
  body.edge-native #et-main-area .et_pb_section.edge_panel,
  body.edge-native #et-main-area .et_pb_section.edge_gallery { row-gap:0; }
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row { margin-top:0 !important; margin-bottom:12px !important; }
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row:last-child { margin-bottom:0 !important; }
  /* EMPTY columns (no modules) wrap onto their own flex line and inflate the row by
     one 12px gap — the "white space between card rows". Hide them. */
  body.edge-native #et-main-area .et_pb_row > .et_pb_column:not(:has(.et_pb_module,.et_pb_row)) { display:none !important; }
  /* …and Divi's clearfix ::after does the same in flex-wrap rows with gap (a phantom
     zero-height flex line = +12px inside every card row). No floats on mobile → drop it. */
  body.edge-native #et-main-area .et_pb_row::before,
  body.edge-native #et-main-area .et_pb_row::after { content:none !important; display:none !important; }
  /* title block → content: 16px (= section inner padding) so the space below the head
     matches the space above it  */
  body.edge-native #et-main-area .et_pb_row.section-head,
  body.edge-native #et-main-area .et_pb_row:has(.section-head),
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row.section-head,
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row:has(.section-head) { margin-bottom:16px !important; }
  /* ── CONTINUOUS CARD GRID ── cards split across several Divi rows (HVAC/Insulation
     "What we install" = 2 rows × 3; home Why-choose = 2 × 2) rendered 2+1 per row and
     carried stray inter-row margins. Dissolve card rows (display:contents) and flex the
     SECTION itself: every card flows into one clean 2-per-row grid with 12px gaps. */
  body.edge-native #et-main-area .et_pb_section.section:has(> .et_pb_row > .et_pb_column.card),
  body.edge-native #et-main-area .et_pb_section.section:has(> .et_pb_row > .et_pb_column.imgcard) {
    display:flex !important; flex-direction:row !important; flex-wrap:wrap !important; gap:12px !important; align-items:stretch !important; align-content:flex-start !important; }
  body.edge-native #et-main-area .et_pb_section.section:has(> .et_pb_row > .et_pb_column.card) > .et_pb_row,
  body.edge-native #et-main-area .et_pb_section.section:has(> .et_pb_row > .et_pb_column.imgcard) > .et_pb_row {
    flex:1 1 100% !important; margin:0 !important; min-width:0 !important; }
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row:has(> .et_pb_column.card),
  body.edge-native #et-main-area .et_pb_section.section > .et_pb_row:has(> .et_pb_column.imgcard) { display:contents !important; }
  /* head row is a full-width flex item; its 4px margin + 12px flex gap = 16px to cards */
  body.edge-native #et-main-area .et_pb_section.section:has(> .et_pb_row > .et_pb_column.card) > .et_pb_row:has(.section-head),
  body.edge-native #et-main-area .et_pb_section.section:has(> .et_pb_row > .et_pb_column.imgcard) > .et_pb_row:has(.section-head) { margin-bottom:4px !important; }
  /* inner tag margins escape the module box → zero them so 12px is the ONLY spacing */
  body.edge-native #et-main-area .et_pb_heading .et_pb_module_header,
  body.edge-native #et-main-area .et_pb_heading h1, body.edge-native #et-main-area .et_pb_heading h2,
  body.edge-native #et-main-area .et_pb_heading h3, body.edge-native #et-main-area .et_pb_heading h4 { margin:0 !important; padding-top:0 !important; padding-bottom:0 !important; }
  body.edge-native #et-main-area .et_pb_text_inner > p { margin:0; }
  body.edge-native #et-main-area .et_pb_text_inner > p + p { margin-top:12px; }
  /* repeats at matching/higher specificity — these older !important rules would win otherwise */
  body.edge-native:not(.page-id-17258) #et-main-area .et_pb_column.section-head .et_pb_text.lead { margin-top:12px; }   /* was 13px (style:715) */
  body.edge-native #et-main-area .edge_hero .et_pb_heading.h1 .et_pb_module_header { margin-bottom:0 !important; }                  /* was 8px (style:863) */
  body.edge-native #et-main-area .et_pb_column.card .h3,
  body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 { margin-bottom:0; }                               /* was mb 8 (style:545); keep the 12px top gap */
  body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h1,
  body.edge-native #et-main-area .et_pb_column.card .et_pb_heading.h3 h2 { margin:0; }                                   /* was mb 8 (style:799) */
  body.edge-native #et-main-area .itile--navy,
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .itile--navy { margin-bottom:0; }                 /* was mb 16/8 */
  body.edge-native #et-main-area .et_pb_image.quote__stars { margin-bottom:0; }                                          /* was mb 8 */
  /* modules also carry VB block-attr PADDING (About page: 30px) → zero vertical padding
     on plain content modules so 12px is truly the only spacing. Toggles/forms untouched. */
  body.edge-native #et-main-area .et_pb_column > :is(.et_pb_text,.et_pb_heading,.et_pb_button_module_wrapper,.et_pb_divider,.et_pb_image):not(.quote__by):not(.edge_hero__subhead) { padding-top:0; padding-bottom:0; }
  /* re-assert the two padding-based dividers the reset above must not flatten */
  body.edge-native #et-main-area .et_pb_text.quote__by { padding-top:12px; }
  body.edge-native #et-main-area .edge_hero .edge_hero__subhead { padding-top:12px; }
  body.edge-native #et-main-area .et_pb_text.quote__by { margin-top:12px; }                                              /* was margin-top:auto (style:819) */
  body.edge-native #et-main-area .edge_hero__btns { margin:12px 0 0; }
  /* stats stay a tight unit: number → label = 4px, label text carries no extra offset */
  body.edge-native #et-main-area .et_pb_column:has(.stat__num) > .et_pb_module + .et_pb_module { margin-top:4px; }
  body.edge-native #et-main-area .edge_statband .et_pb_text.stat__label p,
  body.edge-native #et-main-area .edge_statband .stat__label p { margin-top:0; }
  /* last high-specificity offenders (same selectors as the old rules, later = wins):
     h2 inner tag +20px (style:843), believe/estrip column gap 14 (style:1144),
     ENERGY STAR frame gap+padding (style:1092), servicecards title/tile mb 8 (style:1521-23) */
  body.edge-native #et-main-area .et_pb_column:not(.section-head) .et_pb_heading.h2 h1,
  body.edge-native #et-main-area .et_pb_column:not(.section-head) .et_pb_heading.h2 h2 { margin-top:0; }
  body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) > .et_pb_row > .et_pb_column { row-gap:0 !important; }
  body.edge-native #et-main-area :is(.edge_believe,.edge_estrip) .et_pb_column.edge_es__frame { row-gap:0; padding:16px; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .itile--navy { margin-bottom:0; }
  body.edge-native #et-main-area .edge_servicecards .et_pb_column.card .et_pb_heading.h3 { margin-bottom:0; }
  /* inline-image baseline whitespace (icon tiles measured +4px) */
  body.edge-native #et-main-area .et_pb_image .et_pb_image_wrap,
  body.edge-native #et-main-area .et_pb_image img { display:block !important; }
  /* WHITE sections (intro/testimonials/team/form) were invisible pills on the white
     page — the 12px outside gap didn't read, so they LOOKED spaced differently than
     the sage bands. Same faint pill treatment as sage → uniform perceived spacing. */
  body.edge-native #et-main-area .et_pb_section.section:not(.section--sage):not(.section--navy):not(.section--mist):not(.edge_hero) {
    background:#f7f9fa; border:1px solid rgba(15,23,42,.07); }
  /* intro's inner row had its own panel frame (border+radius+inset shadow) → double
     border once the section became a pill. The section is the frame now. */
  body.edge-native #et-main-area .et_pb_section.edge_intro .et_pb_row { border:none !important; box-shadow:none !important; border-radius:0 !important; background:transparent !important; }
}

/* ═══ Hero @1080px containment fix (2026-07-06): the hero row filled the whole
   1080px section and its columns (55%+45% + 40px gap) overflowed 22px per side —
   text stuck out left, image right. Structural: row gets side breathing room,
   columns may shrink. VB spacing values still win (rows are structural).
   DESKTOP ONLY — unscoped it leaked into phones and ate 98px of hero row width
   (text started ~78px from the screen edge). ═══ */
@media (min-width:601px){
  body.edge-native #et-main-area .et_pb_section.section.edge_hero > .et_pb_row { max-width:calc(100% - 98px) !important; margin-left:auto !important; margin-right:auto !important; }
  body.edge-native #et-main-area .et_pb_section.section.edge_hero > .et_pb_row > .et_pb_column { min-width:0 !important; flex-shrink:1 !important; }
}

/* ═══ imgcard captions on phones (2026-07-07,  "titles of images have too
   much white space"): min-height:78px (line 734) is a desktop number — at 390px a
   one-line caption floats in ~32px of empty fill, plus the 12px sibling-rhythm gap
   above the caption bar (desktop keeps it flush). Hug the text and glue the bar to
   the photo. Non-important: a VB phone edit still wins. ═══ */
@media (max-width:600px){
  body.edge-native #et-main-area .et_pb_column.imgcard .et_pb_text { min-height:0; margin-top:0; }
}

/* maryland-3 step icons: center in their cards with breathing room */
.et_pb_image.step-icon { margin:24px auto 4px !important; }
.et_pb_image.step-icon .et_pb_image_wrap { display:block; }
