@charset "UTF-8";
/* ==========================================================================
   Wellness by Home — complete theme stylesheet
   Alberta Indoor Comfort · v3.0.0

   Single-file by design. Core Web Vitals on this domain measured LCP 5.214s
   (POOR) and INP 512ms (POOR); every additional render-blocking request makes
   that worse. WooCommerce styling is the one split, loaded only on shop views.

   CONTENTS
     01 Tokens
     02 Reset & base
     03 Typography
     04 Layout
     05 Header & navigation
     06 Buttons & links
     07 Forms
     08 Cards & components
     09 Page sections
     10 Editor / WYSIWYG content
     11 Comments
     12 Pagination & archives
     13 Sidebar & widgets
     14 Footer
     15 Sticky CTA
     16 Utilities
     17 Responsive
     18 Print & motion
   ========================================================================== */


/* ==========================================================================
   01 TOKENS
   ========================================================================== */
:root{
  /* Brand */
  --navy:#1B365D;
  --navy-deep:#0F1F36;
  --navy-mid:#27456F;
  --cream:#F5EFE6;
  --cream-soft:#EDE5D6;
  --cream-deep:#E3D8C4;
  --tan:#E87722;
  --gold:#FBB040;      /* CTA yellow: navy on gold clears 4.5:1, navy on tan does not (4.09) */
  --gold-dark:#E39A2B;
  --tan-dark:#C4631C;
  --tan-soft:#F4A261;
  --graphite:#3A4051;
  --graphite-soft:#5B6273;
  --graphite-faint:#8A90A0;

  /* Semantic */
  --ok:#3F6B55;
  --warn:#B5651D;
  --err:#A33A2A;
  --line:rgba(27,54,93,.14);
  --line-strong:rgba(27,54,93,.28);
  --line-invert:rgba(245,239,230,.14);

  /* Surfaces */
  --bg:var(--cream);
  --bg-alt:var(--cream-soft);
  --bg-deep:var(--cream-deep);
  --surface:#FFFFFF;
  --ink:var(--graphite);
  --ink-soft:var(--graphite-soft);

  /* Type */
  --serif:'Playfair Display', Georgia, 'Times New Roman', serif;
  --sans:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --mono:ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;

  --fs-xs:12px;
  --fs-sm:13.5px;
  --fs-base:16px;
  --fs-md:17.5px;
  --fs-lg:20px;
  --fs-xl:clamp(22px,2.2vw,28px);
  --fs-h3:clamp(20px,2vw,24px);
  --fs-h2:clamp(30px,3.4vw,44px);
  --fs-h1:clamp(34px,4.6vw,60px);
  --fs-hero:clamp(38px,5vw,64px);

  /* Space */
  --sp-1:4px;  --sp-2:8px;  --sp-3:12px; --sp-4:16px;
  --sp-5:22px; --sp-6:28px; --sp-7:36px; --sp-8:48px;
  --sp-9:64px; --sp-10:88px;

  /* Structure */
  --maxw:1240px;
  --maxw-text:74ch;
  --gutter:28px;
  --radius:6px;
  --radius-sm:4px;

  --shadow-sm:0 2px 10px rgba(27,54,93,.07);
  --shadow:0 20px 50px rgba(27,54,93,.11);
  --shadow-lg:0 30px 60px rgba(0,0,0,.35);

  --ease:cubic-bezier(.22,.61,.36,1);
  --dur:.22s;
}


/* ==========================================================================
   02 RESET & BASE
   ========================================================================== */
*,*::before,*::after{box-sizing:border-box}

html{
  -webkit-text-size-adjust:100%;
  scroll-behavior:smooth;
  scroll-padding-top:90px;
}

body{
  margin:0;
  font-family:var(--sans);
  font-size:var(--fs-base);
  font-weight:400;
  line-height:1.65;
  color:var(--ink);
  background:var(--bg);
  -webkit-font-smoothing:antialiased;
  -moz-osx-font-smoothing:grayscale;
  /* No overflow constraint here. Any value on <body> propagates to the viewport and makes
     body the scroll container, so the sticky header stuck inside body and scrolled away.
     Content is clipped on #main below, which is not an ancestor of the header. */
}

img,svg,video,canvas{max-width:100%;height:auto;display:block}
figure{margin:0}
hr{border:0;border-top:1px solid var(--line);margin:var(--sp-8) 0}

a{color:var(--navy);text-decoration:none;transition:color var(--dur) var(--ease)}
a:hover{color:var(--tan-dark)}

:focus-visible{
  outline:3px solid var(--tan);
  outline-offset:3px;
  border-radius:2px;
}

::selection{background:var(--tan);color:var(--navy)}

/* Skip link */
.wbh-skip{
  position:absolute;left:-9999px;top:0;z-index:999;
  background:var(--navy);color:var(--cream);
  padding:14px 22px;font-weight:600;
}
.wbh-skip:focus{left:8px;top:8px;color:var(--cream)}


/* ==========================================================================
   03 TYPOGRAPHY
   ========================================================================== */
h1,h2,h3,h4,h5,h6{
  font-family:var(--serif);
  font-weight:600;
  line-height:1.18;
  letter-spacing:-.01em;
  color:var(--navy);
  margin:0 0 var(--sp-4);
  text-wrap:balance;
}
h1{font-size:var(--fs-h1)}
h2{font-size:var(--fs-h2)}
h3{font-size:var(--fs-h3)}
h4{font-size:var(--fs-lg)}
h5,h6{font-size:var(--fs-md)}

p{margin:0 0 var(--sp-5);max-width:var(--maxw-text)}
p:last-child{margin-bottom:0}

strong,b{font-weight:600;color:var(--navy)}
em,i{font-style:italic}
small{font-size:var(--fs-sm)}

blockquote{
  margin:var(--sp-7) 0;
  padding:var(--sp-3) 0 var(--sp-3) var(--sp-6);
  border-left:3px solid var(--tan);
  font-family:var(--serif);
  font-style:italic;
  font-size:var(--fs-lg);
  color:var(--navy);
}
blockquote p:last-child{margin-bottom:0}

code,kbd,samp{
  font-family:var(--mono);
  font-size:.9em;
  background:var(--bg-alt);
  padding:2px 6px;
  border-radius:3px;
}
pre{
  background:var(--navy-deep);color:var(--cream);
  padding:var(--sp-5);border-radius:var(--radius);
  overflow-x:auto;font-size:var(--fs-sm);line-height:1.6;
}
pre code{background:none;padding:0;color:inherit}

.wbh-eyebrow{
  font-family:var(--sans);
  font-size:11px;
  letter-spacing:.32em;
  text-transform:uppercase;
  color:var(--tan-dark);
  font-weight:700;
  margin:0 0 var(--sp-3);
}
.wbh-dark .wbh-eyebrow{color:var(--tan)}

.wbh-lead{
  font-family:var(--serif);
  font-size:clamp(18px,1.65vw,22px);
  font-style:italic;
  line-height:1.55;
  color:var(--ink);
  max-width:62ch;
}
.wbh-dark .wbh-lead{color:var(--cream-soft)}

.wbh-accent{color:var(--tan);font-style:italic;font-weight:400}


/* ==========================================================================
   04 LAYOUT
   ========================================================================== */
.wbh-container{
  max-width:var(--maxw);
  margin-inline:auto;
  padding-inline:var(--gutter);
}
.wbh-container--narrow{max-width:860px}
.wbh-container--wide{max-width:1440px}

.wbh-section{padding-block:var(--sp-10)}
.wbh-section--tight{padding-block:var(--sp-8)}
/* A grid or flex child's automatic minimum is its min-content, so one unbreakable token
   (experts@albertaindoorcomfort.com is 288px) can push a column past its own container.
   min-width:0 fixes that without dictating how many columns the page should have. */
.wbh-container,.wbh-content,.wbh-footer,#wbh-seo-home{overflow-wrap:break-word}
a[href^="mailto:"],a[href^="tel:"],.wbh-footer a{overflow-wrap:anywhere}
#wbh-seo-home [class*="-grid"] > *,#wbh-seo-home .trust-row > *,
#wbh-seo-home .wrap > *,.wbh-grid > *{min-width:0}

/* Safety net for full-bleed sections and third-party embeds: clip sideways overflow at the
   content wrapper so no page can produce a horizontal scrollbar, while <body> stays
   unconstrained so position:sticky on the header keeps working. */
/* Something outside this stylesheet (no rule in any readable sheet matches html or body)
   leaves the viewport at overflow-x:hidden. A clipped viewport makes <body> the scroll
   container, and the sticky header then sticks inside body and scrolls away - the bar
   'disappearing'. Measured with it released: header sticks at top:0 and there are zero
   elements that genuinely overflow, so releasing it costs nothing. */
html,body{overflow-x:visible!important}
#main{overflow-x:clip}

/* Pagehead with breadcrumbs only (the body supplies the H1): keep it to a strip. */
.wbh-pagehead:not(:has(h1)){padding-block:14px}
/* Builder/CRO pages own their hero: the wrapper around the_content() goes flush. */
/* service.php/page.php insert an unclassed grid wrapper when there is no sidebar, so the
   direct-child form of this selector never matched and the wrapper kept 64px of padding:
   on a 844px phone the H1 sat at y=692, with the first screen showing an empty cream band. */
body.wbh-builder .wbh-section--cream:has(.wbh-content){padding-block:0}
body.wbh-builder .wbh-pagehead{display:none}
/* The mu-plugin injects "Last updated: …" as the first node of the_content, i.e. above the
   page's own hero. Freshness still ships in article:modified_time and the Article schema. */
body.wbh-builder .aic-last-updated{display:none}

.wbh-section--cream{background:var(--cream)}
.wbh-section--soft{background:var(--cream-soft)}
.wbh-section--deep{background:var(--cream-deep)}
.wbh-section--navy{background:var(--navy);color:var(--cream)}
.wbh-section--navy-deep{background:var(--navy-deep);color:var(--cream)}

.wbh-dark,
.wbh-section--navy,
.wbh-section--navy-deep{color:var(--cream)}
.wbh-dark h1,.wbh-dark h2,.wbh-dark h3,.wbh-dark h4,
.wbh-section--navy h1,.wbh-section--navy h2,.wbh-section--navy h3,.wbh-section--navy h4,
.wbh-section--navy-deep h1,.wbh-section--navy-deep h2,.wbh-section--navy-deep h3{color:var(--cream)}
.wbh-section--navy p,.wbh-section--navy-deep p{color:var(--cream-soft)}
.wbh-section--navy strong,.wbh-section--navy-deep strong{color:#fff}
.wbh-section--navy a,.wbh-section--navy-deep a{color:var(--cream)}
/* …but a gold button inside a navy section still needs navy type (cream on gold = 1.6:1). */
.wbh-section--navy .wbh-btn--primary,.wbh-section--navy-deep .wbh-btn--primary,
.wbh-dark .wbh-btn--primary,#wbh-seo-home .btn-primary{color:var(--navy)}
/* Thrive's post-list button ships a red fill that leaves white text at 4.41:1. */
#wbh-seo-home .tcb-button-link,.wbh-content .tcb-button-link{background-color:#C8100A!important}
/* White on Thrive's #FF0100 measures 4.0:1; #C8100A takes it to 5.9:1. */
/* Thrive paints the fill deeper in its own tree; at 19px bold this is large text (3:1). */
#wbh-seo-home .tcb-button-link,#wbh-seo-home .tcb-button-link strong{font-size:19px;font-weight:700}
.wbh-section--navy a:hover,.wbh-section--navy-deep a:hover{color:var(--tan)}

.wbh-grid{display:grid;gap:var(--sp-6)}
.wbh-grid--2{grid-template-columns:repeat(2,1fr)}
.wbh-grid--3{grid-template-columns:repeat(3,1fr)}
.wbh-grid--4{grid-template-columns:repeat(4,1fr)}
.wbh-grid--sidebar{grid-template-columns:minmax(0,1fr) 320px;gap:var(--sp-9)}
.wbh-grid--split{grid-template-columns:1fr 1fr;gap:var(--sp-9);align-items:start}


/* ==========================================================================
   05 HEADER & NAVIGATION
   ========================================================================== */
.wbh-ribbon{
  background:var(--navy-deep);
  color:var(--cream);
  font-size:var(--fs-sm);
  padding:9px 0;
  text-align:center;
  letter-spacing:.02em;
}
.wbh-ribbon a{color:var(--tan);border-bottom:1px solid rgba(232,119,34,.45);font-weight:500}
.wbh-ribbon a:hover{color:var(--tan-soft)}
.wbh-ribbon strong{
  color:#fff;letter-spacing:.06em;text-transform:uppercase;
  font-size:11px;margin-right:8px;
}

.wbh-header{
  background:var(--navy);
  color:var(--cream);
  padding:16px 0;
  border-bottom:1px solid var(--line-invert);
  position:sticky;top:0;z-index:40;
}
.wbh-header__row{
  display:flex;align-items:center;justify-content:space-between;gap:var(--sp-5);
}

/* AIC Megamenu (mu-plugin) hosted inside the header row. Its own inline CSS
   prints later in <head>, so every rule here carries one extra class to win. */
.wbh-header .wbh-nav--mm{flex:1 1 auto;min-width:0}
.wbh-header .aic-megamenu{position:static;background:transparent;box-shadow:none;font-family:inherit}
.wbh-header .aic-mm-inner{padding:0;max-width:none}
@media (min-width:1025px){
  .wbh-header .aic-mm-inner{gap:0}
  .wbh-header .aic-mm-list{justify-content:center;gap:.25rem}
  .wbh-header .aic-mm-item > a{color:var(--cream);font-weight:500} /* was var(--navy) on the navy header: invisible */
  .wbh-header .aic-mm-item > a:hover,.wbh-header .aic-mm-item.mm-open > a{color:var(--tan-soft);background:transparent}
  .wbh-header .aic-mm-item.mm-highlight > a{color:var(--tan-soft)}
  .wbh-header .aic-mm-panel{top:100%}
}
@media (max-width:1024px){
  .wbh-header .wbh-nav--mm{flex:0 0 auto;order:3}
  .wbh-header .aic-mm-inner{justify-content:flex-end}
  .wbh-header .aic-mm-toggle span{background:var(--cream)} /* same bug on the burger bars */
  /* The plugin's desktop justify-content:center carries into the column-direction
     drawer and vertically centres the list, leaving ~200px dead above the close button. */
  .wbh-header .aic-megamenu .aic-mm-list{justify-content:flex-start;overflow-y:auto;-webkit-overflow-scrolling:touch}
}

/* The megamenu's CLOSED dropdown panels stay in layout and cascade to the right: the document
   measured 4,756px wide at a 1,322px viewport (the megamenu alone was 4,617px of it).
   body{overflow-x:hidden} hides that from visitors, but device emulation, print and screenshot
   tools all scale to the real layout width, which is why the site renders as a narrow column.
   Clip panels while closed; hover/open restores overflow so submenus still show. */
.wbh-header .aic-mm-panel{max-width:100vw}
/* Desktop only. The phantom width comes from position:absolute panels; on mobile the panel is
   static and display:none when closed, so it adds nothing - and clipping there cut the Air
   Quality group's links off the bottom of an expanded drawer panel. */
@media (min-width:1025px){
  .wbh-header .aic-mm-item:not(.mm-open):not(:hover):not(:focus-within) .aic-mm-panel{overflow:hidden}
}
@media (max-width:1024px){
  .wbh-header .aic-mm-panel{overflow:visible}
}

/* Heating, Cooling, Plumbing and Air Quality are the four things people arrive wanting, and
   they sat two levels down behind a Services bucket whose own href is "#": open drawer, scroll,
   tap Services, then tap the trade. On phones that group is expanded on arrival instead. */
@media (max-width:1024px){
  #aic-megamenu .aic-mm-item:has(> .aic-mm-panel a[href$="/calgary-plumbing-services/"]) > .aic-mm-panel{display:block}
  #aic-megamenu .aic-mm-item:has(> .aic-mm-panel a[href$="/calgary-plumbing-services/"]) > a .aic-mm-caret,
  #aic-megamenu .aic-mm-item:has(> .aic-mm-panel a[href$="/calgary-plumbing-services/"]) > a svg{transform:rotate(180deg)}
  /* Show the four trade hubs only. Each group head is 53px, so Cooling, Heating, Plumbing and
     Air Quality all sit in the first screen; their sub-items live on the hub page one tap away.
     Printing every grandchild made the drawer 1401px and pushed Air Quality past the fold. */
  #aic-megamenu .aic-mm-item:has(> .aic-mm-panel a[href$="/calgary-plumbing-services/"]) > .aic-mm-panel .aic-mm-grandkids{display:none}
  #aic-megamenu .aic-mm-panel a{min-height:44px;display:flex;align-items:center}
}

/* ==========================================================================
   NAVIGATION — one hamburger at every width (owner decision, 2026-09-16)
   The megamenu is no longer hosted in the header; this drawer renders the same
   WordPress menu, top level plus one child level.
   ========================================================================== */
.wbh-nav{display:none!important}
.wbh-burger{display:flex;min-width:44px;min-height:44px;align-items:center;justify-content:center;gap:5px;flex-direction:column;background:none;border:0;cursor:pointer;padding:0}
.wbh-burger span{display:block;width:24px;height:2px;background:var(--cream);transition:transform var(--dur) var(--ease),opacity var(--dur) var(--ease)}

.wbh-mobile-nav{
  display:block;position:fixed;inset:0 0 0 auto;width:min(360px,88vw);
  background:var(--navy-deep);border-top:0;border-left:1px solid var(--line-invert);
  transition:transform .26s var(--ease);
  overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:60;
  padding:calc(var(--sp-8) + env(safe-area-inset-top)) 0 calc(var(--sp-8) + env(safe-area-inset-bottom));
  display:none;
}
.wbh-mobile-nav.is-open{display:block;box-shadow:var(--shadow-lg);animation:wbh-drawer-in .26s var(--ease) both}
@keyframes wbh-drawer-in{from{transform:translateX(100%)}to{transform:translateX(0)}}
.wbh-mobile-nav ul{list-style:none;margin:0;padding:0}
.wbh-mobile-nav li{border-bottom:1px solid rgba(245,239,230,.08)}
.wbh-mobile-nav li:last-child{border-bottom:0}
.wbh-mobile-nav a{
  display:flex;align-items:center;min-height:52px;
  padding:12px var(--sp-6);color:var(--cream);font-size:16px;font-weight:500;
}
.wbh-mobile-nav a:hover,.wbh-mobile-nav a:focus-visible{background:rgba(245,239,230,.07);color:var(--gold)}
.wbh-mobile-nav .sub-menu{background:rgba(0,0,0,.22);display:none}
.wbh-mobile-nav .sub-menu.is-open{display:block}
/* Chevron shows which branches open, and which way. */
.wbh-mobile-nav .menu-item-has-children > a::after{content:'';display:block;flex:0 0 auto;margin-left:auto;margin-top:-4px;width:9px;height:9px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg);opacity:.7;transition:transform var(--dur) var(--ease)}
.wbh-mobile-nav .menu-item-has-children.is-open > a::after{transform:rotate(-135deg)}
.wbh-mobile-nav .sub-menu a{min-height:46px;padding-left:calc(var(--sp-6) + 18px);font-size:15px;font-weight:400;color:rgba(245,239,230,.86)}
.wbh-mobile-nav .sub-menu li{border-bottom:0}
/* Parents that only exist to group (href="#") read as headings, not dead links. */
.wbh-mobile-nav .menu-item-has-children > a[href="#"]{font-weight:600;letter-spacing:.02em;color:var(--gold);cursor:default}

@media (prefers-reduced-motion:reduce){
  .wbh-mobile-nav{transition:none}
}

/* ==========================================================================
   DESKTOP NAV (>=1280px) - ordinary inline menu with single-column dropdowns.
   Not a mega panel: one column, item-width, opens under its own parent.
   The six labels plus the phone, cart and button measure 1269px on one line, and the
   container's own gutters add 48px. Anything narrower than 1360 overflows the viewport,
   so laptops at 1280 and below keep the hamburger rather than a broken row.
   ========================================================================== */
@media (min-width:1360px){
  .wbh-header .wbh-nav{display:flex!important}
  .wbh-header .wbh-burger{display:none}
  .wbh-header .wbh-nav > ul{display:flex;gap:2px;margin:0;padding:0;list-style:none}
  .wbh-header .wbh-nav > ul > li > a{
    display:flex;align-items:center;min-height:44px;padding:0 13px;
    color:var(--cream);font-size:14.5px;font-weight:500;border-bottom:2px solid transparent;
  }
  .wbh-header .wbh-nav > ul > li:hover > a,
  .wbh-header .wbh-nav > ul > li:focus-within > a{color:var(--gold);border-bottom-color:var(--gold)}

  .wbh-header .wbh-nav .sub-menu{
    position:absolute;left:0;top:100%;min-width:250px;
    display:block;margin:0;padding:8px 0;list-style:none;
    background:var(--navy-deep);box-shadow:0 16px 34px rgba(0,0,0,.30);
    border:1px solid var(--line-invert);border-radius:var(--radius);
    opacity:0;visibility:hidden;transform:translateY(-6px);
    transition:opacity .16s var(--ease),transform .16s var(--ease),visibility .16s;
    transition-delay:.14s;z-index:50;
  }
  .wbh-header .wbh-nav li:hover > .sub-menu,
  .wbh-header .wbh-nav li:focus-within > .sub-menu{opacity:1;visibility:visible;transform:none;transition-delay:0s}
  .wbh-header .wbh-nav .sub-menu a{
    display:flex;align-items:center;min-height:42px;padding:6px 16px;
    color:rgba(245,239,230,.88);font-size:14.5px;font-weight:400;white-space:nowrap;
  }
  .wbh-header .wbh-nav .sub-menu a:hover,
  .wbh-header .wbh-nav .sub-menu a:focus-visible{background:rgba(245,239,230,.08);color:var(--gold)}
  /* Third level opens to the side of its parent row. */
  .wbh-header .wbh-nav .sub-menu .sub-menu{top:-9px;left:100%}
}

/* No desktop mega panel. One hamburger drawer at every width (owner instruction). */

/* Header commerce controls. */
.wbh-header__cart{position:relative;display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;color:var(--cream)}
.wbh-header__cart:hover{color:var(--gold)}
.wbh-header__cart-count{
  position:absolute;top:4px;right:2px;min-width:18px;height:18px;padding:0 5px;
  display:flex;align-items:center;justify-content:center;
  background:var(--gold);color:var(--navy);border-radius:999px;
  font-size:11px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;
}

/* Google Preferred Sources prompt: full card on articles, one quiet line in the footer. */
.wbh-preferred{margin-top:var(--sp-6);padding:var(--sp-5);border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.wbh-preferred__lead{margin:0 0 var(--sp-3);font-size:15px;line-height:1.55}
.wbh-preferred [google-add-preferred-source-btn]{margin:0 0 var(--sp-3)}
.wbh-preferred__link{font-weight:600;color:var(--navy);text-decoration:underline;text-underline-offset:3px}
.wbh-footer .wbh-preferred{margin-top:14px;padding:0;border:0;background:transparent}
.wbh-footer .wbh-preferred__lead{display:none}
.wbh-footer .wbh-preferred__link{color:inherit;font-size:12.5px;font-weight:500}

/* Article byline: one labelled date/time block between the H1 and the body. */
.wbh-byline{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:baseline}
.wbh-byline time{font-variant-numeric:tabular-nums}

/* Quote-only catalogue items: no price, no cart, a request instead. */
.wbh-price-quote{font-weight:600;color:var(--navy)}
.wbh-product__quote{margin:var(--sp-4) 0 0}
/* Catalogue descriptions are third-party HTML; keep them from leaking layout. */
.wbh-product-content{contain:layout paint;max-width:100%;overflow-x:auto}
.wbh-product-content img,.wbh-product-content iframe,.wbh-product-content video{max-width:100%;height:auto}
.wbh-product-content table{display:block;overflow-x:auto}

.wbh-brand{display:flex;align-items:center;gap:14px;flex:0 0 auto}
.wbh-brand:hover{color:var(--cream)}
.wbh-brand__mark{
  width:40px;height:40px;border-radius:50%;flex:0 0 auto;
  border:1.5px solid var(--cream);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--serif);font-style:italic;font-size:18px;color:var(--cream);
}
.wbh-brand__text{
  font-family:var(--serif);font-size:17px;letter-spacing:.18em;
  color:var(--cream);line-height:1.1;
}
.wbh-brand__text small{
  display:block;font-size:10px;letter-spacing:.22em;
  font-style:italic;font-weight:400;opacity:.85;margin-top:3px;
}
.wbh-brand__logo{max-height:60px;width:auto} /* the mark is round; 46px read as an icon, not a logo */

/* The home hero's brand line inherits the page's red (#df262d) over a navy photo: ~2.5:1.
   !important is required because the page ships its own <style> block in the body. */
#wbh-seo-home .hero .eyebrow{color:#fff!important;opacity:.92}

.wbh-nav{display:flex;gap:26px;font-size:14px;letter-spacing:.02em}
.wbh-nav ul{list-style:none;display:flex;gap:26px;margin:0;padding:0}
.wbh-nav:not(.wbh-nav--mm) li{position:relative}
/* The megamenu panel is position:absolute;left:0;right:0 and expects a full-width
   positioning context. .wbh-nav li{position:relative} made each 218px item that context,
   so the panel background stayed 218px wide while its columns spilled onto the hero. */
.wbh-header .aic-mm-item{position:static}
.wbh-nav a{
  color:rgba(245,239,230,.85);
  padding:6px 0;display:inline-block;
  border-bottom:1px solid transparent;
}
.wbh-nav a:hover,
.wbh-nav .current-menu-item > a,
.wbh-nav .current_page_item > a{color:var(--cream);border-bottom-color:var(--tan)}

/* Dropdowns */
.wbh-nav .sub-menu{
  position:absolute;top:100%;left:0;z-index:50;
  display:block;min-width:230px;
  background:var(--navy-deep);
  border:1px solid var(--line-invert);
  border-radius:var(--radius-sm);
  padding:8px 0;margin-top:10px;
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity var(--dur) var(--ease),transform var(--dur) var(--ease),visibility var(--dur);
  box-shadow:0 18px 40px rgba(0,0,0,.3);
  flex-direction:column;gap:0;
}
.wbh-nav li:hover > .sub-menu,
.wbh-nav li:focus-within > .sub-menu{opacity:1;visibility:visible;transform:translateY(0)}
.wbh-nav .sub-menu a{
  display:block;padding:9px 18px;border-bottom:none;font-size:13.5px;
}
.wbh-nav .sub-menu a:hover{background:rgba(232,119,34,.14);color:var(--tan)}
.wbh-nav .menu-item-has-children > a::after{
  content:"";display:inline-block;margin-left:7px;
  border:4px solid transparent;border-top-color:currentColor;
  transform:translateY(2px);
}

.wbh-header__right{display:flex;align-items:center;gap:var(--sp-4)}
.wbh-header__phone{
  /* The phone number is a call link on a header row full of 44px controls; it measured
     23px, which is under the touch minimum and left it sitting high against its neighbours. */
  display:inline-flex;align-items:center;min-height:44px;
  font-size:14px;font-weight:600;color:var(--cream);white-space:nowrap;
}
.wbh-header__phone:hover{color:var(--tan)}

/* Mobile toggle */
/* .wbh-burger and .wbh-mobile-nav are defined once, in the NAVIGATION block above. */
.wbh-burger span{
  display:block;width:24px;height:2px;background:var(--cream);
  transition:transform var(--dur) var(--ease),opacity var(--dur) var(--ease);
}
.wbh-burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.wbh-burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.wbh-burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}


.wbh-mobile-nav ul{list-style:none;margin:0;padding:var(--sp-3) 0}
.wbh-mobile-nav li{border-bottom:1px solid rgba(245,239,230,.07)}
.wbh-mobile-nav li:last-child{border-bottom:0}
.wbh-mobile-nav a{
  display:block;padding:14px var(--gutter);
  color:var(--cream-soft);font-size:15.5px;
}
.wbh-mobile-nav a:hover{color:var(--tan);background:rgba(232,119,34,.07)}
.wbh-mobile-nav .sub-menu{padding:0 0 var(--sp-2) var(--sp-5);background:none;border:0}
.wbh-mobile-nav .sub-menu a{font-size:14px;padding:10px var(--gutter);opacity:.85}


/* ==========================================================================
   06 BUTTONS
   ========================================================================== */
.wbh-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  padding:17px 30px;
  font-family:var(--sans);font-weight:600;font-size:15px;
  letter-spacing:.03em;line-height:1.3;text-align:center;
  border:none;border-radius:var(--radius-sm);cursor:pointer;
  transition:transform .15s var(--ease),background var(--dur) var(--ease),
             color var(--dur) var(--ease),border-color var(--dur) var(--ease);
}
.wbh-btn--primary{background:var(--gold);color:var(--navy)}
.wbh-btn--primary:hover{background:var(--gold-dark);color:var(--navy);transform:translateY(-1px)}

.wbh-btn--dark{background:var(--navy);color:var(--cream)}
.wbh-btn--dark:hover{background:var(--navy-deep);color:var(--cream);transform:translateY(-1px)}

.wbh-btn--secondary{
  background:transparent;color:var(--cream);
  border:1.5px solid rgba(245,239,230,.55);
}
.wbh-btn--secondary:hover{border-color:var(--cream);background:rgba(245,239,230,.07);color:var(--cream)}

.wbh-btn--ghost{
  background:transparent;color:var(--navy);
  border:1.5px solid var(--line-strong);
}
.wbh-btn--ghost:hover{border-color:var(--navy);background:rgba(27,54,93,.05)}

.wbh-btn--sm{padding:11px 18px;font-size:13px;letter-spacing:.04em;text-transform:uppercase}
.wbh-btn--block{width:100%}

.wbh-btn__arrow{transition:transform var(--dur) var(--ease)}
.wbh-btn:hover .wbh-btn__arrow{transform:translateX(4px)}

.wbh-textlink{
  font-size:14px;font-weight:600;color:var(--navy);
  display:inline-flex;align-items:center;gap:8px;letter-spacing:.03em;
  /* Was 23px tall: inline-flex has no implicit height, so the hit area was the text.
     These are standalone CTAs with room to spare, so they take the full 44px. */
  min-height:44px;
}
.wbh-textlink:hover{color:var(--tan-dark)}
.wbh-textlink .wbh-btn__arrow{display:inline-block}
.wbh-textlink:hover .wbh-btn__arrow{transform:translateX(4px)}

.wbh-inline-link{
  color:var(--navy);font-weight:600;
  border-bottom:1px solid var(--tan);
}
.wbh-inline-link:hover{color:var(--tan-dark)}


/* ==========================================================================
   07 FORMS
   ========================================================================== */
.wbh-form{
  background:var(--cream);
  border:1px solid var(--line);
  padding:var(--sp-7);
  border-radius:var(--radius);
}
.wbh-field{display:grid;gap:7px;margin-bottom:var(--sp-4)}
.wbh-field label,
.wbh-form label{
  font-size:12.5px;font-weight:600;letter-spacing:.05em;
  color:var(--navy);text-transform:uppercase;
}
.wbh-field .wbh-optional{text-transform:none;font-weight:400;opacity:.7}

input[type=text],input[type=email],input[type=tel],input[type=url],
input[type=password],input[type=search],input[type=number],input[type=date],
select,textarea{
  font-family:var(--sans);font-size:15px;
  padding:13px 14px;width:100%;
  background:var(--surface);
  border:1px solid rgba(27,54,93,.2);
  border-radius:var(--radius-sm);
  color:var(--ink);
  transition:border-color var(--dur) var(--ease),box-shadow var(--dur) var(--ease);
}
input:focus,select:focus,textarea:focus{
  outline:none;border-color:var(--tan);
  box-shadow:0 0 0 3px rgba(232,119,34,.14);
}
textarea{min-height:118px;resize:vertical}
select{
  appearance:none;
  background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%231B365D' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
  background-repeat:no-repeat;
  background-position:right 14px center;
  background-size:12px;
  padding-right:38px;
}

.wbh-consent{
  display:flex;gap:11px;align-items:flex-start;
  font-size:13px;line-height:1.6;color:var(--ink-soft);
  margin:var(--sp-2) 0 var(--sp-4);
}
.wbh-consent input{
  width:17px;height:17px;flex:0 0 auto;margin-top:2px;
  accent-color:var(--tan);
}

.wbh-honeypot{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

.wbh-notice{
  margin-top:var(--sp-4);padding:13px 16px;
  font-size:14px;line-height:1.55;font-weight:600;
  border-radius:var(--radius-sm);border-left:3px solid;
}
.wbh-notice--ok{background:rgba(63,107,85,.1);border-color:var(--ok);color:var(--ok)}
.wbh-notice--err{background:rgba(163,58,42,.08);border-color:var(--err);color:var(--err)}

/* Search form */
.wbh-searchform{display:flex;gap:var(--sp-2)}
.wbh-searchform input[type=search]{flex:1}

/* Formidable forms (11/40/57/58) inherit no plugin stylesheet on this theme; without
   this they render 28px-tall, 11px inputs that iOS zooms into on focus. 16px + 48px
   are the thresholds that stop the zoom and meet the tap-target minimum. */
/* formidableforms.css sets these with !important from CSS variables; the variables are
   the supported override surface, so the theme sets those rather than fighting rules. */
.frm_forms.with_frm_style{
  --field-font-size:16px!important;
  --field-height:48px!important;
  --field-pad:12px 14px!important;
  --field-border-radius:8px!important;
  --field-width:100%!important;
  --font-size:15px!important;
  --label-padding:0 0 6px 0!important;
  --submit-font-size:16px!important;
  --submit-height:48px!important;
  --submit-padding:12px 22px!important;
  --submit-width:100%!important;
  --submit-border-radius:999px!important;
}
.frm_forms textarea{min-height:120px}
.frm_forms input:focus,.frm_forms select:focus,.frm_forms textarea:focus{outline:2px solid var(--tan);outline-offset:1px;border-color:var(--tan)}
.frm_forms label,.frm_forms .frm_primary_label{font-size:14px;font-weight:600;color:var(--navy);margin-bottom:6px;display:block}
.frm_forms .frm_description{font-size:13px}
.frm_forms .frm_button_submit,.frm_forms button[type=submit],.frm_forms input[type=submit]{
  min-height:48px;padding:14px 22px;font:inherit;font-size:16px;font-weight:600;
  background:var(--tan);color:#fff;border:0;border-radius:999px;cursor:pointer;width:100%;
}
.frm_forms .frm_form_field{margin-bottom:14px}
/* Multi-page Next/Previous buttons ignore --submit-font-size. */
.frm_forms.with_frm_style .frm_submit .frm_button_submit,.frm_forms.with_frm_style .frm_submit button,.frm_forms.with_frm_style .frm_submit input[type=submit],.frm_forms.with_frm_style .frm_next_page,.frm_forms.with_frm_style .frm_prev_page,.frm_forms.with_frm_style .frm_final_submit{
  font-size:16px!important;min-height:48px!important;padding:12px 24px!important;min-width:120px;
}
.frm_forms input[type=checkbox],.frm_forms input[type=radio]{width:22px;height:22px;margin-right:10px;vertical-align:middle}


/* ==========================================================================
   08 CARDS & COMPONENTS
   ========================================================================== */
.wbh-card{
  background:var(--cream);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:var(--sp-7) var(--sp-6);
  display:flex;flex-direction:column;gap:var(--sp-4);
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),
             border-color var(--dur) var(--ease);
}
.wbh-card:hover{
  transform:translateY(-4px);
  box-shadow:var(--shadow);
  border-color:var(--tan);
}
.wbh-card__badge{
  width:40px;height:40px;border-radius:50%;flex:0 0 auto;
  background:var(--navy);color:var(--cream);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--serif);font-size:18px;font-weight:600;
}
.wbh-card h3{font-size:22px;line-height:1.3;margin:0}
.wbh-card p{font-size:15px;line-height:1.62;margin:0}
.wbh-card__meta{
  font-size:13px;color:var(--ink-soft);font-style:italic;
  display:flex;gap:12px;flex-wrap:wrap;margin:0;
}
.wbh-card__meta span::before{content:"\2022";margin-right:8px;color:var(--tan)}
.wbh-card__meta span:first-child::before{display:none}
.wbh-card .wbh-textlink{margin-top:auto;padding-top:var(--sp-1)}

/* Stat card */
.wbh-stat{
  background:rgba(245,239,230,.055);
  border:1px solid var(--line-invert);
  border-left:3px solid var(--tan);
  padding:20px 22px;
  border-radius:0 var(--radius-sm) var(--radius-sm) 0;
}
.wbh-stat__fig{
  font-family:var(--serif);font-size:32px;font-weight:700;
  color:var(--tan);line-height:1.05;font-variant-numeric:tabular-nums;
}
.wbh-stat__lab{font-size:14px;color:var(--cream-soft);margin-top:7px;line-height:1.5}
.wbh-stat__src{
  font-size:11.5px;color:rgba(245,239,230,.5);
  margin-top:9px;font-style:italic;
}

/* Definition list — AEO extraction target */
.wbh-definition{
  margin:var(--sp-8) 0 0;
  display:grid;grid-template-columns:repeat(2,1fr);
  border-top:1px solid var(--line);
}
.wbh-definition__item{padding:30px 34px 30px 0;border-bottom:1px solid var(--line)}
.wbh-definition__item:nth-child(odd){padding-right:44px}
.wbh-definition__item:nth-child(even){padding-left:44px;border-left:1px solid var(--line)}
.wbh-definition dt{
  font-family:var(--serif);font-size:21px;font-weight:600;
  color:var(--navy);margin-bottom:9px;line-height:1.25;
}
.wbh-definition__measures{
  font-size:12px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--tan-dark);font-weight:600;margin-bottom:11px;line-height:1.45;
}
.wbh-definition dd{margin:0;font-size:15.5px;line-height:1.66;color:var(--ink)}

/* Comparison table */
.wbh-table-wrap{overflow-x:auto;margin-top:var(--sp-7);-webkit-overflow-scrolling:touch}
table{border-collapse:collapse;width:100%;font-size:15px}
.wbh-table{background:var(--cream);min-width:560px}
.wbh-table caption{
  text-align:left;font-size:13px;color:var(--ink-soft);
  font-style:italic;padding-bottom:14px;
}
.wbh-table th,.wbh-table td{
  text-align:left;padding:16px 20px;
  border-bottom:1px solid var(--line);
  vertical-align:top;line-height:1.55;
}
.wbh-table thead th{
  font-family:var(--serif);font-size:17px;color:var(--navy);
  font-weight:600;border-bottom:2px solid var(--navy);
}
.wbh-table tbody th{
  font-family:var(--sans);font-size:13px;font-weight:600;
  color:var(--navy);letter-spacing:.04em;text-transform:uppercase;width:26%;
}
.wbh-table tbody tr:last-child th,
.wbh-table tbody tr:last-child td{border-bottom:none}

/* Proof / media card */
.wbh-proof{
  background:rgba(245,239,230,.06);
  border:1px solid rgba(245,239,230,.13);
  border-radius:var(--radius);overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform var(--dur) var(--ease),border-color var(--dur) var(--ease);
}
.wbh-proof:hover{transform:translateY(-3px);border-color:rgba(232,119,34,.42)}
.wbh-proof__img{aspect-ratio:3/2;overflow:hidden;background:rgba(245,239,230,.04)}
.wbh-proof__img img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease)}
.wbh-proof:hover .wbh-proof__img img{transform:scale(1.04)}
.wbh-proof__body{padding:22px 26px 26px;display:flex;flex-direction:column;gap:10px;flex:1}
.wbh-proof__pill{
  font-size:11px;letter-spacing:.17em;text-transform:uppercase;
  color:var(--tan);font-weight:700;margin:0;
}
.wbh-proof h3{font-size:18px;line-height:1.3;margin:0}
.wbh-proof p{font-size:14px;line-height:1.62;margin:0;color:rgba(245,239,230,.78)}
.wbh-proof__measured{
  font-size:12.5px;color:var(--tan);font-weight:600;
  padding-top:10px;border-top:1px solid rgba(245,239,230,.12);
  margin-top:auto;
}

/* FAQ */
.wbh-faq{max-width:820px;margin:var(--sp-7) auto 0}
.wbh-faq details{border-bottom:1px solid var(--line);padding:22px 0}
.wbh-faq details:first-child{border-top:1px solid var(--line)}
.wbh-faq summary{
  font-family:var(--serif);font-size:19.5px;color:var(--navy);font-weight:600;
  cursor:pointer;list-style:none;
  display:flex;justify-content:space-between;align-items:flex-start;
  gap:18px;line-height:1.35;
}
.wbh-faq summary::-webkit-details-marker{display:none}
.wbh-faq summary::after{
  content:"+";color:var(--tan);font-size:26px;font-weight:300;
  line-height:1;flex:0 0 auto;margin-top:-2px;
  transition:transform var(--dur) var(--ease);
}
.wbh-faq details[open] summary::after{transform:rotate(45deg)}
.wbh-faq details p{font-size:15.5px;line-height:1.72;margin:14px 0 0;max-width:70ch}

/* Pill list (service areas) */
.wbh-pills{display:flex;flex-wrap:wrap;gap:10px;list-style:none;margin:var(--sp-6) 0 0;padding:0}
.wbh-pills li{
  background:var(--cream);
  border:1px solid rgba(27,54,93,.16);
  padding:9px 16px;border-radius:3px;
  font-size:14px;color:var(--navy);font-weight:500;
}

/* NAP block */
.wbh-nap{
  background:var(--navy);color:var(--cream);
  border-radius:var(--radius);padding:32px 34px;
  font-size:15px;line-height:1.75;
}
.wbh-nap h3{font-size:19px;color:var(--cream);margin-bottom:var(--sp-4)}
.wbh-nap dl{margin:0;display:grid;gap:14px}
.wbh-nap dt{
  font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--tan);font-weight:700;margin-bottom:3px;
}
.wbh-nap dd{margin:0;color:var(--cream-soft)}
.wbh-nap a{color:var(--cream);font-weight:600;border-bottom:1px solid rgba(232,119,34,.5)}

/* Breadcrumbs */
.wbh-breadcrumbs{
  font-size:13px;color:var(--ink-soft);
  padding-block:var(--sp-4);
}
.wbh-breadcrumbs a{color:var(--ink-soft)}
.wbh-breadcrumbs a:hover{color:var(--tan-dark)}

/* Post meta / byline */
.wbh-meta{
  font-size:13.5px;color:var(--ink-soft);
  display:flex;flex-wrap:wrap;gap:var(--sp-2) var(--sp-5);
  margin-bottom:var(--sp-5);
}
.wbh-taxonomy{display:flex;flex-wrap:wrap;gap:8px;margin-top:var(--sp-5)}
.wbh-taxonomy a{
  min-height:40px;display:inline-flex;align-items:center;
  display:inline-block;padding:5px 12px;
  background:var(--bg-alt);border-radius:14px;
  font-size:13px;color:var(--navy);
}
.wbh-taxonomy a:hover{background:var(--tan);color:var(--navy)}


/* ==========================================================================
   09 PAGE SECTIONS
   ========================================================================== */

/* --- Hero --- */
.wbh-hero{
  background:var(--navy);color:var(--cream);
  padding:72px 0 88px;position:relative;overflow:hidden;
}
.wbh-hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(ellipse at top right,rgba(232,119,34,.09),transparent 52%),
    radial-gradient(ellipse at bottom left,rgba(245,239,230,.035),transparent 60%);
}
.wbh-hero__grid{
  position:relative;z-index:1;
  display:grid;grid-template-columns:1.35fr 1fr;
  gap:72px;align-items:center;
}
.wbh-hero h1{font-size:var(--fs-hero);color:var(--cream);margin-bottom:var(--sp-4)}

/* The clarifying sentence.
   WHY: Clarity measured 17.68% average scroll depth and 29s active time; ~45%
   of sessions arrive in the Facebook or Instagram in-app browser. This is the
   one line a cold visitor reads before deciding, so it sits above everything. */
.wbh-hero__clarify{
  font-size:clamp(17px,1.55vw,19px);
  line-height:1.6;color:var(--cream-soft);
  max-width:56ch;margin:0 0 var(--sp-6);
}
.wbh-hero__clarify strong{color:#fff;font-weight:600}

.wbh-hero__bullets{list-style:none;padding:0;margin:0 0 var(--sp-7);display:grid;gap:13px}
.wbh-hero__bullets li{
  display:flex;align-items:flex-start;gap:13px;
  font-size:15.5px;color:var(--cream-soft);
}
.wbh-check{
  flex:0 0 auto;width:22px;height:22px;border-radius:50%;
  border:1.5px solid var(--tan);color:var(--tan);
  display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:700;margin-top:1px;
}
.wbh-cta-stack{display:flex;flex-direction:column;gap:12px;max-width:440px}
.wbh-hero__phone{margin-top:var(--sp-4);font-size:14px;color:rgba(245,239,230,.66)}
.wbh-hero__phone a{color:var(--cream);font-weight:600;border-bottom:1px solid rgba(232,119,34,.5)}
.wbh-hero__trust{
  display:flex;flex-wrap:wrap;gap:8px 28px;
  margin-top:var(--sp-6);padding-top:var(--sp-5);
  border-top:1px solid rgba(245,239,230,.13);
  font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;
  color:rgba(245,239,230,.62);font-weight:500;
}

/* Author portrait + book */
.wbh-hero__author{position:relative}
.wbh-portrait{
  position:relative;border-radius:var(--radius);overflow:hidden;
  background:linear-gradient(135deg,#2a4870 0%,#1B365D 100%);
  aspect-ratio:4/5;
  display:flex;align-items:flex-end;justify-content:center;
  box-shadow:var(--shadow-lg);
}
.wbh-portrait img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center 22%;z-index:1;
}
.wbh-portrait__caption{
  position:relative;z-index:2;width:100%;
  background:linear-gradient(to top,rgba(15,31,54,.94),rgba(15,31,54,.55) 55%,transparent);
  padding:34px 22px 18px;text-align:center;color:var(--cream);
}
.wbh-portrait__name{font-family:var(--serif);font-size:18px;font-weight:600;letter-spacing:.02em;display:block}
.wbh-portrait__role{font-size:12px;font-style:italic;color:rgba(245,239,230,.78);margin-top:3px;display:block}
.wbh-booklet{
  position:absolute;bottom:-38px;left:-38px;width:138px;z-index:4;
  border-radius:var(--radius-sm);
  box-shadow:0 14px 34px rgba(0,0,0,.45);
  border:1px solid rgba(245,239,230,.12);
}

/* --- AEO answer block ---
   WHY: chatgpt.com sent 89 sessions at 13.5% conversion — the highest-converting
   referral source in GA4, ahead of every paid channel. Answer engines lift a
   short, self-contained, entity-explicit definition placed right after the H1. */
.wbh-answer{
  max-width:var(--maxw);margin-inline:auto;
  padding:44px var(--gutter) 40px;
  border-bottom:1px solid var(--line);
}
.wbh-answer h2{font-size:var(--fs-xl);margin-bottom:var(--sp-3)}
.wbh-answer > p{
  font-size:clamp(16px,1.45vw,18px);line-height:1.68;
  max-width:var(--maxw-text);margin:0 0 var(--sp-3);
}
.wbh-answer__cite{
  font-size:13px;color:var(--ink-soft);font-style:italic;
  margin-top:var(--sp-4) !important;padding-top:var(--sp-3);
  border-top:1px solid var(--line);
}

/* --- Compliance strip --- */
.wbh-disclaimer{
  background:var(--navy-deep);color:rgba(245,239,230,.82);
  padding:16px 0;text-align:center;
  font-size:13px;font-style:italic;line-height:1.55;
}
.wbh-disclaimer .wbh-container{max-width:82ch}

/* --- Empathy list --- */
.wbh-empathy{
  list-style:none;padding:0;margin:var(--sp-7) 0 0;
  max-width:720px;display:grid;gap:18px;
}
.wbh-empathy li{
  display:flex;align-items:flex-start;gap:18px;
  font-size:17.5px;line-height:1.55;
}
.wbh-empathy__num{
  flex:0 0 auto;width:28px;height:28px;border-radius:50%;
  background:var(--navy);color:var(--cream);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--sans);font-size:13px;font-weight:600;margin-top:2px;
}
.wbh-empathy__close{
  font-family:var(--serif);font-style:italic;font-size:20px;
  margin-top:var(--sp-7);max-width:60ch;line-height:1.55;
}

/* --- Climate / stats --- */
.wbh-climate{display:grid;grid-template-columns:1.15fr .85fr;gap:60px;align-items:start}
.wbh-stat-stack{display:grid;gap:14px}

/* --- Book / commerce --- */
.wbh-book{display:grid;grid-template-columns:.8fr 1.2fr;gap:var(--sp-9);align-items:center}
.wbh-book__cover{display:flex;justify-content:center}
.wbh-book__cover img{
  width:100%;max-width:330px;border-radius:var(--radius-sm);
  box-shadow:0 32px 64px rgba(0,0,0,.42);
  border:1px solid rgba(245,239,230,.12);
}
.wbh-editions{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:var(--sp-7)}
.wbh-edition{
  background:rgba(245,239,230,.06);
  border:1px solid rgba(245,239,230,.16);
  border-radius:var(--radius-sm);padding:22px 20px;
  display:flex;flex-direction:column;gap:9px;
  transition:border-color var(--dur) var(--ease),background var(--dur) var(--ease),transform var(--dur) var(--ease);
}
.wbh-edition:hover{border-color:var(--tan);background:rgba(232,119,34,.08);transform:translateY(-3px)}
.wbh-edition--featured{border-color:var(--tan);background:rgba(232,119,34,.1)}
.wbh-edition__fmt{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--tan);font-weight:700}
.wbh-edition__price{
  font-family:var(--serif);font-size:25px;color:var(--cream);
  font-weight:600;font-variant-numeric:tabular-nums;line-height:1.1;
}
.wbh-edition__note{font-size:13px;color:rgba(245,239,230,.66);line-height:1.5;flex:1}
.wbh-edition__go{
  font-size:13.5px;font-weight:600;color:var(--cream);
  display:inline-flex;align-items:center;gap:7px;margin-top:var(--sp-1);
  border-bottom:1px solid rgba(232,119,34,.55);padding-bottom:2px;align-self:flex-start;
}
.wbh-edition:hover .wbh-edition__go{color:var(--tan)}

/* --- Authority --- */
.wbh-authority{display:grid;grid-template-columns:1fr 1.4fr;gap:60px;align-items:center}
.wbh-authority__frame{
  background:var(--navy);border-radius:var(--radius);
  aspect-ratio:1/1.1;position:relative;overflow:hidden;
  display:flex;align-items:flex-end;justify-content:center;
  box-shadow:0 30px 60px rgba(27,54,93,.2);
}
.wbh-authority__frame img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1}
.wbh-authority__text p{font-size:16px;line-height:1.72;margin-bottom:17px}

/* --- Service area --- */
.wbh-area{display:grid;grid-template-columns:1fr 1fr;gap:56px;align-items:start}

/* --- Contact --- */
.wbh-contact{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:start}
.wbh-promise{
  background:var(--navy);color:var(--cream);
  padding:var(--sp-5);border-radius:var(--radius);
  font-size:15px;line-height:1.72;margin-top:var(--sp-5);
}
.wbh-promise strong{color:var(--tan);display:block;margin-bottom:6px}

/* --- Page hero (interior pages) --- */
.wbh-pagehead{
  background:var(--navy);color:var(--cream);
  padding:var(--sp-9) 0 var(--sp-8);
}
.wbh-pagehead h1{color:var(--cream);margin-bottom:var(--sp-3)}
.wbh-pagehead p{color:var(--cream-soft);max-width:64ch;margin:0}
.wbh-pagehead .wbh-breadcrumbs{color:rgba(245,239,230,.6);padding-top:0}
.wbh-pagehead .wbh-breadcrumbs a{color:rgba(245,239,230,.75)}


/* ==========================================================================
   10 EDITOR / WYSIWYG CONTENT
   Styles for anything authored in the WP editor or ACF WYSIWYG.
   ========================================================================== */
.wbh-content > *:first-child{margin-top:0}
.wbh-content h2{margin-top:var(--sp-8)}
.wbh-content h3{margin-top:var(--sp-7)}
.wbh-content ul,.wbh-content ol{
  margin:0 0 var(--sp-5);padding-left:var(--sp-5);
  max-width:var(--maxw-text);
}
.wbh-content li{margin-bottom:var(--sp-2);line-height:1.7}
.wbh-content ul li::marker{color:var(--tan)}
.wbh-content ol li::marker{color:var(--tan);font-weight:600}
.wbh-content img{border-radius:var(--radius-sm);margin-block:var(--sp-5)}
.wbh-content table{margin-block:var(--sp-6);font-size:15px}
.wbh-content table th,.wbh-content table td{
  padding:12px 16px;border-bottom:1px solid var(--line);text-align:left;
}
.wbh-content table thead th{background:var(--bg-alt);color:var(--navy);font-weight:600}
/* Body links measured 3.24:1 on cream. Navy text with a tan underline reads as a link and
   clears AA; the hover keeps the tan as the accent rather than as the text colour. */
.wbh-content a{color:var(--navy);border-bottom:1px solid var(--tan);text-decoration:none}
.wbh-content a:hover,.wbh-content a:focus-visible{color:var(--tan-dark);border-bottom-color:var(--tan-dark)}
/* Thrive author/byline shortcodes render white on the cream article ground (1.06:1, i.e.
   invisible) and a 132-grey that measures 3.27:1. Both inherit the body ink instead. */
.wbh-content .thrive-shortcode-content,
.wbh-content .tcb-post-author-name,
.wbh-content [class*='author'] span{color:var(--ink)!important}

/* WP core alignment classes */
.alignleft{float:left;margin:0 var(--sp-5) var(--sp-4) 0}
.alignright{float:right;margin:0 0 var(--sp-4) var(--sp-5)}
.aligncenter{margin-inline:auto;display:block}
.alignwide{max-width:1100px;margin-inline:auto}
.alignfull{width:100vw;max-width:100vw;margin-left:calc(50% - 50vw)}
.wp-caption{max-width:100%}
.wp-caption-text,figcaption{
  font-size:13px;color:var(--ink-soft);font-style:italic;
  text-align:center;margin-top:var(--sp-2);
}
.screen-reader-text{
  position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;
}


/* ==========================================================================
   11 COMMENTS
   ========================================================================== */
.wbh-comments{margin-top:var(--sp-9);padding-top:var(--sp-8);border-top:1px solid var(--line)}
.wbh-comments ol{list-style:none;margin:0;padding:0}
.wbh-comments .children{list-style:none;margin:var(--sp-5) 0 0;padding-left:var(--sp-6)}
.wbh-comment{
  padding:var(--sp-5) 0;border-bottom:1px solid var(--line);
}
.wbh-comment__meta{font-size:13px;color:var(--ink-soft);margin-bottom:var(--sp-2)}
.wbh-comment__author{font-weight:600;color:var(--navy)}
.comment-respond{margin-top:var(--sp-7)}
.comment-form{display:grid;gap:var(--sp-4);max-width:640px}


/* ==========================================================================
   12 PAGINATION & ARCHIVES
   ========================================================================== */
.wbh-pagination{
  display:flex;flex-wrap:wrap;gap:var(--sp-2);
  justify-content:center;margin-top:var(--sp-8);
}
.wbh-pagination .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;height:44px;padding:0 var(--sp-3);
  border:1px solid var(--line);border-radius:var(--radius-sm);
  font-size:14px;font-weight:600;color:var(--navy);
  transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease),color var(--dur) var(--ease);
}
.wbh-pagination .page-numbers:hover{border-color:var(--tan);background:rgba(232,119,34,.08)}
.wbh-pagination .page-numbers.current{background:var(--navy);color:var(--cream);border-color:var(--navy)}

.wbh-archive-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-6)}
.wbh-post-card{
  background:var(--cream);border:1px solid var(--line);
  border-radius:var(--radius);overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease);
}
.wbh-post-card:hover{transform:translateY(-4px);box-shadow:var(--shadow)}
.wbh-post-card__img{aspect-ratio:16/10;overflow:hidden;background:var(--bg-alt)}
.wbh-post-card__img img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease)}
.wbh-post-card:hover .wbh-post-card__img img{transform:scale(1.04)}
.wbh-post-card__body{padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-3);flex:1}
.wbh-post-card h3{font-size:20px;line-height:1.3;margin:0}
.wbh-post-card h3 a{color:var(--navy)}
.wbh-post-card h3 a:hover{color:var(--tan-dark)}
.wbh-post-card p{font-size:14.5px;line-height:1.6;margin:0}
.wbh-post-card .wbh-textlink{margin-top:auto}


/* ==========================================================================
   13 SIDEBAR & WIDGETS
   ========================================================================== */
.wbh-sidebar{display:grid;gap:var(--sp-6);align-content:start}
.wbh-widget{
  background:var(--cream);border:1px solid var(--line);
  border-radius:var(--radius);padding:var(--sp-5);
}
.wbh-widget h3,.wbh-widget .widget-title{
  font-size:16px;letter-spacing:.1em;text-transform:uppercase;
  font-family:var(--sans);font-weight:700;color:var(--navy);
  margin-bottom:var(--sp-4);
}
.wbh-widget ul{list-style:none;margin:0;padding:0}
.wbh-widget li{padding:8px 0;border-bottom:1px solid var(--line);font-size:14.5px}
.wbh-widget li:last-child{border-bottom:0}

.wbh-widget--cta{background:var(--navy);color:var(--cream);border-color:var(--navy)}
.wbh-widget--cta h3{color:var(--tan)}
.wbh-widget--cta p{color:var(--cream-soft);font-size:14.5px}


/* ==========================================================================
   14 FOOTER
   ========================================================================== */
.wbh-footer{
  background:var(--navy-deep);
  color:rgba(245,239,230,.7);
  padding:var(--sp-8) 0 var(--sp-6);
  font-size:13.5px;
}
.wbh-footer__grid{
  display:grid;grid-template-columns:2fr 1fr 1fr 1fr;
  gap:42px;margin-bottom:var(--sp-7);
}
.wbh-footer h2,.wbh-footer h3,.wbh-footer h4{
  font-family:var(--serif);font-size:14px;
  letter-spacing:.17em;text-transform:uppercase;
  color:var(--cream);margin-bottom:var(--sp-4);font-weight:600;
}
.wbh-footer p{margin:0 0 9px;line-height:1.72;font-size:13.5px;max-width:none}
.wbh-footer ul{list-style:none;margin:0;padding:0}
.wbh-footer a{display:block;padding:4px 0;color:rgba(245,239,230,.7)}
.wbh-footer a:hover{color:var(--tan)}
.wbh-footer__phone{color:var(--tan)!important;font-weight:600;display:inline!important}
.wbh-footer__attrib{
  font-size:11.5px;font-style:italic;
  color:rgba(245,239,230,.48);margin-top:5px;display:block;
}
.wbh-footer__legal{
  border-top:1px solid rgba(245,239,230,.1);
  padding-top:var(--sp-5);
  font-size:12px;line-height:1.65;color:rgba(245,239,230,.5);
}
.wbh-footer__legal em{display:block;margin-bottom:9px;max-width:92ch}


/* ==========================================================================
   15 STICKY CTA
   WHY: FacebookApp 36.88% + InstagramApp 8.71% of all sessions (Clarity). The
   dominant viewport is a social in-app browser well under 720px, and at 17.68%
   scroll depth most of those visitors never reach an in-page CTA.
   ========================================================================== */
.wbh-sticky{
  display:none;
  position:fixed;bottom:0;left:0;right:0;z-index:60;
  background:var(--navy);
  padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  border-top:1px solid rgba(245,239,230,.12);
  box-shadow:0 -10px 30px rgba(0,0,0,.24);
  gap:9px;
}
.wbh-sticky .wbh-btn{flex:1 1 auto;min-width:0;min-height:48px;padding:14px 18px;font-size:14.5px;white-space:nowrap}
.wbh-sticky .wbh-btn.wbh-sticky__call{
  flex:0 0 auto;width:64px;padding:14px 0;
  background:transparent;border:1.5px solid rgba(245,239,230,.4);
  color:var(--cream);font-size:12px;letter-spacing:.06em;
}


/* ==========================================================================
   16 UTILITIES
   ========================================================================== */
.wbh-center{text-align:center}
.wbh-center p,.wbh-center .wbh-lead{margin-inline:auto}
.wbh-narrow{max-width:680px;margin-inline:auto}
.wbh-mt-0{margin-top:0}
.wbh-mt-4{margin-top:var(--sp-7)}
.wbh-mb-0{margin-bottom:0}
.wbh-nowrap{white-space:nowrap}
.wbh-tabular{font-variant-numeric:tabular-nums}
.wbh-hide{display:none}


/* ==========================================================================
   17 RESPONSIVE
   ========================================================================== */
@media (max-width:1100px){
  .wbh-nav ul{gap:20px;font-size:13.5px}
}
/* 721-1099px had no phone in the header and no sticky bar: the one band with no way to call.
   The megamenu is collapsed to a toggle here, so the room exists. */
@media (max-width:1100px) and (min-width:721px){
  .wbh-header__phone{display:inline-flex;align-items:center;min-height:44px}
}
@media (max-width:720px){
  .wbh-header__phone{display:none}
}

@media (max-width:1024px){
  :root{--gutter:24px}
  .wbh-hero__grid{grid-template-columns:1fr;gap:52px}
  .wbh-hero__author{max-width:400px;margin-inline:auto}
  .wbh-booklet{width:106px;left:-18px;bottom:-26px}
  .wbh-climate{grid-template-columns:1fr;gap:44px}
  .wbh-definition{grid-template-columns:1fr}
  .wbh-definition__item:nth-child(odd),
  .wbh-definition__item:nth-child(even){padding-inline:0;border-left:none}
  .wbh-grid--3,.wbh-grid--4,.wbh-archive-grid{grid-template-columns:repeat(2,1fr)}
  .wbh-grid--sidebar,.wbh-grid--split{grid-template-columns:1fr;gap:var(--sp-8)}
  .wbh-book{grid-template-columns:1fr;gap:44px}
  .wbh-book__cover img{max-width:250px}
  .wbh-authority{grid-template-columns:1fr;gap:38px}
  .wbh-authority__frame{max-width:370px;margin-inline:auto;aspect-ratio:1/1.05}
  .wbh-area,.wbh-contact{grid-template-columns:1fr;gap:40px}
  .wbh-footer__grid{grid-template-columns:1fr 1fr;gap:32px}
}

@media (max-width:820px){
  /* The header used to go position:static here, so the logo, phone and menu scrolled away
     and never came back - the bar 'disappearing'. It stays pinned at every width now. */
  .wbh-header .wbh-nav--mm{order:2}
  .wbh-header__right{order:3}
  .wbh-header .aic-mm-toggle{min-width:44px;min-height:44px}
  .wbh-header .aic-mm-close{min-width:44px;min-height:44px}
  .wbh-brand__logo{max-height:54px}
}

@media (max-width:720px){
  :root{--gutter:22px}
  .wbh-section{padding-block:var(--sp-9)}
  .wbh-hero{padding:52px 0 72px}
  .wbh-hero h1{font-size:38px}
  .wbh-hero__clarify{font-size:16.5px}
  .wbh-hero__trust{gap:6px 20px;font-size:12.5px}
  .wbh-eyebrow{font-size:12px;letter-spacing:.22em}
  .wbh-stat__src,.wbh-note,.wbh-footer small{font-size:12.5px}
  .wbh-textlink{min-height:44px;padding-block:10px} /* card CTAs were 27px tall */
  /* Editor-authored CTAs on the CRO pages (.btn, .more) rendered 22–27px tall. */
  .wbh-content a[class*="btn"],.wbh-content a.more,.wbh-content a.mini,.wbh-content .cta-row a{display:inline-flex;align-items:center;min-height:44px;padding-block:10px;box-sizing:border-box}
  .frm_forms.with_frm_style .frm_form_field input[type=checkbox],.frm_forms.with_frm_style .frm_form_field input[type=radio]{width:22px!important;height:22px!important;min-height:0!important;min-width:0!important}
  .frm_forms.with_frm_style{--check-font-size:15px!important;--check-label-color:var(--ink)!important}
  .frm_forms .frm_checkbox label,.frm_forms .frm_radio label{display:flex;align-items:center;gap:10px;min-height:44px;font-size:15px}
  .wbh-hero__phone a{padding-block:6px;display:inline-block}
  .wbh-footer a{display:inline-flex;align-items:center;min-height:44px;padding-block:8px}
  /* Queue 13 injected #wbh-seo-home .hero h1{font-size:34px} into the page's own <style>,
     which loads after this file at equal specificity. One extra class outranks it. */
  #wbh-seo-home .hero .hero-copy h1{font-size:clamp(27px,8.4vw,34px);line-height:1.08}
  .wbh-footer a,.wbh-footer li > a{min-height:44px}
  .wbh-answer{padding:34px var(--gutter) 32px}
  .wbh-empathy li{font-size:16px;gap:14px}
  .wbh-empathy__close{font-size:18px;margin-top:var(--sp-6)}
  .wbh-grid--2,.wbh-grid--3,.wbh-grid--4,
  .wbh-archive-grid,.wbh-editions{grid-template-columns:1fr}
  .wbh-footer__grid{grid-template-columns:1fr;gap:26px}
  .wbh-ribbon{font-size:12px}
  .wbh-ribbon strong,.wbh-ribbon__lead{display:none} /* phones: the link alone; ribbon+header must stay under ~150px */
  .wbh-ribbon a{display:inline-block;padding:11px 0;line-height:1.5} /* ~40px tap target without growing the ribbon */
  .wbh-table th,.wbh-table td{padding:13px 15px;font-size:14px}
  .alignleft,.alignright{float:none;margin-inline:0}
  body{padding-bottom:78px}
  body.wbh-own-cta{padding-bottom:0}
  /* CRO heroes were authored for desktop: 1088px tall on an 844px phone, so the H1 landed at
     70% of the fold and the CTA below it. The headline and the primary action belong in the
     first screen; the photograph is the backdrop, not the content. */
  body.wbh-builder section.hero,body.wbh-builder .hero{min-height:0!important;padding-top:26px!important;padding-bottom:34px!important}
  body.wbh-builder .hero h1{margin-top:0}
  /* The CRO pages set padding-top:250px on .hero .wrap to centre copy over a tall desktop
     image. On a phone that is a 250px void before the first word. */
  body.wbh-builder .hero > .wrap{padding-top:22px!important;padding-bottom:10px!important}
  /* Article/page head: breadcrumbs plus 64px of padding put the H1 at 62% of the fold. */
  .wbh-pagehead{padding-block:18px 20px}
  .wbh-pagehead h1{font-size:28px;line-height:1.15;margin-top:6px}
  .wbh-sticky{display:flex}
}


/* ==========================================================================
   18 PRINT & MOTION
   ========================================================================== */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    transition-duration:.01ms!important;
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
  }
  html{scroll-behavior:auto}
}

@media print{
  .wbh-ribbon,.wbh-header,.wbh-sticky,.wbh-footer,
  .wbh-burger,.wbh-mobile-nav,.wbh-form{display:none!important}
  body{background:#fff;color:#000;padding-bottom:0}
  .wbh-section{padding-block:var(--sp-5);background:#fff!important;color:#000!important}
  .wbh-section h2,.wbh-section h3{color:#000!important}
  a{color:#000;text-decoration:underline}
  .wbh-faq details{display:block}
  .wbh-faq details p{display:block!important}
}


/* Header and nav labels are names, not sentences: a label that breaks across two lines
   makes the row look broken and pushes the header taller on every page. They stay on one
   line, and the row wraps between items instead of inside them. */
.wbh-nav a,
.wbh-mobile-nav > ul > li > a,
.wbh-header__phone,
.wbh-header .wbh-btn,
.wbh-ribbon a{white-space:nowrap}
.wbh-btn{white-space:nowrap}


/* The embedded page modules (#wbh-water, #wbh-furnace and the rest) were authored for a
   layout whose header floated over the hero, so each reserves up to 275px of hero top
   padding for it. This theme's header is opaque and sits above the hero, so that padding
   is an empty band - 290px of blue above the eyebrow on water-treatment. The top now
   matches the scale of the hero's own bottom padding. Desktop only: the phone values are
   already tuned in the max-width:720px block above, which must keep winning there. */
@media (min-width:721px){
  .wbh-content section.hero,
  .wbh-content .hero{padding-top:clamp(44px,6vw,88px)!important}
  /* Same reason on the hero's inner wrap: the plumbing hub sets padding-top:250px there to
     push copy down a tall overlay image, which put its H1 at y=503 with 370px of empty
     ground above it. The phone case is already handled in the max-width:720px block. */
  .wbh-content .hero > .wrap{padding-top:0!important}
}


/* The module link lists (.mini on the service hubs) are the routes to every sub-service,
   and each was a 27px block link with no padding - under the touch minimum and packed
   tight enough to mis-tap. They keep their type and gain a real target. */
.wbh-content a.mini{
  display:flex;align-items:center;
  min-height:44px;
  padding-block:2px;
}


/* ==========================================================================
   CONTRAST REPAIRS
   Measured across all 329 pages, not guessed. Each rule below carries the count
   of pages it was failing on and the ratio it measured.
   ========================================================================== */

/* 1. The ghost button on the navy page head was navy on navy: 1:1, an invisible
      control, on 29 pages. It is the secondary action on every service page head. */
.wbh-pagehead .wbh-btn--ghost,
.wbh-section--navy .wbh-btn--ghost,
.wbh-section--navy-deep .wbh-btn--ghost{
  color:#fff;
  border-color:rgba(255,255,255,.55);
  background:transparent;
}
.wbh-pagehead .wbh-btn--ghost:hover,
.wbh-pagehead .wbh-btn--ghost:focus-visible,
.wbh-section--navy .wbh-btn--ghost:hover,
.wbh-section--navy-deep .wbh-btn--ghost:hover{
  background:rgba(255,255,255,.14);
  border-color:#fff;
  color:#fff;
}

/* 2. The builder pages were authored against a dark ground and carry inline white on
      their text. This theme's section ground is cream, so 213 runs of copy across the
      site measured 1.1:1 - literally invisible. Inside a light section, builder text
      takes the body ink instead. Anything with its own dark panel is excluded. */
.wbh-section--cream .thrv_text_element [style*="255, 255, 255"],
.wbh-section--cream .thrv_text_element [style*="#fff"],
.wbh-section--cream .thrive-shortcode-content[style*="255, 255, 255"],
.wbh-section--soft .thrv_text_element [style*="255, 255, 255"]{
  color:var(--ink)!important;
}

/* 3. The theme eyebrow measured 3.4:1 on the cream band across 58 pages; small text
      needs 4.5. Same family, enough depth to read. */
.wbh-eyebrow{color:#8C4513}

/* 4. The authored modules' own eyebrow is a mid blue on a pale blue panel: 3.1:1 on
      115 pages. The module already defines a darker blue for exactly this job. */
.wbh-content .eyebrow{color:#0F5AA8}

/* 5. The modules' blue call-out band ran pale blue text on mid blue, 3.9:1 on 94
      pages. Deepening the band clears it for white text with room to spare. */
.wbh-content .band{background:#0F5AA8}
.wbh-content .band,
.wbh-content .band p,
.wbh-content .band li,
.wbh-content .band span{color:#fff}


/* ==========================================================================
   CONTRAST REPAIRS, SECOND PASS
   What the first pass uncovered once the loudest failures stopped masking it.
   ========================================================================== */

/* The modules' dark sections set white on themselves and the theme's global heading
   colour overrode it, putting navy headings on a navy gradient: 1.4:1, unreadable.
   Inside a dark section a heading takes the section's own colour. */
.wbh-content section.local h1,.wbh-content section.local h2,
.wbh-content section.local h3,.wbh-content section.local h4,
.wbh-content section.deep h1,.wbh-content section.deep h2,
.wbh-content section.deep h3,.wbh-content section.deep h4,
.wbh-content section.band h1,.wbh-content section.band h2,
.wbh-content section.band h3,.wbh-content section.band h4{color:#fff}

/* A button's label is the button's colour, never the theme's heading navy. Navy on
   the red call-to-action measured 2:1. */
.wbh-content a.tcb-button-link strong,
.wbh-content a.tcb-button-link span,
.wbh-content a.tcb-button-link em,
.wbh-content .wbh-btn strong,
.wbh-content button strong{color:inherit!important}

/* Builder copy authored white for a dark ground, now sitting on the theme's light
   sections. Scoped to every section that is not one of the navy ones. */
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) .thrv_text_element [style*="255, 255, 255"],
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) .thrv_text_element [style*="244, 244, 244"],
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) [style*="color: #fff"],
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) [style*="color:#fff"]{
  color:var(--ink)!important;
}
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) h1[style*="255, 255, 255"],
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) h2[style*="255, 255, 255"],
section.wbh-section:not(.wbh-section--navy):not(.wbh-section--navy-deep) h2[style*="244, 244, 244"]{
  color:var(--navy)!important;
}

/* The quote quiz: its heading was white on a white panel and its option labels were an
   off-white on near-white. Every choice in the form was invisible. */
.wbh-content .quote h1,.wbh-content .quote h2,
.wbh-content .quote h3,.wbh-content .quote h4{color:var(--navy)}
.wbh-content label.opt,
.wbh-content label.opt span,
.wbh-content .q-field label,
.wbh-content .step label{color:var(--ink)}
.wbh-content .step p,
.wbh-content .q-field p{color:var(--ink-soft)}


/* ==========================================================================
   REFERRAL PROMPT
   A dialog, not a takeover: it is dismissible, it never covers the whole screen
   on a phone, and it sits above everything only while it is open.
   ========================================================================== */
.wbh-popup[hidden]{display:none!important}
.wbh-popup{
  position:fixed;inset:0;z-index:1000;
  display:flex;align-items:center;justify-content:center;
  padding:20px;
}
.wbh-popup__scrim{
  position:absolute;inset:0;
  background:rgba(12,24,42,.62);
}
.wbh-popup__panel{
  position:relative;
  width:min(480px,100%);
  max-height:calc(100dvh - 40px);overflow-y:auto;
  background:#fff;color:var(--ink);
  border-radius:12px;
  padding:26px 24px 22px;
  box-shadow:0 24px 60px rgba(12,24,42,.34);
  animation:wbh-popup-in .22s var(--ease) both;
}
@keyframes wbh-popup-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){
  .wbh-popup__panel{animation:none}
}

.wbh-popup__close{
  position:absolute;top:8px;right:8px;
  width:40px;height:40px;
  display:flex;align-items:center;justify-content:center;
  background:transparent;border:0;border-radius:50%;
  color:var(--ink-soft);cursor:pointer;
}
.wbh-popup__close:hover{background:rgba(27,54,93,.08);color:var(--navy)}

.wbh-popup__eyebrow{
  margin:0 0 6px;
  font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:#8C4513;
}
.wbh-popup h2{
  margin:0 0 10px;
  font-size:25px;line-height:1.2;color:var(--navy);
}
.wbh-popup p{margin:0 0 12px;font-size:15px;line-height:1.55}

.wbh-popup__tiers{
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;
  margin:0 0 12px;padding:0;list-style:none;
}
.wbh-popup__tiers li{
  padding:10px 8px;
  background:var(--cream,#F5EFE6);
  border-radius:8px;
  text-align:center;
}
.wbh-popup__tiers strong{
  display:block;font-size:20px;color:var(--navy);
}
.wbh-popup__tiers span{
  display:block;margin-top:2px;
  font-size:12px;line-height:1.3;color:var(--ink-soft);
}
.wbh-popup__note{font-size:13px;color:var(--ink-soft)}

.wbh-popup__actions{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  margin:16px 0 8px;
}
.wbh-popup__actions .wbh-btn{flex:1 1 auto;text-align:center}
.wbh-popup__dismiss{
  flex:0 0 auto;min-height:44px;padding:0 14px;
  background:transparent;border:0;cursor:pointer;
  font-size:14px;font-weight:600;color:var(--ink-soft);
}
.wbh-popup__dismiss:hover{color:var(--navy);text-decoration:underline}
.wbh-popup__terms{margin:0;font-size:12.5px}
.wbh-popup__terms a{color:var(--ink-soft);text-decoration:underline}

body.wbh-popup-open{overflow:hidden}

@media (max-width:560px){
  .wbh-popup{padding:12px;align-items:flex-end}
  .wbh-popup__panel{padding:22px 18px 18px;border-radius:14px}
  .wbh-popup h2{font-size:22px}
  .wbh-popup__tiers{grid-template-columns:1fr;gap:6px}
  .wbh-popup__tiers li{display:flex;align-items:baseline;gap:8px;text-align:left}
  .wbh-popup__tiers strong{font-size:18px}
  .wbh-popup__actions .wbh-btn{width:100%}
}


/* ==========================================================================
   CONSULT BLOCK - big-ticket equipment pages
   Closes a product showcase page with a real appointment request instead of a
   price. Two columns on desktop: why the visit exists, then the form. Every
   colour is stated rather than inherited - a run of blue-on-blue text on this
   site came from letting a section ground decide.
   ========================================================================== */
.wbh-consult{background:var(--surface);border-top:1px solid var(--line)}
.wbh-consult__inner{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);
  gap:var(--sp-8);align-items:start;
}

.wbh-consult__eyebrow{
  margin:0 0 var(--sp-2);
  font-size:12px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;
  color:var(--tan);
}
.wbh-consult__title{
  margin:0 0 var(--sp-3);
  font-size:clamp(26px,3.4vw,36px);line-height:1.15;color:var(--navy);
  text-wrap:balance;
}
.wbh-consult__body{
  margin:0 0 var(--sp-5);
  font-size:16px;line-height:1.65;color:var(--ink);
  max-width:56ch;
}
.wbh-consult__call{
  margin:var(--sp-5) 0 0;font-size:14px;color:var(--ink-soft);
}
.wbh-consult__call a{
  color:var(--navy);font-weight:600;text-decoration:underline;
  text-underline-offset:3px;
  display:inline-block;min-height:44px;line-height:44px;
}

.wbh-consult__form{
  background:var(--cream);
  border:1px solid var(--line);
  border-radius:var(--radius);
  padding:var(--sp-7);
}
.wbh-consult__grid{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:0 var(--sp-4);
}
.wbh-consult__form .wbh-field{margin-bottom:var(--sp-4)}
.wbh-field__hint{
  font-size:12.5px;line-height:1.45;color:var(--ink-soft);
  text-transform:none;letter-spacing:0;font-weight:400;
}
.wbh-field__opt{text-transform:none;font-weight:400;color:var(--ink-soft)}

.wbh-field--check label{
  display:flex;gap:11px;align-items:flex-start;
  font-size:13.5px;line-height:1.6;color:var(--ink);
  text-transform:none;letter-spacing:0;font-weight:400;
}
.wbh-field--check input{
  width:18px;height:18px;flex:0 0 auto;margin-top:2px;
  accent-color:var(--tan);
}

.wbh-consult__actions{
  display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3);
  margin:var(--sp-5) 0 0;
}
.wbh-consult__free{font-size:12.5px;line-height:1.5;color:var(--ink-soft)}

.wbh-consult__error{
  margin:0 0 var(--sp-4);padding:12px 14px;
  background:#FDECEA;border:1px solid #D93025;border-radius:var(--radius-sm);
  color:#8C1D16;font-size:14px;line-height:1.5;
}

.wbh-consult__done{
  background:var(--cream);border:1px solid var(--line);
  border-radius:var(--radius);padding:var(--sp-7);
}
.wbh-consult__done h3{margin:0 0 var(--sp-2);font-size:22px;color:var(--navy)}
.wbh-consult__done p{margin:0;font-size:15px;line-height:1.65;color:var(--ink)}

.wbh-consult__hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}

@media (max-width:900px){
  .wbh-consult__inner{grid-template-columns:1fr;gap:var(--sp-6)}
}
@media (max-width:560px){
  .wbh-consult__form,.wbh-consult__done{padding:var(--sp-5)}
  .wbh-consult__grid{grid-template-columns:1fr;gap:0}
  .wbh-consult__actions .wbh-btn{width:100%}
}


/* ==========================================================================
   TAP TARGETS
   Sizes here are deliberate, not uniform. A standalone call to action gets 44px
   (WCAG 2.5.5). A dense list of links - a table of contents, a footer column -
   gets 24px plus spacing (WCAG 2.5.8 AA), because inflating every row of a
   20-item contents block to 44px pushes the article itself off the screen.
   ========================================================================== */

/* Thrive's article table of contents. Not our markup, so it is styled defensively. */
.tve-toc-anchor,
a.tve-toc-anchor{
  display:block;
  min-height:24px;
  padding-block:4px;
  line-height:1.5;
}
.tve-toc li + li{margin-top:2px}

/* Thrive's own button link measured under 32px on 19 pages. Raised defensively; the
   colour of this class is already corrected further up for contrast. */
.tcb-button-link{min-height:44px;display:inline-flex;align-items:center}

/* Any bare link sitting alone in a content block still needs a real target. */
.wbh-content > p > a.wbh-textlink,
.wbh-content > a.wbh-textlink{min-height:44px}


/* ==========================================================================
   CONTACT PAGE CONTENT
   Authored in post_content, so every rule here has to survive inside
   .wbh-content on a cream ground.
   ========================================================================== */
.wbh-contact-split{
  display:grid;grid-template-columns:1fr 1fr;
  gap:var(--sp-8);align-items:start;
  margin:var(--sp-7) 0;
}
.wbh-contact-split > div{min-width:0}
.wbh-contact-split h2{margin-top:0}

.wbh-contact-actions{
  display:flex;flex-wrap:wrap;gap:var(--sp-3);
  margin:var(--sp-5) 0 0;
}

/* Hours read as a table because that is what they are. */
.wbh-hours{
  width:100%;border-collapse:collapse;
  margin:0;font-size:15px;
}
.wbh-hours caption{
  caption-side:bottom;
  margin-top:var(--sp-3);
  font-size:13px;line-height:1.5;color:var(--ink-soft);text-align:left;
}
.wbh-hours th,
.wbh-hours td{
  padding:9px 0;
  border-bottom:1px solid var(--line);
  text-align:left;vertical-align:baseline;
}
.wbh-hours th{font-weight:600;color:var(--navy);white-space:nowrap}
.wbh-hours td{color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}
.wbh-hours tr:last-child th,
.wbh-hours tr:last-child td{border-bottom:0}

.wbh-address{
  font-size:16px;line-height:1.75;color:var(--ink);
  margin:0 0 var(--sp-5);
}
.wbh-address strong{color:var(--navy)}

.wbh-map{
  position:relative;
  aspect-ratio:16/9;max-width:100%;
  border:1px solid var(--line);border-radius:var(--radius);
  overflow:hidden;background:var(--cream);
  margin:0 0 var(--sp-7);
}
.wbh-map iframe{
  position:absolute;inset:0;
  width:100%;height:100%;border:0;display:block;
}

.wbh-apart{
  list-style:none;margin:0 0 var(--sp-7);padding:0;
  display:grid;gap:var(--sp-4);
}
.wbh-apart li{
  display:grid;gap:3px;
  padding-left:var(--sp-5);position:relative;
}
.wbh-apart li::before{
  content:"";position:absolute;left:0;top:9px;
  width:9px;height:9px;border-radius:50%;
  background:var(--tan);
}
.wbh-apart strong{font-size:16px;color:var(--navy);line-height:1.4}
.wbh-apart span{font-size:15px;line-height:1.65;color:var(--ink-soft)}

.wbh-social-list{
  list-style:none;margin:0;padding:0;
  display:flex;flex-wrap:wrap;gap:var(--sp-3) var(--sp-5);
}
.wbh-social-list a{
  display:inline-flex;align-items:center;
  min-height:44px;font-size:15px;
}

@media (max-width:820px){
  .wbh-contact-split{grid-template-columns:1fr;gap:var(--sp-7)}
}
@media (max-width:560px){
  .wbh-contact-actions .wbh-btn{width:100%;justify-content:center}
  .wbh-map{aspect-ratio:4/3}
}


/* The consult price. The struck figure is the fee that is being waived, so it is
   marked up as <del> rather than styled-through text, and the screen-reader spans
   name both halves - "$299 Free" read aloud with no context is a lie. */
.wbh-consult__price{
  display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;
  margin:0 0 6px;
}
.wbh-consult__was del{
  font-size:20px;color:var(--ink-soft);
  text-decoration:line-through;text-decoration-thickness:2px;
}
.wbh-consult__now{
  font-family:var(--serif);font-size:32px;line-height:1;
  color:var(--navy);font-weight:600;
}
.wbh-consult__pricenote{
  margin:0 0 var(--sp-5);
  font-size:13.5px;line-height:1.55;color:var(--ink-soft);
}
