/* ==========================================================================
   build-site BASELINE stylesheet — copy verbatim, then THEME the block below.
   To theme per client, change ONLY: (1) the color tokens, (2) --font-sans, 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. (Reference brand: slate-teal + lime, Manrope.)

   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.
   ========================================================================== */

:root{
  /* --- FONT (themed for GMS Industries): warm, friendly, family-owned register --- */
  --font-sans:'Plus Jakarta Sans',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  /* --- COLOR (GMS Industries — brand red as accent ONLY, warm charcoal darks,
     neutral cream surfaces). Tone-down refresh: the previous palette painted
     every dark band and every cream tint with brand-red, which read as a
     wall-to-wall red site. Red is now reserved for accents (CTAs, eyebrow
     dots, highlights, brand chips, hover states); dark sections are a warm
     charcoal; surfaces are a neutral warm cream. --- */
  --primary:#7A1F2D;
  --primary-dark:#5d1622;
  --primary-darker:#421018;
  --accent:#E63946;
  --accent-dark:#C5293A;
  --secondary:#f3ece2;
  --bg:#FFFFFF;
  --surface:#f8f4ee;
  --surface-2:#ebe4d8;
  --text:#1c1419;
  --text-secondary:#544c4f;
  --text-muted:#6e676a;
  --border:#e6ddd0;
  --border-control:#9a9184; /* 3.05:1 on #fff — form boundaries, WCAG 1.4.11 */
  --dark:#1c1419;
  --dark-mid:#2a2024;
  --dark-soft:#100b0e;
  --white:#fff;
  --radius-sm:6px;
  --radius-md:10px;
  --radius-lg:18px;
  --radius-pill:40px;
  --shadow-sm:0 1px 2px rgba(20,40,46,.06);
  --shadow-md:0 6px 20px rgba(20,40,46,.09);
  --shadow-lg:0 18px 50px rgba(20,40,46,.16);
  --maxw:1200px;
  --header-h:84px;       /* nav bar height — sized for the enlarged logo pill */
  --topbar-h:36px;       /* utility top bar height */
  --header-total:120px;  /* topbar + nav bar — body offset on non-transparent pages */
}

/* ---------- 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(.map-img):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;background:none}
button{cursor:pointer}
h1,h2,h3,h4,h5,h6{font-weight:800;letter-spacing:-.02em;line-height:1.14;color:var(--text)}
h1{font-size:clamp(2.1rem,5vw,3.6rem)}
h2{font-size:clamp(1.7rem,3.4vw,2.5rem)}
h3{font-size:1.3rem}
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-dark);color:#fff;border-color:var(--accent-dark)}
.btn-primary:hover{background:#a81f30;border-color:#a81f30;transform:translateY(-2px);box-shadow:0 10px 24px rgba(230,57,70,.42)}
.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(--dark);color:rgba(255,255,255,.82);font-size:.82rem}
/* Centered as one group (client, Jul 2026): with the location list gone the old
   left tagline / right contact split left a wide dead gap and read lopsided. */
.topbar-inner{display:flex;align-items:center;justify-content:center;gap:20px;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-social svg{width:16px;height:16px}
/* Company tagline sits where the location list used to (removed per client, Jul 2026).
   nowrap + no-shrink: the longer Jul 2026 slogan wrapped to a second line and spilled
   out of the fixed 36px bar. It only appears once the row genuinely fits on one line. */
.topbar-tagline{display:none;align-items:center;letter-spacing:.02em;font-weight:600;color:rgba(255,255,255,.82);white-space:nowrap;flex:0 0 auto}
@media(min-width:1000px){.topbar-tagline{display:inline-flex}}
.header-inner{display:flex;align-items:center;justify-content:space-between;height:var(--header-h)}
.logo{display:flex;align-items:center;gap:10px;flex-shrink:0}
/* The GMS mark is black-on-white artwork, so it can never sit bare on the dark/transparent
   header. It rides in an opaque rounded "pill" that matches the rounded language used
   everywhere else on the site, and the pill is what makes it readable in BOTH header
   states (transparent over the hero, and white once scrolled). Client request, Jul 2026:
   noticeably larger than the old 42px mark. */
.logo-pill{display:inline-flex;align-items:center;background:#fff;border-radius:999px;padding:9px 20px;box-shadow:0 2px 14px rgba(0,0,0,.14);transition:padding .2s,box-shadow .2s}
.logo-img{height:52px;width:auto;display:block}
@media(max-width:1023px){.logo-pill{padding:8px 16px}.logo-img{height:44px}}
@media(max-width:479px){.logo-pill{padding:7px 13px}.logo-img{height:36px}}
/* Optional text wordmark beside the logo. 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}
@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;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;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)}

/* mobile menu */
.mobile-menu{position:fixed;top:var(--header-total);left:0;right:0;bottom:0;background:#fff;z-index:999;transform:translateX(-100%);transition:transform .28s ease;overflow-y:auto;padding:18px 20px 40px}
.mobile-menu.active{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}
.section-header.left{margin-left:0;text-align:left}
.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) ---------- */
.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;filter:saturate(.6) brightness(.50);z-index:0}
.hero-dark::before{content:"";position:absolute;inset:0;background:linear-gradient(120deg,rgba(20,15,18,.82) 0%,rgba(28,20,25,.62) 55%,rgba(122,31,45,.35) 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(255,255,255,.16);color:#fff;font-weight:700;font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;padding:7px 16px;border-radius:var(--radius-pill);margin-bottom:20px;border:1px solid rgba(255,255,255,.22)}
.hero-label svg{width:15px;height:15px}
.hero-dark h1{color:#fff;margin-bottom:18px}
.hero-dark h1 .hl{color:#ff8a93;text-shadow:0 2px 14px rgba(0,0,0,.55)}
.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:0;text-align:center}
@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}
/* Grid items default to min-width:auto, so one long unbreakable string (an email,
   a URL) can push the 1fr track wider than the container and scroll the whole page
   sideways on mobile. min-width:0 lets the track shrink and the text wrap. */
.split>*{min-width:0}
.split-body{overflow-wrap:anywhere}
@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}
.split-body .check-list{margin:20px 0 26px}
.check-list{display:flex;flex-direction:column;gap:12px}
.check-list li{display:block;color:var(--text-secondary)}
.check-list li svg{width:20px;height:20px;color:var(--accent-dark);flex-shrink:0;margin-top:2px}
.check-list li b{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}

/* ---------- 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,11,14,.88) 0%,rgba(28,20,25,.30) 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(230,57,70,.32),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(20,15,18,.92),rgba(42,32,36,.78));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:#d05a4f}
.form-control{width:100%;padding:12px 15px;border:1.5px solid var(--border-control);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(77,108,119,.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}
.form-note{font-size:.8rem;color:var(--text-muted);margin-top:6px}

/* ---------- 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-quote{padding:60px 0;background:rgba(255,255,255,.035);border-bottom:1px solid rgba(255,255,255,.09)}
.fq-inner{display:grid;grid-template-columns:1fr;gap:34px;align-items:start}
@media(min-width:900px){.fq-inner{grid-template-columns:1fr 1.15fr;gap:56px}}
.fq-intro h3{color:#fff;font-size:1.8rem;line-height:1.15;margin:0 0 12px}
.fq-intro p{color:rgba(255,255,255,.72);font-size:.98rem;max-width:46ch}
.fq-contact{display:flex;flex-direction:column;gap:12px;margin-top:22px}
.fq-contact a{display:inline-flex;align-items:center;gap:11px;color:#fff;font-weight:700;font-size:1rem}
.fq-contact a:hover{color:var(--accent)}
.fq-contact svg{width:19px;height:19px;color:var(--accent);flex-shrink:0}
.fq-form-wrap{background:#fff;border-radius:var(--radius-lg);padding:28px 26px;box-shadow:0 18px 46px rgba(0,0,0,.28)}
.fq-form-wrap .form-group{margin-bottom:14px}
.fq-form-wrap .form-note{margin-top:10px;text-align:center}
.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.1fr}}
.footer-logo{height:46px;width:auto;margin-bottom:16px;background:#fff;padding:8px 12px;border-radius:10px}
/* The global `p{color:var(--text-secondary)}` rule beats the footer's inherited light
   colour, which left this paragraph near-black on the near-black footer (2.2:1).
   Force light text for copy inside the dark footer. */
.footer-about{font-size:.92rem;line-height:1.7;margin-bottom:18px;max-width:340px;color:rgba(255,255,255,.78)}
.site-footer p:not(.form-note):not(.fq-intro p){color:rgba(255,255,255,.78)}
.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;flex-wrap:wrap;justify-content:center;gap:10px 18px}
.footer-legal a{white-space:nowrap}

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

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

/* Video hero */
.hero-video .hero-bg-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0;opacity:0;transition:opacity .9s ease;filter:saturate(.9) brightness(.60)}
.hero-video .hero-bg-video.ready{opacity:1}

/* 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(198,231,108,.16),transparent 38%),
             radial-gradient(circle at 82% 72%,rgba(120,200,190,.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(20,40,46,.14),0 0 0 1px rgba(198,231,108,.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(198,231,108,.55),0 8px 22px rgba(174,212,85,.35)}50%{box-shadow:0 0 0 12px rgba(198,231,108,0),0 8px 26px rgba(174,212,85,.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),#7fd0c4)}

/* 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}
/* The track is width:max-content and animates sideways — without clipping here it
   widened the whole document and gave every page a horizontal scrollbar. */
.brand-track-wrap{overflow:hidden}
.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 (light text on every dark surface) ---------- */
.hero-dark .eyebrow,.process .eyebrow,.cta-dark .eyebrow,.cta-band .eyebrow,.section.dark .eyebrow{color:var(--accent);background:rgba(255,255,255,.1)}
.process h2,.process h3,.process h4{color:#fff}
.process .section-header p,.process p{color:rgba(255,255,255,.74)}
.cta-dark h2,.cta-dark h3,.cta-band h2,.cta-band h3{color:#fff}
.sidebar-cta h2,.sidebar-cta h3,.sidebar-cta h4,.quick-response h2,.quick-response h3,.quick-response h4{color:#fff}
.hero-dark h2,.hero-dark h3{color:#fff}

/* ---------- Quote FAB ---------- */
.quote-fab{position:fixed;right:22px;bottom:22px;z-index:1090;display:inline-flex;align-items:center;gap:10px;background:var(--accent-dark);color:#fff;font-weight:800;font-size:.95rem;padding:14px 22px;border-radius:var(--radius-pill);box-shadow:0 10px 30px rgba(20,40,46,.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(20,40,46,.34);animation-play-state:paused}
.quote-fab svg{width:19px;height:19px}
@keyframes fab-breathe{0%,100%{box-shadow:0 10px 30px rgba(20,40,46,.28)}50%{box-shadow:0 10px 30px rgba(174,212,85,.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(20,40,46,.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}

/* ---------- Reveal animation ---------- */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform: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:calc(var(--header-total) + 30px) 0 64px}
  .hero-pad-sm{padding:calc(var(--header-total) + 30px) 0 52px}
  .hero-fullscreen{min-height:auto;padding:calc(var(--header-total) + 30px) 0 64px}
  .footer-top{padding:46px 0 32px}
  .cta-form-grid{gap:34px}
  .stat-grid{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 table,.split-body .compare-table{width:100%;margin:8px 0 22px}
.split-body > * + .btn,.detail-card > * + .btn,.sidebar-cta > * + .btn{margin-top:22px}

/* ==========================================================================
   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}

/* ==========================================================================
   GMS Industries — supplemental component styles (additive; no baseline rules edited)
   These are the pieces the GMS page templates need that the baseline doesn't
   already cover (team grid, locations grid, press feature, brand chip marquee).
   ========================================================================== */

/* --- 2-column check-list for value-bullets blocks --- */
.check-list.check-list-2col{display:grid;grid-template-columns:1fr;gap:14px 36px;max-width:1080px;margin:0 auto}
@media(min-width:768px){.check-list.check-list-2col{grid-template-columns:1fr 1fr}}
.check-list.check-list-2col li{padding-left:32px;position:relative;font-size:1.02rem;color:var(--text-secondary);line-height:1.55}
.check-list.check-list-2col li::before{content:"";position:absolute;left:0;top:9px;width:18px;height:18px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 4px rgba(232,165,58,.18)}
.check-list.check-list-2col li::after{content:"";position:absolute;left:5px;top:13px;width:8px;height:4px;border-left:2px solid var(--text);border-bottom:2px solid var(--text);transform:rotate(-45deg)}

/* --- Brand seal marquee (homepage trust ticker) --- */
.brand-chip{flex:0 0 auto;display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:.93rem;letter-spacing:.01em;background:#fff;color:var(--text);border:1px solid var(--border);border-radius:var(--radius-pill);padding:12px 22px;box-shadow:var(--shadow-sm);white-space:nowrap}
.brand-chip::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent)}

/* --- Team grid --- */
.team-grid{display:grid;grid-template-columns:1fr;gap:32px}
@media(min-width:640px){.team-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.team-grid{grid-template-columns:repeat(3,1fr)}}
.team-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;display:flex;flex-direction:column;transition:transform .25s ease,box-shadow .25s ease}
.team-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
.team-card .ic-media{aspect-ratio:1/1;width:100%;overflow:hidden;background:var(--surface)}
.team-card .ic-media img{width:100%;height:100%;object-fit:cover}
.team-body{padding:22px 24px 26px}
.team-body h3{font-size:1.18rem;margin-bottom:2px}
.team-title{font-size:.86rem;font-weight:700;color:var(--primary);letter-spacing:.01em;margin-bottom:10px}
.team-body p{color:var(--text-secondary);font-size:.94rem;line-height:1.5;margin-bottom:10px}
.team-email{font-size:.88rem;color:var(--primary);font-weight:600;border-bottom:1px solid transparent;transition:border-color .15s ease}
.team-email:hover{border-color:var(--primary)}

/* --- Press feature card --- */
.press-feature{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:42px 42px;box-shadow:var(--shadow-sm);max-width:880px;margin:0 auto;text-align:center}
.press-feature h2{margin-bottom:16px}
.press-feature p{max-width:640px;margin:0 auto 24px}
.pf-eyebrow{margin-bottom:14px}
.press-feature .eyebrow{margin-bottom:0}

/* --- Contact layout (form + sidebar) --- */
.contact-layout{display:grid;grid-template-columns:1fr;gap:36px}
/* align-items:flex-start left a 453x378px hole beside the form once the hours row and
   the quote-turnaround card were removed. Stretch the remaining card instead. */
@media(min-width:1024px){.contact-layout{grid-template-columns:1.6fr 1fr;gap:48px}
  .contact-sidebar{align-self:stretch}
  .contact-sidebar .contact-card{flex:1}}
.contact-form-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:38px 32px;box-shadow:var(--shadow-sm)}
.contact-form-card h2{margin-bottom:8px}
.contact-form-card > p{color:var(--text-secondary);margin-bottom:24px}
.contact-form-card .eyebrow{margin-bottom:14px}
.contact-form-card .cta-form{background:transparent;box-shadow:none;padding:0}
.form-success{display:none;padding:32px;border-radius:var(--radius-md);background:var(--surface);text-align:center}
.form-success.show{display:block}
.fs-ico{width:56px;height:56px;border-radius:50%;background:var(--accent);color:var(--text);margin:0 auto 16px;display:flex;align-items:center;justify-content:center}
.fs-ico svg{width:28px;height:28px}
.form-success h3{margin-bottom:8px}
.req{color:var(--primary);font-weight:700}
.form-note{font-size:.82rem;color:var(--text-muted);margin-top:14px;text-align:center}
.contact-sidebar{display:flex;flex-direction:column;gap:20px}
.contact-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:26px 26px;box-shadow:var(--shadow-sm)}
.contact-card .eyebrow{margin-bottom:8px}
.contact-card h3{font-size:1.32rem;margin-bottom:4px}
.cc-role{color:var(--primary);font-weight:600;font-size:.94rem;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border)}
.contact-row{display:flex;align-items:flex-start;gap:14px;padding:9px 0;font-size:.95rem}
.contact-row .ci-icon{flex:0 0 auto;width:36px;height:36px;border-radius:9px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center}
.contact-row .ci-icon svg{width:16px;height:16px}
.ci-label{font-size:.76rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em}
.ci-val{color:var(--text);font-weight:600;font-size:.97rem}
a.ci-val:hover{color:var(--primary)}
.contact-card-alt{background:linear-gradient(135deg,var(--primary) 0%,var(--primary-dark) 100%);color:#fff}
.contact-card-alt h3{color:#fff}
.contact-card-alt p{color:rgba(255,255,255,.86)}
.contact-card-alt strong{color:var(--accent)}

/* --- Locations grid --- */
.locations-grid{display:grid;grid-template-columns:1fr;gap:32px;margin-bottom:36px}
@media(min-width:768px){.locations-grid{grid-template-columns:1fr;gap:36px}}
.locations-group{}
.locations-group-h{font-size:.78rem;font-weight:800;color:var(--primary);text-transform:uppercase;letter-spacing:.12em;margin-bottom:16px;text-align:center}
.locations-row{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:640px){.locations-row{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.locations-row{grid-template-columns:repeat(3,1fr)}}
.location-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);padding:22px 22px;position:relative;transition:transform .2s ease,box-shadow .2s ease}
.location-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md)}
.location-card h4{font-size:1.05rem;font-weight:700;margin-bottom:4px}
.loc-tag{display:inline-block;font-size:.66rem;font-weight:800;letter-spacing:.1em;padding:4px 10px;border-radius:var(--radius-pill);margin-bottom:10px}
.loc-tag-HQ{background:var(--primary);color:#fff}
.loc-tag-plant{background:var(--accent);color:var(--text)}
.loc-tag-office{background:var(--secondary);color:var(--primary)}
.loc-addr{font-size:.85rem;color:var(--text-muted);line-height:1.5;margin-top:6px}
.locations-map{margin-top:20px;text-align:center;background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:20px;box-shadow:var(--shadow-sm)}
/* The locations map is the only "where we are" element left on the page, so it gets the
   full card width and is never cropped by the global main-img cover rule. */
.locations-map img{max-width:100%;width:100%;height:auto;max-height:none;object-fit:contain;margin:0 auto;border-radius:var(--radius-md)}

/* --- Testimonials grid (override to ensure 3-col on lg) --- */
.testi-grid{display:grid;grid-template-columns:1fr;gap:22px}
@media(min-width:768px){.testi-grid.grid-2{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.testi-grid.grid-3{grid-template-columns:repeat(3,1fr)}}
.testimonial-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:28px 26px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:14px}
.t-stars{display:flex;gap:2px;color:var(--accent)}
.t-stars svg{width:16px;height:16px}
.t-quote{font-size:1.02rem;line-height:1.55;color:var(--text);margin:0}
.t-meta{margin-top:auto;padding-top:14px;border-top:1px solid var(--border)}
.t-name{font-weight:700;color:var(--text);font-size:.96rem}
.t-role{font-size:.83rem;color:var(--text-muted);margin-top:2px}
.t-tenure{color:var(--primary);font-weight:600}

/* --- Process step grid --- */
.process-grid{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:640px){.process-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.process-grid{grid-template-columns:repeat(4,1fr)}}
@media(min-width:1024px){.process-grid.cols-5{grid-template-columns:repeat(5,1fr)}}
.process-step{position:relative;padding:18px 4px}
.ps-num{width:42px;height:42px;border-radius:12px;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.05rem;margin-bottom:18px;box-shadow:0 6px 18px rgba(122,31,45,.4)}
.process-step h3{color:#fff;font-size:1.1rem;margin-bottom:8px}
.process-step p{color:#fff;font-size:.93rem;line-height:1.55}

/* --- FAQ section / accordion polish --- */
.faq-section{}
.faq-list{max-width:880px;margin:0 auto;display:flex;flex-direction:column;gap:10px}
.faq-item{background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);overflow:hidden;transition:box-shadow .2s ease}
.faq-item:hover{box-shadow:var(--shadow-sm)}
.faq-question{width:100%;padding:18px 22px;display:flex;justify-content:space-between;align-items:center;gap:16px;cursor:pointer;background:transparent;text-align:left;font-weight:700;font-size:1.02rem;color:var(--text)}
.faq-ico{flex-shrink:0;color:var(--primary);transition:transform .25s ease;width:18px;height:18px}
.faq-item.active .faq-ico{transform:rotate(180deg)}
.faq-answer{max-height:0;overflow:hidden;transition:max-height .35s ease}
.faq-answer-inner{padding:0 22px 20px;color:var(--text-secondary);line-height:1.6}
.faq-answer-inner p{margin:0}

/* --- Detail grid (product detail page) --- */
.detail-grid{display:grid;grid-template-columns:1fr;gap:32px}
@media(min-width:1024px){.detail-grid{grid-template-columns:1.5fr 1fr;gap:40px;align-items:flex-start}}
.detail-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:38px 36px;box-shadow:var(--shadow-sm)}
.detail-card h2{font-size:1.4rem;margin-bottom:18px}
.detail-card .mt-3{margin-top:30px}
.feature-list{display:flex;flex-direction:column;gap:11px;margin-bottom:6px}
.feature-list li{display:flex;align-items:flex-start;gap:12px;font-size:.97rem;color:var(--text-secondary);line-height:1.55}
.feature-list .check-ico{flex:0 0 24px;width:24px;height:24px;border-radius:50%;background:var(--accent);color:var(--text);display:flex;align-items:center;justify-content:center;margin-top:1px}
.feature-list .check-ico svg{width:13px;height:13px}
.applications-list{display:flex;flex-direction:column;gap:8px}
.applications-list li{display:flex;align-items:center;gap:12px;font-size:.97rem;color:var(--text-secondary)}
.applications-list .dot{width:7px;height:7px;border-radius:50%;background:var(--primary);flex:0 0 7px}
.needs-input-note{margin-top:14px;font-size:.85rem;color:var(--text-muted);font-style:italic}

/* --- Sidebar CTA (sticky on lg) --- */
.sidebar-cta{background:linear-gradient(165deg,var(--dark) 0%,var(--dark-mid) 100%);color:#fff;border-radius:var(--radius-lg);padding:32px 28px;box-shadow:var(--shadow-md);position:relative}
@media(min-width:1024px){.sidebar-cta{position:sticky;top:calc(var(--header-total) + 20px)}}
.sidebar-cta h3{color:#fff;font-size:1.3rem;margin-bottom:10px}
.sidebar-cta p{color:rgba(255,255,255,.78);margin-bottom:18px;font-size:.95rem;line-height:1.5}
.sc-divider{height:1px;background:rgba(255,255,255,.12);margin:18px 0 16px}
.sc-or{font-size:.85rem;color:rgba(255,255,255,.62);text-transform:uppercase;letter-spacing:.1em;text-align:center;margin-bottom:10px}
.sc-trust{margin-top:20px;padding-top:18px;border-top:1px solid rgba(255,255,255,.1);font-size:.85rem;color:rgba(255,255,255,.78);text-align:center}
.sidebar-cta .sc-trust strong{color:#FF8A93;font-weight:700}
.sidebar-cta .btn-outline{color:#fff;border-color:rgba(255,255,255,.55)}

/* --- Leadership bios (About) ---
   Text-only cards: the client asked for the owner photographs to be removed, so the
   bios carry the section on their own. */
.bio-grid{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:900px){.bio-grid{grid-template-columns:1fr 1fr;gap:30px}}
.bio-card{background:#fff;border:1px solid var(--border);border-left:4px solid var(--primary);border-radius:var(--radius-md);padding:30px 28px;box-shadow:var(--shadow-sm)}
.bio-card h3{font-size:1.35rem;margin-bottom:4px}
.bio-card .team-title{font-weight:700;font-size:.9rem;color:var(--primary);letter-spacing:.02em;margin-bottom:14px}
.bio-card p{font-size:.95rem;line-height:1.75;color:var(--text-secondary)}
.bio-card p+p{margin-top:13px}

/* --- Client-supplied home banner ---
   Dense artwork with small baked-in type. It must never be cropped by the global
   main-img cover rule, and on narrow screens it scrolls sideways rather than
   shrinking its text into illegibility. */
.home-banner{padding:34px 0 6px}
.home-banner-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--radius-md);box-shadow:var(--shadow-md)}
.home-banner-img{display:block;width:100%;height:auto;max-height:none;object-fit:contain;border-radius:var(--radius-md)}
@media(max-width:719px){.home-banner-img{width:720px;max-width:none}}

/* --- Hero product line (under the hero sub) --- */
.hero-products{margin-top:10px;margin-bottom:22px;font-weight:700;font-size:clamp(.9rem,1.6vw,1.02rem);letter-spacing:.01em;color:rgba(255,255,255,.9)}
.hero-products span{color:var(--accent);margin:0 2px}

/* --- Hero ticker (homepage) --- */
.hero-ticker{display:grid;grid-template-columns:repeat(2,1fr);gap:24px;margin-top:38px;padding-top:28px;border-top:1px solid rgba(255,255,255,.14);max-width:560px}
@media(min-width:640px){.hero-ticker{grid-template-columns:repeat(4,1fr);max-width:none}}
@media(min-width:640px){.hero-ticker-3{grid-template-columns:repeat(3,1fr);max-width:660px}}
.ht-num{font-size:clamp(1.8rem,3.6vw,2.4rem);font-weight:800;color:var(--accent);line-height:1;margin-bottom:4px}
.ht-label{font-size:.78rem;font-weight:600;color:rgba(255,255,255,.7);letter-spacing:.04em;line-height:1.3}

/* --- Hero highlight word --- */
.hero-dark .hl{color:var(--accent);position:relative;display:inline}

/* --- Logo size in header — enlarged per client, see .logo-pill above --- */
.logo-img{height:52px;width:auto;max-width:230px}
@media(max-width:1023px){.logo-img{height:44px}}
@media(max-width:479px){.logo-img{height:36px}}
.footer-logo{background:#fff;padding:11px 18px;border-radius:999px;display:inline-block;width:212px;max-width:100%;height:auto;max-height:none;object-fit:contain;margin-bottom:18px}

/* --- Press feature button overrides --- */
.press-feature .btn svg{margin-left:4px}

/* --- Form spacing tweak --- */
.cta-form .form-row{margin-bottom:14px}
.cta-form .form-group{margin-bottom:14px}

/* --- Section header: support .label-below being centered always --- */
.section-header.label-below{align-items:center}

/* --- CTA band CTA-content alignment --- */
.cta-band .cta-content{text-align:center;max-width:780px;margin:0 auto;position:relative;z-index:2}
.cta-band .cta-content h2{color:#fff;margin-bottom:14px}
.cta-band .cta-content p{color:rgba(255,255,255,.86);margin-bottom:24px}
.cta-band .cta-buttons{display:flex;justify-content:center;gap:14px;flex-wrap:wrap}


/* --- Footer cert/trust badges (GSA, Women-Owned, Family-Owned) --- */
.footer-badges{display:flex;flex-direction:column;gap:10px;margin:18px 0;max-width:340px}
/* Official GSA marks: supplied as JPEGs on white, so each sits on its own
   white pill rather than floating as a bare rectangle on the dark footer. */
.footer-gsa{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin:18px 0;max-width:340px}
.footer-gsa img{display:block;height:auto;background:#fff;border-radius:10px;padding:7px 10px;width:auto;max-width:100%;max-height:none;object-fit:contain}
.footer-gsa a{display:inline-flex;border-radius:10px}
.footer-gsa a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Same marks in page body (light background) — no pill needed, just sizing. */
.gsa-marks{display:flex;flex-wrap:wrap;align-items:center;gap:18px;margin:22px 0 10px}
.gsa-marks img{display:block;height:auto;width:auto;max-width:100%;max-height:52px;object-fit:contain}
.gsa-marks a{display:inline-flex}
.gsa-marks a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.gsa-contract-no{font-size:.9rem;letter-spacing:.02em;margin-bottom:18px}
.gsa-contract-no strong{font-weight:800}
.footer-badge{display:inline-flex;align-items:center;gap:12px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.12);border-radius:12px;padding:10px 14px;color:rgba(255,255,255,.88)}
.footer-badge .fb-ico{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.16);color:#fff;flex-shrink:0}
.footer-badge .fb-ico svg{width:20px;height:20px}
.footer-badge .fb-text{font-size:.84rem;line-height:1.35}
.footer-badge .fb-text b{font-weight:800;color:#fff;letter-spacing:.02em}
.footer-badge .fb-text span{color:rgba(255,255,255,.65);font-size:.78rem}

/* --- Inline trust strip used on homepage / section hero contexts --- */
.trust-strip{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center;justify-content:flex-start;margin-top:18px}
.hero-content.center .trust-strip{justify-content:center}
.trust-strip .ts-badge{display:inline-flex;align-items:center;gap:8px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);color:#fff;padding:8px 14px;border-radius:999px;font-weight:700;font-size:.82rem;letter-spacing:.04em}
.trust-strip .ts-badge svg{width:16px;height:16px;color:var(--accent)}
.section.surface .trust-strip .ts-badge,.section:not(.dark):not(.hero-dark) .trust-strip .ts-badge{background:#fff;color:var(--text);border-color:var(--border);box-shadow:var(--shadow-sm)}
.section.surface .trust-strip .ts-badge svg,.section:not(.dark):not(.hero-dark) .trust-strip .ts-badge svg{color:var(--primary)}

/* --- Big trust-marker tile grid (used on government / homepage credibility section) --- */
.trust-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px;margin-top:8px}
.trust-tile{display:flex;flex-direction:column;align-items:flex-start;gap:10px;padding:22px;border-radius:16px;background:#fff;border:1px solid var(--border);box-shadow:var(--shadow-sm)}
.trust-tile .tt-ico{display:inline-flex;align-items:center;justify-content:center;width:48px;height:48px;border-radius:12px;background:var(--secondary);color:var(--primary)}
.trust-tile .tt-ico svg{width:24px;height:24px}
.trust-tile h3{font-size:1.05rem;margin:0;line-height:1.25}
.trust-tile p{font-size:.92rem;color:var(--muted);margin:0}
.section.dark .trust-tile{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.12);color:#fff}
.section.dark .trust-tile h3{color:#fff}
.section.dark .trust-tile p{color:rgba(255,255,255,.78)}
.section.dark .trust-tile .tt-ico{background:rgba(255,255,255,.18);color:#fff}

/* ===========================================================================
   BRAND COLOR REFRESH — toned-down palette (June 2026 update)
   Customer feedback: previous palette was too much red. Dark bands now use a
   warm charcoal so red can stay reserved for accents (CTAs, highlight words,
   chip dots, hover states). Red is preserved on small elements; it just no
   longer paints every dark surface.
   =========================================================================== */
.section.dark{
  background:linear-gradient(135deg,var(--dark) 0%,var(--dark-mid) 100%);
}
.process{
  background:linear-gradient(160deg,var(--dark-mid) 0%,var(--dark) 100%);
}
.hero-dark{
  background:linear-gradient(135deg,var(--dark) 0%,var(--dark-soft) 100%);
}
/* Highlighted-word color in the dark hero — warm coral so the brand red still
   reads inside the headline without the whole hero turning red. */
.hero-dark h1 .hl{color:#ff8a93;text-shadow:0 2px 14px rgba(0,0,0,.45)}
.section.dark .section-header h2::after,
.process .section-header h2::after{background:linear-gradient(90deg,var(--accent),#ffb8a8)}
/* Process step numbers and svg color tints */
.process-num,.ps-num{border-color:var(--accent);color:#fff}
.ps-num{background:var(--accent);box-shadow:0 6px 18px rgba(28,20,25,.4)}
.section.dark .stat-num{color:#fff}
.section.dark .stat-num .text-accent{color:var(--accent)}
.hero-ticker .ht-num .text-accent{color:var(--accent)}
.trust-strip .ts-badge svg{color:var(--accent)}
/* CTA-band overlay is now a charcoal wash — keep the white text readable */
.cta-band .cta-content p{color:rgba(255,255,255,.92)}
.cta-band .btn-outline{border-color:rgba(255,255,255,.7)}
/* About page owner team grid — two cards, side-by-side at all but the smallest sizes */
.team-grid--owners{display:grid;grid-template-columns:1fr;gap:32px;max-width:880px;margin:0 auto}
@media(min-width:640px){.team-grid--owners{grid-template-columns:repeat(2,1fr)}}
/* Brand-marquee chips keep the small brand-red dot — that's one of the "some
   elements" of red we want to preserve. */
.brand-chip::before{background:var(--accent)}
/* Eyebrow chips keep the small brand-red dot */
.eyebrow::before{background:var(--accent)}
/* CTA-dark band gets a charcoal background with a brand-red glow on top so
   the section still feels branded without being a solid red wall. */
.cta-dark{background:linear-gradient(135deg,var(--dark) 0%,var(--dark-mid) 100%)}
.cta-dark::before{background:radial-gradient(circle,rgba(230,57,70,.28),transparent 70%)}

/* ==========================================================================
   QC FIX PASS — July 2026
   Appended LAST on purpose: this stylesheet has several duplicated rules where a
   later declaration silently beats an earlier one, so additive fixes live here
   rather than fighting specificity upstream.
   ========================================================================== */

/* --- Header fit: .header-actions was escaping the container gutter and the CTA
       was sliced off-screen at 1024 (42px overflow). The nav absorbs the squeeze. --- */
.header-inner{gap:12px}
.desktop-nav{min-width:0}
.header-actions{flex:0 0 auto}
@media(min-width:1024px) and (max-width:1279px){
  .desktop-nav{gap:0}
  .site-header .nav-link{padding-left:9px;padding-right:9px;font-size:.9rem}
  .header-actions{gap:10px}
  .header-actions .btn.btn-sm{padding:10px 16px;font-size:.88rem;white-space:nowrap}
}
@media(min-width:1280px){
  .header-actions{gap:12px}
  .site-header .nav-link{padding-left:12px;padding-right:12px}
}

/* --- Focus visibility (WCAG 2.4.7). Last in the file so .btn/.quote-fab can't win. --- */
:focus:not(:focus-visible){outline:none}
:focus-visible{outline:3px solid var(--accent-dark);outline-offset:2px}
.btn:focus-visible,.quote-fab:focus-visible,.logo:focus-visible{
  outline:none;box-shadow:0 0 0 3px #fff,0 0 0 6px var(--accent-dark)}
.site-footer :focus-visible,.hero-dark :focus-visible,.cta-band :focus-visible,
.section.dark :focus-visible,.header-transparent :focus-visible,.modal :focus-visible{
  outline-color:#fff}
.header-transparent .btn:focus-visible,.hero-dark .btn:focus-visible,
.cta-band .btn:focus-visible,.quote-fab:focus-visible{
  box-shadow:0 0 0 3px rgba(20,40,46,.85),0 0 0 6px #fff}
.form-control:focus-visible{outline:none}
.form-success:focus,.modal-success:focus{outline:none}

/* --- Mobile drawer: belt-and-braces behind the JS inert toggle --- */
.mobile-menu{visibility:hidden;transition:transform .28s ease, visibility 0s linear .28s}
.mobile-menu.active{visibility:visible;transition:transform .28s ease, visibility 0s linear 0s}
@media(min-width:1024px){.mobile-menu{display:none}}

/* --- Skip link (WCAG 2.4.1) --- */
.skip-link{position:absolute;left:-9999px;top:0;z-index:2000;background:var(--primary);color:#fff;
  padding:12px 20px;border-radius:0 0 var(--radius-sm) var(--radius-sm);font-weight:700}
.skip-link:focus{left:0}
main:focus{outline:none}

/* --- 3-item stat bands: the 4-col track left a 288px empty column --- */
.stat-grid-3{grid-template-columns:1fr}
@media(min-width:768px){.stat-grid-3{grid-template-columns:repeat(3,1fr)}}

/* --- Testimonials were one full-width column across the whole tablet range --- */
@media(min-width:768px){.testi-grid.grid-3{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.testi-grid.grid-3{grid-template-columns:repeat(3,1fr)}}

/* --- Eyebrow chip was flowing onto the same line as its h2 (inline-flex + inline-block) --- */
.section-header > .eyebrow{display:flex;width:fit-content;margin-left:auto;margin-right:auto;margin-bottom:16px}
.section-header.left > .eyebrow,.section-header.text-left > .eyebrow{margin-left:0;margin-right:auto}
.section-header.label-below > .eyebrow{margin:0}

/* --- Hero eyebrow pill: rgba(255,255,255,.16) let the photo through, so white text on
       it measured 3.8–4.2:1 over bright heroes. A dark, mostly-opaque fill makes the pill
       carry its own contrast instead of depending on whatever is behind it. --- */
.hero-label{background:rgba(18,12,15,.72);border-color:rgba(255,255,255,.30);
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}

/* --- Hero eyebrow pill wrapped to 3 lines at 390 and rendered as a giant capsule --- */
@media(max-width:640px){
  .hero-label{border-radius:12px;line-height:1.45;padding:8px 13px;font-size:.72rem;letter-spacing:.07em}
}
/* --- Third hero stat was orphaned in a 2-col grid. Must come after the .hero-ticker
       rules above, which already killed an earlier max-width:639 override. --- */
@media(max-width:639px){
  .hero-ticker.hero-ticker-3{grid-template-columns:repeat(3,1fr);gap:12px;max-width:100%}
  .hero-ticker.hero-ticker-3 .ht-num{font-size:1.35rem}
  .hero-ticker.hero-ticker-3 .ht-label{font-size:.66rem;letter-spacing:.02em}
}
@media(max-width:479px){
  .hero-ticker.hero-ticker-3{grid-template-columns:1fr;gap:16px}
}

/* --- Display-type orphans: single words stranded on their own line --- */
.cta-band .cta-content h2,
.hero-dark .hero-content h1,
.section-header h2,
.split-body h2{text-wrap:balance}

/* --- Small-viewport reflow (WCAG 1.4.10): topbar overflowed 30px at 320 --- */
@media(max-width:479px){
  .topbar-inner,.topbar .topbar-right{flex-wrap:wrap;justify-content:center;row-gap:4px}
  .topbar-inner{height:auto;min-height:36px;padding:5px 0}
  .topbar{font-size:.74rem}
  .topbar .topbar-right{gap:10px;min-width:0}
  .topbar svg{width:12px;height:12px}
  .topbar-right a{min-width:0;overflow-wrap:anywhere;max-width:100%}
}

/* --- Home banner scroller: make it discoverable and keyboard-operable --- */
.home-banner-scroll{position:relative;scrollbar-width:thin}
.home-banner-scroll:focus-visible{outline:3px solid var(--accent-dark);outline-offset:2px}
@media(max-width:719px){
  .home-banner{position:relative}
  .home-banner::after{content:"";position:absolute;top:0;right:0;bottom:0;width:28px;pointer-events:none;
    background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.9))}
}

/* --- Contact form note was centred under a left-aligned form --- */
.contact-form-card .form-note{text-align:left}
/* Grid items default to min-width:auto, so the form card's min-content width pushed the
   track 1.6px past the container at 320 and scrolled the page sideways. */
.contact-layout>*{min-width:0}

/* --- Nav dropdowns were hover-only (all 22 sub-links keyboard-unreachable) and had a
       6px dead band between trigger and panel that dismissed the menu mid-travel. --- */
.nav-dropdown:hover .dropdown-menu,
.nav-dropdown:focus-within .dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}
.nav-dropdown:hover .nav-link svg,
.nav-dropdown:focus-within .nav-link svg{transform:rotate(180deg)}
.nav-dropdown::after{content:"";position:absolute;left:0;right:0;top:100%;height:8px}

/* --- Hero video pause control (WCAG 2.2.2) --- */
.hero-video-toggle{position:absolute;right:18px;bottom:18px;z-index:6;
  width:42px;height:42px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.55);color:#fff;border:1px solid rgba(255,255,255,.35);cursor:pointer}
.hero-video-toggle svg{width:18px;height:18px}
.hero-video-toggle:hover{background:rgba(0,0,0,.75)}
@media print{.hero-video-toggle{display:none}}

/* Visually hidden — text that must exist for assistive tech and for crawlers judging link
   quality ("Learn more" alone is not descriptive), without altering the visual design. */
.vh{position:absolute!important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
