/* ==========================================================================
   build-site BASELINE stylesheet — copy verbatim, then THEME the block below.
   To theme per client, change ONLY: (1) the color tokens, (2) --font-sans /
   --font-display, (3) the --radius-* scale, and load the matching Google font
   <link> in each HTML <head>. Do NOT edit the component rules or structural
   tokens further down — that is what guarantees the consistent, slick result.

   ⛔ THE TOKEN VALUES BELOW ARE PLACEHOLDERS, NOT A PALETTE TO SHIP. They are an
   arbitrary slate-teal + lime example so the file renders before theming. You MUST
   overwrite --primary / --accent / the band + surface colors / the fonts / radius
   with the CLIENT'S MEASURED brand (from 02-brand.spec.json design_system, derived
   from the logo swatches + Firecrawl branding). Shipping a site still on this teal/
   lime/Manrope default when the client's brand is different is THE "every site looks
   the same" defect — it is a build failure, not an acceptable fallback.

   COLOR PAIRING CONTRACT (the fix for white-on-white / invisible header):
   - Keep these EXACT token names — the components read them. Do not rename to
     --brand/--ink/--accent-ink (those are ignored -> defaults -> unreadable text).
   - --text/--text-secondary/--text-muted are for LIGHT bands only (--bg/--surface).
     On dark bands (--dark/--dark-mid/--primary) text is #fff / rgba(255,255,255,.8).
   - --accent is ALWAYS a BRIGHT highlight (CTA fills, dots, underlines). Never a
     text color on a light band. If the brand's main color is dark, it is --primary
     (a band/button color), NOT --accent — pick a separate bright accent.
   - --text must be near-black; --bg near-white. Verify body contrast >=4.5:1.
   ========================================================================== */

/* ==========================================================================
   THE HEALING HEROES — REAL BRAND SKIN
   Fonts and colors are NOT chosen here; they are MEASURED from the client's
   live site (thehealingheroes.com) and her Canva brand kit. Do not substitute.
     Fonts   : Recoleta (headings) / futura-pt (body+nav) / Asmillione (script)
     Colors  : #10516d navy · #47b5c6 light blue · #daa24b gold ·
               #ead9bd cream · #f7f4f2 warm off-white · #ffffff
   HARD RULE from the client: never place gold on light blue.
   ========================================================================== */

/* Recoleta — her licensed webfont, self-hosted (same file her live site serves) */
@font-face{
  font-family:'Recoleta';
  src:url('../fonts/Recoleta-Medium.woff2') format('woff2'),
      url('../fonts/Recoleta-Medium.woff') format('woff');
  font-weight:400;font-style:normal;font-display:swap;
}
/* Asmillione — the brand kit's "Written Font", for pull-quotes only */
@font-face{
  font-family:'Asmillione';
  src:url('../fonts/Asmillione.ttf') format('truetype');
  font-weight:400;font-style:normal;font-display:swap;
}
/* futura-pt is loaded per-page from her Adobe Fonts kit: use.typekit.net/rnu4ani.css */

:root{
  /* --- FONTS: her three brand fonts, exactly as the live site uses them --- */
  --font-sans:'futura-pt','Futura',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --font-display:'Recoleta','Iowan Old Style','Palatino Linotype',Georgia,serif;
  --font-script:'Asmillione','Snell Roundhand',cursive;
  /* --- COLOR: The Healing Heroes brand palette (Canva brand kit, verified against live site) --- */
  --primary:#47B5C6;
  --primary-dark:#3a9bb0;
  --primary-darker:#2d8094;
  --accent:#DAA24B;
  --accent-dark:#c49038;
  --cream:#EAD9BD;
  --secondary:#EAF5F7;
  --bg:#F7F4F2;
  --surface:#fff;
  --surface-2:#F0EDE9;
  --text:#10516D;
  --text-secondary:#3D6270;
  --text-muted:#7A9CA8;
  --border:#E6E0D8;
  --dark:#10516D;
  --dark-mid:#0D4460;
  --dark-soft:#1A5975;
  --white:#fff;
  --radius-sm:4px;
  --radius-md:8px;
  --radius-lg:12px;
  --radius-pill:30px;
  --shadow-sm:0 1px 2px rgba(15,61,82,.06);
  --shadow-md:0 6px 20px rgba(15,61,82,.09);
  --shadow-lg:0 18px 50px rgba(15,61,82,.16);
  --maxw:1200px;
  --header-h:72px;
  --topbar-h:36px;
  --header-total:108px;
}

/* ---------- Reset & Base ---------- */
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font-family:var(--font-sans);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;line-height:1.65;min-height:100vh;display:flex;flex-direction:column;overflow-x:hidden}
img{max-width:100%;display:block}
/* SAFETY NET — inline ICONS never balloon. Every icon is a 24-grid line SVG; this gives a
   small default size so an icon dropped in a container without its own rule (faq-ico, ci-ico,
   a bare <ul><li>, an improvised block, etc.) can't render at its 300×150 intrinsic size.
   The specific `.x svg{width:Npx}` component rules below are higher-specificity and override
   this for the known containers. Logos are <img> (PNG/webp), not inline SVG, so they're safe. */
svg{width:1.25em;height:1.25em;flex-shrink:0;vertical-align:middle}
/* SAFETY NET — a large source photo must never blow a section apart (the "images broke in size"
   bug: a 1500px product PNG rendered full-width, one per row). Content images are capped and
   cover-cropped; full-bleed hero/CTA backgrounds and logos are explicitly exempt. The canonical
   card/media wrappers (.cat-card/.img-card/.related-card/.split-media …) still set their own
   fixed aspect ratios; this only catches improvised bare <img>. */
main img:not(.hero-dark-bg):not(.cta-band-bg):not(.logo-img):not(.footer-logo):not([class*="-bg"]){max-height:560px;object-fit:cover}
a{color:inherit;text-decoration:none}
ul,ol{list-style:none}
button,input,select,textarea{font:inherit;color:inherit;border:none;outline:none;background:none}
button{cursor:pointer}
/* Recoleta ships a single Medium weight — never synthesise bold, and never tighten
   tracking the way the sans template did. This is the live site's heading voice. */
h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:400;letter-spacing:0;line-height:1.2;color:var(--text)}
h1{font-size:clamp(2.2rem,5vw,3.65rem);line-height:1.16}
h2{font-size:clamp(1.8rem,3.4vw,2.6rem)}
h3{font-size:1.35rem}
b,strong{font-weight:600}
p{color:var(--text-secondary)}
main{flex:1 0 auto}
::selection{background:var(--accent);color:var(--text)}

/* ---------- Utilities ---------- */
.container{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 20px}
@media(min-width:640px){.container{padding:0 24px}}
@media(min-width:1024px){.container{padding:0 32px}}
.text-center{text-align:center}
.text-accent{color:var(--accent)}
.text-primary{color:var(--primary)}
.text-white{color:#fff}
.muted{color:var(--text-muted)}
.mb-0{margin-bottom:0}.mb-1{margin-bottom:8px}.mb-2{margin-bottom:16px}.mb-3{margin-bottom:24px}.mb-4{margin-bottom:32px}.mt-2{margin-top:16px}.mt-3{margin-top:24px}
.flex{display:flex}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.flex-wrap{flex-wrap:wrap}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}
.lead{font-size:1.12rem;color:var(--text-secondary)}
.eyebrow{display:inline-flex;align-items:center;gap:7px;font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--primary);background:var(--secondary);padding:6px 14px;border-radius:var(--radius-pill);margin-bottom:16px}
.eyebrow::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent-dark)}
.eyebrow-light{color:var(--primary);background:var(--secondary)}
.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.line-clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-weight:700;font-size:.97rem;line-height:1;padding:14px 26px;border-radius:var(--radius-pill);border:2px solid transparent;transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease;cursor:pointer;white-space:nowrap}
.btn svg{width:17px;height:17px;flex-shrink:0}
.btn-primary{background:var(--accent);color:var(--text);border-color:var(--accent)}
.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);transform:translateY(-2px);box-shadow:0 10px 24px rgba(218,162,75,.4)}
.btn-dark{background:var(--primary);color:#fff;border-color:var(--primary)}
.btn-dark:hover{background:var(--primary-dark);border-color:var(--primary-dark);transform:translateY(-2px);box-shadow:var(--shadow-md)}
.btn-outline{background:transparent;color:#fff;border-color:rgba(255,255,255,.55)}
.btn-outline:hover{background:#fff;color:var(--text);border-color:#fff;transform:translateY(-2px)}
.btn-outline-dark{background:transparent;color:var(--primary);border-color:var(--primary)}
.btn-outline-dark:hover{background:var(--primary);color:#fff;transform:translateY(-2px)}
.btn-sm{padding:10px 18px;font-size:.88rem}
.btn-lg{padding:17px 34px;font-size:1.05rem}
.btn-block{width:100%}

/* ---------- Header ---------- */
.site-header{position:fixed;top:0;left:0;right:0;z-index:1000;background:rgba(255,255,255,.92);backdrop-filter:saturate(160%) blur(12px);-webkit-backdrop-filter:saturate(160%) blur(12px);border-bottom:1px solid var(--border);transition:background .25s ease,box-shadow .25s ease}
body{padding-top:var(--header-total)}
body.has-transparent-header{padding-top:0}
/* No utility topbar (SITE.topbar=false): header is just the 72px nav, so the offset
   that body padding + the mobile menu read collapses to --header-h. */
html.no-topbar{--topbar-h:0px;--header-total:var(--header-h)}
.topbar{background:var(--primary-darker);color:rgba(255,255,255,.82);font-size:.82rem}
.topbar-inner{display:flex;align-items:center;justify-content:space-between;gap:16px;height:36px}
.topbar a{color:rgba(255,255,255,.82);display:inline-flex;align-items:center;gap:6px;transition:color .15s}
.topbar a:hover{color:var(--accent)}
.topbar svg{width:14px;height:14px}
.topbar-right{display:flex;gap:20px;align-items:center}
.topbar-hours{display:none;align-items:center;gap:6px;color:rgba(255,255,255,.82)}
.topbar .topbar-loc{display:none}
@media(min-width:768px){.topbar .topbar-loc{display:inline-flex}.topbar-hours{display:inline-flex}}
/* white-space:nowrap on the bar INHERITS to every text descendant, so no header item
   (logo wordmark, nav link, phone, CTA — even one added later) can ever wrap to a 2nd/3rd
   line. If items then exceed the width they overflow horizontally, and initHeaderFit sheds
   them / collapses to the hamburger. Dropdown + mobile panels reset to normal wrapping. */
.header-inner{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:nowrap;white-space:nowrap;height:var(--header-h)}
.dropdown-menu,.mobile-menu{white-space:normal}
.logo{display:flex;align-items:center;gap:10px;flex-shrink:0;max-width:min(46vw,240px)}
/* The logo is CAPPED in both axes so a large/wide brand mark can never push the nav to a
   second line. A tall or wide source logo is scaled down (object-fit:contain), not allowed
   to dictate the header width. */
.logo-img{height:42px;width:auto;max-width:200px;object-fit:contain}
/* LOGO VISIBILITY GUARD — set at runtime by initLogoContrast(): the chip contrasts the
   LOGO (not the bar), so a light/white logo stays visible on the white header and a dark
   logo stays visible over a dark hero, in every header state. A chip that happens to match
   the bar is simply invisible (harmless). Never ship a logo that blends into its bar. */
.logo.logo-chip-dark{background:var(--dark);padding:5px 9px;border-radius:9px}
.logo.logo-chip-light{background:#fff;padding:5px 9px;border-radius:9px}
/* Text wordmark beside the logo — FORBIDDEN unless the logo is a bare icon/monogram with
   no legible name, attested with data-icon-only-logo="true" on the .logo anchor (the QA
   probe blocks any unattested text beside the logo: the name-written-twice defect). MUST
   be styled (never let it inherit the dark body --text, or it goes dark-on-dark over the
   transparent hero header — a real defect). Color flips with the header state below. */
.logo-wordmark{font-weight:800;font-size:1.12rem;letter-spacing:-.02em;line-height:1.06;color:var(--text);white-space:nowrap}
.logo-wordmark-sub{display:block;font-weight:600;font-size:.68rem;letter-spacing:.01em;text-transform:none;color:var(--text-muted)}
.desktop-nav{display:none;align-items:center;gap:6px;flex-wrap:nowrap}
@media(min-width:1024px){.desktop-nav{display:flex}}
.nav-link{display:inline-flex;align-items:center;gap:5px;padding:9px 14px;font-weight:600;font-size:.95rem;white-space:nowrap;color:var(--text);border-radius:var(--radius-sm);transition:color .15s,background .15s}
.nav-link:hover{color:var(--primary);background:var(--surface)}
.nav-link svg{width:14px;height:14px;transition:transform .2s}
.nav-dropdown{position:relative}
.nav-dropdown:hover .nav-link svg{transform:rotate(180deg)}
.dropdown-menu{position:absolute;top:calc(100% + 6px);left:0;min-width:480px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:14px;opacity:0;visibility:hidden;transform:translateY(8px);transition:all .2s ease;display:grid;grid-template-columns:1fr 1fr;gap:4px}
.dropdown-menu.single-col{grid-template-columns:1fr;min-width:260px}
.nav-dropdown:hover .dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}
.dropdown-item{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:var(--radius-sm);transition:background .15s}
.dropdown-item:hover{background:var(--surface)}
.dropdown-item .di-title{font-weight:700;font-size:.92rem;color:var(--text);display:flex;align-items:center;gap:8px}
.dropdown-item .di-title svg{width:16px;height:16px;color:var(--primary)}
.dropdown-item .di-sub{font-size:.8rem;color:var(--text-muted);padding-left:24px}
.dropdown-foot{grid-column:1/-1;margin-top:6px;padding:10px 12px;border-top:1px solid var(--border);font-weight:700;font-size:.88rem;color:var(--primary);display:flex;align-items:center;gap:6px}
.dropdown-foot svg{width:15px;height:15px}
/* mega menu (Our Services) */
.dropdown-menu.mega{min-width:560px}
.mega-col{padding:10px 12px}
.mega-col .mc-head{display:flex;align-items:center;gap:9px;font-weight:800;font-size:.92rem;color:var(--text);margin-bottom:9px;border-radius:var(--radius-sm)}
.mega-col .mc-head .mc-ico{width:30px;height:30px;border-radius:8px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mega-col .mc-head .mc-ico svg{width:16px;height:16px}
.mega-col .mc-head:hover{color:var(--primary)}
.mega-col .mc-links{display:flex;flex-direction:column;gap:2px}
.mega-col .mc-links a{font-size:.85rem;color:var(--text-secondary);padding:5px 8px 5px 39px;border-radius:var(--radius-sm);transition:background .15s,color .15s}
.mega-col .mc-links a:hover{background:var(--surface);color:var(--primary)}
.header-actions{display:none;align-items:center;gap:14px}
@media(min-width:1024px){.header-actions{display:flex}}
.header-phone{display:none;align-items:center;gap:7px;font-weight:700;white-space:nowrap;color:var(--text);font-size:.95rem}
.header-phone svg{width:17px;height:17px;color:var(--primary)}
@media(min-width:1200px){.header-phone{display:inline-flex}}
.mobile-toggle{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:var(--radius-sm);color:var(--text)}
.mobile-toggle svg{width:26px;height:26px}
@media(min-width:1024px){.mobile-toggle{display:none}}

/* transparent header over dark hero */
.header-transparent{background:transparent;border-bottom-color:transparent}
.header-transparent .nav-link,.header-transparent .header-phone{color:#fff}
.header-transparent .nav-link:hover{background:rgba(255,255,255,.12);color:#fff}
.header-transparent .header-phone svg{color:var(--accent)}
.header-transparent .mobile-toggle{color:#fff}
.header-transparent .logo-wordmark{color:#fff}
.header-transparent .logo-wordmark-sub{color:rgba(255,255,255,.78)}
.header-scrolled{background:rgba(255,255,255,.95);border-bottom-color:var(--border);box-shadow:var(--shadow-sm)}
.header-scrolled .nav-link,.header-scrolled .header-phone{color:var(--text)}
.header-scrolled .nav-link:hover{color:var(--primary);background:var(--surface)}
.header-scrolled .header-phone svg{color:var(--primary)}
.header-scrolled .mobile-toggle{color:var(--text)}
.header-scrolled .logo-img{filter:none}
.header-scrolled .logo-wordmark{color:var(--text)}
.header-scrolled .logo-wordmark-sub{color:var(--text-muted)}

/* Keep the ENTIRE header on ONE line — a big/wide logo must SHRINK before the nav wraps.
   When the brand logo is large, it is capped (above) and the nav is tightened at mid widths
   rather than allowed to fall to a second row (the "crammed, two-line header" defect). */
@media(min-width:1024px) and (max-width:1279px){
  .header-inner{gap:14px}
  .nav-link{padding:9px 10px;font-size:.9rem}
  .logo-img{height:38px;max-width:168px}
}

/* Header FIT-GUARD states (toggled by initHeaderFit so the bar never wraps/overflows).
   Step 1 — tight: shed the phone + wordmark and tighten nav so a heavy nav still fits one line. */
.site-header.header-tight .header-phone{display:none}
.site-header.header-tight .logo-wordmark{display:none}
.site-header.header-tight .desktop-nav{gap:2px}
.site-header.header-tight .nav-link{padding:8px 9px;font-size:.9rem}
/* Step 2 — collapse: still doesn't fit → fall back to the hamburger drawer at desktop width
   (far better than a wrapped/overflowing bar; the build should also lean the header). */
.site-header.header-collapse .desktop-nav,
.site-header.header-collapse .header-actions{display:none}
.site-header.header-collapse .mobile-toggle{display:inline-flex}

/* SOLID header over a dark hero — for a DARK brand logo that would vanish on the transparent
   (white-text) header. The header stays OPAQUE WHITE with DARK nav text, sitting on top of the
   dark hero, so the dark logo + nav are always legible. Set via SITE.solidHeader=true in main.js
   (no `header-transparent` is added; the body still gets `has-transparent-header` so the hero is
   full-bleed and the white bar overlaps its top). */
.header-solid{background:rgba(255,255,255,.97);border-bottom:1px solid var(--border);box-shadow:var(--shadow-sm)}
.header-solid .nav-link,.header-solid .header-phone{color:var(--text)}
.header-solid .nav-link:hover{color:var(--primary);background:var(--surface)}
.header-solid .header-phone svg{color:var(--primary)}
.header-solid .mobile-toggle{color:var(--text)}
.header-solid .logo-img{filter:none}
.header-solid .logo-wordmark{color:var(--text)}
.header-solid .logo-wordmark-sub{color:var(--text-muted)}

/* mobile menu */

/* gw-drawer-fix-2026-07-28 — the drawer is position:fixed inside the frosted .site-header, whose
   backdrop-filter makes it the containing block for fixed descendants. Sized with bottom:0
   it resolved against the 72px bar, not the viewport, and opened 58px tall. Explicit height
   here + hoistMobileMenu() in js/main.js. Never restore `bottom:0` on this rule. */
.mobile-menu{position:fixed;top:var(--header-total);left:0;right:0;height:calc(100vh - var(--header-total));height:calc(100dvh - var(--header-total));max-height:none;z-index:1050;transform:translateX(-100%);visibility:hidden;transition:transform .28s var(--ease-hover),visibility 0s linear .28s;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;background:#fff;padding:18px 20px 40px}
.mobile-menu.active{visibility:visible;transition:transform .28s var(--ease-hover),visibility 0s;transform:translateX(0)}
.mobile-menu .mm-link{display:block;padding:14px 6px;font-weight:700;font-size:1.05rem;border-bottom:1px solid var(--border)}
.mobile-menu .mm-group-label{padding:16px 6px 6px;font-size:.78rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted)}
.mobile-menu .mm-sub{display:block;padding:10px 6px 10px 18px;font-weight:600;color:var(--text-secondary);border-bottom:1px solid var(--surface)}
.mobile-menu .mm-cta{margin-top:22px}
.mobile-menu .mm-contact{margin-top:22px;padding-top:18px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:10px;font-size:.92rem}
.mobile-menu .mm-contact a{display:flex;align-items:center;gap:9px;color:var(--text-secondary)}
.mobile-menu .mm-contact svg{width:16px;height:16px;color:var(--primary)}

/* ---------- Sections ---------- */
.section{padding:80px 0}
.section-sm{padding:52px 0}
.section-lg{padding:104px 0}
.section.surface{background:var(--surface)}
.section.dark{background:var(--dark);color:#fff}
.section.dark h1,.section.dark h2,.section.dark h3,.section.dark h4{color:#fff}
.section.dark p{color:rgba(255,255,255,.74)}
.section-header{max-width:680px;margin:0 auto 48px;text-align:center;display:flex;flex-direction:column;align-items:center}
.section-header.left{margin-left:0;text-align:left;align-items:flex-start}
.section-header.label-below{display:flex;flex-direction:column;align-items:center;text-align:center}
.section-header.label-below h2{order:1;margin:0 0 26px}
.section-header.label-below .eyebrow{order:2;margin:0}
.section-header.label-below p{order:3;margin-top:20px}
.section-header h2{margin:10px 0 14px}
.section-header p{font-size:1.08rem}

/* ---------- Hero (dark) ---------- */
/* Her hero is a clean navy field — no photograph, no charcoal wash. The old rule
   painted rgba(16,81,109,.92) (near-black) directly over #10516d: that is the
   "black color" she reacted to on the call. The brand blue now IS the hero. */
.hero-dark{position:relative;color:#fff;overflow:hidden;background:var(--dark)}
.hero-dark-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.14;filter:saturate(.5);z-index:0}
.hero-dark::before{content:"";position:absolute;inset:0;background:radial-gradient(125% 125% at 76% 32%,#1c6b84 0%,#10516d 58%,#0d4460 100%);z-index:1}
.hero-dark .container{position:relative;z-index:2}
.hero-pad{padding:130px 0 96px}
.hero-pad-sm{padding:120px 0 70px}
.hero-fullscreen{min-height:88vh;display:flex;flex-direction:column;justify-content:center;padding:150px 0 96px}
.hero-content{max-width:760px}
.hero-content.center{max-width:820px;margin:0 auto;text-align:center}
.hero-label{display:inline-flex;align-items:center;gap:8px;background:rgba(218,162,75,.14);color:var(--accent);font-weight:600;font-size:.78rem;letter-spacing:.16em;text-transform:uppercase;padding:7px 16px;border-radius:var(--radius-pill);margin-bottom:20px}
.hero-label svg{width:15px;height:15px}
.hero-dark h1{color:#fff;margin-bottom:18px}
.hero-dark h1 .hl{color:var(--accent)}
.hero-sub{font-size:1.18rem;color:rgba(255,255,255,.82);max-width:600px;margin-bottom:30px}
.hero-content.center .hero-sub{margin-left:auto;margin-right:auto}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px}
.hero-content.center .hero-actions{justify-content:center}
.hero-trust{display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:26px;font-size:.9rem;color:rgba(255,255,255,.8)}
.hero-trust span{display:inline-flex;align-items:center;gap:8px}
.hero-trust svg{width:17px;height:17px;color:var(--accent)}

/* hero stat ticker (inline) */
.hero-ticker{display:flex;gap:48px;flex-wrap:wrap;max-width:760px;margin:42px 0 0;padding-top:28px;border-top:1px solid rgba(255,255,255,.18)}
.hero-content.center .hero-ticker{margin-left:auto;margin-right:auto;justify-content:center}
.hero-ticker .ht-num{font-size:2rem;font-weight:800;color:#fff;line-height:1}
.hero-ticker .ht-num .text-accent{color:var(--accent)}
.hero-ticker .ht-label{font-size:.84rem;color:rgba(255,255,255,.66);margin-top:5px}

/* breadcrumb */
.breadcrumb{background:var(--surface);border-bottom:1px solid var(--border)}
.breadcrumb-inner{display:flex;flex-wrap:wrap;align-items:center;gap:7px;padding:13px 0;font-size:.86rem;color:var(--text-muted)}
.breadcrumb-inner a{color:var(--text-secondary);transition:color .15s}
.breadcrumb-inner a:hover{color:var(--primary)}
.breadcrumb-inner .sep{width:14px;height:14px;color:var(--text-muted);display:inline-flex}
.breadcrumb-inner .current{color:var(--text);font-weight:600}

/* ---------- Stat bar ---------- */
.stat-bar{background:var(--primary);color:#fff}
.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:30px 16px;padding:48px 0}
@media(min-width:768px){.stat-grid{grid-template-columns:repeat(4,1fr)}}
.stat-item{text-align:center}
.stat-num{font-size:clamp(2rem,4vw,2.8rem);font-weight:800;line-height:1;color:#fff}
.stat-num .text-accent{color:var(--accent)}
.stat-label{font-size:.9rem;color:rgba(255,255,255,.8);margin-top:8px}

/* ---------- Trust bar ---------- */
.trust-bar{background:var(--dark);padding:34px 0}
.trust-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px}
.trust-pill{display:inline-flex;align-items:center;gap:9px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.14);color:rgba(255,255,255,.9);font-weight:600;font-size:.9rem;padding:10px 18px;border-radius:var(--radius-pill)}
.trust-pill svg{width:17px;height:17px;color:var(--accent)}

/* brands strip */
.brand-strip{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.brand-track{display:flex;gap:56px;align-items:center;width:max-content;animation:brand-scroll 34s linear infinite}
.brand-track:hover{animation-play-state:paused}
.brand-track span{font-size:1.4rem;font-weight:800;letter-spacing:-.02em;color:var(--text-muted);opacity:.7;white-space:nowrap}
@keyframes brand-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* ---------- Grids ---------- */
/* display:grid lives on EVERY grid class, not just the base `.grid`, so `class="grid-3"`
   on its own lays out as a grid. (Before, `.grid-3` alone only set columns with no
   display:grid, so a card grid written as class="grid-3" — without the base `grid` —
   rendered as display:block and the cards stacked VERTICALLY full-width. Real defect.) */
.grid,.grid-2,.grid-3,.grid-4{display:grid;gap:24px}
.grid-2{grid-template-columns:1fr}
.grid-3{grid-template-columns:1fr}
.grid-4{grid-template-columns:1fr}
@media(min-width:640px){.grid-2{grid-template-columns:repeat(2,1fr)}.grid-3{grid-template-columns:repeat(2,1fr)}.grid-4{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{grid-template-columns:repeat(4,1fr)}}

/* ---------- Cards ---------- */
.card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:30px 26px;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;height:100%;display:flex;flex-direction:column}
.card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:transparent}
.card-icon{width:54px;height:54px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:var(--secondary);color:var(--primary);margin-bottom:18px;flex-shrink:0}
.card-icon svg{width:26px;height:26px}
.card h3{font-size:1.18rem;margin-bottom:10px}
.card p{font-size:.95rem;flex:1}
.card-link{display:inline-flex;align-items:center;gap:7px;margin-top:16px;font-weight:700;font-size:.9rem;color:var(--primary)}
.card-link svg{width:15px;height:15px;transition:transform .18s}
.card:hover .card-link svg{transform:translateX(4px)}

/* service/category card with accent top */
.svc-card{position:relative;overflow:hidden}
.svc-card::before{content:"";position:absolute;top:0;left:0;right:0;height:4px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .25s ease}
.svc-card:hover::before{transform:scaleX(1)}
.svc-card .num{position:absolute;top:24px;right:26px;font-size:1.4rem;font-weight:800;color:var(--surface-2)}

/* image card */
.img-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;transition:transform .2s ease,box-shadow .2s ease;height:100%;display:flex;flex-direction:column}
.img-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md)}
.img-card .ic-media{aspect-ratio:16/10;overflow:hidden;position:relative}
.img-card .ic-media img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.img-card:hover .ic-media img{transform:scale(1.06)}
.img-card .ic-body{padding:22px 22px 26px;flex:1;display:flex;flex-direction:column}
.img-card h3{font-size:1.1rem;margin-bottom:8px}
.img-card p{font-size:.92rem;flex:1}

/* category card */
.cat-card{display:flex;flex-direction:column;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:30px 28px;transition:transform .2s,box-shadow .2s,border-color .2s;height:100%}
.cat-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md);border-color:transparent}
.cat-card .cc-icon{width:58px;height:58px;border-radius:15px;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;margin-bottom:20px}
.cat-card .cc-icon svg{width:28px;height:28px}
.cat-card h3{font-size:1.32rem;margin-bottom:10px}
.cat-card p{font-size:.95rem;margin-bottom:16px}
.cat-card ul{margin-bottom:20px;display:flex;flex-direction:column;gap:9px}
.cat-card ul li{display:flex;align-items:flex-start;gap:9px;font-size:.92rem;color:var(--text-secondary)}
.cat-card ul li svg{width:17px;height:17px;color:var(--accent-dark);flex-shrink:0;margin-top:2px}
.cat-card .cc-foot{margin-top:auto;display:inline-flex;align-items:center;gap:7px;font-weight:700;font-size:.92rem;color:var(--primary)}
.cat-card .cc-foot svg{width:15px;height:15px;transition:transform .18s}
.cat-card:hover .cc-foot svg{transform:translateX(4px)}
.cat-card .cc-count{display:inline-block;font-size:.76rem;font-weight:700;color:var(--primary);background:var(--secondary);padding:4px 11px;border-radius:var(--radius-pill);margin-bottom:18px}

/* retention / feature card (image top) */
.retention-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;height:100%;display:flex;flex-direction:column;transition:transform .2s,box-shadow .2s}
.retention-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-md)}
.retention-card .rc-media{aspect-ratio:3/2;overflow:hidden}
.retention-card .rc-media img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
.retention-card:hover .rc-media img{transform:scale(1.06)}
.retention-card .rc-body{padding:22px 22px 26px;flex:1}
.retention-card h3{font-size:1.08rem;margin-bottom:8px}
.retention-card p{font-size:.9rem}

/* ---------- Movable card carousel ----------
   A horizontal scroll-snap rail used INSTEAD of a `.grid-*` when a card row may
   overflow (mobile, or many cards). It only "moves" when the cards actually
   overflow the container: on a wide desktop a small set (3–4 cards) flexes to
   fill the row and there is nothing to scroll, so it reads as a static grid —
   you never hide content behind a swipe when it already fits. Native overflow
   gives swipe (touch) + trackpad for free; main.js adds mouse drag-to-scroll
   and (only with data-autoscroll) a slow auto-drift that respects
   prefers-reduced-motion and pauses on hover/focus/drag. The cards inside are
   the SAME `.img-card` / `.cat-card` / `.retention-card` divs — never anchors. */
.card-carousel{display:flex;gap:24px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:4px 2px 8px;margin:0 -2px}
.card-carousel::-webkit-scrollbar{display:none}
.card-carousel>*{scroll-snap-align:start;flex:0 0 auto;width:300px;max-width:82%}
.card-carousel.dragging{scroll-snap-type:none;scroll-behavior:auto;cursor:grabbing;user-select:none}
@media(min-width:1024px){
  /* enough room: cards flex to fill the row and only scroll if they overflow */
  .card-carousel>*{width:auto;flex:1 1 0;min-width:262px;max-width:none}
}
@media(prefers-reduced-motion:reduce){.card-carousel{scroll-behavior:auto}}
/* optional author-supplied prev/next controls (wired by main.js if present) */
.cc-nav{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}
.cc-nav button{width:42px;height:42px;border-radius:50%;border:1px solid var(--border);background:#fff;color:var(--text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .18s,color .18s,border-color .18s}
.cc-nav button:hover{background:var(--primary);color:#fff;border-color:transparent}
.cc-nav button svg{width:18px;height:18px}
.cc-nav button[disabled]{opacity:.35;cursor:default;pointer-events:none}

/* ---------- Split section ---------- */
.split{display:grid;grid-template-columns:1fr;gap:40px;align-items:center}
@media(min-width:1024px){.split{grid-template-columns:1fr 1fr;gap:64px}.split.reverse .split-media{order:2}}
.split-media{position:relative}
.split-media img{width:100%;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);aspect-ratio:4/3;object-fit:cover}
.split-media .badge-float{position:absolute;bottom:-22px;left:24px;background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:16px 22px;display:flex;align-items:center;gap:14px}
.split-media .badge-float .bf-num{font-size:1.9rem;font-weight:800;color:var(--primary);line-height:1}
.split-media .badge-float .bf-label{font-size:.82rem;color:var(--text-secondary);max-width:130px}
.split-body h2{margin-bottom:16px}
.split-body p{margin-bottom:14px}
/* Coming Soon media panel — Homecoming details held back until announced (replaces the "what it is" image) */
.coming-soon-panel{position:relative;aspect-ratio:4/3;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:36px;background:radial-gradient(125% 125% at 74% 30%,#1c6b84 0%,#10516d 58%,#0d4460 100%)}
.coming-soon-panel .cs-sun{position:absolute;width:340px;height:auto;right:-96px;bottom:-96px;opacity:.22;pointer-events:none;user-select:none;border-radius:0;box-shadow:none;aspect-ratio:auto;object-fit:contain;max-height:none;animation:sun-spin 150s linear infinite}
.coming-soon-panel .cs-eyebrow{position:relative;z-index:1;font-family:var(--font-sans);font-size:.72rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:14px}
.coming-soon-panel .cs-title{position:relative;z-index:1;font-family:var(--font-display);font-size:clamp(2.4rem,5.2vw,3.4rem);line-height:1.02;color:#fff}
@media(prefers-reduced-motion:reduce){.coming-soon-panel .cs-sun{animation:none}}
.split-body .check-list{margin:20px 0 26px}
.check-list{display:flex;flex-direction:column;gap:12px;list-style:none}
/* The <li> is NORMAL FLOW, never a flex container — so inline content (text mixed with
   <strong>/<a>/<em>) flows as one sentence and can NEVER fragment into mis-sized columns
   (the real "Up / to | 15%… | from…" defect: a flex <li> turns each text node + inline
   element into a separate flex item). The check marker is an absolutely-positioned ::before
   disc + tick; an authored leading <svg> becomes the marker instead and suppresses it. */
.check-list li{position:relative;padding-left:30px;color:var(--text-secondary)}
.check-list li::before{content:"";position:absolute;left:0;top:.3em;width:19px;height:19px;border-radius:50%;background:var(--secondary)}
.check-list li::after{content:"";position:absolute;left:6.5px;top:.5em;width:5px;height:9px;border:solid var(--accent-dark);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.check-list li:has(> svg:first-child)::before,.check-list li:has(> svg:first-child)::after{display:none}
.check-list li > svg:first-child{position:absolute;left:0;top:.16em;width:20px;height:20px;margin:0;color:var(--accent-dark)}
.check-list li b,.check-list li strong{color:var(--text);font-weight:700}

/* ---------- Process ---------- */
.process{background:var(--dark);color:#fff}
.process-grid{display:grid;grid-template-columns:1fr;gap:30px;counter-reset:step}
@media(min-width:768px){.process-grid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1024px){.process-grid.cols-5{grid-template-columns:repeat(5,1fr);gap:20px}}
.process-step{position:relative;padding-top:8px}
.process-num{width:54px;height:54px;border-radius:50%;border:2px solid var(--accent);color:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.2rem;margin-bottom:18px}
.process-step h3{color:#fff;font-size:1.08rem;margin-bottom:8px}
.process-step p{color:rgba(255,255,255,.7);font-size:.92rem}
.process-step .process-link{display:inline-flex;align-items:center;gap:6px;margin-top:14px;font-weight:700;font-size:.92rem;color:var(--accent);transition:color .15s,gap .15s}
.process-step .process-link:hover{color:#fff;gap:9px}

/* ---------- Industry scroll ---------- */
.industry-scroll{display:flex;gap:20px;overflow-x:auto;padding:6px 4px 22px;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}
.industry-scroll::-webkit-scrollbar{height:7px}
.industry-scroll::-webkit-scrollbar-thumb{background:var(--border);border-radius:10px}
.ind-card{position:relative;flex:0 0 270px;aspect-ratio:3/4;border-radius:var(--radius-lg);overflow:hidden;scroll-snap-align:start}
.ind-card img{width:100%;height:100%;object-fit:cover;transition:transform .4s}
.ind-card:hover img{transform:scale(1.07)}
.ind-card::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(16,81,109,.88) 0%,rgba(16,81,109,.15) 55%,transparent 100%)}
.ind-card .ind-label{position:absolute;left:20px;right:20px;bottom:18px;z-index:2;color:#fff}
.ind-card .ind-label h3{color:#fff;font-size:1.18rem;margin-bottom:4px}
.ind-card .ind-label p{color:rgba(255,255,255,.82);font-size:.85rem}
.ind-card .ind-arrow{position:absolute;top:16px;right:16px;z-index:2;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.18);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;color:#fff;transition:background .2s}
.ind-card:hover .ind-arrow{background:var(--accent);color:var(--text)}
.ind-card .ind-arrow svg{width:16px;height:16px}

/* ---------- Testimonials ---------- */
.testi-grid{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:768px){.testi-grid{grid-template-columns:repeat(3,1fr)}}
.testi-card{background:var(--dark-mid);border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-lg);padding:30px 28px;display:flex;flex-direction:column;height:100%}
.testi-stars{display:flex;gap:3px;margin-bottom:16px}
.testi-stars svg{width:18px;height:18px;color:var(--accent)}
.testi-quote{color:rgba(255,255,255,.86);font-size:1rem;line-height:1.7;flex:1;margin-bottom:20px}
.testi-author{display:flex;align-items:center;gap:13px}
.testi-avatar{width:46px;height:46px;border-radius:50%;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.05rem;flex-shrink:0}
.testi-meta .ta-name{font-weight:700;color:#fff;font-size:.95rem}
.testi-meta .ta-loc{font-size:.82rem;color:rgba(255,255,255,.6)}

/* ---------- FAQ ---------- */
.faq-list{max-width:820px;margin:0 auto;display:flex;flex-direction:column;gap:14px}
.faq-item{background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:box-shadow .2s,border-color .2s}
.faq-item.active{box-shadow:var(--shadow-md);border-color:transparent}
.faq-question{width:100%;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:20px 22px;font-weight:700;font-size:1.02rem;text-align:left;color:var(--text)}
.faq-question .faq-ico{width:30px;height:30px;border-radius:50%;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:transform .25s,background .2s,color .2s}
.faq-question .faq-ico svg{width:16px;height:16px}
.faq-item.active .faq-ico{background:var(--accent);color:var(--text);transform:rotate(45deg)}
.faq-answer{max-height:0;overflow:hidden;transition:max-height .3s ease}
.faq-answer-inner{padding:0 22px 22px;color:var(--text-secondary);font-size:.97rem}

/* ---------- CTA ---------- */
.cta-dark{position:relative;background:var(--primary);color:#fff;overflow:hidden}
.cta-dark::before{content:"";position:absolute;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(218,162,75,.22),transparent 70%);top:-180px;right:-120px}
.cta-dark::after{content:"";position:absolute;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.08),transparent 70%);bottom:-200px;left:-100px}
.cta-content{position:relative;z-index:2;text-align:center;max-width:680px;margin:0 auto}
.cta-content h2{color:#fff;margin-bottom:16px}
.cta-content p{color:rgba(255,255,255,.85);font-size:1.1rem;margin-bottom:28px}
.cta-actions{display:flex;flex-wrap:wrap;gap:14px;justify-content:center}

/* CTA with form */
.cta-band{position:relative;background:var(--dark);color:#fff;overflow:hidden}
.cta-band-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.16;z-index:0}
.cta-band::before{content:"";position:absolute;inset:0;background:linear-gradient(120deg,rgba(16,81,109,.95),rgba(13,68,96,.8));z-index:1}
.cta-form-grid{position:relative;z-index:2;display:grid;grid-template-columns:1fr;gap:44px;align-items:center}
@media(min-width:1024px){.cta-form-grid{grid-template-columns:1.05fr .95fr;gap:60px}}
.cta-form-grid .cfg-text h2{color:#fff;margin-bottom:16px}
.cta-form-grid .cfg-text p{color:rgba(255,255,255,.78);margin-bottom:24px}
.cfg-contact{display:flex;flex-direction:column;gap:16px;margin-top:8px}
.cfg-contact .ci{display:flex;align-items:center;gap:14px}
.cfg-contact .ci-ico{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;color:var(--accent);flex-shrink:0}
.cfg-contact .ci-ico svg{width:20px;height:20px}
.cfg-contact .ci-label{font-size:.78rem;color:rgba(255,255,255,.6);text-transform:uppercase;letter-spacing:.06em}
.cfg-contact .ci-val{font-weight:700;color:#fff;font-size:1rem}
.cta-form{background:#fff;border-radius:var(--radius-lg);padding:30px 28px;box-shadow:var(--shadow-lg)}
.cta-form h3{color:var(--text);font-size:1.3rem;margin-bottom:6px}
.cta-form .cf-sub{color:var(--text-secondary);font-size:.9rem;margin-bottom:20px}

/* ---------- Forms ---------- */
.form-group{margin-bottom:16px}
.form-row{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:560px){.form-row{grid-template-columns:1fr 1fr}}
.form-label{display:block;font-weight:600;font-size:.86rem;color:var(--text);margin-bottom:7px}
.form-label .req{color:var(--accent-dark)}
.form-control{width:100%;padding:12px 15px;border:1.5px solid var(--border);border-radius:var(--radius-sm);background:#fff;color:var(--text);font-size:.95rem;transition:border-color .15s,box-shadow .15s}
.form-control::placeholder{color:var(--text-muted)}
.form-control:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgba(71,181,198,.14)}
textarea.form-control{resize:vertical;min-height:110px}
select.form-control{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2351636a' stroke-width='2.5'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 13px center;background-size:17px;padding-right:40px}
.form-success{display:none;text-align:center;padding:30px 20px;background:var(--secondary);border-left:4px solid var(--accent-dark);border-radius:var(--radius-sm)}
.form-success.show{display:block}
.form-success .fs-ico{width:56px;height:56px;border-radius:50%;background:var(--accent);color:var(--text);display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
.form-success .fs-ico svg{width:28px;height:28px}
.form-success h4{font-size:1.2rem;margin-bottom:8px}
/* PRE-FOOTER LEAD FORM — injected on every page by renderFooterForm() so no page is
   conversion-dead. A LIGHT band (the footer below is dark) so it never forms an
   adjacent-dark-bands pair, with dark text overriding the dark-band .cfg-text defaults. */
.footer-cta-band{background:var(--surface-2);border-top:1px solid var(--border)}
.footer-cta-band .cfg-text h2{color:var(--text)}
.footer-cta-band .cfg-text p{color:var(--text-secondary)}
.footer-cta-band .cfg-text a{color:var(--primary);font-weight:700}
.form-note{font-size:.8rem;color:var(--text-muted);margin-top:6px}
/* Form CHOICE chips — the canonical multi/single-select control INSIDE A FORM (e.g. "Services
   interested in: LTL / FTL / Expedited …"). Self-contained: needs NO extra markup, keeps the
   NATIVE checkbox/radio VISIBLE + clickable (accent-colored), and the whole chip highlights when
   checked via :has(). Use THIS in forms — NOT .filter-check (that's the catalog sidebar and is
   invisible without a .fc-box span). Markup:
     <div class="form-check-grid">
       <label class="form-check"><input type="checkbox" name="services" value="LTL"><span>LTL</span></label> …
     </div>  (use type="radio" for single-select). */
.form-check-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px;margin-top:8px}
.form-check{display:flex;align-items:center;gap:10px;padding:11px 14px;border:1.5px solid var(--border);border-radius:var(--radius-md);background:#fff;cursor:pointer;font-size:.93rem;color:var(--text-secondary);transition:border-color .15s,background .15s,color .15s;-webkit-user-select:none;user-select:none}
.form-check:hover{border-color:var(--primary);color:var(--text)}
.form-check input{width:18px;height:18px;flex-shrink:0;margin:0;accent-color:var(--primary);cursor:pointer}
.form-check:has(input:checked){border-color:var(--primary);background:var(--secondary);color:var(--text);font-weight:600}
/* Safety net: a .filter-check MISUSED in a form (no .fc-box span) must NOT hide its native input
   into an invisible, un-selectable control — the real "can't select the LTL/FTL" defect. Only hide
   the native box when the custom .fc-box replacement is actually present. */
.filter-check:not(:has(.fc-box)) input{position:static;opacity:1;width:18px;height:18px;accent-color:var(--primary);cursor:pointer}

/* ---------- Contact ---------- */
.contact-layout{display:grid;grid-template-columns:1fr;gap:40px}
@media(min-width:1024px){.contact-layout{grid-template-columns:1.2fr .8fr;gap:56px}}
.contact-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:28px 26px;margin-bottom:22px}
.contact-card h3{font-size:1.15rem;margin-bottom:6px;display:flex;align-items:center;gap:9px}
.contact-card h3 .cc-tag{font-size:.7rem;font-weight:700;color:var(--primary);background:var(--secondary);padding:3px 9px;border-radius:var(--radius-pill);text-transform:uppercase;letter-spacing:.05em}
.contact-item{display:flex;align-items:flex-start;gap:13px;padding:11px 0;border-bottom:1px solid var(--surface)}
.contact-item:last-child{border-bottom:none}
.contact-icon{width:42px;height:42px;border-radius:11px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.contact-icon svg{width:19px;height:19px}
.contact-item .ci-label{font-size:.78rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}
.contact-item .ci-val{font-weight:700;color:var(--text);font-size:.98rem}
.contact-item .ci-val a:hover{color:var(--primary)}
.quick-response{background:var(--primary);color:#fff;border-radius:var(--radius-lg);padding:24px 26px}
.quick-response h4{color:#fff;font-size:1.05rem;margin-bottom:8px;display:flex;align-items:center;gap:9px}
.quick-response h4 svg{width:20px;height:20px;color:var(--accent)}
.quick-response p{color:rgba(255,255,255,.84);font-size:.92rem}
.map-embed{border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--border);height:300px}
.map-embed iframe{width:100%;height:100%;border:0;display:block}

/* ---------- Catalog (all-services) ---------- */
.catalog-layout{display:grid;grid-template-columns:1fr;gap:30px}
@media(min-width:1024px){.catalog-layout{grid-template-columns:260px 1fr;gap:40px}}
.filter-panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px 22px}
@media(min-width:1024px){.filter-panel{position:sticky;top:calc(var(--header-total) + 20px)}}
.filter-panel h4{font-size:1.05rem;margin-bottom:6px}
.filter-panel .fp-sub{font-size:.85rem;color:var(--text-muted);margin-bottom:18px}
.filter-group{margin-bottom:20px}
.filter-group .fg-title{font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-bottom:11px}
.filter-check{display:flex;align-items:center;gap:10px;padding:7px 0;cursor:pointer;font-size:.93rem;color:var(--text-secondary)}
.filter-check input{position:absolute;opacity:0;width:0;height:0}
.filter-check .fc-box{width:20px;height:20px;border:1.5px solid var(--border);border-radius:5px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,border-color .15s}
.filter-check .fc-box svg{width:13px;height:13px;color:#fff;opacity:0;transition:opacity .15s}
.filter-check input:checked + .fc-box{background:var(--primary);border-color:var(--primary)}
.filter-check input:checked + .fc-box svg{opacity:1}
.filter-check:hover{color:var(--text)}
.filter-toggle-btn{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;margin-bottom:18px;padding:13px;border:1.5px solid var(--border);border-radius:var(--radius-pill);font-weight:700;color:var(--text)}
.filter-toggle-btn svg{width:18px;height:18px}
@media(min-width:1024px){.filter-toggle-btn{display:none}}
.catalog-count{font-size:.9rem;color:var(--text-muted);margin-bottom:18px}
.catalog-grid{display:grid;grid-template-columns:1fr;gap:22px}
@media(min-width:640px){.catalog-grid{grid-template-columns:repeat(2,1fr)}}
.catalog-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:26px 24px;transition:transform .2s,box-shadow .2s,border-color .2s;display:flex;flex-direction:column;height:100%}
.catalog-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:transparent}
.catalog-card .cat-tag{display:inline-block;align-self:flex-start;font-size:.72rem;font-weight:700;color:var(--primary);background:var(--secondary);padding:4px 11px;border-radius:var(--radius-pill);margin-bottom:14px}
.catalog-card .cat-ico{width:48px;height:48px;border-radius:12px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;margin-bottom:14px}
.catalog-card .cat-ico svg{width:24px;height:24px}
.catalog-card h3{font-size:1.1rem;margin-bottom:8px}
.catalog-card p{font-size:.9rem;flex:1}
.catalog-card .card-link{margin-top:14px}
.filter-empty{display:none;text-align:center;padding:50px 20px;color:var(--text-muted)}
.filter-empty.show{display:block}

/* ---------- Detail grid + sidebar ---------- */
.detail-grid{display:grid;grid-template-columns:1fr;gap:34px}
@media(min-width:1024px){.detail-grid{grid-template-columns:2fr 1fr;gap:44px;align-items:start}}
.detail-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:30px 28px;margin-bottom:24px}
.detail-card h2{font-size:1.5rem;margin-bottom:14px}
.detail-card h3{font-size:1.15rem;margin:22px 0 12px}
.detail-card p{margin-bottom:14px}
.feature-list{display:grid;grid-template-columns:1fr;gap:13px;margin:18px 0}
@media(min-width:560px){.feature-list{grid-template-columns:1fr 1fr}}
.feature-list li{display:flex;align-items:flex-start;gap:10px;font-size:.94rem;color:var(--text-secondary)}
.feature-list li svg{width:19px;height:19px;color:var(--accent-dark);flex-shrink:0;margin-top:2px}
.app-grid{display:grid;grid-template-columns:1fr;gap:14px;margin-top:8px}
@media(min-width:560px){.app-grid{grid-template-columns:1fr 1fr}}
.app-item{display:flex;gap:13px;padding:16px;background:var(--surface);border-radius:var(--radius-md)}
.app-item .ai-ico{width:40px;height:40px;border-radius:10px;background:#fff;color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:var(--shadow-sm)}
.app-item .ai-ico svg{width:20px;height:20px}
.app-item h4{font-size:.98rem;margin-bottom:3px}
.app-item p{font-size:.85rem;margin:0}
.sidebar-cta{position:sticky;top:calc(var(--header-total) + 20px);background:var(--primary);color:#fff;border-radius:var(--radius-lg);padding:28px 26px}
.sidebar-cta h3{color:#fff;font-size:1.2rem;margin-bottom:10px}
.sidebar-cta p{color:rgba(255,255,255,.84);font-size:.92rem;margin-bottom:18px}
.sidebar-cta .sc-list{display:flex;flex-direction:column;gap:12px;margin-bottom:22px}
.sidebar-cta .sc-list li{display:flex;align-items:center;gap:10px;font-size:.92rem;color:rgba(255,255,255,.9)}
.sidebar-cta .sc-list svg{width:18px;height:18px;color:var(--accent);flex-shrink:0}
.sidebar-cta .sc-phone{display:flex;align-items:center;gap:10px;margin-top:14px;padding-top:16px;border-top:1px solid rgba(255,255,255,.18);font-size:.92rem;color:rgba(255,255,255,.84)}
.sidebar-cta .sc-phone a{font-weight:800;color:#fff;font-size:1.15rem}

/* product hero grid (service detail top) */
.product-hero-grid{display:grid;grid-template-columns:1fr;gap:40px;align-items:center;position:relative;z-index:2}
@media(min-width:1024px){.product-hero-grid{grid-template-columns:1.05fr .95fr;gap:56px}}
.product-visual{position:relative}
.product-visual img{width:100%;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);aspect-ratio:4/3;object-fit:cover}
.product-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:26px 0}
.product-meta-item{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);border-radius:var(--radius-md);padding:15px 14px;text-align:center}
.product-meta-item .pm-num{font-size:1.25rem;font-weight:800;color:var(--accent)}
.product-meta-item .pm-label{font-size:.74rem;color:rgba(255,255,255,.7);margin-top:3px}
.delivery-note{display:inline-flex;align-items:center;gap:9px;font-size:.88rem;color:rgba(255,255,255,.82);margin-top:6px}
.delivery-note svg{width:17px;height:17px;color:var(--accent)}

/* ---------- Related ---------- */
.related-grid{display:grid;grid-template-columns:1fr;gap:18px}
@media(min-width:640px){.related-grid{grid-template-columns:repeat(3,1fr)}}
.related-card{display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);padding:18px 20px;transition:transform .2s,box-shadow .2s,border-color .2s}
.related-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:transparent}
.related-card .rc-ico{width:42px;height:42px;border-radius:11px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.related-card .rc-ico svg{width:21px;height:21px}
.related-card h4{font-size:.97rem;margin-bottom:2px}
.related-card p{font-size:.8rem;margin:0;color:var(--text-muted)}

/* ---------- Photo strip ---------- */
.photo-strip{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
@media(min-width:768px){.photo-strip{grid-template-columns:repeat(4,1fr)}}
.photo-strip img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:var(--radius-md)}

/* ---------- Value props (icon row) ---------- */
.value-row{display:grid;grid-template-columns:1fr;gap:20px}
@media(min-width:640px){.value-row{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.value-row{grid-template-columns:repeat(4,1fr)}}
.value-item{text-align:center;padding:8px}
.value-item .vi-ico{width:60px;height:60px;border-radius:50%;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
.value-item .vi-ico svg{width:28px;height:28px}
.value-item h3{font-size:1.05rem;margin-bottom:7px}
.value-item p{font-size:.9rem}

/* ---------- Timeline ---------- */
.timeline{max-width:760px;margin:0 auto;position:relative;padding-left:38px}
.timeline::before{content:"";position:absolute;left:11px;top:8px;bottom:8px;width:2px;background:var(--border)}
.timeline-item{position:relative;padding-bottom:32px}
.timeline-item:last-child{padding-bottom:0}
.timeline-dot{position:absolute;left:-38px;top:2px;width:24px;height:24px;border-radius:50%;background:var(--primary);border:4px solid var(--surface);box-shadow:0 0 0 1px var(--border)}
.timeline-year{font-size:.8rem;font-weight:800;letter-spacing:.06em;color:var(--primary);margin-bottom:5px}
.timeline-item h3{font-size:1.1rem;margin-bottom:6px}
.timeline-item p{font-size:.93rem}

/* ---------- Footer ---------- */
.site-footer{background:var(--dark);color:rgba(255,255,255,.7);margin-top:auto}
.footer-top{padding:62px 0 44px}
.footer-grid{display:grid;grid-template-columns:1fr;gap:38px}
@media(min-width:640px){.footer-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.footer-grid{grid-template-columns:1.4fr 1fr 1fr 1.2fr}}
.footer-logo{height:46px;width:auto;margin-bottom:16px;background:#fff;padding:8px 12px;border-radius:10px}
/* The default white chip suits a dark/colored logo on the dark footer. A LIGHT/white logo
   on a white chip is the exact "invisible logo" failure — initLogoContrast() tags it
   .logo-chip-dark so it sits directly on the dark footer instead. (dark logo keeps the chip.) */
.footer-logo.logo-chip-dark{background:transparent;padding:0;border-radius:0}
.footer-about{font-size:.92rem;line-height:1.7;margin-bottom:18px;max-width:340px}
.footer-social{display:flex;gap:10px}
.footer-social a{width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.78);transition:background .2s,color .2s}
.footer-social a:hover{background:var(--accent);color:var(--text)}
.footer-social svg{width:18px;height:18px}
.footer-col h4{color:#fff;font-size:.95rem;font-weight:800;letter-spacing:.03em;margin-bottom:18px}
.footer-col ul{display:flex;flex-direction:column;gap:11px}
.footer-col ul li a{font-size:.91rem;color:rgba(255,255,255,.66);transition:color .15s,padding-left .15s}
.footer-col ul li a:hover{color:var(--accent);padding-left:3px}
.footer-contact-item{display:flex;gap:11px;margin-bottom:15px;font-size:.9rem}
.footer-contact-item svg{width:17px;height:17px;color:var(--accent);flex-shrink:0;margin-top:3px}
.footer-contact-item .fci-label{color:rgba(255,255,255,.5);font-size:.76rem;text-transform:uppercase;letter-spacing:.05em}
.footer-contact-item a:hover,.footer-contact-item .fci-val:hover{color:#fff}
.footer-contact-item .fci-val{color:rgba(255,255,255,.82);font-weight:600}
.footer-bottom{border-top:1px solid rgba(255,255,255,.1);padding:20px 0}
.footer-bottom-inner{display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center;font-size:.84rem;color:rgba(255,255,255,.55)}
@media(min-width:768px){.footer-bottom-inner{flex-direction:row;justify-content:space-between;text-align:left}}
.footer-bottom a{color:rgba(255,255,255,.55)}
.footer-bottom a:hover{color:var(--accent)}
.footer-legal{display:flex;gap:18px}

/* ==========================================================================
   Slick / futuristic layer
   ========================================================================== */

/* Scroll progress bar */
.scroll-progress{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,var(--accent),#47b5c6 50%,var(--primary));z-index:1200;box-shadow:0 0 12px rgba(218,162,75,.6);transition:width .08s linear}

/* Video hero. THE STACK BUG: the static fallback <img class="hero-dark-bg"> comes AFTER
   the <video> in the DOM, and both defaulted to z-index:0 — so the image painted ON TOP
   of the video and the video was never visible (a real shipped bug; the editor "added the
   video" but it stayed hidden under the still). Explicit, fallback-preserving stack for
   video heroes: fallback img 0 → video 1 → scrim ::before 2 → content 3. (.hero-dark
   sets no stacking context, so negative z-index would hide the img behind the dark bg —
   don't use it here.) */
.hero-video .hero-bg-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;opacity:0;transition:opacity .9s ease;filter:saturate(.85) brightness(.5)}
.hero-video .hero-bg-video.ready{opacity:1}
.hero-video .hero-dark-bg{z-index:0}     /* fallback stays UNDER the video (still visible if the video fails) */
.hero-video::before{z-index:2;will-change:transform;transform:translateZ(0)}           /* readability scrim sits ABOVE the video */
.hero-video .container{z-index:3}        /* hero copy sits above the scrim */

/* Animated aurora glow over dark heroes (sits above overlay, below content) */
.hero-dark::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(circle at 18% 28%,rgba(218,162,75,.16),transparent 38%),
             radial-gradient(circle at 82% 72%,rgba(71,181,198,.18),transparent 42%);
  animation:aurora 16s ease-in-out infinite alternate}
@keyframes aurora{0%{transform:translate3d(-2%,-1%,0) scale(1);opacity:.85}50%{opacity:1}100%{transform:translate3d(3%,2%,0) scale(1.12);opacity:.9}}

/* Subtle animated grid lines in dark heroes */
.hero-grid-lines{position:absolute;inset:0;z-index:1;pointer-events:none;opacity:.5;
  background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);
  background-size:54px 54px;-webkit-mask-image:radial-gradient(circle at 50% 40%,#000,transparent 78%);mask-image:radial-gradient(circle at 50% 40%,#000,transparent 78%);
  animation:grid-pan 26s linear infinite}
@keyframes grid-pan{from{background-position:0 0}to{background-position:54px 54px}}

/* Card glow + lift on hover */
.card:hover,.cat-card:hover,.img-card:hover,.retention-card:hover,.catalog-card:hover{box-shadow:0 18px 44px rgba(16,81,109,.14),0 0 0 1px rgba(218,162,75,.45)}
.svc-card,.cat-card,[data-tilt]{transition:transform .25s cubic-bezier(.2,.7,.3,1),box-shadow .25s ease,border-color .25s ease;transform-style:preserve-3d;will-change:transform}

/* Pulsing / glowing CTA */
.btn-glow{position:relative;animation:btn-pulse 2.8s ease-in-out infinite}
@keyframes btn-pulse{0%,100%{box-shadow:0 0 0 0 rgba(218,162,75,.55),0 8px 22px rgba(218,162,75,.35)}50%{box-shadow:0 0 0 12px rgba(218,162,75,0),0 8px 26px rgba(218,162,75,.5)}}
.btn-glow:hover{animation-play-state:paused}

/* Animated underline accent under section h2 */
.section-header h2{position:relative;display:inline-block}
.section-header h2::after{content:"";position:absolute;left:50%;bottom:-12px;transform:translateX(-50%);width:54px;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--primary));opacity:.9}
.section-header.left h2::after{left:0;transform:none}
.section.dark .section-header h2::after,.process .section-header h2::after{background:linear-gradient(90deg,var(--accent),#47b5c6)}

/* Brand marquee */
.brand-marquee{padding:38px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:var(--surface)}
.brand-marquee .bm-label{text-align:center;font-size:.78rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);margin-bottom:22px}
.brand-strip{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.brand-track{display:flex;gap:22px;align-items:center;width:max-content;animation:brand-scroll 42s linear infinite}
.brand-track:hover{animation-play-state:paused}
.brand-item{height:108px;min-width:184px;display:flex;align-items:center;justify-content:center;padding:0 34px;background:#fff;border:1px solid var(--border);border-radius:16px;flex-shrink:0;box-shadow:var(--shadow-sm)}
.brand-item img{height:68px;width:auto;object-fit:contain;opacity:.85;filter:grayscale(.25);transition:opacity .25s,filter .25s,transform .25s}
.brand-item:hover img{opacity:1;filter:none;transform:scale(1.08)}
@keyframes brand-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* Stat pop on reveal */
.stat-num{transition:transform .3s ease}
.stat-item.in .stat-num{animation:stat-pop .5s ease}
@keyframes stat-pop{0%{transform:scale(.8);opacity:0}100%{transform:scale(1);opacity:1}}

/* Glassy lift for hero ticker numbers */
.hero-ticker>div{transition:transform .3s ease}
.hero-ticker>div:hover{transform:translateY(-4px)}

@media(prefers-reduced-motion:reduce){
  .hero-dark::after,.hero-grid-lines,.btn-glow,.brand-track,.scroll-progress{animation:none!important}
}

/* ---------- Contrast safety: dark bands legible BY CONSTRUCTION ----------
   Every dark-background section/panel/card carries .on-dark (the marker). The
   built-in dark classes are aliased in as a safety net so a forgotten marker
   still self-heals. These rules set a legible LIGHT default for EVERY text
   descendant AND icon, regardless of element type or component class — so a
   brand-new dark band (awards/credentials/stats grid) is readable without being
   named here. Accent/primary stay (they read fine on dark); :where() keeps
   specificity low so a deliberate per-component color still wins.            */
.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar{color:#fff}
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar) :where(h1,h2,h3,h4,h5,h6,strong,b,dt,.stat-num){color:#fff}
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar) :where(p,li,dd,blockquote,span,small,figcaption,label,.stat-label,.cert-sub,.section-header p){color:rgba(255,255,255,.78)}
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar) :where(svg,.icon,i){color:#fff}
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar) .eyebrow{color:var(--accent);background:rgba(255,255,255,.1)}
/* icons that intentionally use the accent on dark keep it (higher specificity below wins) */
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar) .trust-pill svg,
.sidebar-cta .sc-list svg,.footer-contact-item svg{color:var(--accent)}

/* ---------- Quote FAB ---------- */
.quote-fab{position:fixed;right:22px;bottom:22px;z-index:1090;display:inline-flex;align-items:center;gap:10px;background:var(--accent);color:var(--text);font-weight:800;font-size:.95rem;padding:14px 22px;border-radius:var(--radius-pill);box-shadow:0 10px 30px rgba(16,81,109,.28);transition:transform .2s,box-shadow .2s;animation:fab-breathe 3.4s ease-in-out infinite}
.quote-fab:hover{transform:translateY(-3px) scale(1.02);box-shadow:0 16px 38px rgba(16,81,109,.34);animation-play-state:paused}
.quote-fab svg{width:19px;height:19px}
@keyframes fab-breathe{0%,100%{box-shadow:0 10px 30px rgba(16,81,109,.28)}50%{box-shadow:0 10px 30px rgba(218,162,75,.55)}}
@media(max-width:560px){.quote-fab{right:16px;bottom:16px;width:56px;height:56px;padding:0;justify-content:center;border-radius:50%}.quote-fab-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}}

/* ---------- Modal ---------- */
.modal-overlay{position:fixed;inset:0;z-index:1100;background:rgba(16,81,109,.6);backdrop-filter:blur(4px);display:none;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}
.modal-overlay.active{display:flex}
.modal{background:#fff;border-radius:var(--radius-lg);max-width:560px;width:100%;box-shadow:var(--shadow-lg);animation:modal-in .25s ease}
@keyframes modal-in{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
.modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:24px 26px 0}
.modal-header h3{font-size:1.35rem;margin-bottom:5px}
.modal-header p{font-size:.9rem}
.modal-close{width:38px;height:38px;border-radius:50%;background:var(--surface);color:var(--text);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s}
.modal-close:hover{background:var(--border)}
.modal-close svg{width:20px;height:20px}
.modal-body{padding:20px 26px 28px}
.modal-success{display:none;text-align:center;padding:36px 26px}
.modal-success.show{display:block}
.modal-success .ms-ico{width:64px;height:64px;border-radius:50%;background:var(--accent);color:var(--text);display:flex;align-items:center;justify-content:center;margin:0 auto 18px}
.modal-success .ms-ico svg{width:32px;height:32px}
.modal-success h3{margin-bottom:8px}

/* ---- Newsletter scroll popup (built by main.js) ---- */
.newsletter-modal{position:relative;max-width:460px;overflow:hidden}
.newsletter-modal .modal-close{position:absolute;top:14px;right:14px;z-index:2}
.newsletter-modal .nl-body{padding:40px 32px 32px;text-align:center}
.newsletter-modal .nl-sun{width:76px;height:auto;margin:0 auto 14px;display:block;animation:sun-spin 110s linear infinite}
.newsletter-modal .nl-body .eyebrow.brand-eyebrow{margin-bottom:12px}
.newsletter-modal h3{font-size:1.55rem;line-height:1.15;margin-bottom:10px}
.newsletter-modal .nl-sub{color:var(--text-secondary);font-size:.95rem;line-height:1.55;margin:0 auto 22px;max-width:40ch}
.newsletter-modal form .form-row{margin-bottom:14px}
.newsletter-modal .form-note{text-align:center}
@media(prefers-reduced-motion:reduce){.newsletter-modal .nl-sun{animation:none}}
@media(max-width:520px){.newsletter-modal .nl-body{padding:34px 20px 26px}.newsletter-modal form .form-row{grid-template-columns:1fr}}

/* ---------- Reveal animation ---------- */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform:none}
/* Above-the-fold heroes must paint immediately — never gate the LCP element behind
   the JS IntersectionObserver reveal. On throttled mobile that pushed LCP to ~10s
   because the hero stayed opacity:0 until main.js downloaded, parsed, and fired.
   Every hero on the site carries .hero-dark, so this exempts all of them. */
.hero-dark.reveal{opacity:1;transform:none;transition:none}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.brand-track,.quote-fab{animation:none}}

/* ==========================================================================
   Mobile optimizations
   ========================================================================== */
@media(max-width:767px){
  .section{padding:56px 0}
  .section-sm{padding:40px 0}
  .section-lg{padding:64px 0}
  .section-header{margin-bottom:34px}
  .hero-pad{padding:96px 0 64px}
  .hero-pad-sm{padding:96px 0 52px}
  .hero-fullscreen{min-height:auto;padding:110px 0 64px}
  .footer-top{padding:46px 0 32px}
  .cta-form-grid{gap:34px}
  .stat-grid{padding:38px 0;gap:26px 14px}
  .split-media .badge-float{left:50%;transform:translateX(-50%);bottom:-26px}
}
@media(max-width:639px){
  .product-meta{grid-template-columns:1fr 1fr}
  .card{padding:24px 20px}
  .cat-card,.catalog-card,.detail-card,.cta-form{padding:24px 20px}
  .hero-ticker{gap:28px}
  .hero-ticker .ht-num{font-size:1.6rem}
  .faq-question{padding:16px 18px;font-size:.96rem}
  .trust-pill{font-size:.84rem;padding:9px 14px}
}
@media(max-width:479px){
  .section{padding:48px 0}
  .btn{white-space:normal;text-align:center}
  .btn-lg{padding:15px 24px}
  .hero-dark h1{font-size:1.95rem}
  .hero-actions .btn{width:100%}
  .product-meta{grid-template-columns:1fr}
  .ind-card{flex-basis:220px}
  .stat-num{font-size:1.7rem}
  .modal-body{padding:16px 18px 22px}
  .modal-header{padding:18px 18px 0}
}

/* ==========================================================================
   Spacing floor — every top-level section breathes, even in a free-flowing layout.
   .section / .section-sm / .section-lg / .hero-* / .brand-marquee all set their own
   padding at class-specificity and KEEP it (a class beats this element-only rule);
   this only rescues a <section> whose class forgot vertical padding, so no section
   can ever render flush with zero spacing around it.
   ========================================================================== */
main > section{padding-block:56px}

/* ==========================================================================
   Band-separation safety net (deterministic — does NOT depend on the build
   alternating correctly). When two adjacent sections share the same tone they
   visually merge into one cramped wall ("no spacing"); give the second a hairline
   so every band reads as its own surface even in a free-flowing layout.
   ========================================================================== */
/* light + light (white→white) */
.section:not(.surface):not(.dark):not(.process):not(.cta-band):not(.cta-dark)
  + .section:not(.surface):not(.dark):not(.process):not(.cta-band):not(.cta-dark){border-top:1px solid var(--border)}
/* tint + tint (surface / brand-marquee both use the tinted surface) */
.section.surface + .section.surface,
.section.surface + .brand-marquee,
.brand-marquee  + .section.surface,
.brand-marquee  + .brand-marquee{border-top:1px solid var(--border)}
/* dark + dark — a faint light hairline keeps the seam visible without a harsh line */
.hero-dark + .section.dark,        .hero-dark + .section.process,
.section.dark + .section.dark,     .section.dark + .section.process,
.section.process + .section.dark,  .section.process + .section.process,
.section.dark + .section.cta-band, .section.cta-band + .section.dark,
.section.process + .section.cta-band{border-top:1px solid rgba(255,255,255,.10)}

/* ==========================================================================
   Card safety net — cards must be a <div>, NEVER an <a>, and must NEVER nest an
   <a class="cc-foot"> inside an <a> (illegal nested anchors → the browser ejects
   the inner link, it becomes a stray grid cell, and the whole card grid collapses
   into a vertical full-width mess — a real shipped defect).
   To make the WHOLE card clickable, keep it a <div> and let the single .cc-foot
   link stretch over the card via this overlay. No anchor wrapping needed.
   ========================================================================== */
.cat-card,.img-card,.related-card{position:relative}
.cat-card .cc-foot,.img-card .cc-foot,.img-card .ic-body .cc-foot{position:static}
.cat-card .cc-foot::after,.img-card .cc-foot::after{content:"";position:absolute;inset:0;z-index:1}

/* Defensive: if a build uses a `.cc-media` image box inside a card (the canonical
   image card is `.img-card > .ic-media`, but `.cc-media` was improvised with NO
   css and rendered images at full intrinsic size, blowing the grid apart), still
   constrain it to a fixed-ratio cover box so it can never balloon. */
.cc-media{aspect-ratio:16/10;overflow:hidden;border-radius:var(--radius-md);margin-bottom:18px;position:relative}
.cc-media img{width:100%;height:100%;object-fit:cover;display:block}

/* Last-ditch: a card-footer link that got ejected to be a DIRECT child of a grid
   (the nested-anchor bug) must not sit in a card column and shove everything out of
   alignment — drop it onto its own full-width row instead of interleaving the cards. */
.grid-2 > .cc-foot,.grid-3 > .cc-foot,.grid-4 > .cc-foot{grid-column:1/-1}

/* ==========================================================================
   CTA / button breathing room. A button or actions row that follows content in a
   body column (e.g. the "See the math" button pinned flush under a comparison
   table) must never sit jammed against the element above it.
   ========================================================================== */
.split-body > .btn,.split-body > .hero-actions,.split-body > .btn-row,
.cta-content > * + .btn,.cta-content > * + .hero-actions{margin-top:24px}
.split-body > * + .btn,.detail-card > * + .btn,.sidebar-cta > * + .btn{margin-top:22px}

/* ==========================================================================
   TABLES — for genuinely tabular content (comparison / spec / pricing). Use a REAL
   <table class="data-table"> wrapped in <div class="table-wrap"> (the wrap scrolls
   horizontally on small screens so columns never crush). NEVER fake a table by
   splitting a sentence or key-value data across mis-sized grid/flex columns.
   ========================================================================== */
.table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:10px 0 24px;border:1px solid var(--border);border-radius:var(--radius-md)}
.data-table,.compare-table{width:100%;border-collapse:collapse;font-size:.95rem;min-width:440px}
.data-table th,.data-table td,.compare-table th,.compare-table td{padding:13px 18px;text-align:left;vertical-align:top;border-bottom:1px solid var(--border)}
.data-table thead th,.compare-table thead th{background:var(--surface);color:var(--text);font-weight:700;font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}
.data-table tbody tr:last-child td,.compare-table tbody tr:last-child td{border-bottom:0}
.data-table tbody tr:nth-child(even),.compare-table tbody tr:nth-child(even){background:var(--surface)}
.data-table td:first-child,.compare-table td:first-child{font-weight:600;color:var(--text)}
.data-table .td-yes{color:var(--accent-dark);font-weight:700}
.data-table .td-no{color:var(--text-muted)}
/* On a dark band the table inherits .on-dark light text; tint the header/zebra for contrast. */
.on-dark .table-wrap{border-color:rgba(255,255,255,.16)}
.on-dark .data-table th,.on-dark .data-table td,.on-dark .compare-table th,.on-dark .compare-table td{border-bottom-color:rgba(255,255,255,.14)}
.on-dark .data-table thead th,.on-dark .compare-table thead th{background:rgba(255,255,255,.08);color:#fff}
.on-dark .data-table tbody tr:nth-child(even),.on-dark .compare-table tbody tr:nth-child(even){background:rgba(255,255,255,.05)}

/* ==========================================================================
   Trust / "backed by" bar — keep it from rendering as a jumbled plain-text list.
   Items are spaced pills; an EMPTY item must not leave a ghost gap.
   ========================================================================== */
.trust-pills{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:14px 22px}
.trust-pills :empty{display:none}
.trust-label{display:block;text-align:center}

/* ============================================================================
   SIGNATURE / DESIGN-PACK LAYER — opt-in, VETTED, responsive + contrast-safe.
   This is the toolkit for making a build DISTINCTIVE and design-heavy (see SKILL
   "Design ceiling"). It EXTENDS the baseline; it never replaces it. Using these
   classes is NOT "improvising CSS" — they are part of the shipped baseline, so you
   reach for them instead of hand-rolling a section's internals. Each is
   self-contained, mobile-safe, and degrades gracefully. Decorative glow/mesh/grid
   layers sit BEHIND content (z-index) and are pointer-events:none. Pair every
   dark/over-media band with .on-dark so text + icons stay light (contrast rule).
   Push these on fitting clients (tech, premium, modern, creative); keep the
   restrained baseline for trust-forward/industrial ones. Never at the cost of
   contrast or responsiveness.
   ============================================================================ */

/* --- Decorative DARK-BAND backgrounds: futuristic glow / mesh / grid / scanlines.
   Add to a `.section.dark` / `.hero-dark` / `.on-dark` band; content sits above. --- */
.bg-aurora{position:relative;overflow:hidden;isolation:isolate}
.bg-aurora::before{content:"";position:absolute;inset:-40% -15% auto -15%;height:95%;z-index:-1;pointer-events:none;
  background:radial-gradient(55% 55% at 18% 20%,color-mix(in srgb,var(--accent) 42%,transparent),transparent 70%),
             radial-gradient(50% 50% at 82% 12%,color-mix(in srgb,var(--primary) 60%,transparent),transparent 72%);
  filter:blur(64px);opacity:.65}
.bg-grid{position:relative;overflow:hidden;isolation:isolate}
.bg-grid::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:.45;
  background-image:linear-gradient(color-mix(in srgb,var(--accent) 14%,transparent) 1px,transparent 1px),
                   linear-gradient(90deg,color-mix(in srgb,var(--accent) 14%,transparent) 1px,transparent 1px);
  background-size:46px 46px;
  -webkit-mask-image:radial-gradient(72% 60% at 50% 28%,#000,transparent 76%);
          mask-image:radial-gradient(72% 60% at 50% 28%,#000,transparent 76%)}
.bg-glow{position:relative;overflow:hidden;isolation:isolate}
.bg-glow::before{content:"";position:absolute;left:50%;top:-20%;width:70vw;height:70vw;max-width:760px;max-height:760px;
  transform:translateX(-50%);z-index:-1;pointer-events:none;border-radius:50%;opacity:.5;filter:blur(90px);
  background:radial-gradient(circle,color-mix(in srgb,var(--accent) 55%,transparent),transparent 65%)}

/* --- BENTO grid: an asymmetric feature grid (a wide/tall lead tile + smaller tiles)
   instead of a flat row of identical cards. Children are normal .cat-card/.img-card/.glass. --- */
.bento{display:grid;gap:18px;grid-template-columns:1fr}
@media(min-width:768px){
  .bento{grid-template-columns:repeat(3,1fr);grid-auto-rows:minmax(150px,auto)}
  .bento .bento-lg{grid-column:span 2;grid-row:span 2}
  .bento .bento-wide{grid-column:span 2}
  .bento .bento-tall{grid-row:span 2}
}

/* --- GLASS card (glassmorphism) — only on dark / over-media bands (carry .on-dark). --- */
.glass{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:var(--radius-lg);
  -webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%);
  box-shadow:0 10px 44px rgba(0,0,0,.28);padding:28px 24px}

/* --- Editorial DISPLAY type, gradient + outline headline words. --- */
.display-xl{font-size:clamp(2.6rem,8vw,5.8rem);font-weight:800;letter-spacing:-.03em;line-height:1.02}
.display-lg{font-size:clamp(2.1rem,5.5vw,3.8rem);font-weight:800;letter-spacing:-.025em;line-height:1.06}
.text-gradient{background:linear-gradient(100deg,var(--accent),var(--primary));-webkit-background-clip:text;background-clip:text;color:transparent}
.text-stroke{-webkit-text-stroke:1.4px currentColor;color:transparent}   /* outline word for editorial heroes */
.eyebrow-line{display:inline-flex;align-items:center;gap:12px;font-weight:700;font-size:.8rem;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted)}
.eyebrow-line::before{content:"";width:34px;height:2px;background:var(--accent)}  /* minimalist line-label alt to the pill chip */

/* --- SPLIT-SCREEN hero: media on one side, content on the other (alt to the full-bleed hero). --- */
.hero-split{display:grid;grid-template-columns:1fr;min-height:auto}
.hero-split .hs-media{position:relative;overflow:hidden;min-height:44vh}
.hero-split .hs-media>img,.hero-split .hs-media>video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.hero-split .hs-body{display:flex;flex-direction:column;justify-content:center;padding:120px 0 64px}
@media(min-width:900px){
  .hero-split{grid-template-columns:1.04fr .96fr;min-height:92vh}
  .hero-split .hs-media{min-height:0}
  .hero-split .hs-body{padding:96px 64px 96px 0}
}

/* --- ANGLED / soft-curve section divider — breaks the flat band-on-band stack.
   Use sparingly (one or two per page) and only on a band with ample vertical padding. --- */
.section-angled{clip-path:polygon(0 0,100% 2.6vw,100% 100%,0 calc(100% - 2.6vw))}
.section-curve{border-top-left-radius:48px 26px;border-top-right-radius:48px 26px;overflow:hidden}

/* --- MARQUEE strip: a moving row of CAPSULE chips (duplicate the track once for a seamless loop).
   ⛔ HARD CONSTRAINT: every phrase is its own `.hm-pill` — a padded, bordered capsule with real
   spacing between items. The old giant bare-text marquee shipped as an unreadable run-on word blur
   and is BANNED. Never put bare text directly in `.hm-track`. Pauses on hover. --- */
.headline-marquee{overflow:hidden;white-space:nowrap;width:100%;padding:6px 0}
.headline-marquee .hm-track{display:inline-flex;gap:16px;align-items:center;width:max-content;
  padding-right:16px;animation:hm-scroll 36s linear infinite}
.headline-marquee .hm-pill{display:inline-flex;align-items:center;gap:10px;padding:11px 24px;
  border-radius:999px;border:1px solid var(--border);background:var(--surface);
  font-weight:600;font-size:1.02rem;letter-spacing:.01em;line-height:1;color:var(--text)}
/* Icons on a LIGHT pill must never be raw --accent — a light client accent (cyan/yellow)
   on near-white --surface drops below 2:1 and the QA probe blocks it as an invisible band.
   Blend the accent toward --text so it stays brand-tinted but always readable; the dark
   override below restores light icons on dark sections. */
.headline-marquee .hm-pill svg,.headline-marquee .hm-pill .icon{width:1.05em;height:1.05em;color:color-mix(in srgb,var(--accent) 55%,var(--text))}
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-pill{
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.2);color:#fff}
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-pill svg,
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-pill .icon{color:#fff}
.headline-marquee .hm-dot{color:color-mix(in srgb,var(--accent) 55%,var(--text));font-weight:800}
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-dot{color:rgba(255,255,255,.6)}
.headline-marquee:hover .hm-track{animation-play-state:paused}
@keyframes hm-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

/* --- Accent KICKER rule under a stat / feature, and a hairline "tech" border. --- */
.kicker-rule{width:46px;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--primary));margin:14px 0 0}
.edge-glow{border:1px solid color-mix(in srgb,var(--accent) 34%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 10%,transparent),0 14px 50px rgba(0,0,0,.18)}

@media(prefers-reduced-motion:reduce){
  .headline-marquee .hm-track{animation:none}
}
/* Mobile: kill the angled clip (it eats content at small sizes) and calm big type. */
@media(max-width:639px){
  .section-angled{clip-path:none}
  .hero-split .hs-body{padding:104px 0 56px}
}
/* AUTO-REPAIR: any explicit multi-column grid — INCLUDING a hand-written inline
   `style="display:grid;grid-template-columns:repeat(3,1fr)"` — collapses to a single
   column on phones. A stylesheet `!important` beats a non-important inline declaration,
   so this neutralises the #1 cause of mobile horizontal scroll (responsive_hscroll)
   regardless of how the section was authored. */
@media(max-width:600px){
  [style*="grid-template-columns"]{grid-template-columns:1fr !important}
}
/* AUTO-REPAIR: a .cta-form is always a WHITE card. When it sits inside an on-dark band
   (.cta-band / .cta-dark / .on-dark …), the band's white-text cascade turned the form's
   labels, helper text and input text white-on-white — an invisible form. This higher-
   specificity rule restores dark text inside the white card. (Same dark-cascade-into-a-
   light-child defect that hit .process; .cta-form is the reliably-white one we can target.) */
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar) .cta-form
  :where(h1,h2,h3,h4,h5,h6,p,label,span,small,strong,b,li,dd,dt,.form-label,.form-note,input,textarea,select){color:var(--text)}
/* AUTO-REPAIR: buttons inside the white .cta-form must use on-LIGHT styling. A .btn-outline
   defaults to white text + faint-white border (built for dark bands) — invisible on the
   white card. Force dark ink + a visible border so the form's buttons are always visible. */
.cta-form .btn-outline{color:var(--text);border-color:var(--border)}
.cta-form .btn-primary{color:var(--text)}
.cta-form :where(.btn,.btn-primary,.btn-outline) span{color:inherit}

/* AUTO-REPAIR: tolerate the FAQ class-name variants the builder sometimes emits
   (.faq-q / .faq-a / .faq-icon) instead of the canonical .faq-question / .faq-answer /
   .faq-ico, so the accordion still styles + collapses. Paired with a JS selector that
   binds both spellings. */
.faq-q{width:100%;display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:20px 22px;font-weight:700;font-size:1.02rem;text-align:left;color:var(--text);cursor:pointer}
.faq-q .faq-icon{width:30px;height:30px;border-radius:50%;background:var(--secondary);color:var(--primary);
  display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:transform .25s,background .2s,color .2s}
.faq-q .faq-icon svg{width:16px;height:16px}
.faq-item.active .faq-icon{background:var(--accent);color:var(--text);transform:rotate(45deg)}
.faq-a{max-height:0;overflow:hidden;transition:max-height .3s ease;color:var(--text-secondary);
  font-size:.97rem;padding:0 22px}
.faq-a > :last-child{margin-bottom:22px}
/* AUTO-REPAIR: tolerate the process-section variant the builder sometimes emits (.ps-num for
   the number circle, and a bare .process with steps not wrapped in .process-grid) so a
   hand-rolled "How It Works" still styles instead of shipping as an unstyled stack. */
.process .ps-num,.ps-num{width:54px;height:54px;border-radius:50%;border:2px solid var(--accent);
  color:var(--accent);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.2rem;margin-bottom:18px}
.process > .container > .process-step{display:inline-block}
@media(min-width:768px){.process .process-step + .process-step{margin-top:0}}

/* ==========================================================================
   THH RICH ENHANCEMENTS — Heroes grid, episode library, sun motif, collage.
   Client-specific components layered on top of the baseline (append-only).
   ========================================================================== */

/* ---------- Gold sun motif accents ---------- */
.sun-wrap{position:relative;overflow:hidden}
.sun-wrap>.container{position:relative;z-index:1}
.sun-motif{position:absolute;pointer-events:none;user-select:none;z-index:0;max-height:none!important}
.sun-motif.sun-tr{top:-140px;right:-140px;width:420px;opacity:.16;animation:sun-spin 120s linear infinite}
.sun-motif.sun-bl{bottom:-160px;left:-160px;width:460px;opacity:.1;animation:sun-spin 160s linear infinite reverse}
.sun-motif.sun-hero{top:50%;right:-180px;transform:translateY(-50%);width:620px;opacity:.28;animation:sun-spin 180s linear infinite}
@keyframes sun-spin{to{transform:rotate(360deg)}}
.sun-motif.sun-hero{animation:sun-spin-c 180s linear infinite}
@keyframes sun-spin-c{from{transform:translateY(-50%) rotate(0)}to{transform:translateY(-50%) rotate(360deg)}}
@media(max-width:767px){.sun-motif.sun-hero{width:420px;right:-200px;opacity:.18}}
.hero-dark .sun-motif{z-index:1}
@media(prefers-reduced-motion:reduce){.sun-motif{animation:none!important}}

/* ---------- Meet the Heroes grid ---------- */
.heroes-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
@media(min-width:640px){.heroes-grid{grid-template-columns:repeat(3,1fr);gap:22px}}
@media(min-width:1024px){.heroes-grid{grid-template-columns:repeat(4,1fr);gap:26px}}
.hero-card{position:relative;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .25s ease,box-shadow .25s ease,border-color .25s ease;display:flex;flex-direction:column}
.hero-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg);border-color:var(--accent)}
.hero-card .hc-media{aspect-ratio:1/1.08;overflow:hidden;position:relative;background:var(--surface-2)}
.hero-card .hc-media img{width:100%;height:100%;max-height:none;object-fit:cover;object-position:top center;transition:transform .55s ease}
.hero-card:hover .hc-media img{transform:scale(1.06)}
.hero-card .hc-media::after{content:"";position:absolute;inset:auto 0 0 0;height:46%;background:linear-gradient(180deg,transparent,rgba(16,81,109,.28));opacity:0;transition:opacity .3s}
.hero-card:hover .hc-media::after{opacity:1}
.hero-card .hc-body{padding:14px 16px 16px}
.hero-card .hc-tag{display:inline-flex;align-items:center;gap:6px;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-dark);margin-bottom:5px}
.hero-card .hc-tag svg{width:12px;height:12px}
.hero-card h3{font-size:1.04rem;margin-bottom:2px}
.hero-card .hc-role{font-size:.85rem;color:var(--text-muted)}
.hero-card.hc-host{grid-column:span 2}
.hero-card.hc-host .hc-media{aspect-ratio:auto;min-height:100%}
@media(max-width:639px){.hero-card.hc-host{grid-column:span 2}}

/* ---------- Episode cards, library + filter ---------- */
.ep-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .22s ease,box-shadow .22s ease;display:flex;flex-direction:column;color:var(--text)}
.ep-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
.ep-thumb{position:relative;aspect-ratio:16/9;overflow:hidden;background:var(--dark)}
.ep-thumb img{width:100%;height:100%;max-height:none;object-fit:cover;transition:transform .5s ease}
.ep-card:hover .ep-thumb img{transform:scale(1.05)}
.ep-play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.85);width:52px;height:52px;border-radius:50%;background:rgba(218,162,75,.94);color:#fff;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .22s ease,transform .22s ease;box-shadow:0 8px 24px rgba(0,0,0,.35)}
.ep-play svg{width:20px;height:20px;margin-left:3px}
.ep-card:hover .ep-play{opacity:1;transform:translate(-50%,-50%) scale(1)}
.ep-body{padding:14px 16px 16px;display:flex;flex-direction:column;gap:4px;flex:1}
.ep-cat{font-size:.68rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--primary)}
.ep-title{font-weight:700;font-size:.98rem;line-height:1.35;color:var(--text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ep-watch{margin-top:auto;padding-top:6px;display:inline-flex;align-items:center;gap:6px;font-size:.84rem;font-weight:700;color:var(--accent-dark)}
.ep-watch svg{width:14px;height:14px}
.ep-grid{display:grid;grid-template-columns:1fr;gap:22px}
@media(min-width:640px){.ep-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.ep-grid{grid-template-columns:repeat(3,1fr)}}
.ep-toolbar{display:flex;flex-direction:column;gap:16px;align-items:center;margin-bottom:34px}
.ep-search{width:100%;max-width:440px;position:relative}
.ep-search input{width:100%;background:#fff;border:1px solid var(--border);border-radius:var(--radius-pill);padding:13px 20px 13px 46px;font-size:.95rem;color:var(--text);box-shadow:var(--shadow-sm)}
.ep-search input:focus{border-color:var(--primary)}
.ep-search svg{position:absolute;left:17px;top:50%;transform:translateY(-50%);width:17px;height:17px;color:var(--text-muted)}
.ep-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.ep-chip{padding:8px 16px;border-radius:var(--radius-pill);border:1px solid var(--border);background:#fff;font-weight:600;font-size:.84rem;color:var(--text-secondary);cursor:pointer;transition:all .18s ease}
.ep-chip:hover{border-color:var(--primary);color:var(--primary)}
.ep-chip.active{background:var(--dark);border-color:var(--dark);color:#fff}
.ep-hidden{display:none!important}
.ep-empty{text-align:center;padding:40px 0;color:var(--text-muted);display:none}
.ep-count{font-size:.86rem;color:var(--text-muted)}

/* ---------- Horizontal episode scroller (home) ---------- */
.ep-scroller{display:flex;gap:20px;overflow-x:auto;scroll-snap-type:x mandatory;padding:6px 4px 20px;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:var(--accent) var(--surface-2)}
.ep-scroller::-webkit-scrollbar{height:8px}
.ep-scroller::-webkit-scrollbar-track{background:var(--surface-2);border-radius:8px}
.ep-scroller::-webkit-scrollbar-thumb{background:var(--accent);border-radius:8px}
.ep-scroller .ep-card{flex:0 0 320px;scroll-snap-align:start}
@media(max-width:479px){.ep-scroller .ep-card{flex-basis:270px}}

/* ---------- Hero thumbnail collage (home hero, desktop) ---------- */
.hero-collage{position:absolute;right:4%;top:50%;transform:translateY(-50%);width:390px;z-index:2;display:none}
@media(min-width:1330px){.hero-collage{display:block}}
.hero-collage .hco-card{position:absolute;width:300px;border-radius:14px;overflow:hidden;box-shadow:0 24px 60px rgba(0,0,0,.45);border:3px solid rgba(255,255,255,.14)}
.hero-collage .hco-card img{width:100%;display:block;max-height:none}
.hero-collage .hco-1{transform:rotate(-7deg) translate(-40px,-150px)}
.hero-collage .hco-2{transform:rotate(4deg) translate(64px,-8px);z-index:2}
.hero-collage .hco-3{transform:rotate(-3deg) translate(-58px,132px)}
.hero-collage .hco-card{transition:transform .35s ease}
.hero-collage:hover .hco-1{transform:rotate(-9deg) translate(-46px,-156px)}
.hero-collage:hover .hco-2{transform:rotate(2deg) translate(70px,-8px)}
.hero-collage:hover .hco-3{transform:rotate(-1deg) translate(-64px,138px)}

/* ---------- YouTube CTA band ---------- */
.yt-band{background:linear-gradient(135deg,var(--dark) 0%,var(--dark-mid) 60%,#0a3a52 100%);color:#fff}
.yt-band .yt-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:24px;padding:44px 0}
.yt-band h3{color:#fff;font-size:clamp(1.25rem,2.4vw,1.7rem);margin-bottom:6px}
.yt-band p{color:rgba(255,255,255,.78);max-width:520px}
.yt-band .yt-actions{display:flex;gap:12px;flex-wrap:wrap}

/* ==========================================================================
   BLOG — index grid, featured post, and article page
   ========================================================================== */
.container-narrow{max-width:760px}
.chip-n{font-size:.72rem;opacity:.6;font-weight:700}
.ep-chip.active .chip-n{opacity:.85}

/* --- Post cards (reuse .ep-card shell, add excerpt + meta) --- */
.post-grid{align-items:stretch}
.post-thumb{position:relative;aspect-ratio:16/9;overflow:hidden;background:var(--dark)}
.post-thumb img{width:100%;height:100%;max-height:none;object-fit:cover;transition:transform .5s ease}
.post-card:hover .post-thumb img{transform:scale(1.05)}
.post-thumb-fallback{display:flex;align-items:flex-end;justify-content:flex-start;background:linear-gradient(135deg,var(--dark) 0%,var(--dark-mid) 55%,#0a3a52 100%)}
.post-thumb-fallback .sun-motif{position:absolute;top:50%;left:50%;width:120px;height:120px;transform:translate(-50%,-50%);opacity:.32;filter:none}
.post-thumb-fallback .ptf-cat{position:relative;margin:12px;font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#fff;background:rgba(255,255,255,.14);padding:5px 11px;border-radius:var(--radius-pill)}
.post-body{padding:15px 17px 17px;display:flex;flex-direction:column;gap:7px;flex:1}
.post-title{font-weight:700;font-size:1.02rem;line-height:1.34;color:var(--text);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.post-excerpt{font-size:.88rem;line-height:1.55;color:var(--text-secondary);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.post-meta{margin-top:auto;padding-top:8px;font-size:.78rem;color:var(--text-muted);display:flex;flex-wrap:wrap;gap:2px;align-items:center}
.post-meta span{white-space:nowrap}

/* --- Featured latest post --- */
.feature-post{display:grid;grid-template-columns:1fr;gap:0;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm);transition:transform .22s ease,box-shadow .22s ease;color:var(--text)}
.feature-post:hover{transform:translateY(-4px);box-shadow:var(--shadow-lg)}
.fp-media{position:relative;aspect-ratio:16/9;overflow:hidden;background:linear-gradient(135deg,var(--dark),var(--dark-mid))}
.fp-media img{width:100%;height:100%;max-height:none;object-fit:cover;transition:transform .5s ease}
.fp-media .sun-motif{object-fit:contain;opacity:.4;padding:40px}
.feature-post:hover .fp-media img{transform:scale(1.04)}
.fp-body{padding:30px 30px 34px;display:flex;flex-direction:column;align-items:flex-start}
.fp-body h2{font-size:clamp(1.4rem,3vw,2rem);margin:6px 0 10px}
.fp-body p{color:var(--text-secondary);margin-bottom:14px}
@media(min-width:900px){.feature-post{grid-template-columns:1.15fr 1fr;align-items:stretch}.fp-media{aspect-ratio:auto;height:100%;min-height:340px}}

/* --- Article page --- */
.post-article{padding:44px 0 10px}
.post-breadcrumb{display:flex;gap:8px;align-items:center;font-size:.84rem;color:var(--text-muted);margin-bottom:22px;flex-wrap:wrap}
.post-breadcrumb a{color:var(--primary);font-weight:600}
.post-breadcrumb span{opacity:.6}
.post-head{margin-bottom:26px}
.post-head h1{font-size:clamp(1.7rem,4.2vw,2.7rem);line-height:1.15;margin:10px 0 16px}
.post-meta-lg{font-size:.92rem;color:var(--text-secondary);margin-top:0}
.post-hero-img{border-radius:var(--radius-lg);overflow:hidden;margin-bottom:30px;box-shadow:var(--shadow-md);background:var(--surface-2)}
.post-hero-img img{width:100%;height:auto;max-height:none;display:block}
.post-content{font-size:1.06rem;line-height:1.8;color:var(--text-secondary)}
.post-content p{margin:0 0 22px}
.post-content h2{font-size:clamp(1.3rem,2.6vw,1.7rem);color:var(--text);margin:38px 0 14px;line-height:1.25}
.post-content h3{font-size:1.2rem;color:var(--text);margin:30px 0 12px}
.post-content ul,.post-content ol{margin:0 0 22px;padding-left:24px}
.post-content li{margin-bottom:9px}
.post-content a{color:var(--primary);font-weight:600;text-decoration:underline;text-underline-offset:2px}
.post-content a:hover{color:var(--primary-darker)}
.post-content strong{color:var(--text);font-weight:700}
.post-content blockquote{margin:26px 0;padding:18px 26px;border-left:4px solid var(--accent);background:var(--surface);border-radius:0 var(--radius-md) var(--radius-md) 0;font-style:italic;color:var(--text)}
.post-content blockquote p:last-child{margin-bottom:0}
.post-foot{display:flex;flex-wrap:wrap;gap:14px;justify-content:space-between;align-items:center;margin:40px 0 8px;padding-top:26px;border-top:1px solid var(--border)}

/* ==========================================================================
   BRAND LAYER — The Healing Heroes signature moves, replicated from her live
   site. Everything below is measured, not invented. Load-bearing for "it looks
   like my brand": the gold marquee band, the cream highlighter swash on
   headings, the gold moon-phase row, the navy pillar panels, script quotes.
   ========================================================================== */

/* ---- Cream highlighter swash behind heading words ----
   Her signature: "Feel Like Something's [Missing]" with a #ead9bd sweep sitting
   BEHIND the word, hugging the baseline. Not a full block — a marker stroke. */
.swash{position:relative;display:inline;background-image:linear-gradient(var(--cream),var(--cream));
  background-repeat:no-repeat;background-size:100% .42em;background-position:0 88%;
  padding:0 .06em;box-decoration-break:clone;-webkit-box-decoration-break:clone}
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.quick-response,.trust-bar,.stat-bar) .swash{background-image:linear-gradient(rgba(218,162,75,.34),rgba(218,162,75,.34))}

/* ---- Gold modality marquee band ---- (full-bleed gold, navy Recoleta text) */
.brand-marquee.gold-band{background:var(--accent);border-top:none;border-bottom:none;padding:16px 0;
  background-image:url('../images/brand/gold-texture.jpg');background-size:cover;background-position:center}
.gold-band .bm-label{display:none}
.gold-band .brand-strip{-webkit-mask-image:none;mask-image:none}
.gold-band .brand-track{gap:0;animation-duration:60s}
.gold-band .brand-track span{font-family:var(--font-display);font-size:1.55rem;font-weight:400;
  letter-spacing:0;color:var(--dark);opacity:1;padding:0 .38em}

/* ---- Moon-phase row (sits on the navy hero) ---- */
.moon-row{display:flex;justify-content:space-between;gap:18px;flex-wrap:wrap;
  max-width:1000px;margin:64px auto 0;position:relative;z-index:2}
.moon-item{flex:1 1 0;min-width:110px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:14px}
.moon-item img{width:52px;height:auto;filter:drop-shadow(0 2px 10px rgba(218,162,75,.3))}
.moon-item span{font-family:var(--font-sans);font-size:.7rem;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:rgba(255,255,255,.9);line-height:1.6}
@media(max-width:640px){.moon-row{gap:26px}.moon-item{flex:0 0 40%}.moon-item img{width:42px}}

/* ---- Navy pillar panel + Asmillione script quote ---- */
.pillar-panel{position:relative;border-radius:2px;overflow:hidden;background:var(--dark)}
.pillar-panel img{width:100%;height:100%;object-fit:cover;display:block}
.script-quote{font-family:var(--font-script);font-weight:400;color:#fff;
  font-size:clamp(1.75rem,2.8vw,2.3rem);line-height:1.4;letter-spacing:.015em;
  text-shadow:0 2px 12px rgba(13,68,96,.5)}
.gold-icon{width:clamp(64px,7vw,104px);height:auto;margin:0 auto 26px;display:block}

/* ---- Gold eyebrow (futura-pt caps, letterspaced) — replaces the pill chip ---- */
.eyebrow.brand-eyebrow{background:none;padding:0;border-radius:0;color:var(--accent-dark);
  font-family:var(--font-sans);font-weight:600;font-size:.74rem;letter-spacing:.2em}
.eyebrow.brand-eyebrow::before{display:none}
.on-dark .eyebrow.brand-eyebrow,.hero-dark .eyebrow.brand-eyebrow{color:var(--accent)}

/* ---- Gold splatter accent for CTA bands ---- */
.splatter-bg{position:absolute;inset:0;pointer-events:none;z-index:0;opacity:.85;
  background:url('../images/brand/splatter.png') no-repeat center/cover}

/* ---- Heroes wheel ---- */
.heroes-wheel{width:min(100%,520px);height:auto;margin:0 auto;display:block;
  animation:wheel-breathe 14s ease-in-out infinite}
@keyframes wheel-breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.022)}}
@media(prefers-reduced-motion:reduce){.heroes-wheel{animation:none}}

/* ---- Buttons: enforce her contrast rule ----
   HARD RULE: gold never sits on light blue. Gold buttons are for navy fields;
   light-blue buttons are for cream/white fields. Also: she asked for CTAs that
   "pop a little bit more" — hence the larger tap target and letterspaced caps. */
.btn{font-family:var(--font-sans);font-weight:600;letter-spacing:.12em;text-transform:uppercase;font-size:.8rem;padding:15px 30px}
.btn-lg{padding:17px 36px;font-size:.85rem}
.btn-sm{padding:11px 20px;font-size:.72rem;letter-spacing:.1em}
.btn-primary{background:var(--accent);color:var(--dark);border-color:var(--accent)}
.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark)}
.secondary .btn-primary,.bg-lightblue .btn-primary{background:var(--dark);border-color:var(--dark);color:#fff}
.btn-blue{background:var(--primary);color:#fff;border-color:var(--primary)}
.btn-blue:hover{background:var(--primary-dark);border-color:var(--primary-dark);transform:translateY(-2px)}

/* ---- Nav / body voice ---- */
.nav-link,.mm-link,.dropdown-item .di-title{font-family:var(--font-sans);letter-spacing:.1em;
  text-transform:uppercase;font-size:.76rem;font-weight:500}
.di-sub{text-transform:none;letter-spacing:0}

/* ---- Homepage hero: text left, heroes wheel right, moons beneath ---- */
.hero-brand{min-height:auto;padding:120px 0 64px}
.hero-split{display:grid;grid-template-columns:1fr;gap:40px;align-items:center}
@media(min-width:1024px){.hero-split{grid-template-columns:1.05fr .95fr;gap:56px}
  .hero-brand{padding:140px 0 72px}}
.hero-brand .hero-content{max-width:640px}
.hero-brand h1{margin-bottom:20px}
.hero-brand .eyebrow.brand-eyebrow{margin-bottom:18px}
.hero-welcome{font-family:var(--font-script);font-size:1.9rem;color:var(--accent);margin:-6px 0 26px}
.hero-or{font-family:var(--font-sans);font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;
  color:rgba(255,255,255,.6);align-self:center}
.hero-figure{display:flex;justify-content:center}

/* ---- Pillar rows: navy panel + text, alternating ---- */
.pillars-section{background:var(--bg)}
.pillar-row{margin-bottom:64px}
.pillar-row:last-child{margin-bottom:0}
.pillar-row .pillar-panel img{aspect-ratio:1/1.15;object-fit:cover;border-radius:2px;
  box-shadow:0 18px 50px rgba(16,81,109,.18);max-height:none}
.pillar-row .split-body h3{font-size:clamp(1.5rem,2.4vw,2rem);margin-bottom:14px}
.pillar-row.reverse .pillar-panel{order:2}
@media(max-width:1023px){.pillar-row.reverse .pillar-panel{order:0}
  .pillar-row .pillar-panel img{aspect-ratio:4/3}}

/* ---- Brand pull quote (Asmillione script, on light) ---- */
.brand-pullquote{font-family:var(--font-script);font-size:clamp(1.4rem,2.1vw,1.85rem);
  line-height:1.5;color:var(--primary-darker);margin:24px 0;padding-left:22px;
  border-left:2px solid var(--accent)}

/* The baseline's `:is(.on-dark,.section.dark,…) .eyebrow` computes to (0,3,0) and was
   re-applying a translucent pill behind her gold eyebrows. Her eyebrows are bare
   letterspaced caps — match that specificity to win cleanly. */
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,.pillars-section) .eyebrow.brand-eyebrow,
.eyebrow.brand-eyebrow{background:none;padding:0;border-radius:0}
:is(.on-dark,.section.dark,.hero-dark,.cta-dark,.cta-band) .eyebrow.brand-eyebrow{color:var(--accent)}
.hero-welcome{font-size:2.4rem;line-height:1.2}

/* ==========================================================================
   BRAND OVERRIDES OF TEMPLATE DEFAULTS
   These template devices are not in her design language. Rather than edit 229
   call-sites, rebrand the base classes so every page inherits her look.
   ========================================================================== */

/* Eyebrows: her site uses bare gold letterspaced caps — not a light-blue pill
   with a dot. The pill also violated her "no gold on light blue" rule wherever
   an accent sat inside it. */
.eyebrow{background:none!important;padding:0!important;border-radius:0!important;
  color:var(--accent-dark);font-family:var(--font-sans);font-weight:600;
  font-size:.74rem;letter-spacing:.2em;gap:0}
.eyebrow::before{display:none!important}
/* Louder eyebrow for a module whose whole job is the ask — the quiz band. */
.eyebrow.eyebrow-lg{font-size:1.15rem;letter-spacing:.18em;font-weight:700;margin-bottom:18px}
:is(.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,.sidebar-cta,
    .quick-response,.trust-bar,.stat-bar) .eyebrow{color:var(--accent);background:none!important}

/* Headings: no gradient underline dash. Her decoration is the cream swash. */
.section-header h2::after{display:none!important}

/* Pull quote: Asmillione is her "Written Font" and her site uses it only for the
   short quotes baked into the navy panels. A long paragraph set in script is
   unreadable, so long quotes get Recoleta italic with a gold rule. */
.brand-pullquote{font-family:var(--font-display);font-style:italic;font-weight:400;
  font-size:clamp(1.05rem,1.5vw,1.25rem);line-height:1.6;color:var(--dark);
  border-left:2px solid var(--accent);padding-left:22px;margin:24px 0}

/* ---- Dark-band text contrast ----
   The base rule `p{color:var(--text-secondary)}` sets colour explicitly, so it beats
   the inherited white on every navy band — the footer tagline was rendering #3D6270
   on #10516d (invisible). Pre-existing; fixed here for every dark band at once. */
:is(.site-footer,.on-dark,.section.dark,.hero-dark,.process,.cta-dark,.cta-band,
    .trust-bar,.stat-bar,.yt-band) :is(p,li,.footer-about,.footer-desc){color:rgba(255,255,255,.8)}
:is(.site-footer,.on-dark,.section.dark,.hero-dark,.cta-dark,.cta-band) :is(h1,h2,h3,h4,h5,h6){color:#fff}

/* Her footer mark sits directly on the navy, exactly as her live site shows it —
   no white chip. */
.footer-logo{background:none;padding:0;border-radius:0;height:58px}
.footer-logo.logo-chip-dark,.footer-logo.logo-chip-light{background:none;padding:0;border-radius:0}

/* ==========================================================================
   HER LIGHT-BLUE / GOLD RULE  — from the call, [16:35]-[21:25]:
     "we don't put this gold color on the light blue"
     "I just wouldn't overlay gold buttons on a light blue"
     "I'll get this light blue replaced with the main blue color, and we'll just
      use light blue for small buttons ... use the light blue only for these
      icons only. And for the large boxes, we'll just use the main color."
   So: LARGE bands/boxes = navy --dark. Light blue = small icons + small buttons.
   Gold = accents and buttons on navy, NEVER on a light-blue field.
   ========================================================================== */

/* Large surfaces were painted with light blue (--primary) and carried gold buttons —
   the exact pairing she rejected. Repaint them her main blue. */
.cta-dark{background:var(--dark)}
.stat-bar{background:var(--dark)}
.quick-response{background:var(--dark)}
.sidebar-cta{background:var(--dark)}

/* Small icons keep light blue (her explicit carve-out) but must never be gold on it. */
.form-success .fs-ico{background:var(--primary);color:#fff}
.cat-card .cc-icon{background:var(--primary);color:#fff}

/* Belt and braces: any gold button that still lands on a light-blue or gold field
   flips to navy so the pairing can never regress. */
:is(.stat-bar,.quick-response,.sidebar-cta,.bg-lightblue,.gold-band) .btn-primary{
  background:var(--dark);border-color:var(--dark);color:#fff}
:is(.stat-bar,.quick-response,.sidebar-cta,.bg-lightblue,.gold-band) .btn-primary:hover{
  background:var(--dark-mid);border-color:var(--dark-mid)}

/* ---- Homepage hero figure: the rotating sun, not the Heroes ----
   [5:40] "I do not want them on our homepage." The wheel is twelve practitioner
   portraits, so it cannot serve as the homepage image no matter how brand-y it looks
   on her CURRENT site — that site is the Heroes-era branding she is moving away from.
   She named the replacement herself: [3:00] "The image is right. I see the sun slowly
   rotating on the right." / [42:44] "the sun is beautiful ... bring that brand blue forward". */
.sun-figure{width:min(100%,470px);height:auto;margin:0 auto;display:block;
  animation:sun-spin 180s linear infinite;filter:drop-shadow(0 0 60px rgba(218,162,75,.22))}
@media(prefers-reduced-motion:reduce){.sun-figure{animation:none}}
@media(max-width:1023px){.sun-figure{width:min(72%,330px)}}

/* ---- CTAs: she asked these to POP MORE, [22:19] ----
   "Highlight the color, like, maybe make it a button or increase size. Just something
   that makes it pop a little bit more."
   The brand pass restyled buttons to her futura-pt letterspaced caps but in doing so
   shrank them (weight 700->600, .97->.8rem, btn-sm 47.5px -> 37.5px) — the opposite of
   what she asked. Keep her type voice; give the mass back and then some. */
.btn{font-weight:700;font-size:.9rem;letter-spacing:.1em;padding:17px 34px}
.btn-lg{padding:20px 42px;font-size:1rem}
.btn-sm{padding:14px 26px;font-size:.82rem;letter-spacing:.08em}
.btn-primary{box-shadow:0 6px 18px rgba(218,162,75,.34)}
.btn-primary:hover{box-shadow:0 12px 30px rgba(218,162,75,.48);transform:translateY(-2px)}
/* the gold glow must never bloom over a light-blue or gold field (her rule) */
:is(.stat-bar,.quick-response,.sidebar-cta,.bg-lightblue,.gold-band) .btn-primary,
:is(.stat-bar,.quick-response,.sidebar-cta,.bg-lightblue,.gold-band) .btn-primary:hover{box-shadow:var(--shadow-md)}

/* Her medical/liability disclaimer — verbatim from her live site footer. Legally
   load-bearing for a brand that is explicitly NOT clinical: [34:02] "this could get me
   in really, really big trouble". Quiet by design, but present on every page. */
.footer-disclaimer{border-top:1px solid rgba(255,255,255,.1);padding:22px 0 4px}
.footer-disclaimer p{font-size:.72rem;line-height:1.7;color:rgba(255,255,255,.45);
  font-style:italic;max-width:920px;margin:0 auto;text-align:center}

/* ==========================================================================
   REAL PEOPLE ARE NEVER CROPPED
   The baseline forced `.split-media img{aspect-ratio:4/3;object-fit:cover}`. Every
   Chandler photo is portrait-to-square (0.83–1.06), so a 1.333 box cropped ~21%
   off the top and bottom — it was cutting the top of her head off. These are the
   client's own supplied headshots: show the whole frame, always.
   ========================================================================== */
.split-media img{aspect-ratio:auto;height:auto;object-fit:contain;max-height:none}
.product-visual img{aspect-ratio:auto;height:auto;object-fit:contain;max-height:none}

/* Heroes grid: portraits vary 0.83–1.10, so `cover` clipped some of them. `contain`
   on a fixed box shows every face whole and keeps the grid tidy. */
.hero-card .hc-media{aspect-ratio:1/1.15;background:var(--surface-2)}
.hero-card .hc-media img{object-fit:contain;object-position:center;max-height:none}
.hero-card:hover .hc-media img{transform:none}

/* The global safety net capped content images at 560px and cover-cropped them.
   Exempt the people. */
main img.no-crop,.split-media img,.hero-card .hc-media img{object-fit:contain!important;max-height:none!important}

/* Gold line-art on her navy panels — the same device her live site uses for the
   pillar squares, reused for The Return (compass) and Contact (arrow). */
.pillar-panel{display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:56px 34px;gap:26px;min-height:380px}
.pillar-panel .gold-icon-panel{width:min(58%,210px);height:auto;object-fit:contain;margin:0 auto}
.pillar-panel .script-quote{text-align:center;margin:0}
.pillar-row .pillar-panel{padding:0;min-height:0;display:block}
.wordmark{height:26px;width:auto;margin-bottom:18px;display:block}

/* The Five Truths each carry one of her five gold moon phases — her own motif,
   never repeated, giving each truth a visual anchor. */
.truth-moon{width:54px;height:auto;margin-bottom:16px;display:block;
  filter:drop-shadow(0 2px 12px rgba(218,162,75,.28))}
.truth-line{font-family:var(--font-display);font-style:italic;font-size:1.18rem;
  color:var(--accent-dark);margin-bottom:18px}
.truth-eyebrow{margin-bottom:12px}

/* The Five Truths, built the way her live site builds its pillars: a navy panel with a
   large gold motif + an Asmillione line, alternating against the text. Each truth gets
   a different moon phase, so no visual repeats on the page. */
.truth-row{align-items:center;margin-bottom:8px}
.truth-row .pillar-panel{min-height:340px;padding:48px 30px}
.truth-row .moon-panel{width:min(46%,150px)}
.truth-row .split-body h2{font-size:clamp(1.4rem,2.2vw,1.95rem)}
.truth-row .truth-moon{display:none}
@media(max-width:1023px){.truth-row.reverse .pillar-panel{order:0}}
/* .split.reverse only reorders .split-media; these rows use .pillar-panel, so the
   left/right alternation never fired. */
@media(min-width:1024px){.truth-row.reverse .pillar-panel{order:2}}

/* ===== Quiz invite (homepage CTA band) =====
   Replaces the Healing Roadmap signup form. Sits in the same .cfg-form slot, so it
   inherits the band's card treatment; only the inner content differs. */
.quiz-invite{display:flex;flex-direction:column;align-items:flex-start;text-align:left}
.quiz-invite .qi-icon{width:38px;height:38px;color:var(--accent);margin-bottom:16px}
.quiz-invite h3{font-family:var(--font-display);font-size:1.32rem;line-height:1.3;
  color:var(--text);margin-bottom:20px}
.quiz-invite .qi-list{list-style:none;display:flex;flex-direction:column;gap:11px;
  margin:0 0 26px;width:100%}
.quiz-invite .qi-list li{position:relative;padding-left:28px;color:var(--text-secondary);
  font-size:.97rem;line-height:1.5}
.quiz-invite .qi-list li::before{content:"";position:absolute;left:0;top:.42em;width:9px;height:9px;
  border-radius:50%;background:var(--accent)}
.quiz-invite .btn{width:100%}
