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

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

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

:root{
  /* --- FONT: Plus Jakarta Sans body + Space Grotesk display --- */
  --font-sans:'Plus Jakarta Sans',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --font-display:'Space Grotesk',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  /* --- COLOR: Surface Solutions — bold red, near-black, precision-industrial --- */
  --primary:#C91A1A;
  --primary-dark:#A31414;
  --primary-darker:#7d0f0f;
  --accent:#E53030;
  --accent-dark:#C91A1A;
  /* --- CTA: distinct filled blue for conversion buttons (per homepage brief) ---
     The red above is the BRAND (eyebrows, links, swatches, cards). Quote / primary
     conversion CTAs use this blue so they visually pop against the brand. */
  --cta:#1568D4;
  --cta-dark:#0F4FA8;
  --cta-shadow:rgba(21,104,212,.30);
  --cta-shadow-strong:rgba(21,104,212,.42);
  --secondary:#f7f0f0;
  --bg:#FFFFFF;
  --surface:#faf7f7;
  --surface-2:#f2eaea;
  --text:#181818;
  --text-secondary:#444444;
  --text-muted:#787878;
  --border:#e6dede;
  --dark:#111111;
  --dark-mid:#1c1c1c;
  --dark-soft:#282828;
  --white:#fff;
  /* SHARP radius — precision tooling / industrial archetype */
  --radius-sm:3px;
  --radius-md:5px;
  --radius-lg:8px;
  --radius-pill:4px;
  --shadow-sm:0 1px 2px rgba(0,0,0,.09);
  --shadow-md:0 6px 20px rgba(0,0,0,.14);
  --shadow-lg:0 18px 50px rgba(0,0,0,.24);
  --maxw:1200px;
  --header-h:72px;       /* nav bar height */
  --topbar-h:36px;       /* utility top bar height */
  --header-total:108px;  /* 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([class*="-bg"]):not(.chart-img){max-height:560px;object-fit:cover}
a{color:inherit;text-decoration:none}
ul,ol{list-style:none}
button,input,select,textarea{font:inherit;color:inherit;border:none;outline:none;background:none}
button{cursor:pointer}
h1,h2,h3,h4,h5,h6{font-family:var(--font-display);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(--cta);color:#fff;border-color:var(--cta);box-shadow:0 4px 12px var(--cta-shadow)}
.btn-primary:hover{background:var(--cta-dark);border-color:var(--cta-dark);transform:translateY(-2px);box-shadow:0 10px 24px var(--cta-shadow-strong)}
.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)}
/* Anchor targets (#glossary, #faq, …) must clear the fixed header, or the
   section lands with its eyebrow/heading buried under the frosted bar. */
[id]{scroll-margin-top:calc(var(--header-total) + 24px)}
.topbar{background:var(--primary-darker);color:rgba(255,255,255,.82);font-size:.82rem}
.topbar-inner{display:flex;align-items:center;justify-content:space-between;gap:16px;height:36px}
.topbar a{color:rgba(255,255,255,.82);display:inline-flex;align-items:center;gap:6px;transition:color .15s}
.topbar a:hover{color:var(--accent)}
.topbar svg{width:14px;height:14px}
.topbar-right{display:flex;gap:20px;align-items:center}
.topbar-hours{display:none;align-items:center;gap:6px;color:rgba(255,255,255,.82)}
.topbar .topbar-loc{display:none}
@media(min-width:768px){.topbar .topbar-loc{display:inline-flex}.topbar-hours{display:inline-flex}}
/* white-space:nowrap on the bar INHERITS to every text descendant, so no header item
   (logo wordmark, nav link, phone, CTA — even one added later) can ever wrap to a 2nd/3rd
   line. If items then exceed the width they overflow horizontally, and initHeaderFit sheds
   them / collapses to the hamburger. Dropdown + mobile panels reset to normal wrapping. */
.header-inner{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:nowrap;white-space:nowrap;height:var(--header-h)}
.dropdown-menu,.mobile-menu{white-space:normal}
.logo{display:flex;align-items:center;gap:10px;flex-shrink:0;max-width:min(46vw,240px)}
/* The logo is CAPPED in both axes so a large/wide brand mark can never push the nav to a
   second line. A tall or wide source logo is scaled down (object-fit:contain), not allowed
   to dictate the header width. */
/* The brand logo PNG is light/white on transparent — invisible on the default white header.
   Invert it by default so it reads dark on white, then turn the filter OFF only when the
   header is the transparent variant sitting over the dark hero (where the white logo is
   meant to stay white). */
.logo-img{height:42px;width:auto;max-width:200px;object-fit:contain;filter:invert(1) brightness(.85)}
/* Text wordmark beside the logo — FORBIDDEN unless the logo is a bare icon/monogram with
   no legible name, attested with data-icon-only-logo="true" on the .logo anchor (the QA
   probe blocks any unattested text beside the logo: the name-written-twice defect). MUST
   be styled (never let it inherit the dark body --text, or it goes dark-on-dark over the
   transparent hero header — a real defect). Color flips with the header state below. */
.logo-wordmark{font-weight:800;font-size:1.12rem;letter-spacing:-.02em;line-height:1.06;color:var(--text);white-space:nowrap}
.logo-wordmark-sub{display:block;font-weight:600;font-size:.68rem;letter-spacing:.01em;text-transform:none;color:var(--text-muted)}
.desktop-nav{display:none;align-items:center;gap:6px;flex-wrap:nowrap}
@media(min-width:1024px){.desktop-nav{display:flex}}
.nav-link{display:inline-flex;align-items:center;gap:5px;padding:9px 14px;font-weight:600;font-size:.95rem;white-space:nowrap;color:var(--text);border-radius:var(--radius-sm);transition:color .15s,background .15s}
.nav-link:hover{color:var(--primary);background:var(--surface)}
.nav-link svg{width:14px;height:14px;transition:transform .2s}
.nav-dropdown{position:relative}
.nav-dropdown:hover .nav-link svg{transform:rotate(180deg)}
.dropdown-menu{position:absolute;top:calc(100% + 6px);left:0;min-width:480px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:14px;opacity:0;visibility:hidden;transform:translateY(8px);transition:all .2s ease;display:grid;grid-template-columns:1fr 1fr;gap:4px}
.dropdown-menu.single-col{grid-template-columns:1fr;min-width:260px}
.nav-dropdown:hover .dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}
.dropdown-item{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:var(--radius-sm);transition:background .15s}
.dropdown-item:hover{background:var(--surface)}
.dropdown-item .di-title{font-weight:700;font-size:.92rem;color:var(--text);display:flex;align-items:center;gap:8px}
.dropdown-item .di-title svg{width:16px;height:16px;color:var(--primary)}
.dropdown-item .di-sub{font-size:.8rem;color:var(--text-muted);padding-left:24px}
.dropdown-foot{grid-column:1/-1;margin-top:6px;padding:10px 12px;border-top:1px solid var(--border);font-weight:700;font-size:.88rem;color:var(--primary);display:flex;align-items:center;gap:6px}
.dropdown-foot svg{width:15px;height:15px}
/* mega menu (Our Services) */
.dropdown-menu.mega{min-width:560px}
.mega-col{padding:10px 12px}
.mega-col .mc-head{display:flex;align-items:center;gap:9px;font-weight:800;font-size:.92rem;color:var(--text);margin-bottom:9px;border-radius:var(--radius-sm)}
.mega-col .mc-head .mc-ico{width:30px;height:30px;border-radius:8px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mega-col .mc-head .mc-ico svg{width:16px;height:16px}
.mega-col .mc-head:hover{color:var(--primary)}
.mega-col .mc-links{display:flex;flex-direction:column;gap:2px}
.mega-col .mc-links a{font-size:.85rem;color:var(--text-secondary);padding:5px 8px 5px 39px;border-radius:var(--radius-sm);transition:background .15s,color .15s}
.mega-col .mc-links a:hover{background:var(--surface);color:var(--primary)}
.header-actions{display:none;align-items:center;gap:14px}
@media(min-width:1024px){.header-actions{display:flex}}
.header-phone{display:none;align-items:center;gap:7px;font-weight:700;white-space:nowrap;color:var(--text);font-size:.95rem}
.header-phone svg{width:17px;height:17px;color:var(--primary)}
@media(min-width:1200px){.header-phone{display:inline-flex}}
.mobile-toggle{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:var(--radius-sm);color:var(--text)}
.mobile-toggle svg{width:26px;height:26px}
@media(min-width:1024px){.mobile-toggle{display:none}}

/* transparent header over dark hero */
.header-transparent{background:transparent;border-bottom-color:transparent}
.header-transparent .nav-link,.header-transparent .header-phone{color:#fff}
.header-transparent .nav-link:hover{background:rgba(255,255,255,.12);color:#fff}
.header-transparent .header-phone svg{color:var(--accent)}
.header-transparent .mobile-toggle{color:#fff}
.header-transparent .logo-wordmark{color:#fff}
.header-transparent .logo-wordmark-sub{color:rgba(255,255,255,.78)}
/* Over the dark hero the header is transparent and the white-on-transparent logo is
   already legible — turn off the default invert so it stays white. .header-scrolled
   below re-applies the invert once the bar fades back to white on scroll. */
.header-transparent .logo-img{filter:none}
.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 has faded to white on scroll — re-apply the invert so the white-source logo
   reads dark against the white bar (otherwise it disappears). */
.header-scrolled .logo-img{filter:invert(1) brightness(.85)}
.header-scrolled .logo-wordmark{color:var(--text)}
.header-scrolled .logo-wordmark-sub{color:var(--text-muted)}

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

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

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

/* mobile menu */

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

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

/* ---------- Hero (dark) ---------- */
.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(.62);z-index:0}
.hero-dark::before{content:"";position:absolute;inset:0;background:linear-gradient(120deg,rgba(17,17,17,.92) 0%,rgba(17,17,17,.72) 45%,rgba(28,28,28,.55) 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:72vh;display:flex;flex-direction:column;justify-content:center;padding:130px 0 72px}
.hero-video.hero-fullscreen{padding:96px 0 56px}
.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(198,231,108,.16);color:var(--accent);font-weight:700;font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;padding:7px 16px;border-radius:var(--radius-pill);margin-bottom:20px}
.hero-label svg{width:15px;height:15px}
.hero-dark h1{color:#fff;margin-bottom:18px}
.hero-dark h1 .hl{color:var(--accent)}
.hero-sub{font-size:1.18rem;color:rgba(255,255,255,.82);max-width:600px;margin-bottom:30px}
.hero-content.center .hero-sub{margin-left:auto;margin-right:auto}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px}
.hero-content.center .hero-actions{justify-content:center}
.hero-trust{display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:26px;font-size:.9rem;color:rgba(255,255,255,.8)}
.hero-trust span{display:inline-flex;align-items:center;gap:8px}
.hero-trust svg{width:17px;height:17px;color:var(--accent)}

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

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

/* ---------- Stat bar ---------- */
.stat-bar{background:var(--primary);color:#fff}
.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:30px 16px;padding:48px 0}
@media(min-width:768px){.stat-grid{grid-template-columns:repeat(4,1fr)}}
.stat-item{text-align:center}
.stat-num{font-size:clamp(2rem,4vw,2.8rem);font-weight:800;line-height:1;color:var(--dark)}
.stat-num .text-accent{color:var(--accent)}
.stat-label{font-size:.9rem;color:var(--text-muted);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:44px;height:44px;border-radius:50%;border:1px solid var(--border);background:#fff;color:var(--text);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;transition:background .18s,color .18s,border-color .18s}
.cc-nav button:hover{background:var(--primary);color:#fff;border-color:transparent}
.cc-nav button svg{width:18px;height:18px}
.cc-nav button[disabled]{opacity:.35;cursor:default;pointer-events:none}

/* ---------- Split section ---------- */
.split{display:grid;grid-template-columns:1fr;gap:40px;align-items:center}
@media(min-width:1024px){.split{grid-template-columns:1fr 1fr;gap:64px}.split.reverse .split-media{order:2}}
.split-media{position:relative}
/* Framed photo treatment: a tinted panel offset behind the image plus a brand
   corner bracket, so section-2 photos read as designed plates instead of bare
   rectangles. The panel copies the image's enforced 4/3 ratio so it always
   lines up, on every coatings / industries page, without any HTML change. */
.split-media::before{content:"";position:absolute;top:16px;left:16px;width:100%;aspect-ratio:4/3;border-radius:var(--radius-lg);background:linear-gradient(135deg,var(--surface-2) 0%,var(--secondary) 100%);z-index:0}
.split-media::after{content:"";position:absolute;top:-10px;left:-10px;width:48px;height:48px;border-top:3px solid var(--primary);border-left:3px solid var(--primary);border-radius:var(--radius-sm) 0 0 0;z-index:2;pointer-events:none}
.split-media img{position:relative;z-index:1;width:100%;height:auto;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);aspect-ratio:4/3;object-fit:cover;transition:box-shadow .35s ease,transform .45s cubic-bezier(.22,.61,.36,1)}
.split-media:hover img{box-shadow:var(--shadow-lg);transform:translate(-3px,-3px)}
@media(prefers-reduced-motion:reduce){.split-media:hover img{transform:none}}
.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}
.media-caption{position:relative;z-index:1;margin-top:26px;padding:10px 16px;font-size:.9rem;color:var(--text-secondary);line-height:1.55;text-align:left;background:var(--bg);border-left:3px solid var(--primary);border-radius:0 var(--radius-sm) var(--radius-sm) 0;box-shadow:var(--shadow-sm)}
.split + .grid-3,.split + .grid-4{margin-top:56px}
/* Coating pages: spec panel rendered as 2x2 tiles beside the photo */
.split-body .coating-spec-panel{grid-template-columns:repeat(2,1fr);gap:14px;margin-top:0;padding:0;border:none;background:transparent}
.split-body .coating-spec-item{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);padding:18px 20px}
/* odd trailing tile (e.g. Alpha's 5th spec) spans the row instead of leaving a hole */
.split-body .coating-spec-item.span-2{grid-column:1/-1}
.split-body .spec-note{margin-top:18px;font-size:.95rem;color:var(--text-secondary)}
@media(max-width:520px){.split-body .coating-spec-panel{grid-template-columns:1fr}}
.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;list-style:none}
/* The <li> is NORMAL FLOW, never a flex container — so inline content (text mixed with
   <strong>/<a>/<em>) flows as one sentence and can NEVER fragment into mis-sized columns
   (the real "Up / to | 15%… | from…" defect: a flex <li> turns each text node + inline
   element into a separate flex item). The check marker is an absolutely-positioned ::before
   disc + tick; an authored leading <svg> becomes the marker instead and suppresses it. */
.check-list li{position:relative;padding-left:30px;color:var(--text-secondary)}
.check-list li::before{content:"";position:absolute;left:0;top:.3em;width:19px;height:19px;border-radius:50%;background:var(--secondary)}
.check-list li::after{content:"";position:absolute;left:6.5px;top:.5em;width:5px;height:9px;border:solid var(--accent-dark);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.check-list li:has(> svg:first-child)::before,.check-list li:has(> svg:first-child)::after{display:none}
.check-list li > svg:first-child{position:absolute;left:0;top:.16em;width:20px;height:20px;margin:0;color:var(--accent-dark)}
.check-list li b,.check-list li strong{color:var(--text);font-weight:700}

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

/* ---------- 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(17,17,17,.88) 0%,rgba(17,17,17,.15) 55%,transparent 100%)}
.ind-card .ind-label{position:absolute;left:20px;right:20px;bottom:18px;z-index:2;color:#fff}
.ind-card .ind-label h3{color:#fff;font-size:1.18rem;margin-bottom:4px}
.ind-card .ind-label p{color:rgba(255,255,255,.82);font-size:.85rem}
.ind-card .ind-arrow{position:absolute;top:16px;right:16px;z-index:2;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.18);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;color:#fff;transition:background .2s}
.ind-card:hover .ind-arrow{background:var(--accent);color:var(--text)}
.ind-card .ind-arrow svg{width:16px;height:16px}

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

/* ---------- 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(198,231,108,.22),transparent 70%);top:-180px;right:-120px}
.cta-dark::after{content:"";position:absolute;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.08),transparent 70%);bottom:-200px;left:-100px}
.cta-content{position:relative;z-index:2;text-align:center;max-width:680px;margin:0 auto}
.cta-content h2{color:#fff;margin-bottom:16px}
.cta-content p{color:rgba(255,255,255,.85);font-size:1.1rem;margin-bottom:28px}
.cta-actions{display:flex;flex-wrap:wrap;gap:14px;justify-content:center}

/* CTA with form */
.cta-band{position:relative;background:var(--dark);color:#fff;overflow:hidden}
.cta-band-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.45;z-index:0}
.cta-band::before{content:"";position:absolute;inset:0;background:linear-gradient(120deg,rgba(17,17,17,.72),rgba(28,28,28,.55));z-index:1}
/* Lift the .container above the ::before overlay for cta-band variants that don't use
   .cta-form-grid (ROI calculator, coating selector). Without this, the overlay paints
   over the heading + copy + buttons and the whole band reads as an unreadable dark rect. */
.cta-band > .container{position:relative;z-index:2}
.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);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}
/* Form CHOICE chips — the canonical multi/single-select control INSIDE A FORM (e.g. "Services
   interested in: LTL / FTL / Expedited …"). Self-contained: needs NO extra markup, keeps the
   NATIVE checkbox/radio VISIBLE + clickable (accent-colored), and the whole chip highlights when
   checked via :has(). Use THIS in forms — NOT .filter-check (that's the catalog sidebar and is
   invisible without a .fc-box span). Markup:
     <div class="form-check-grid">
       <label class="form-check"><input type="checkbox" name="services" value="LTL"><span>LTL</span></label> …
     </div>  (use type="radio" for single-select). */
.form-check-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:10px;margin-top:8px}
.form-check{display:flex;align-items:center;gap:10px;padding:11px 14px;border:1.5px solid var(--border);border-radius:var(--radius-md);background:#fff;cursor:pointer;font-size:.93rem;color:var(--text-secondary);transition:border-color .15s,background .15s,color .15s;-webkit-user-select:none;user-select:none}
.form-check:hover{border-color:var(--primary);color:var(--text)}
.form-check input{width:18px;height:18px;flex-shrink:0;margin:0;accent-color:var(--primary);cursor:pointer}
.form-check:has(input:checked){border-color:var(--primary);background:var(--secondary);color:var(--text);font-weight:600}
/* Safety net: a .filter-check MISUSED in a form (no .fc-box span) must NOT hide its native input
   into an invisible, un-selectable control — the real "can't select the LTL/FTL" defect. Only hide
   the native box when the custom .fc-box replacement is actually present. */
.filter-check:not(:has(.fc-box)) input{position:static;opacity:1;width:18px;height:18px;accent-color:var(--primary);cursor:pointer}

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

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

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

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

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

/* ---------- Photo strip — gallery tiles with captions set on the photo ---------- */
.photo-strip{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
@media(min-width:768px){.photo-strip{grid-template-columns:repeat(4,1fr);gap:24px}}
.photo-strip figure{position:relative;margin:0;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm);transition:box-shadow .35s ease;isolation:isolate}
.photo-strip figure:hover{box-shadow:var(--shadow-md)}
.photo-strip img{width:100%;height:auto;aspect-ratio:1;object-fit:cover;display:block;transition:transform .7s cubic-bezier(.22,.61,.36,1)}
.photo-strip figure:hover img{transform:scale(1.06)}
.photo-strip figcaption{position:absolute;left:0;right:0;bottom:0;z-index:1;padding:38px 16px 15px;font-size:.85rem;font-weight:600;color:#fff;line-height:1.4;background:linear-gradient(180deg,rgba(17,17,17,0) 0%,rgba(17,17,17,.55) 34%,rgba(17,17,17,.82) 100%);text-shadow:0 1px 2px rgba(0,0,0,.45)}
.photo-strip figcaption::before{content:"";display:block;width:22px;height:2px;background:var(--accent);border-radius:1px;margin-bottom:8px}
/* Tiles ease in one after another once the section scrolls into view. The entry
   animation only moves opacity/translate, so the hover zoom stays snappy. */
html.js .reveal .photo-strip figure{opacity:0;transform:translateY(20px)}
html.js .reveal.in .photo-strip figure{animation:tile-in .65s cubic-bezier(.22,.61,.36,1) forwards}
html.js .reveal.in .photo-strip figure:nth-child(2){animation-delay:.1s}
html.js .reveal.in .photo-strip figure:nth-child(3){animation-delay:.2s}
html.js .reveal.in .photo-strip figure:nth-child(4){animation-delay:.3s}
@keyframes tile-in{to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
  html.js .reveal .photo-strip figure{opacity:1;transform:none;animation:none}
  .photo-strip figure:hover img{transform:none}
}

.shop-photo{max-width:880px;margin:56px auto 0}
.shop-photo img{width:100%;aspect-ratio:16/9;max-height:495px;object-fit:cover;border-radius:var(--radius-lg);box-shadow:var(--shadow-md)}
.shop-photo figcaption{margin-top:14px;font-size:.92rem;color:var(--text-muted);text-align:center}

.split-media .img-caption{position:relative;z-index:1;margin:26px 0 0;padding:10px 16px;font-size:.9rem;color:var(--text-secondary);text-align:left;line-height:1.55;background:var(--bg);border-left:3px solid var(--primary);border-radius:0 var(--radius-sm) var(--radius-sm) 0;box-shadow:var(--shadow-sm)}

.chart-figure{max-width:880px;margin:40px auto 0;text-align:center}
.chart-figure img{width:100%;height:auto;max-height:none;object-fit:contain;border-radius:var(--radius-md);box-shadow:var(--shadow-md);background:#fff}
.chart-figure figcaption{margin-top:14px;font-size:.92rem;color:var(--text-muted)}

/* Native hardness bar chart (replaces the legacy scanned chart image) */
.hardness-chart{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);padding:28px 30px 32px;text-align:left}
.hc-heading{font-weight:800;font-size:1.02rem;color:var(--text);margin-bottom:4px}
.hc-sub{font-size:.85rem;color:var(--text-muted);margin-bottom:22px}
.hc-group{font-size:.72rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text-muted);margin:20px 0 10px}
.hc-group:first-of-type{margin-top:0}
.hc-row{display:grid;grid-template-columns:148px 1fr 110px;align-items:center;gap:14px;padding:4px 0}
.hc-label{font-size:.88rem;color:var(--text-secondary);line-height:1.3}
.hc-row.hc-coating .hc-label{font-weight:700;color:var(--text)}
.hc-track{position:relative;height:16px;background:var(--surface,#f4f4f4);border-radius:4px;overflow:hidden}
.hc-bar{position:absolute;inset:0 auto 0 0;width:var(--w);border-radius:4px;background:#d7d9dd}
.hc-bar.sw-crn-bar{background:linear-gradient(90deg,#b8bcc2 0%,#e2e5ea 100%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.14)}
.hc-bar.sw-tin-bar{background:#D4AF37}
.hc-bar.sw-ticn-bar{background:linear-gradient(90deg,#7E858C 0%,#B9BFC6 100%)}
.hc-bar.sw-altin-bar{background:linear-gradient(90deg,#2F3237 0%,#4C525A 100%)}
.hc-bar.sw-alpha-bar{background:linear-gradient(90deg,#E4C87F 0%,#F3E4B6 55%,#D9BA6C 100%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.16)}
.hc-val{font-size:.84rem;color:var(--text-secondary);text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.hc-row.hc-coating .hc-val{font-weight:700;color:var(--text)}
@media(max-width:639px){
  .hardness-chart{padding:20px 16px 24px}
  .hc-row{grid-template-columns:96px 1fr 84px;gap:10px}
  .hc-label,.hc-val{font-size:.78rem}
}

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

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

/* ---------- Footer ---------- */
.site-footer{background:var(--dark);color:rgba(255,255,255,.7);margin-top:auto}
.footer-top{padding:62px 0 44px}
.footer-grid{display:grid;grid-template-columns:1fr;gap:38px}
@media(min-width:640px){.footer-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.footer-grid{grid-template-columns:1.4fr 1fr 1fr 1.2fr}}
.footer-logo{height:56px;width:auto;max-width:260px;margin-bottom:16px;filter:brightness(1.05) contrast(1.05)}
.footer-about{font-size:.92rem;line-height:1.7;margin-bottom:18px;max-width:340px}
.footer-social{display:flex;gap:10px}
.footer-social a{width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.78);transition:background .2s,color .2s}
.footer-social a:hover{background:var(--accent);color:var(--text)}
.footer-social svg{width:18px;height:18px}
.footer-col h4,.footer-col .footer-h{color:#fff;font-size:.95rem;font-weight:800;letter-spacing:.03em;margin-bottom:18px}
.footer-col h4 .footer-heading-link,.footer-col .footer-h .footer-heading-link{color:inherit;transition:color .15s ease}
.footer-col h4 .footer-heading-link:hover,.footer-col .footer-h .footer-heading-link:hover{color:var(--accent)}
.footer-col ul{display:flex;flex-direction:column;gap:11px}
.footer-col ul li a{font-size:.91rem;color:rgba(255,255,255,.66);transition:color .15s,padding-left .15s}
.footer-col ul li a:hover{color:var(--accent);padding-left:3px}
.footer-contact-item{display:flex;gap:11px;margin-bottom:15px;font-size:.9rem}
.footer-contact-item svg{width:17px;height:17px;color:var(--accent);flex-shrink:0;margin-top:3px}
.footer-contact-item .fci-label{color:rgba(255,255,255,.5);font-size:.76rem;text-transform:uppercase;letter-spacing:.05em}
.footer-contact-item a:hover,.footer-contact-item .fci-val:hover{color:#fff}
.footer-contact-item .fci-val{color:rgba(255,255,255,.82);font-weight:600}
.footer-bottom{border-top:1px solid rgba(255,255,255,.1);padding:20px 0}
.footer-bottom-inner{display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center;font-size:.84rem;color:rgba(255,255,255,.55)}
@media(min-width:768px){.footer-bottom-inner{flex-direction:row;justify-content:space-between;text-align:left}}
.footer-bottom a{color:rgba(255,255,255,.55)}
.footer-bottom a:hover{color:var(--accent)}
.footer-legal{display:flex;gap:18px}

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

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

/* Video hero. THE STACK BUG: the static fallback <img class="hero-dark-bg"> comes AFTER
   the <video> in the DOM, and both defaulted to z-index:0 — so the image painted ON TOP
   of the video and the video was never visible (a real shipped bug; the editor "added the
   video" but it stayed hidden under the still). Explicit, fallback-preserving stack for
   video heroes: fallback img 0 → video 1 → scrim ::before 2 → content 3. (.hero-dark
   sets no stacking context, so negative z-index would hide the img behind the dark bg —
   don't use it here.) */
.hero-video .hero-bg-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;opacity:0;transition:opacity .9s ease;filter:saturate(1.08) brightness(1.04) contrast(1.05)}
.hero-video .hero-bg-video.ready{opacity:1}
.hero-video .hero-dark-bg{z-index:0}     /* fallback stays UNDER the video (still visible if the video fails) */
.hero-video::before{z-index:2;will-change:transform;transform:translateZ(0);           /* readability scrim sits ABOVE the video */
  background:radial-gradient(ellipse 50% 42% at 50% 46%,rgba(17,17,17,.88) 0%,rgba(17,17,17,.78) 50%,rgba(17,17,17,.34) 82%,rgba(17,17,17,.16) 100%),
             linear-gradient(180deg,rgba(17,17,17,.30) 0%,rgba(17,17,17,0) 22%,rgba(17,17,17,0) 78%,rgba(17,17,17,.35) 100%)}  /* lighter, centre-weighted: video stays bright, centred copy stays legible */
.hero-video h1,.hero-video .hero-sub{text-shadow:0 2px 18px rgba(0,0,0,.55),0 1px 3px rgba(0,0,0,.45)}
@media(max-width:900px){.hero-video::before{background:linear-gradient(180deg,rgba(17,17,17,.62) 0%,rgba(17,17,17,.84) 28%,rgba(17,17,17,.84) 72%,rgba(17,17,17,.6) 100%)}}  /* copy spans the full width on phones & tablets, so the scrim does too */
.hero-video .container{z-index:3}        /* hero copy sits above the scrim */

/* Animated aurora glow over dark heroes (sits above overlay, below content) */
.hero-dark::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(circle at 18% 28%,rgba(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);overflow:hidden}
.brand-marquee .bm-label{text-align:center;font-size:.78rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);margin-bottom:22px}
.brand-strip{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.brand-track{display:flex;gap:22px;align-items:center;width:max-content;animation:brand-scroll 42s linear infinite}
.brand-track:hover{animation-play-state:paused}
.brand-item{height:108px;min-width:184px;display:flex;align-items:center;justify-content:center;padding:0 34px;background:#fff;border:1px solid var(--border);border-radius:16px;flex-shrink:0;box-shadow:var(--shadow-sm)}
.brand-item img{height:68px;width:auto;object-fit:contain;opacity:.85;filter:grayscale(.25);transition:opacity .25s,filter .25s,transform .25s}
.brand-item:hover img{opacity:1;filter:none;transform:scale(1.08)}
@keyframes brand-scroll{from{transform:translateX(0)}to{transform:translateX(-50%)}}

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

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

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

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

/* ---------- Quote FAB ---------- */
.quote-fab{position:fixed;right:22px;bottom:22px;z-index:1090;display:inline-flex;align-items:center;gap:10px;background:var(--cta);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(21,104,212,.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 ----------
   Progressive-enhancement gate: without JS (or before main.js runs and sets
   `html.js`), .reveal elements render fully visible. Otherwise the IO observer
   is authoritative, .reveal.in unhides. Prevents the pre-footer "ghost section"
   bug where the last .reveal on a tall page stays at opacity:0 when the
   observer misses a fast scroll-to-bottom or JS boot is slow. */
html.js .reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
html.js .reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){html.js .reveal{opacity:1;transform:none;transition:none}.brand-track,.quote-fab{animation:none}}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* ==========================================================================
   REVAMP ADDITIONS — Surface Solutions homepage brief (2026-07)
   Tagline under logo, Trust Bar, Problem Cards, Coating Swatches,
   Industries icon-row, 4-Step Process, Testimonials grid, Objection chips
   ========================================================================== */

/* Logo + one-line tagline under it (desktop only; mobile keeps compact) */
.logo-block{display:flex;flex-direction:column;align-items:flex-start;gap:2px;line-height:1;flex-shrink:0}
.logo-block .logo{max-width:none}
.logo-tagline{display:none;font-family:var(--font-display);font-size:.72rem;font-weight:600;letter-spacing:.06em;color:var(--text-muted);text-transform:uppercase;margin-top:2px;white-space:nowrap}
@media(min-width:1024px){.logo-tagline{display:block}}
/* Transparent (over hero) first, scrolled/solid last — on the homepage the header keeps
   BOTH .header-transparent AND .header-scrolled once scrolled, so the white-header rule
   must come last to win; otherwise the tagline stays white-on-white and disappears. */
.header-transparent .logo-tagline{color:rgba(255,255,255,.72)}
.header-scrolled .logo-tagline,.header-solid .logo-tagline{color:var(--text-muted)}

/* Under-hero trust micro-line (legacy — kept for other pages) */
.hero-trust-line{margin-top:22px;color:rgba(255,255,255,.82);font-size:.95rem;font-weight:500;display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.hero-trust-line svg{width:16px;height:16px;color:var(--accent);flex-shrink:0}
/* Under-hero trust list — one fact per line, checkmark-aligned */
.hero-trust-list{margin:22px 0 0;padding:0;list-style:none;color:rgba(255,255,255,.82);font-size:.95rem;font-weight:500;display:flex;flex-direction:column;gap:8px}
.hero-trust-list li{display:flex;align-items:center;gap:10px;line-height:1.4}
.hero-trust-list svg{width:16px;height:16px;color:var(--accent);flex-shrink:0}

/* Trust Bar (5-across numbers row) */
.trust-bar{padding:44px 0;background:var(--surface);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.trust-bar-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:24px 20px;text-align:center;max-width:1200px;margin:0 auto}
.trust-bar-item{display:flex;flex-direction:column;gap:6px;padding:0 8px;position:relative}
.trust-bar-item + .trust-bar-item::before{content:"";position:absolute;left:0;top:14%;bottom:14%;width:1px;background:var(--border)}
.trust-bar-num{font-family:var(--font-display);font-size:clamp(1.3rem,2.4vw,1.9rem);font-weight:800;color:var(--primary);letter-spacing:-.02em;line-height:1.05}
.trust-bar-label{font-size:.82rem;font-weight:600;color:var(--text-secondary);letter-spacing:.02em}
@media(max-width:1100px){
  .trust-bar-grid{grid-template-columns:repeat(3,1fr);gap:26px 20px;max-width:900px}
  .trust-bar-item:nth-child(3n+1)::before{display:none}
}
@media(max-width:820px){
  .trust-bar-grid{grid-template-columns:repeat(2,1fr);gap:22px 16px}
  .trust-bar-item::before{display:none}
}
@media(max-width:520px){.trust-bar-grid{grid-template-columns:1fr}}

/* Problem-framing cards — "Sound Familiar?" */
.problem-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
@media(max-width:1100px){.problem-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.problem-grid{grid-template-columns:1fr}}
.problem-card{background:var(--bg);border:1px solid var(--border);border-left:4px solid var(--primary);border-radius:var(--radius-md);padding:24px 22px;display:flex;flex-direction:column;gap:10px;transition:transform .2s,box-shadow .2s,border-color .2s}
.problem-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-left-color:var(--accent)}
.problem-card h3{font-size:1.02rem;font-weight:700;color:var(--text);line-height:1.3;margin:0}
.problem-card p{font-size:.92rem;color:var(--text-secondary);line-height:1.55;margin:0;flex-grow:1}
.problem-card a{margin-top:8px;font-size:.85rem;font-weight:700;color:var(--primary);letter-spacing:.02em;text-transform:uppercase;display:inline-flex;align-items:center;gap:6px}
.problem-card a::after{content:"→";transition:transform .2s}
.problem-card a:hover::after{transform:translateX(3px)}

/* Customer pain points as a picture slider (rides on .card-carousel).
   Same problem-card language — left accent rule, uppercase link — with a 4:3
   photo of the application on top, so each problem shows the part it happens
   to. The rail only scrolls when the five slides overflow; .cc-nav below it is
   wired by main.js and hides itself if everything already fits. */
.pain-rail{padding:6px 2px 12px;counter-reset:pain}
.pain-rail>.pain-slide{width:330px}
.pain-slide{position:relative;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;display:flex;flex-direction:column;box-shadow:var(--shadow-sm);transition:box-shadow .3s ease,border-color .3s ease}
.pain-slide:hover{box-shadow:var(--shadow-md);border-color:var(--surface-2)}
/* Slide number chip over the photo — gives the rail a guided, editorial feel
   and quietly tells visitors there is more to scroll through. */
.pain-slide::before{counter-increment:pain;content:"0" counter(pain);position:absolute;top:14px;left:14px;z-index:2;background:rgba(255,255,255,.94);color:var(--text);font-family:var(--font-display);font-weight:700;font-size:.76rem;letter-spacing:.08em;padding:5px 10px;border-radius:var(--radius-sm);box-shadow:var(--shadow-sm)}
/* Brand accent that draws along the bottom edge on hover, replacing the old
   static left border. Lives on a pseudo so it never fights the reveal motion. */
.pain-slide::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:3px;background:var(--primary);transform:scaleX(0);transform-origin:left;transition:transform .4s cubic-bezier(.22,.61,.36,1);z-index:2}
.pain-slide:hover::after{transform:scaleX(1)}
.pain-slide .ps-media{position:relative;background:var(--surface);overflow:hidden}
.pain-slide .ps-media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(17,17,17,0) 62%,rgba(17,17,17,.22) 100%);pointer-events:none}
.pain-slide .ps-media img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;max-height:none;transition:transform .7s cubic-bezier(.22,.61,.36,1)}
.pain-slide:hover .ps-media img{transform:scale(1.05)}
.pain-slide .ps-body{padding:24px 24px 22px;display:flex;flex-direction:column;gap:10px;flex-grow:1}
.pain-slide h3{font-size:1.06rem;font-weight:700;color:var(--text);line-height:1.32;margin:0}
.pain-slide p{font-size:.92rem;color:var(--text-secondary);line-height:1.6;margin:0;flex-grow:1}
.pain-slide a{margin-top:14px;padding-top:14px;border-top:1px solid var(--border);font-size:.83rem;font-weight:700;color:var(--primary);letter-spacing:.04em;text-transform:uppercase;display:inline-flex;align-items:center;gap:6px}
.pain-slide a::after{content:"→";transition:transform .25s ease}
.pain-slide a:hover{color:var(--primary-dark)}
.pain-slide a:hover::after{transform:translateX(4px)}
@media(prefers-reduced-motion:reduce){.pain-slide:hover .ps-media img{transform:none}.pain-slide::after{transition:none}}
/* Desktop: four slides fill the row and the fifth peeks in by ~24px, so the
   rail reads as a slider instead of a grid that happens to clip. */
@media(min-width:1024px){.pain-rail>.pain-slide{flex:0 0 auto;min-width:0;max-width:none;width:calc((100% - 120px)/4)}}

/* Coating card upgrades: color swatch bar + best-for list + key-benefit line */
.cc-swatch{display:inline-block;width:100%;height:8px;border-radius:2px;margin-bottom:14px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15)}
.cc-swatch.sw-alpha{background:linear-gradient(90deg,#E4C87F 0%,#F3E4B6 50%,#D9BA6C 100%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.16)}
.cc-swatch.sw-tin{background:#D4AF37}
.cc-swatch.sw-ticn{background:linear-gradient(90deg,#7E858C 0%,#B9BFC6 55%,#8C939A 100%);box-shadow:inset 0 0 0 1px rgba(0,0,0,.14)}
.cc-swatch.sw-altin{background:linear-gradient(90deg,#2F3237 0%,#4C525A 60%,#383C43 100%)}
.cc-swatch.sw-crn{background:linear-gradient(90deg,#b8bcc2 0%,#e2e5ea 100%)}
.cc-bestfor{list-style:none;padding:0;margin:8px 0 6px;display:flex;flex-direction:column;gap:4px}
.cc-bestfor li{font-size:.85rem;color:var(--text-secondary);padding-left:16px;position:relative}
.cc-bestfor li::before{content:"";position:absolute;left:0;top:.55em;width:6px;height:6px;background:var(--accent);border-radius:1px}
.cc-benefit{font-size:.88rem;color:var(--text);font-weight:600;margin:6px 0 12px;line-height:1.45}
.cc-bestfor-label{display:block;font-size:.7rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em;margin-top:6px}

/* Selector prompt inside the Coatings header */
.selector-prompt{margin-top:14px;text-align:center;font-size:.95rem;color:var(--text-secondary)}
.selector-prompt a{color:var(--primary);font-weight:700;border-bottom:1px solid var(--primary)}
.selector-prompt a:hover{color:var(--accent);border-bottom-color:var(--accent)}

/* Industries compact icon row */
.industry-row{display:grid;grid-template-columns:repeat(5,1fr);gap:16px;max-width:1080px;margin:0 auto}
@media(max-width:900px){.industry-row{grid-template-columns:repeat(2,1fr)}}
@media(max-width:460px){.industry-row{grid-template-columns:1fr}}
.industry-item{display:flex;flex-direction:column;align-items:center;text-align:center;padding:22px 14px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);transition:transform .2s,box-shadow .2s,border-color .2s}
.industry-item:hover{transform:translateY(-3px);box-shadow:var(--shadow-sm);border-color:var(--primary)}
.industry-item .industry-icon{width:46px;height:46px;border-radius:8px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;margin-bottom:12px}
.industry-item .industry-icon svg{width:22px;height:22px}
.industry-item .industry-label{font-size:.92rem;font-weight:700;color:var(--text);line-height:1.25}

/* 4-Step Process */
.process-4{display:grid;grid-template-columns:repeat(4,1fr);gap:22px;counter-reset:step;position:relative}
@media(max-width:960px){.process-4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.process-4{grid-template-columns:1fr}}
.process-4 .p4-step{position:relative;padding:26px 22px 24px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md)}
.process-4 .p4-num{width:44px;height:44px;border-radius:50%;background:var(--primary);color:#fff;font-weight:800;font-family:var(--font-display);font-size:1.15rem;display:flex;align-items:center;justify-content:center;margin-bottom:16px}
.process-4 .p4-step h3{font-size:1.05rem;font-weight:700;margin:0 0 8px;color:var(--text)}
.process-4 .p4-step p{font-size:.92rem;color:var(--text-secondary);line-height:1.55;margin:0}

/* Testimonials grid (3-up) */
.testi-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;margin-top:36px}
@media(max-width:960px){.testi-grid{grid-template-columns:1fr;gap:18px}}
.testi-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);padding:26px 24px;display:flex;flex-direction:column;gap:12px}
.testi-card .testi-mark{color:var(--primary);opacity:.4;font-size:2rem;line-height:.8;font-family:var(--font-display)}
.testi-card blockquote{font-size:1.02rem;font-weight:600;color:var(--text);line-height:1.5;margin:0;flex-grow:1}
.testi-card .testi-attrib{font-size:.82rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;border-top:1px solid var(--border);padding-top:12px}
.testi-card .testi-result{font-size:.85rem;color:var(--primary);font-weight:700}
.testi-card .testi-attrib-row{display:flex;align-items:center;gap:12px;border-top:1px solid var(--border);padding-top:12px;margin-top:2px}
.testi-card .testi-attrib-row .testi-photo{width:48px;height:48px;border-radius:50%;object-fit:cover;flex-shrink:0;border:2px solid var(--primary);box-shadow:0 2px 8px rgba(0,0,0,.08);display:block}
.testi-card .testi-attrib-row .testi-attrib{border-top:0;padding-top:0;text-transform:uppercase;letter-spacing:.06em;font-size:.82rem;font-weight:700;color:var(--text-muted)}

/* Objection killer chips under bottom CTA */
.objection-chips{display:flex;flex-wrap:wrap;gap:10px 18px;margin-top:20px;justify-content:flex-start;align-items:center}
.objection-chips span{display:inline-flex;align-items:center;gap:8px;font-size:.9rem;font-weight:600;color:var(--text-secondary)}
.objection-chips span svg{width:16px;height:16px;color:var(--primary);flex-shrink:0}

/* Footer coatings & industries link columns fit the same grid */
.footer-col ul.footer-list{list-style:none;padding:0;margin:0}
.footer-col ul.footer-list li{margin-bottom:6px}
.footer-col ul.footer-list a{font-size:.88rem;color:rgba(255,255,255,.72)}
.footer-col ul.footer-list a:hover{color:#fff}
.footer-serving{font-size:.82rem;color:rgba(255,255,255,.62);margin-top:6px;font-style:italic}
.footer-badges{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px;align-items:center}
.footer-badges a{display:inline-block;transition:opacity .2s,transform .2s;line-height:0}
.footer-badges a:hover{opacity:.85;transform:translateY(-1px)}
.footer-badges img{height:38px;width:auto;display:block;border-radius:6px}
.footer-badges .fb-note{font-size:.72rem;color:rgba(255,255,255,.55);letter-spacing:.04em;text-transform:uppercase;margin-right:4px;align-self:center}

/* 5-column footer for the SEO-rich footer (Coatings + Industries columns) */
@media(min-width:1024px){
  .footer-grid.footer-grid-5{grid-template-columns:1.35fr 1fr 1fr 1fr 1.2fr;gap:30px}
}

/* ==========================================================================
   REVAMP ADDITIONS ROUND 2 — Resources page + per-coating pages (2026-07)
   Coating comparison table, FAQ list, glossary grid, coating-detail hero,
   coating spec panel
   ========================================================================== */

/* Compare table (Resources page) */
.compare-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg)}
.compare-table{width:100%;border-collapse:collapse;min-width:720px;font-size:.94rem}
.compare-table thead th{background:var(--surface);text-align:left;padding:14px 16px;font-size:.78rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--border)}
.compare-table tbody th{text-align:left;padding:16px;font-weight:800;color:var(--primary);font-family:var(--font-display);font-size:1rem;white-space:nowrap;vertical-align:top}
.compare-table td{padding:16px;vertical-align:top;color:var(--text-secondary);border-top:1px solid var(--border)}
.compare-table tbody tr:hover{background:var(--surface)}
.compare-table td a{color:var(--primary);font-weight:700}
.compare-table td a:hover{color:var(--accent)}
.compare-swatch{width:26px;height:12px;margin:0 6px -1px 0;vertical-align:middle;border-radius:2px}

/* FAQ list */
.faq-list{max-width:840px;margin:0 auto;display:flex;flex-direction:column;gap:12px}
.faq-item{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);padding:0;overflow:hidden}
.faq-item summary{cursor:pointer;padding:18px 22px;font-family:var(--font-display);font-weight:700;font-size:1.02rem;color:var(--text);display:flex;justify-content:space-between;align-items:center;gap:16px;list-style:none}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::after{content:"+";font-size:1.4rem;color:var(--primary);font-weight:400;transition:transform .2s;flex-shrink:0}
.faq-item[open] summary::after{transform:rotate(45deg)}
.faq-item summary:hover{color:var(--primary)}
.faq-item p{padding:0 22px 20px;color:var(--text-secondary);line-height:1.6;margin:0;font-size:.95rem}

/* Glossary grid */
.glossary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
@media(max-width:1024px){.glossary-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){.glossary-grid{grid-template-columns:1fr}}
.glossary-item{background:var(--bg);border:1px solid var(--border);border-left:3px solid var(--primary);border-radius:var(--radius-sm,8px);padding:18px 18px 16px}
.glossary-item h3{font-size:.98rem;font-weight:700;margin:0 0 6px;color:var(--text)}
.glossary-item p{font-size:.88rem;color:var(--text-secondary);line-height:1.55;margin:0}

/* Coating detail page — hero swatch strip + spec panel */
.coating-hero-swatch{display:block;width:120px;height:10px;border-radius:3px;margin-bottom:20px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.2)}
.coating-spec-panel{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);padding:24px;margin-top:8px}
@media(max-width:900px){.coating-spec-panel{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.coating-spec-panel{grid-template-columns:1fr}}
.coating-spec-item{display:flex;flex-direction:column;gap:4px}
.coating-spec-label{font-size:.72rem;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em}
.coating-spec-value{font-family:var(--font-display);font-size:1.15rem;font-weight:700;color:var(--text)}
.coating-detail-grid{display:grid;grid-template-columns:1.5fr 1fr;gap:40px}
@media(max-width:900px){.coating-detail-grid{grid-template-columns:1fr}}
.coating-uses{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:10px}
.coating-uses li{padding:14px 16px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm,8px);font-size:.94rem;color:var(--text)}
.coating-uses li strong{display:block;color:var(--primary);font-family:var(--font-display);margin-bottom:2px}
.coating-cross-links{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:8px}
@media(max-width:900px){.coating-cross-links{grid-template-columns:repeat(2,1fr)}}
@media(max-width:460px){.coating-cross-links{grid-template-columns:1fr}}
.coating-cross-links a{display:flex;flex-direction:column;padding:16px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm,8px);transition:transform .2s,border-color .2s,box-shadow .2s}
.coating-cross-links a:hover{transform:translateY(-2px);border-color:var(--primary);box-shadow:var(--shadow-sm)}
.coating-cross-links a strong{color:var(--text);font-family:var(--font-display);font-size:.98rem;margin-bottom:2px}
.coating-cross-links a span{font-size:.82rem;color:var(--text-secondary)}
.coating-cross-links a .ccl-swatch{width:100%;height:6px;border-radius:2px;margin-bottom:10px}

/* ==========================================================================
   ROI CALCULATOR
   ========================================================================== */
#roi{background:var(--bg)}
.roi-shell{display:grid;grid-template-columns:1.15fr 1fr;gap:28px;align-items:flex-start}
.roi-inputs{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:22px 22px 8px}
.roi-output{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:22px;position:sticky;top:calc(var(--header-total) + 20px)}

/* Numbered blocks */
.roi-block{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:16px 18px;margin-bottom:14px}
.roi-block-head{display:flex;align-items:center;gap:12px;margin:0 0 12px;cursor:default;list-style:none}
.roi-block-head::-webkit-details-marker{display:none}
.roi-block-head h3{font-size:1.02rem;font-weight:700;color:var(--text);letter-spacing:-.01em;margin:0}
.roi-block-num{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:50%;background:var(--primary);color:#fff;font-family:var(--font-display);font-size:.82rem;font-weight:800;letter-spacing:.02em;flex-shrink:0}
.roi-optional-tag{margin-left:8px;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);background:var(--surface-2);border-radius:var(--radius-pill);padding:3px 8px;vertical-align:middle}
.roi-block-optional{cursor:pointer}
.roi-block-optional .roi-summary-caret{margin-left:auto;font-family:var(--font-display);font-size:1.4rem;font-weight:700;color:var(--primary);line-height:1;transition:transform .2s}
.roi-block-optional[open] .roi-summary-caret{transform:rotate(45deg)}

/* Segmented radios */
.roi-radio-row{display:flex;gap:8px;flex-wrap:wrap}
.roi-radio{position:relative;flex:1 1 140px}
.roi-radio input{position:absolute;opacity:0;pointer-events:none}
.roi-radio span{display:flex;align-items:center;justify-content:center;padding:11px 14px;border:1.5px solid var(--border);border-radius:var(--radius-sm);background:#fff;font-size:.92rem;font-weight:600;color:var(--text);cursor:pointer;transition:border-color .15s,background .15s,color .15s}
.roi-radio input:checked + span{border-color:var(--primary);background:var(--primary);color:#fff}
.roi-radio input:focus-visible + span{box-shadow:0 0 0 3px rgba(201,26,26,.18)}

/* Hint + warning */
.roi-hint{display:block;font-size:.78rem;color:var(--text-muted);margin-top:6px;line-height:1.45}
.roi-warn{background:rgba(201,26,26,.06);border:1px solid rgba(201,26,26,.22);border-left:3px solid var(--primary);color:var(--text);border-radius:var(--radius-sm);padding:10px 12px;font-size:.86rem;margin:0 0 14px}
.roi-warn strong{color:var(--primary);font-weight:800}

/* Output — heading */
.roi-output-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.roi-output-head h3{font-size:1.08rem;font-weight:800;color:var(--text);margin:0}
.roi-pill{font-size:.66rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#fff;background:var(--dark);padding:5px 10px;border-radius:var(--radius-pill)}

/* Hero tile */
.roi-hero-tile{display:flex;flex-direction:column;gap:6px;background:var(--primary);color:#fff;border-radius:var(--radius-md);padding:22px 22px 20px;box-shadow:0 8px 22px rgba(201,26,26,.22)}
.roi-hero-label{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.85)}
.roi-hero-value{font-family:var(--font-display);font-size:2.4rem;font-weight:800;line-height:1.05;letter-spacing:-.02em;color:#fff}
.roi-hero-sub{font-size:.82rem;color:rgba(255,255,255,.78)}

/* Metric row */
.roi-metric-row{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
.roi-metric{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.roi-metric-label{font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted)}
.roi-metric-value{font-family:var(--font-display);font-size:1.2rem;font-weight:800;color:var(--text)}

/* Breakdown */
.roi-breakdown{margin-top:14px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:6px 14px}
.roi-breakdown-row{display:flex;justify-content:space-between;align-items:center;padding:11px 0;border-bottom:1px dashed var(--border);font-size:.9rem;color:var(--text-secondary)}
.roi-breakdown-row:last-child{border-bottom:none}
.roi-breakdown-row span:last-child{font-family:var(--font-display);font-weight:700;color:var(--text)}

/* Recommendation card */
.roi-rec{margin-top:14px;background:var(--bg);border:1px solid var(--border);border-left:3px solid var(--primary);border-radius:var(--radius-sm);padding:14px 16px}
.roi-rec-eyebrow{display:block;font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);margin-bottom:8px}
.roi-rec-body{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap}
.roi-rec-chip{display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-display);font-size:.95rem;font-weight:800;color:#fff;background:var(--accent);padding:6px 12px;border-radius:var(--radius-pill);white-space:nowrap}
.roi-rec-note{font-size:.86rem;color:var(--text-secondary);margin:0;flex:1 1 200px;line-height:1.5}
.roi-rec-link{display:inline-block;margin-top:10px;font-size:.86rem;font-weight:700;color:var(--primary)}
.roi-rec-link:hover{text-decoration:underline}

/* Disclaimer */
.roi-disclaimer{font-size:.76rem;color:var(--text-muted);margin:14px 0 16px;line-height:1.55}

/* Actions */
.roi-actions{display:flex;gap:10px;flex-wrap:wrap}
.roi-actions .btn{flex:1 1 auto}

/* Responsive */
@media (max-width:900px){
  .roi-shell{grid-template-columns:1fr;gap:20px}
  .roi-output{position:static;top:auto}
  .roi-hero-value{font-size:2rem}
}
@media (max-width:520px){
  .roi-inputs,.roi-output{padding:16px}
  .roi-radio{flex:1 1 100%}
  .roi-metric-row{grid-template-columns:1fr}
}

/* Print — hide chrome, keep results legible */
@media print{
  body > header, body > footer, .quote-fab, #industries, #testimonials, #cta-band, .site-nav, .top-bar{display:none !important}
  #roi{padding:0}
  .roi-shell{grid-template-columns:1fr;gap:12px}
  .roi-output{position:static;border:2px solid #000;box-shadow:none}
  .roi-hero-tile{background:#000 !important;color:#fff !important;box-shadow:none}
  .roi-actions,.roi-block-optional summary .roi-summary-caret{display:none !important}
  .roi-rec,.roi-metric,.roi-breakdown{border-color:#000}
  a[href]:after{content:""}
}

/* ==========================================================================
   COATING SELECTOR — reuses .roi-* layout but tweaks the hero tile / swatch.
   ========================================================================== */
.sel-hero-tile{background:var(--dark);box-shadow:0 8px 22px rgba(0,0,0,.28)}
.sel-hero-tile .roi-hero-value{font-size:2.2rem}
.sel-hero-tile .roi-hero-sub{color:rgba(255,255,255,.85);font-size:.88rem;line-height:1.5}
.sel-swatch-wrap{margin:12px 0 0}
.sel-swatch-wrap .cc-swatch{margin-bottom:0;height:10px;border-radius:3px}
.sel-breakdown{margin-top:14px}
.sel-breakdown .roi-breakdown-row span:first-child{font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--text-muted);font-weight:700}
.sel-breakdown .roi-breakdown-row span:last-child{max-width:60%;text-align:right;font-family:var(--font-sans);font-weight:600;font-size:.9rem;color:var(--text)}
.sel-alt{border-left-color:var(--accent);opacity:.94}
.sel-alt .roi-rec-chip{background:var(--dark)}
@media (max-width:900px){
  .sel-hero-tile .roi-hero-value{font-size:1.9rem}
}
.footer-li-more{margin-top:12px;font-size:.8rem;color:rgba(255,255,255,.6)}
.footer-li-more a{color:rgba(255,255,255,.82);text-decoration:underline;text-underline-offset:2px}
.footer-li-more a:hover{color:#fff}
