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

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

:root{
  /* --- FONT (theme me): one slick sans — Inter / Figtree / Manrope / Plus Jakarta Sans / Geist / Sora --- */
  --font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  /* --- COLOR — Centerprism: Microsoft-aligned brand navy + cyan accent on a LIGHT,
     enterprise-grade canvas. 2026 light retheme: white/soft-neutral bands dominate,
     brand blue is the accent, dark navy is reserved for the footer and one CTA band. --- */
  --primary:#1B4FA8;
  --primary-dark:#163F8A;
  --primary-darker:#102F6B;
  --accent:#33D9F2;
  --accent-dark:#1BBFD8;
  --secondary:#EBF2FF;
  --bg:#FFFFFF;
  --surface:#F6F8FC;
  --surface-2:#EEF3FA;
  --text:#0E1726;
  --text-secondary:#41536F;
  --text-muted:#6E819C;
  --border:#DFE6F2;
  --border-strong:#C9D6EA;
  --tint:#F2F6FD;          /* softest brand-tinted band */
  --dark:#132A57;          /* brand navy — footer + the single dark CTA band */
  --dark-mid:#183166;
  --dark-soft:#20407C;
  --white:#fff;
  --radius-sm:6px;
  --radius-md:10px;
  --radius-lg:18px;
  --radius-pill:40px;
  --shadow-sm:0 1px 2px rgba(20,40,70,.05);
  --shadow-md:0 4px 16px rgba(20,40,70,.07);
  --shadow-lg:0 16px 44px rgba(20,40,70,.10);
  --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(.vt-thumb):not([class*="-bg"]){max-height:560px;object-fit:cover}
a{color:inherit;text-decoration:none}
ul,ol{list-style:none}
button,input,select,textarea{font:inherit;color:inherit;border:none;outline:none;background:none}
button{cursor:pointer}
h1,h2,h3,h4,h5,h6{font-weight:800;letter-spacing:-.02em;line-height:1.14;color:var(--text)}
h1{font-size:clamp(2.1rem,5vw,3.6rem)}
h2{font-size:clamp(1.7rem,3.4vw,2.5rem)}
h3{font-size:1.3rem}
p{color:var(--text-secondary)}
main{flex:1 0 auto}
::selection{background:var(--secondary);color:var(--primary-dark)}

/* ---------- 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:10px;border:2px solid transparent;transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease,border-color .18s ease;cursor:pointer;white-space:nowrap}
.btn svg{width:17px;height:17px;flex-shrink:0}
/* PRIMARY = solid Centerprism blue on light bands. On the two dark/blue bands
   (.cta-dark, .cta-band) and in the footer it flips to the bright cyan accent so it
   still reads as the strongest action — see the scoped overrides further down. */
.btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}
.btn-primary:hover{background:var(--primary-dark);border-color:var(--primary-dark);transform:translateY(-2px);box-shadow:0 8px 20px rgba(27,79,168,.28)}
.btn-dark{background:var(--dark);color:#fff;border-color:var(--dark)}
.btn-dark:hover{background:var(--dark-mid);border-color:var(--dark-mid);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(--primary);border-color:#fff;transform:translateY(-2px)}
.btn-outline-dark{background:#fff;color:var(--primary);border-color:var(--border-strong)}
.btn-outline-dark:hover{background:var(--secondary);color:var(--primary-dark);border-color:var(--primary);transform:translateY(-2px)}
.btn-sm{padding:10px 18px;font-size:.88rem}
.btn-lg{padding:17px 34px;font-size:1.05rem}
.btn-block{width:100%}

/* ---------- Header ---------- */
.site-header{position:fixed;top:0;left:0;right:0;z-index:1000;background:rgba(255,255,255,.92);backdrop-filter:saturate(160%) blur(12px);-webkit-backdrop-filter:saturate(160%) blur(12px);border-bottom:1px solid var(--border);transition:background .25s ease,box-shadow .25s ease}
body{padding-top:var(--header-total)}
body.has-transparent-header{padding-top:0}
/* No utility topbar (SITE.topbar=false): header is just the 72px nav, so the offset
   that body padding + the mobile menu read collapses to --header-h. */
html.no-topbar{--topbar-h:0px;--header-total:var(--header-h)}
.topbar{background:var(--primary-darker);color:rgba(255,255,255,.82);font-size:.82rem}
.topbar-inner{display:flex;align-items:center;justify-content:space-between;gap:16px;height:36px}
.topbar a{color:rgba(255,255,255,.82);display:inline-flex;align-items:center;gap:6px;transition:color .15s}
.topbar a:hover{color:var(--accent)}
.topbar svg{width:14px;height:14px}
.topbar-right{display:flex;gap:20px;align-items:center}
.topbar-hours{display:none;align-items:center;gap:6px;color:rgba(255,255,255,.82)}
.topbar .topbar-loc{display:none}
@media(min-width:768px){.topbar .topbar-loc{display:inline-flex}.topbar-hours{display:inline-flex}}
.header-inner{display:flex;align-items:center;justify-content:space-between;height:var(--header-h)}
.logo{display:flex;align-items:center;gap:10px;flex-shrink:0}
.logo-img{height:38px;width:auto;max-width:none}
/* Wide wordmark lockup: colour version is the DEFAULT (a page with no dark hero gets
   neither state class), white knockout swaps in over a transparent header on a dark hero.
   Source order matters — .header-scrolled is declared last so it wins when both are set. */
.logo{position:relative}
.logo-white{display:none}
.header-transparent .logo-color{display:block}
.header-transparent .logo-white{display:none}
.header-scrolled .logo-color{display:block}
.header-scrolled .logo-white{display:none}
/* Optional text wordmark beside the logo. MUST be styled (never let it inherit the dark
   body --text, or it goes dark-on-dark over the transparent hero header — a real defect).
   Color flips with the header state below. */
.logo-wordmark{font-weight:800;font-size:1.12rem;letter-spacing:-.02em;line-height:1.06;color:var(--text);white-space:nowrap}
.logo-wordmark-sub{display:block;font-weight:600;font-size:.68rem;letter-spacing:.01em;text-transform:none;color:var(--text-muted)}
.desktop-nav{display:none;align-items:center;gap:6px}
@media(min-width:1024px){.desktop-nav{display:flex}}
/* padding tightened 14px -> 11px so a 6-item desktop nav + phone + CTA never wraps at 1024–1200px */
.nav-link{display:inline-flex;align-items:center;gap:5px;padding:9px 11px;font-weight:600;font-size:.95rem;color:var(--text);white-space:nowrap;border-radius:var(--radius-sm);transition:color .15s,background .15s}
/* The 7th top-level item (Testimonials — promoted so trust content is one click from any
   page) only appears once the row can actually hold it. Below 1180px it is still one tap
   away: first entries of the Resources dropdown and of the mobile menu. */
.nav-link-testimonials{display:none}
@media(min-width:1180px){.nav-link-testimonials{display:inline-flex}}
.nav-link:hover{color:var(--primary);background:var(--surface)}
.nav-link svg{width:14px;height:14px;transition:transform .2s}
.nav-dropdown{position:relative}
.nav-dropdown:hover .nav-link svg{transform:rotate(180deg)}
.dropdown-menu{position:absolute;top:calc(100% + 6px);left:0;min-width:480px;background:#fff;border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:14px;opacity:0;visibility:hidden;transform:translateY(8px);transition:all .2s ease;display:grid;grid-template-columns:1fr 1fr;gap:4px}
.dropdown-menu.single-col{grid-template-columns:1fr;min-width:260px}
.nav-dropdown:hover .dropdown-menu{opacity:1;visibility:visible;transform:translateY(0)}
.dropdown-item{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-radius:var(--radius-sm);transition:background .15s}
.dropdown-item:hover{background:var(--surface)}
.dropdown-item .di-title{font-weight:700;font-size:.92rem;color:var(--text);display:flex;align-items:center;gap:8px}
.dropdown-item .di-title svg{width:16px;height:16px;color:var(--primary)}
.dropdown-item .di-sub{font-size:.8rem;color:var(--text-muted);padding-left:24px}
.dropdown-foot{grid-column:1/-1;margin-top:6px;padding:10px 12px;border-top:1px solid var(--border);font-weight:700;font-size:.88rem;color:var(--primary);display:flex;align-items:center;gap:6px}
.dropdown-foot svg{width:15px;height:15px}
/* mega menu (Our Services) */
.dropdown-menu.mega{min-width:560px}
.mega-col{padding:10px 12px}
.mega-col .mc-head{display:flex;align-items:center;gap:9px;font-weight:800;font-size:.92rem;color:var(--text);margin-bottom:9px;border-radius:var(--radius-sm)}
.mega-col .mc-head .mc-ico{width:30px;height:30px;border-radius:8px;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.mega-col .mc-head .mc-ico svg{width:16px;height:16px}
.mega-col .mc-head:hover{color:var(--primary)}
.mega-col .mc-links{display:flex;flex-direction:column;gap:2px}
.mega-col .mc-links a{font-size:.85rem;color:var(--text-secondary);padding:5px 8px 5px 39px;border-radius:var(--radius-sm);transition:background .15s,color .15s}
.mega-col .mc-links a:hover{background:var(--surface);color:var(--primary)}
.header-actions{display:none;align-items:center;gap:14px}
@media(min-width:1024px){.header-actions{display:flex}}
.header-phone{display:none;align-items:center;gap:7px;font-weight:700;color:var(--text);font-size:.95rem}
.header-phone svg{width:17px;height:17px;color:var(--primary)}
/* The phone only shows from 1440px: with the longer "Events & Resources" label, the 7-item
   nav + phone + CTA row is ~1230px wide, which overflows 1200–1439px viewports (CTA pushed
   off-screen) and the 1200px container. At 1440px+ the header container widens to 1320px so
   the row fits without spilling right. Do NOT add a second, lower `.header-phone` breakpoint. */
@media(min-width:1440px){.header-phone{display:inline-flex}.site-header .container{max-width:1320px}}
.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 */
/* The hero underneath is light now, so the "transparent" header keeps DARK ink and the
   full-colour logo — the white knockout lockup is no longer used anywhere. */
.header-transparent{background:transparent;border-bottom-color:transparent}
.header-transparent .nav-link,.header-transparent .header-phone{color:var(--text)}
.header-transparent .nav-link:hover{background:rgba(27,79,168,.08);color:var(--primary)}
.header-transparent .header-phone svg{color:var(--primary)}
.header-transparent .mobile-toggle{color:var(--text)}
.header-transparent .logo-wordmark{color:var(--text)}
.header-transparent .logo-wordmark-sub{color:var(--text-secondary)}
.header-scrolled{background:rgba(255,255,255,.95);border-bottom-color:var(--border);box-shadow:var(--shadow-sm)}
.header-scrolled .nav-link,.header-scrolled .header-phone{color:var(--text)}
.header-scrolled .nav-link:hover{color:var(--primary);background:var(--surface)}
.header-scrolled .header-phone svg{color:var(--primary)}
.header-scrolled .mobile-toggle{color:var(--text)}
.header-scrolled .logo-img{filter:none}
.header-scrolled .logo-wordmark{color:var(--text)}
.header-scrolled .logo-wordmark-sub{color:var(--text-muted)}

/* mobile menu */

/* 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)}
/* `.dark` is now a SOFT BRAND-TINTED band, not a near-black one. It still separates
   the page, but the site no longer reads as dark-heavy. */
.section.dark{background:linear-gradient(180deg,var(--tint) 0%,var(--surface-2) 100%);color:var(--text);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.section.dark h1,.section.dark h2,.section.dark h3,.section.dark h4{color:var(--text)}
.section.dark p{color:var(--text-secondary)}
.section-header{max-width:680px;margin:0 auto 48px;text-align:center}
.section-header.left{margin-left:0;text-align:left}
.section-header.label-below{display:flex;flex-direction:column;align-items:center;text-align:center}
.section-header.label-below h2{order:1;margin:0 0 26px}
.section-header.label-below .eyebrow{order:2;margin:0}
.section-header.label-below p{order:3;margin-top:20px}
.section-header>.eyebrow{display:flex;width:fit-content;max-width:100%;margin-left:auto;margin-right:auto}
.section-header.left>.eyebrow{margin-left:0}
.section-header h2{margin:10px 0 14px}
.section-header p{font-size:1.08rem}

/* ---------- Hero (dark) ---------- */
/* LIGHT HERO. The class name stays `.hero-dark` (43 pages reference it) but the
   treatment is inverted: the photo is brightened rather than dimmed and sits behind a
   near-white wash that clears the left column, so the headline is dark ink on white
   while the image still carries the industrial context on the right. */
.hero-dark{position:relative;color:var(--text);overflow:hidden;background:linear-gradient(180deg,#fff 0%,var(--tint) 100%);border-bottom:1px solid var(--border)}
.hero-dark-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.82) brightness(1.06);z-index:0}
.hero-dark::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(100deg,rgba(255,255,255,.985) 0%,rgba(255,255,255,.955) 40%,rgba(248,251,255,.80) 62%,rgba(233,241,253,.52) 100%)}
/* Below the split point the content is full-width, so the wash goes flat-vertical to
   keep every line of copy on a near-solid light ground. */
@media(max-width:960px){.hero-dark::before{background:linear-gradient(180deg,rgba(255,255,255,.975) 0%,rgba(255,255,255,.94) 70%,rgba(240,246,255,.9) 100%)}}
.hero-dark .container{position:relative;z-index:2}
.hero-pad{padding:130px 0 96px}
.hero-pad-sm{padding:120px 0 70px}
.hero-fullscreen{min-height:88vh;display:flex;flex-direction:column;justify-content:center;padding:150px 0 96px}
.hero-content{max-width:760px}
.hero-content.center{max-width:820px;margin:0 auto;text-align:center}
.hero-label{display:inline-flex;align-items:center;gap:8px;background:var(--secondary);color:var(--primary);border:1px solid #D5E2F8;font-weight:700;font-size:.78rem;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:var(--text);margin-bottom:18px}
.hero-dark h1 .hl{color:var(--primary)}
.hero-sub{font-size:1.15rem;color:var(--text-secondary);max-width:620px;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:var(--text-secondary)}
.hero-trust span{display:inline-flex;align-items:center;gap:8px}
.hero-trust svg{width:17px;height:17px;color:var(--primary)}

/* 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 var(--border-strong)}
.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:var(--primary);line-height:1}
.hero-ticker .ht-num .text-accent{color:var(--primary)}
.hero-ticker .ht-label{font-size:.84rem;color:var(--text-muted);margin-top:5px}

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

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

/* ---------- Trust bar ---------- */
.trust-bar{background:#fff;padding:30px 0;border-bottom:1px solid var(--border)}
.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:var(--surface);border:1px solid var(--border);color:var(--text-secondary);font-weight:600;font-size:.88rem;padding:10px 18px;border-radius:var(--radius-pill)}
.trust-pill svg{width:17px;height:17px;color:var(--primary)}

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

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

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

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

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

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

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

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

/* ---------- Split section ---------- */
.split{display:grid;grid-template-columns:1fr;gap:40px;align-items:center}
@media(min-width:1024px){.split{grid-template-columns:1fr 1fr;gap:64px}.split.reverse .split-media{order:2}}
.split-media{position:relative}
.split-media img{width:100%;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);aspect-ratio:4/3;object-fit:cover}
.split-media .badge-float{position:absolute;bottom:-22px;left:24px;background:#fff;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);padding:16px 22px;display:flex;align-items:center;gap:14px}
.split-media .badge-float .bf-num{font-size:1.9rem;font-weight:800;color:var(--primary);line-height:1}
.split-media .badge-float .bf-label{font-size:.82rem;color:var(--text-secondary);max-width:130px}
.split-body h2{margin-bottom:16px}
.split-body p{margin-bottom:14px}
.split-body .check-list{margin:20px 0 26px}
.check-list{display:flex;flex-direction:column;gap:12px}
.check-list li{display:flex;align-items:flex-start;gap:11px;color:var(--text-secondary)}
.check-list li svg{width:20px;height:20px;color:var(--accent-dark);flex-shrink:0;margin-top:2px}
.check-list li b{color:var(--text);font-weight:700}

/* ---------- Process ---------- */
.process{background:linear-gradient(180deg,var(--tint),var(--surface-2));color:var(--text);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.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(--primary);background:#fff;color:var(--primary);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.2rem;margin-bottom:18px}
.process-step h3{color:var(--text);font-size:1.08rem;margin-bottom:8px}
.process-step p{color:var(--text-secondary);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(11,26,56,.86) 0%,rgba(11,26,56,.12) 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)}}
/* Light review card — same language as the homepage .tq-card. */
.testi-card{background:#fff;border:1px solid var(--border);border-top:3px solid var(--primary);border-radius:var(--radius-lg);padding:30px 28px;display:flex;flex-direction:column;height:100%;box-shadow:var(--shadow-sm);transition:transform .25s ease,box-shadow .25s ease}
.testi-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
.testi-stars{display:flex;gap:3px;margin-bottom:16px}
.testi-stars svg{width:18px;height:18px;color:#E8A33D}
.testi-quote{color:var(--text);font-size:1rem;line-height:1.7;flex:1;margin-bottom:20px}
.testi-author{display:flex;align-items:center;gap:13px;padding-top:18px;border-top:1px solid var(--border)}
.testi-avatar{width:46px;height:46px;border-radius:50%;background:var(--secondary);color:var(--primary);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.05rem;flex-shrink:0}
.testi-meta .ta-name{font-weight:800;color:var(--text);font-size:.95rem}
.testi-meta .ta-loc{font-size:.82rem;color:var(--text-muted)}
@media(prefers-reduced-motion:reduce){.testi-card,.testi-card:hover{transition:none;transform:none}}

/* ---------- 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 ---------- */
/* The ONE strong colour band per page — brand blue, not near-black. */
.cta-dark{position:relative;background:linear-gradient(135deg,var(--primary) 0%,var(--primary-darker) 100%);color:#fff;overflow:hidden}
.cta-dark::before{content:"";position:absolute;width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(51,217,242,.16),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,.07),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:.20;z-index:0}
.cta-band::before{content:"";position:absolute;inset:0;background:linear-gradient(120deg,rgba(16,47,107,.95),rgba(19,42,87,.88));z-index:1}
.cta-form-grid{position:relative;z-index:2;display:grid;grid-template-columns:1fr;gap:44px;align-items:center}
@media(min-width:1024px){.cta-form-grid{grid-template-columns:1.05fr .95fr;gap:60px}}
.cta-form-grid .cfg-text h2{color:#fff;margin-bottom:16px}
.cta-form-grid .cfg-text p{color:rgba(255,255,255,.78);margin-bottom:24px}
.cfg-contact{display:flex;flex-direction:column;gap:16px;margin-top:8px}
.cfg-contact .ci{display:flex;align-items:center;gap:14px}
.cfg-contact .ci-ico{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.1);display:flex;align-items:center;justify-content:center;color:var(--accent);flex-shrink:0}
.cfg-contact .ci-ico svg{width:20px;height:20px}
.cfg-contact .ci-label{font-size:.78rem;color:rgba(255,255,255,.6);text-transform:uppercase;letter-spacing:.06em}
.cfg-contact .ci-val{font-weight:700;color:#fff;font-size:1rem}
.cta-form{background:#fff;border-radius:var(--radius-lg);padding:30px 28px;box-shadow:var(--shadow-lg)}
.cta-form h3{color:var(--text);font-size:1.3rem;margin-bottom:6px}
.cta-form .cf-sub{color:var(--text-secondary);font-size:.9rem;margin-bottom:20px}

/* ---------- Forms ---------- */
.form-group{margin-bottom:16px}
.form-row{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:560px){.form-row{grid-template-columns:1fr 1fr}}
.form-label{display:block;font-weight:600;font-size:.86rem;color:var(--text);margin-bottom:7px}
.form-label .req{color:#b23b30}   /* QA: was #d05a4f (3.99:1) — now 5.9:1, WCAG AA */
.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}

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

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

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

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

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

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

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

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

/* ---------- Footer ---------- */
.site-footer{background:linear-gradient(180deg,var(--dark) 0%,#0F2247 100%);color:rgba(255,255,255,.72);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)}}
/* Five columns of content, so declare five once the row is wide enough — the old
   4-column track left "Get In Touch" orphaned on its own full-width row. */
@media(min-width:1024px){.footer-grid{grid-template-columns:repeat(3,1fr);gap:34px 30px}}
@media(min-width:1200px){.footer-grid{grid-template-columns:1.5fr 1fr 1fr 1fr 1.25fr;gap:38px 28px}}
.footer-logo{height:46px;width:auto;margin-bottom:16px}
.footer-about{font-size:.92rem;line-height:1.7;margin-bottom:18px;max-width:340px}
.footer-social{display:flex;gap:10px}
.footer-social a{width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.08);display:flex;align-items:center;justify-content:center;color:rgba(255,255,255,.78);transition:background .2s,color .2s}
.footer-social a:hover{background:var(--accent);color:var(--text)}
.footer-social svg{width:18px;height:18px}
.footer-col h4{color:#fff;font-size:.95rem;font-weight:800;letter-spacing:.03em;margin-bottom:18px}
.footer-col ul{display:flex;flex-direction:column;gap:11px}
.footer-col ul li a{font-size:.91rem;color:rgba(255,255,255,.66);transition:color .15s,padding-left .15s}
.footer-col ul li a:hover{color:var(--accent);padding-left:3px}
.footer-contact-item{display:flex;gap:11px;margin-bottom:15px;font-size:.9rem}
.footer-contact-item svg{width:17px;height:17px;color:var(--accent);flex-shrink:0;margin-top:3px}
.footer-contact-item .fci-label{color:rgba(255,255,255,.5);font-size:.76rem;text-transform:uppercase;letter-spacing:.05em}
.footer-contact-item a:hover,.footer-contact-item .fci-val:hover{color:#fff}
.footer-contact-item .fci-val{color:rgba(255,255,255,.82);font-weight:600}
.footer-bottom{border-top:1px solid rgba(255,255,255,.1);padding:20px 0}
.footer-bottom-inner{display:flex;flex-direction:column;gap:10px;align-items:center;text-align:center;font-size:.84rem;color:rgba(255,255,255,.55)}
@media(min-width:768px){.footer-bottom-inner{flex-direction:row;justify-content:space-between;text-align:left}}
.footer-bottom a{color:rgba(255,255,255,.55)}
.footer-bottom a:hover{color:var(--accent)}
.footer-legal{display:flex;gap:18px}

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

/* Scroll progress bar */
.scroll-progress{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,var(--primary),var(--accent-dark));z-index:1200;transition:width .08s linear}

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

/* Soft brand glow over the light hero — static, low-contrast, no animation. */
.hero-dark::after{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:radial-gradient(circle at 12% 18%,rgba(27,79,168,.07),transparent 42%),
             radial-gradient(circle at 88% 82%,rgba(51,217,242,.09),transparent 44%)}

/* 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(27,79,168,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(27,79,168,.055) 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 14px 34px rgba(20,40,70,.10);border-color:var(--primary)}
.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 */
/* Restrained: a static brand-blue lift instead of the old pulsing halo. */
.btn-glow{position:relative;box-shadow:0 6px 18px rgba(27,79,168,.24)}

/* 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(--primary),var(--accent-dark));opacity:.95}
.section-header.left h2::after{left:0;transform:none}

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

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

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

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

/* ---------- Contrast safety ----------
   Light bands (.hero-dark, .process, .section.dark) take dark ink; the two remaining
   strong bands (.cta-dark, .cta-band) and the footer take white. Keep these paired. */
.hero-dark .eyebrow,.process .eyebrow,.section.dark .eyebrow{color:var(--primary);background:var(--secondary)}
.cta-dark .eyebrow,.cta-band .eyebrow{color:var(--accent);background:rgba(255,255,255,.12)}
.process h2,.process h3,.process h4{color:var(--text)}
.process .section-header p,.process p{color:var(--text-secondary)}
.cta-dark h2,.cta-dark h3,.cta-band h2,.cta-band h3{color:#fff}
/* ...but the white form card those bands carry is a LIGHT surface: dark ink there. */
.cta-dark .cta-form h2,.cta-dark .cta-form h3,.cta-band .cta-form h2,.cta-band .cta-form h3{color:var(--text)}
.sidebar-cta h2,.sidebar-cta h3,.sidebar-cta h4,.quick-response h2,.quick-response h3,.quick-response h4{color:#fff}
.hero-dark h2,.hero-dark h3{color:var(--text)}

/* Ghost/outline buttons that used to sit on a dark band now sit on a LIGHT one. */
.hero-dark .btn-outline,.section.dark .btn-outline,.process .btn-outline{background:#fff;color:var(--primary);border-color:var(--border-strong)}
.hero-dark .btn-outline:hover,.section.dark .btn-outline:hover,.process .btn-outline:hover{background:var(--secondary);color:var(--primary-dark);border-color:var(--primary)}
/* ...and the primary CTA flips to the bright accent where the band IS strong. */
.cta-dark .btn-primary,.cta-band .btn-primary,.site-footer .btn-primary{background:var(--accent);color:#06263A;border-color:var(--accent)}
.cta-dark .btn-primary:hover,.cta-band .btn-primary:hover,.site-footer .btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark);box-shadow:0 8px 22px rgba(27,191,216,.35)}
/* ...except inside the white form card those bands carry — that is a LIGHT surface. */
.cta-form .btn-primary,.sidebar-cta .cta-form .btn-primary{background:var(--primary);color:#fff;border-color:var(--primary)}
.cta-form .btn-primary:hover{background:var(--primary-dark);border-color:var(--primary-dark);box-shadow:0 8px 20px rgba(27,79,168,.28)}
.cta-dark .btn-outline-dark,.cta-band .btn-outline-dark{background:transparent;color:#fff;border-color:rgba(255,255,255,.5)}
.cta-dark .btn-outline-dark:hover,.cta-band .btn-outline-dark:hover{background:#fff;color:var(--primary);border-color:#fff}

/* ---------- Quote FAB ---------- */
.quote-fab{position:fixed;right:22px;bottom:22px;z-index:1090;display:inline-flex;align-items:center;gap:10px;background:var(--primary);color:#fff;font-weight:700;font-size:.94rem;padding:14px 22px;border-radius:var(--radius-pill);box-shadow:0 8px 26px rgba(19,42,87,.26);transition:transform .2s,box-shadow .2s,background .2s}
.quote-fab:hover{transform:translateY(-3px);background:var(--primary-dark);box-shadow:0 14px 34px rgba(19,42,87,.32)}
.quote-fab svg{width:19px;height:19px}
@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(12,26,52,.55);backdrop-filter:blur(4px);display:none;align-items:flex-start;justify-content:center;padding:40px 16px;overflow-y:auto}
.modal-overlay.active{display:flex}
.modal{background:#fff;border-radius:var(--radius-lg);max-width:560px;width:100%;box-shadow:var(--shadow-lg);animation:modal-in .25s ease}
@keyframes modal-in{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
.modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:24px 26px 0}
.modal-header h3{font-size:1.35rem;margin-bottom:5px}
.modal-header p{font-size:.9rem}
.modal-close{width:38px;height:38px;border-radius:50%;background:var(--surface);color:var(--text);display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s}
.modal-close:hover{background:var(--border)}
.modal-close svg{width:20px;height:20px}
.modal-body{padding:20px 26px 28px}
.modal-success{display:none;text-align:center;padding:36px 26px}
.modal-success.show{display:block}
.modal-success .ms-ico{width:64px;height:64px;border-radius:50%;background:var(--accent);color:var(--text);display:flex;align-items:center;justify-content:center;margin:0 auto 18px}
.modal-success .ms-ico svg{width:32px;height:32px}
.modal-success h3{margin-bottom:8px}

/* ---------- Reveal animation ---------- */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.brand-track,.quote-fab{animation:none}}

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

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

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

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

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

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

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

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

/* ==========================================================================
   EXTENDED COMPONENT LAYER — video testimonials, video lightbox, founder story,
   blog index + article, events, datasheet library, shared small bits.
   Appended only; nothing above this banner is restructured. Breakpoints reuse the
   widths already in this file (480 / 560 / 640 / 768 / 1024 / 1200 min-width,
   479 / 560 / 639 / 767 max-width) so every band breaks at the same place.
   ========================================================================== */

/* ---------- A. Video testimonial play-cards ---------- */
.video-testi-grid{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:640px){.video-testi-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.video-testi-grid{grid-template-columns:repeat(3,1fr)}}
/* LIGHT video card: white surface, real thumbnail, dark title, blue watch link. The
   7-band prism stripe stays — it is the Centerprism "full spectrum" brand signature. */
.video-testi-card{position:relative;display:flex;flex-direction:column;width:100%;min-height:230px;padding:0;text-align:left;font-family:inherit;color:var(--text);background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;cursor:pointer;box-shadow:var(--shadow-sm);transition:transform .25s cubic-bezier(.2,.7,.3,1),box-shadow .25s ease,border-color .25s ease}
/* spectrum strip — the Centerprism brand chevron colours */
.video-testi-card::after{content:"";position:absolute;top:0;left:0;right:0;height:4px;z-index:3;pointer-events:none;background:linear-gradient(90deg,#7FB241 0 14.28%,#A32027 14.28% 28.57%,#7A4E7F 28.57% 42.85%,#F5A02B 42.85% 57.14%,#2F6B54 57.14% 71.42%,#4A9BD4 71.42% 85.71%,#8C8CD4 85.71% 100%)}
.video-testi-card:hover,.video-testi-card:focus-visible{transform:translateY(-6px);box-shadow:var(--shadow-lg);border-color:var(--primary)}
.video-testi-card:focus-visible{outline:3px solid var(--primary);outline-offset:3px}
.vt-media{position:relative;flex:1;display:grid;place-items:center;padding:36px 22px 28px;min-height:126px;background:linear-gradient(150deg,var(--secondary) 0%,var(--surface-2) 100%);border-bottom:1px solid var(--border)}
.vt-play{width:62px;height:62px;border-radius:50%;background:#fff;color:var(--primary);display:grid;place-items:center;flex-shrink:0;box-shadow:0 6px 20px rgba(12,26,52,.30);transition:transform .25s ease,background .2s ease,color .2s ease}
.vt-play svg{width:22px;height:22px}
.video-testi-card:hover .vt-play,.video-testi-card:focus-visible .vt-play{transform:scale(1.08);background:var(--primary);color:#fff}
.vt-brandmark{position:absolute;top:14px;right:14px;width:38px;height:auto;opacity:.22;color:var(--primary);pointer-events:none}
/* With a real thumbnail behind it the watermark is noise — the thumbnail is the image. */
.vt-media.has-thumb .vt-brandmark{display:none}
.vt-brandmark svg{width:38px;height:38px}
.vt-body{padding:20px 22px 22px}
/* display:block so a <span>-authored name/role inside the <button> still stacks */
.vt-name{display:block;color:var(--text);font-weight:800;font-size:1.05rem;line-height:1.3;letter-spacing:-.01em}
.vt-role{display:block;color:var(--text-muted);font-size:.85rem;margin-top:3px}
.vt-watch{display:inline-flex;align-items:center;gap:7px;margin-top:12px;color:var(--primary);font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em}
.vt-watch svg{width:15px;height:15px;transition:transform .18s ease}
.video-testi-card:hover .vt-watch svg,.video-testi-card:focus-visible .vt-watch svg{transform:translateX(3px)}

/* ---------- B. Video lightbox ---------- */
.video-modal-overlay{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;padding:20px;background:rgba(8,14,28,.88);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;visibility:hidden;transition:opacity .22s ease,visibility .22s ease}
.video-modal-overlay.active{opacity:1;visibility:visible}
.video-modal{position:relative;width:min(1000px,100%)}
.vm-frame{position:relative;width:100%;aspect-ratio:16/9;background:#000;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-lg)}
.vm-frame iframe{width:100%;height:100%;border:0;display:block}
.vm-close{position:absolute;top:-46px;right:0;z-index:2;width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.14);color:#fff;display:grid;place-items:center;transition:background .18s ease}
.vm-close:hover{background:rgba(255,255,255,.26)}
.vm-close svg{width:20px;height:20px}
@media(max-width:639px){.vm-close{top:8px;right:8px;background:rgba(8,14,28,.62)}}

/* ---------- C. Founder story ---------- */
.founder-quote{max-width:860px;margin-left:auto;margin-right:auto;padding:28px 32px;background:var(--secondary);border-left:4px solid var(--accent);border-radius:var(--radius-md)}
.founder-quote .fq-mark{display:block;font-size:40px;line-height:.8;font-weight:800;color:var(--primary);opacity:.25;margin-bottom:6px}
.founder-quote .fq-text{font-size:1.3rem;line-height:1.55;font-weight:600;color:var(--text);margin:0}
.founder-quote .fq-attr{font-size:.82rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--primary);margin-top:14px}
.dark .founder-quote{background:rgba(255,255,255,.06);border-left-color:var(--accent)}
.dark .founder-quote .fq-mark{color:#fff;opacity:.3}
.dark .founder-quote .fq-text{color:#fff}
.dark .founder-quote .fq-attr{color:var(--accent)}
@media(max-width:639px){.founder-quote{padding:22px 20px}.founder-quote .fq-text{font-size:1.12rem}}
.founder-pillars{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:640px){.founder-pillars{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.founder-pillars{grid-template-columns:repeat(4,1fr)}}
.founder-pillar{position:relative;display:flex;flex-direction:column;height:100%;padding:26px;background:var(--bg);border:1px solid var(--border);border-top:3px solid var(--primary);border-radius:var(--radius-lg);transition:transform .2s ease,box-shadow .2s ease}
.founder-pillar:hover{transform:translateY(-5px);box-shadow:var(--shadow-md)}
.founder-pillar .fp-num{font-size:2.4rem;font-weight:800;line-height:1;color:var(--primary);opacity:.35}
.founder-pillar .fp-title{font-size:1.08rem;font-weight:800;color:var(--text);margin:10px 0 8px}
.founder-pillar .fp-text{font-size:.95rem;color:var(--text-secondary)}
.author-card{display:flex;align-items:center;gap:14px;padding:16px 18px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md)}
.author-card .ac-avatar{width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,var(--primary),var(--primary-darker));color:#fff;font-weight:800;font-size:1.1rem;display:grid;place-items:center;flex-shrink:0}
.author-card .ac-avatar img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.author-card .ac-body{min-width:0}
.author-card .ac-name{font-size:.98rem;font-weight:800;color:var(--text)}
.author-card .ac-role{font-size:.85rem;color:var(--text-muted)}

/* ---------- D. Blog index ---------- */
.blog-grid{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:640px){.blog-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.blog-grid{grid-template-columns:repeat(3,1fr)}}
/* The WHOLE card is one <a> — never nest another anchor inside it. */
.blog-card{display:flex;flex-direction:column;height:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.blog-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-md);border-color:var(--primary)}
.blog-card .bc-media{aspect-ratio:16/10;overflow:hidden;background:var(--surface-2)}
.blog-card .bc-media img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.blog-card:hover .bc-media img{transform:scale(1.05)}
.blog-card .bc-body{padding:22px;flex:1;display:flex;flex-direction:column}
.bc-tag{display:inline-block;align-self:flex-start;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--primary);background:var(--secondary);padding:5px 10px;border-radius:var(--radius-pill)}
.bc-title{font-size:1.12rem;font-weight:800;line-height:1.35;color:var(--text);margin:12px 0 8px}
.bc-excerpt{font-size:.93rem;color:var(--text-secondary);flex:1}
.bc-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:14px;font-size:.8rem;color:var(--text-muted)}
.bc-meta>*+*::before{content:"";display:inline-block;width:4px;height:4px;border-radius:50%;background:var(--border);margin-right:9px;vertical-align:middle}
.bc-meta svg{width:14px;height:14px}
.bc-more{display:inline-flex;align-items:center;gap:6px;margin-top:14px;font-size:.88rem;font-weight:700;color:var(--primary)}
.bc-more svg{width:15px;height:15px;transition:transform .18s ease}
.blog-card:hover .bc-more svg{transform:translateX(4px)}
@media(min-width:1024px){
  .blog-grid .blog-card.featured{grid-column:span 2;flex-direction:row;align-items:stretch}
  .blog-grid .blog-card.featured .bc-media{flex:0 0 46%;aspect-ratio:auto;min-height:290px}
  .blog-grid .blog-card.featured .bc-body{flex:1;min-width:0;padding:30px 32px;justify-content:center}
  .blog-grid .blog-card.featured .bc-title{font-size:1.45rem}
  .blog-grid .blog-card.featured .bc-excerpt{flex:0 1 auto;font-size:.98rem}
}

/* ---------- E. Blog article ---------- */
.post-meta{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:14px;font-size:.88rem;color:rgba(255,255,255,.78)}
.post-meta>*{display:inline-flex;align-items:center;gap:7px}
.post-meta svg{width:15px;height:15px;color:var(--accent)}
.post-body{max-width:760px;margin-left:auto;margin-right:auto;color:var(--text-secondary);font-size:1.03rem;line-height:1.78}
.post-body h2{font-size:1.55rem;font-weight:800;line-height:1.24;color:var(--text);margin:2.2em 0 .6em;scroll-margin-top:90px}
.post-body h3{font-size:1.18rem;font-weight:800;line-height:1.3;color:var(--text);margin:1.8em 0 .5em}
.post-body p{color:inherit;font-size:inherit;margin-bottom:1.15em}
.post-body ul,.post-body ol{margin:0 0 1.3em 1.15em}
.post-body ul{list-style:disc}
.post-body ol{list-style:decimal}
.post-body li{margin-bottom:.5em}
.post-body ul li::marker{color:var(--accent)}
.post-body strong{color:var(--text);font-weight:700}
.post-body a{color:var(--primary);font-weight:600;border-bottom:1px solid rgba(27,79,168,.35);transition:border-color .15s ease}
.post-body a:hover{border-bottom-color:var(--primary)}
.post-body blockquote{margin:1.8em 0;padding:18px 24px;background:var(--secondary);border-left:4px solid var(--accent);border-radius:var(--radius-md);color:var(--text);font-weight:600;font-size:1.06rem}
.post-body blockquote p{color:var(--text);font-size:inherit;margin-bottom:0}
.post-body figure{margin:1.8em 0}
.post-body figure img{width:100%;border-radius:var(--radius-md)}
.post-body figcaption{font-size:.85rem;color:var(--text-muted);margin-top:10px;text-align:center}
.post-body hr{border:0;border-top:1px solid var(--border);margin:2.4em 0}
.post-body table{width:100%;border-collapse:collapse;font-size:.93rem}
.post-body th,.post-body td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left}
.post-body th{color:var(--text);font-weight:800;background:var(--surface)}
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:1.6em 0}
.table-scroll table{margin:0}
.post-toc{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);padding:20px 24px;margin:0 0 2em}
.post-toc h4{font-size:.8rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;color:var(--text-muted);margin-bottom:10px}
.post-toc ol{list-style:decimal;margin:0 0 0 1.1em}
.post-toc li{margin-bottom:6px}
.post-toc a{color:var(--primary);font-weight:600;font-size:.95rem;border-bottom:0}
.post-toc a:hover{color:var(--primary-darker);text-decoration:underline}
.post-share{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:2.4em;padding-top:1.6em;border-top:1px solid var(--border)}
.post-share .ps-label,.post-share>span{font-size:.82rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}
.post-share a{width:38px;height:38px;border-radius:50%;background:var(--surface);color:var(--primary);display:grid;place-items:center;border-bottom:0;transition:background .18s ease,color .18s ease}
.post-share a:hover{background:var(--primary);color:#fff}
.post-share svg{width:17px;height:17px}
.post-nav{display:grid;grid-template-columns:1fr;gap:16px;margin-top:2.4em}
@media(min-width:640px){.post-nav{grid-template-columns:1fr 1fr}}
.post-nav a{display:block;padding:16px 18px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);transition:border-color .18s ease,box-shadow .18s ease}
.post-nav a:hover{border-color:var(--primary);box-shadow:var(--shadow-sm)}
.post-nav .pn-label{font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}
.post-nav .pn-title{font-size:.95rem;font-weight:800;color:var(--text);margin-top:4px}
.post-nav .pn-next{text-align:right}

/* ---------- F. Events ---------- */
.event-list{display:flex;flex-direction:column;gap:18px;max-width:940px;margin-left:auto;margin-right:auto}
.event-row{display:grid;grid-template-columns:108px 1fr auto;gap:22px;align-items:center;padding:22px 24px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);transition:border-color .2s ease,box-shadow .2s ease}
.event-row:hover{border-color:var(--primary);box-shadow:var(--shadow-md)}
.event-date{display:grid;place-items:center;padding:14px 10px;text-align:center;background:var(--secondary);border:1px solid var(--border);border-radius:var(--radius-md)}
.event-date .ed-mon{font-size:.74rem;font-weight:800;text-transform:uppercase;letter-spacing:.08em;color:var(--primary)}
.event-date .ed-day{font-size:1.9rem;font-weight:800;line-height:1;color:var(--text)}
.event-date .ed-tag{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-secondary);margin-top:4px}
/* no fixed calendar date (always-open / on-demand): .ed-day carries a 3–6 character word */
.event-date.recurring{background:linear-gradient(140deg,var(--primary),var(--primary-darker));border-color:transparent;padding:14px 8px}
.event-date.recurring .ed-day{font-size:1.3rem;letter-spacing:-.01em;color:#fff}
.event-date.recurring .ed-tag{color:#fff}
.event-date.recurring .ed-mon{color:var(--accent)}
.event-body .event-title{font-size:1.15rem;font-weight:800;line-height:1.3;color:var(--text)}
.event-body .event-where{display:inline-flex;align-items:center;gap:7px;font-size:.88rem;color:var(--text-muted);margin-top:5px}
.event-body .event-where svg{width:15px;height:15px;color:var(--primary)}
.event-body .event-desc{font-size:.94rem;color:var(--text-secondary);margin-top:9px}
.event-badge{display:inline-block;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;padding:4px 10px;border-radius:var(--radius-pill);background:var(--secondary);color:var(--primary);margin-bottom:8px}
.event-badge.live{background:rgba(51,217,242,.18);color:var(--primary-darker)}
.event-actions{display:flex;flex-direction:column;gap:8px;min-width:168px}
/* Past events read as archived through a greyed date tile, not opacity — fading the
   whole row pushed muted text below AA contrast. */
.event-list .event-row.past .event-date{background:var(--surface-2)}
.event-list .event-row.past .event-date .ed-mon{color:var(--text-secondary)}
.event-list .event-row.past .event-date .ed-day{color:var(--text-secondary)}
@media(max-width:767px){
  .event-row{grid-template-columns:1fr;gap:16px;padding:20px}
  .event-date{justify-self:start;display:inline-flex;flex-wrap:wrap;align-items:baseline;justify-content:flex-start;gap:2px 10px;padding:9px 16px;text-align:left;border-radius:var(--radius-pill)}
  .event-date .ed-day{font-size:1.25rem}
  .event-date .ed-tag{margin-top:0}
  .event-date.recurring .ed-day{font-size:1.05rem}
  .event-actions{width:100%;min-width:0;flex-direction:row;flex-wrap:wrap}
  .event-actions .btn{flex:1 1 150px}
}

/* ---------- G. Datasheet library ---------- */
.ds-grid{display:grid;grid-template-columns:1fr;gap:22px}
@media(min-width:480px){.ds-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:768px){.ds-grid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1200px){.ds-grid{grid-template-columns:repeat(4,1fr)}}
.ds-card{display:flex;flex-direction:column;height:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.ds-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-md);border-color:var(--primary)}
.ds-cover{display:block;padding:18px 18px 0;background:var(--surface-2)}
.ds-cover img{width:100%;aspect-ratio:8.5/11;object-fit:cover;object-position:top;border:1px solid var(--border);border-bottom:0;border-radius:var(--radius-sm) var(--radius-sm) 0 0;box-shadow:0 -2px 14px rgba(20,40,46,.10);transition:transform .35s ease}
.ds-card:hover .ds-cover img{transform:translateY(-4px)}
.ds-body{padding:18px 20px 20px;flex:1;display:flex;flex-direction:column}
.ds-title{font-size:1rem;font-weight:800;line-height:1.35;color:var(--text)}
.ds-desc{font-size:.89rem;color:var(--text-secondary);margin-top:7px;flex:1}
.ds-meta{display:inline-flex;align-items:center;gap:7px;margin-top:12px;font-size:.74rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}
.ds-meta svg{width:14px;height:14px}
.ds-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.ds-actions .btn{flex:1 1 auto;min-width:0}

/* ---------- H. Shared small bits ---------- */
.anchor-offset{scroll-margin-top:96px}
.muted-note{font-size:.85rem;color:var(--text-muted)}
.pill-row{display:flex;flex-wrap:wrap;gap:8px}
.pill{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;font-weight:700;padding:6px 12px;border-radius:var(--radius-pill);background:var(--secondary);color:var(--primary);border:1px solid var(--border)}
.pill svg{width:14px;height:14px}
.pill.is-active{background:var(--primary);color:#fff;border-color:var(--primary)}
.pill-row button.pill{cursor:pointer;font-family:inherit}

/* ---------- Reduced motion for everything added above ---------- */
@media(prefers-reduced-motion:reduce){
  .vt-play{animation:none}
  .video-testi-card,.blog-card,.ds-card,.founder-pillar,.event-row,.video-modal-overlay,
  .blog-card .bc-media img,.ds-cover img,.vt-play,.vt-watch svg,.bc-more svg{transition:none}
  .video-testi-card:hover,.blog-card:hover,.ds-card:hover,.founder-pillar:hover{transform:none}
  .video-testi-card:hover .vt-play,.blog-card:hover .bc-media img,.ds-card:hover .ds-cover img,
  .video-testi-card:hover .vt-watch svg,.blog-card:hover .bc-more svg{transform:none}
}

/* =====================================================================
   DESIGN-QA OVERRIDES — appended by the design/content QA pass.
   Small, additive corrections only. Nothing above this line was edited.
   ===================================================================== */

/* QA-1  Footer intro paragraph was inheriting a light-band token
   (--text-secondary #3C4D68) on the navy footer -> 2.0:1 contrast,
   effectively invisible on every page. Bring it onto the footer's own
   white-on-dark scale (~8:1). */
.site-footer .footer-about{color:rgba(255,255,255,.72)}

/* QA-2  --text-muted (#7B8EA8) measured 3.35:1 on --bg and 3.12:1 on
   --surface — under WCAG AA for the small meta text it carries
   (.ds-meta, .bc-meta, .form-note, .ac-role, .post-toc h4, .pn-label,
   .catalog-count, .event-where, breadcrumbs). Darkened to clear 4.5:1
   on both light bands. Every --text-muted rule in this sheet targets a
   light band; the one dark-band use (.event-date.recurring .ed-tag)
   already overrides to #fff, so nothing regresses. */
:root{--text-muted:#5F7089}

/* QA-3  .post-body tables sit in a .table-scroll wrapper, but table
   width:100% made them compress to ~335px at 375 instead of scrolling —
   three-column comparisons broke to one word per line. Give the table a
   floor so the wrapper actually scrolls on small screens. */
@media(max-width:600px){.post-body .table-scroll table{min-width:520px}}

/* ---------- H. Events (range chips, trade-show badge) + Video thumbs + Careers ---------- */
.event-date.range .ed-day{font-size:1.35rem;letter-spacing:-.03em}
.event-badge.trade{background:rgba(245,160,43,.16);color:#8A4A00}
.event-row.trade:hover{border-color:#F5A02B}

.vt-media.has-thumb{padding:0;aspect-ratio:16/9;min-height:0;flex:none;overflow:hidden}
.vt-media.has-thumb::before{content:"";position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(12,26,52,.04) 0%,rgba(12,26,52,.22) 100%)}
.vt-media.has-thumb .vt-thumb{width:100%;height:100%;object-fit:cover;display:block}
.vt-media.has-thumb .vt-play{position:absolute;z-index:2}

.job-list{display:flex;flex-direction:column;gap:18px;max-width:860px;margin-left:auto;margin-right:auto}
.job-card{padding:28px 30px;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);display:flex;flex-direction:column;height:100%;transition:border-color .2s ease,box-shadow .2s ease}
.job-card:hover{border-color:var(--primary);box-shadow:var(--shadow-md)}
.job-kicker{display:inline-block;font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.07em;padding:4px 10px;border-radius:var(--radius-pill);background:var(--secondary);color:var(--primary);margin-bottom:10px}
.job-card h3{font-size:1.28rem;font-weight:800;line-height:1.3;color:var(--text);margin:0}
.job-salary{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:.95rem;font-weight:700;color:var(--primary)}
.job-card p{font-size:.98rem;color:var(--text-secondary);margin-top:12px;line-height:1.6}
.job-card .job-actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:18px}
@media(max-width:639px){.job-card{padding:22px 18px}}

/* ==========================================================================
   2026 LIGHT RETHEME — new components
   Added for: the upcoming-event strip (MWFA), the written-testimonial grid, and the
   shared "one CTA under a section" row. All light-band components: white/soft cards,
   1px borders, dark ink, brand blue as the only accent.
   ========================================================================== */

/* ---------- Section-footer CTA row (video + testimonial sections) ---------- */
.section-cta-row{display:flex;flex-wrap:wrap;justify-content:center;gap:14px;margin-top:44px}

/* ---------- Upcoming event strip (homepage) ----------
   Deliberately compact — one row on desktop — so it flags the show without competing
   with the hero. Stacks to a readable card below 900px. */
.event-strip{background:linear-gradient(90deg,var(--secondary) 0%,var(--tint) 55%,#fff 100%);border-bottom:1px solid var(--border)}
.es-inner{display:flex;flex-direction:column;align-items:flex-start;gap:18px;padding:26px 0;border-left:4px solid var(--primary);padding-left:20px}
@media(min-width:900px){.es-inner{flex-direction:row;align-items:center;gap:26px;padding:22px 0 22px 22px}}
.es-date{flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;width:68px;height:68px;border-radius:var(--radius-md);background:var(--primary);color:#fff;line-height:1}
.es-mon{font-size:.72rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
.es-day{font-size:1.75rem;font-weight:800;margin-top:3px}
.es-body{flex:1;min-width:0}
.es-kicker{display:block;font-size:.71rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:var(--primary);margin-bottom:5px}
.es-title{font-size:1.12rem;font-weight:800;letter-spacing:-.01em;line-height:1.3;color:var(--text);margin:0}
.es-meta{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px;margin-top:7px;font-size:.9rem;color:var(--text-secondary)}
.es-meta .es-dot{color:var(--text-muted)}
.es-meta .es-booth{font-weight:800;color:var(--primary);background:#fff;border:1px solid var(--border-strong);border-radius:var(--radius-pill);padding:2px 11px;font-size:.82rem}
.es-actions{display:flex;flex-wrap:wrap;gap:10px;flex-shrink:0}
@media(max-width:420px){.es-actions .btn{flex:1 1 100%}}

/* ---------- Written testimonial cards ---------- */
.testimonial-quote-grid{display:grid;grid-template-columns:1fr;gap:22px}
@media(min-width:720px){.testimonial-quote-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1040px){.testimonial-quote-grid{grid-template-columns:repeat(3,1fr)}}
.tq-card{display:flex;flex-direction:column;margin:0;padding:30px 28px 26px;background:#fff;border:1px solid var(--border);border-top:3px solid var(--primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);transition:box-shadow .25s ease,transform .25s ease}
.tq-card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md)}
.tq-mark{width:30px!important;height:30px!important;color:var(--accent-dark);opacity:.55;margin-bottom:14px}
.tq-text{flex:1;margin:0;font-size:1.02rem;line-height:1.62;color:var(--text);font-weight:500}
.tq-attr{display:flex;align-items:center;gap:13px;margin-top:22px;padding-top:18px;border-top:1px solid var(--border)}
.tq-avatar{display:grid;place-items:center;width:42px;height:42px;flex-shrink:0;border-radius:50%;background:var(--secondary);color:var(--primary);font-weight:800;font-size:1.05rem}
.tq-name{display:block;font-weight:800;color:var(--text);font-size:.98rem;line-height:1.25}
.tq-meta{display:block;font-size:.82rem;color:var(--text-muted);margin-top:2px}

/* ---------- "Hear it on camera" sub-head inside the testimonial section ---------- */
.testimonial-video-head{text-align:center;margin:60px 0 30px}
.testimonial-video-head h3{font-size:1.35rem;color:var(--text)}
.testimonial-video-head p{margin-top:6px;color:var(--text-secondary);font-size:.98rem}

@media(prefers-reduced-motion:reduce){
  .tq-card,.tq-card:hover{transition:none;transform:none}
}

/* ---------- Event card fact list (added for the MWFA entry) ---------- */
.event-facts{display:grid;gap:6px;margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}
.event-facts li{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;font-size:.88rem}
.event-facts .ef-k{flex:0 0 96px;font-weight:800;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted)}
.event-facts .ef-v{flex:1;min-width:0;color:var(--text-secondary)}
/* The next event on the calendar gets a quiet brand emphasis, not a loud one. */
.event-row.is-next{border-color:var(--primary);box-shadow:0 6px 22px rgba(27,79,168,.10)}

/* A product page with only one or two recordings should not leave a 3-column gap. */
.video-testi-grid.vtg-narrow{max-width:760px;margin-left:auto;margin-right:auto}
@media(min-width:1024px){.video-testi-grid.vtg-narrow{grid-template-columns:repeat(2,1fr)}}
.video-testi-grid.vtg-single{max-width:520px;margin-left:auto;margin-right:auto}
@media(min-width:640px){.video-testi-grid.vtg-single{grid-template-columns:1fr}}

/* ==========================================================================
   ACCESSIBILITY — visible keyboard focus.
   The reset at the top of this file sets `outline:none` on button/input/select/
   textarea, which removed the browser's default focus ring everywhere except
   .form-control and .video-testi-card. That left keyboard users with no visible
   focus indicator on .btn, .faq-question, .mobile-toggle, nav links and selects.
   Added by the pre-deploy QA gate (check 4). :focus-visible keeps the ring off
   for mouse clicks and on for keyboard traversal.
   ========================================================================== */
a:focus-visible,
button:focus-visible,
select:focus-visible,
textarea:focus-visible,
input:focus-visible,
.btn:focus-visible,
.faq-question:focus-visible,
.mobile-toggle:focus-visible,
.nav-link:focus-visible,
.dropdown-item:focus-visible,
.mm-link:focus-visible{
  outline:3px solid var(--primary);
  outline-offset:3px;
  border-radius:var(--radius-sm);
}
/* On the dark bands the brand navy ring would disappear — use the accent there. */
.site-footer a:focus-visible,
.cta-dark a:focus-visible,
.cta-band a:focus-visible,
.hero-dark a:focus-visible,
.section.dark a:focus-visible,
.site-footer button:focus-visible,
.cta-band button:focus-visible{
  outline-color:var(--accent);
}
@media(prefers-reduced-motion:no-preference){
  .btn:focus-visible{transition:outline-offset .12s ease}
}

/* ==========================================================================
   QA-4 — finish the 2026 light retheme for .section.dark
   .section.dark is a LIGHT band (linear-gradient(--tint -> --surface-2), color:--text).
   The retheme updated its headings (l.242), paragraphs (l.243), eyebrows (l.745) and
   outline buttons (l.756), but three component groups still carried the pre-retheme
   dark-band colours and rendered white-on-light — effectively invisible:
     .stat-num / .stat-label  (white)  -> /industries/wholesale-distribution/,
                                          /products/operations-and-commerce/ (+ inventory-management)
     .dark .founder-quote *   (white / accent) -> /about/founder/
   .stat-bar is genuinely dark (background:var(--primary)) and keeps white — the base
   rules at l.300-306 are untouched; these overrides are scoped to the light band only.
   Found by the pre-deploy QA gate (check 3), verified by screenshot before and after.
   ========================================================================== */
.section.dark .stat-num{color:var(--text)}
.section.dark .stat-num .text-accent{color:var(--primary)}
.section.dark .stat-label{color:var(--text-secondary)}

.section.dark .founder-quote{background:rgba(27,79,168,.05);border-left-color:var(--primary)}
.section.dark .founder-quote .fq-mark{color:var(--primary);opacity:.25}
.section.dark .founder-quote .fq-text{color:var(--text)}
.section.dark .founder-quote .fq-attr{color:var(--primary)}
