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

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

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

:root{
  /* --- FONT: Cormorant Infant for display headings (Marker Law brand) + Inter for body --- */
  --font-sans:'Inter',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --font-display:'Cormorant Infant','Georgia',serif;
  /* --- COLOR: Marker Law brand palette --- */
  --primary:#E8B600;          /* brand gold */
  --primary-dark:#C49D00;
  --primary-darker:#9B7A00;
  --primary-ink:#7F6400;       /* darkest gold — small text on light chips (WCAG AA) */
  --accent:#76B7CD;            /* brand blue */
  --accent-dark:#5EA3BE;
  --secondary:#E8F4FA;         /* light blue tint for chips/eyebrows */
  --bg:#FFFFFF;
  --surface:#F5F7FA;
  --surface-2:#EEF1F5;
  --text:#101E32;              /* dark navy — brand ink */
  --text-secondary:#2A3A52;
  --text-muted:#5A6473;
  --border:#E2E6EA;
  --dark:#101E32;              /* navy — main dark band color */
  --dark-mid:#1A2D47;
  --dark-soft:#213A5A;
  --white:#fff;
  --radius-sm:4px;
  --radius-md:8px;
  --radius-lg:12px;
  --radius-pill:40px;
  --shadow-sm:0 1px 2px rgba(16,30,50,.06);
  --shadow-md:0 6px 20px rgba(16,30,50,.10);
  --shadow-lg:0 18px 50px rgba(16,30,50,.18);
  --maxw:1200px;
  --header-h:72px;
  --topbar-h:0px;
  --header-total:72px;
}

/* ---------- 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%;height:auto;display:block}/* height:auto is REQUIRED: without it an HTML height="N" attribute on an inline-styled img leaks through and stretches the image (a width:100%+aspect-ratio img with no CSS height renders at the attribute height). Canonical responsive-image rule. */
/* SAFETY NET — inline ICONS never balloon. Every icon is a 24-grid line SVG; this gives a
   small default size so an icon dropped in a container without its own rule (faq-ico, ci-ico,
   a bare <ul><li>, an improvised block, etc.) can't render at its 300×150 intrinsic size.
   The specific `.x svg{width:Npx}` component rules below are higher-specificity and override
   this for the known containers. Logos are <img> (PNG/webp), not inline SVG, so they're safe. */
svg{width:1.25em;height:1.25em;flex-shrink:0;vertical-align:middle}
/* SAFETY NET — a large source photo must never blow a section apart (the "images broke in size"
   bug: a 1500px product PNG rendered full-width, one per row). Content images are capped and
   cover-cropped; full-bleed hero/CTA backgrounds and logos are explicitly exempt. The canonical
   card/media wrappers (.cat-card/.img-card/.related-card/.split-media …) still set their own
   fixed aspect ratios; this only catches improvised bare <img>. */
main img:not(.hero-dark-bg):not(.cta-band-bg):not(.logo-img):not(.footer-logo):not([class*="-bg"]){max-height:560px;object-fit:cover}
a{color:inherit;text-decoration:none}
ul,ol{list-style:none}
button,input,select,textarea{font:inherit;color:inherit;border:none;outline:none;background:none}
button{cursor:pointer}
h1,h2,h3,h4,h5,h6{font-family:var(--font-display);font-weight:800;letter-spacing:-.02em;line-height:1.14;color:var(--text)}
h1{font-size:clamp(2.1rem,5vw,3.6rem)}
h2{font-size:clamp(1.7rem,3.4vw,2.5rem)}
h3{font-size:1.3rem}
p{color:var(--text-secondary)}
main{flex:1 0 auto}
::selection{background:var(--accent);color:var(--text)}

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

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

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

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

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

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

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

/* mobile menu */

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

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

/* ---------- Hero (dark) ---------- */
.hero-dark{position:relative;color:#fff;overflow:hidden;background:var(--dark)}
/* Lightened ~10% on 2026-08-23 (client: "lighten up all the backgrounds on the top of each
   page — not extreme, just a little"). Was brightness(.62) / scrim .92/.72/.55. */
.hero-dark-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:saturate(.65) brightness(.72);z-index:0}
.hero-dark::before{content:"";position:absolute;inset:0;background:linear-gradient(120deg,rgba(25,38,43,.84) 0%,rgba(25,38,43,.63) 45%,rgba(44,63,70,.46) 100%);z-index:1}
.hero-dark .container{position:relative;z-index:2}
.hero-pad{padding:130px 0 96px}
.hero-pad-sm{padding:120px 0 70px}
.hero-fullscreen{min-height:88vh;display:flex;flex-direction:column;justify-content:center;padding:150px 0 96px}
.hero-content{max-width:760px}
.hero-content.center{max-width:820px;margin:0 auto;text-align:center}
.hero-label{display:inline-flex;align-items:center;gap:8px;background:rgba(118,183,205,.16);color:var(--accent);font-weight:700;font-size:.82rem;letter-spacing:.1em;text-transform:uppercase;padding:7px 16px;border-radius:var(--radius-pill);margin-bottom:20px}
.hero-label svg{width:15px;height:15px}
.hero-dark h1{color:#fff;margin-bottom:18px}
.hero-dark h1 .hl{color:var(--accent)}
.hero-sub{font-size:1.18rem;color:rgba(255,255,255,.82);max-width:600px;margin-bottom:30px}
.hero-content.center .hero-sub{margin-left:auto;margin-right:auto}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px}
.hero-content.center .hero-actions{justify-content:center}
.hero-trust{display:flex;flex-wrap:wrap;gap:10px 22px;margin-top:26px;font-size:.9rem;color:rgba(255,255,255,.8)}
.hero-trust span{display:inline-flex;align-items:center;gap:8px}
.hero-trust svg{width:17px;height:17px;color:var(--accent)}

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

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

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

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

/* brands strip */
.brand-strip{display:flex;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}
/* Real brand/partner LOGOS in the marquee (preferred over text). Height-capped, never stretched,
   grayscale at rest → full color on hover, like a credible trust bar. */
.brand-track img{height:36px;width:auto;max-width:150px;object-fit:contain;filter:grayscale(1);opacity:.62;transition:filter .25s,opacity .25s}
.brand-track img:hover{filter:none;opacity:1}
@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}

/* testimonial avatar — paired with cc-foot at bottom of a testimonial cat-card.
   .cc-avatar is the circular client photo / initial-circle; sits to the LEFT of
   the name string. .cc-avatar--initials renders as a brand-tinted disc with the
   client's initials so every testimonial has an image even when we don't have a
   real headshot from marker-law.com/testimonials/. */
.cat-card .cc-attribution{margin-top:auto;display:flex;align-items:center;gap:12px}
.cat-card .cc-attribution .cc-foot{margin-top:0}
.cc-avatar{flex-shrink:0;width:46px;height:46px;border-radius:50%;object-fit:cover;border:2px solid var(--secondary);background:var(--surface);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:1rem;letter-spacing:.02em;color:var(--primary);text-transform:uppercase;line-height:1;overflow:hidden}
.cc-avatar--initials{background:linear-gradient(135deg,var(--secondary) 0%,#fff 100%);color:var(--accent-dark)}
.cc-avatar--dark{border-color:rgba(255,255,255,.18);background:linear-gradient(135deg,rgba(255,255,255,.08) 0%,rgba(255,255,255,.02) 100%);color:#fff}
img.cc-avatar{padding:0}

/* 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;list-style:none}
/* The <li> is NORMAL FLOW, never a flex container — so inline content (text mixed with
   <strong>/<a>/<em>) flows as one sentence and can NEVER fragment into mis-sized columns
   (the real "Up / to | 15%… | from…" defect: a flex <li> turns each text node + inline
   element into a separate flex item). The check marker is an absolutely-positioned ::before
   disc + tick; an authored leading <svg> becomes the marker instead and suppresses it. */
.check-list li{position:relative;padding-left:30px;color:var(--text-secondary)}
.check-list li::before{content:"";position:absolute;left:0;top:.3em;width:19px;height:19px;border-radius:50%;background:var(--secondary)}
.check-list li::after{content:"";position:absolute;left:6.5px;top:.5em;width:5px;height:9px;border:solid var(--accent-dark);border-width:0 2.5px 2.5px 0;transform:rotate(45deg)}
.check-list li:has(> svg:first-child)::before,.check-list li:has(> svg:first-child)::after{display:none}
.check-list li > svg:first-child{position:absolute;left:0;top:.16em;width:20px;height:20px;margin:0;color:var(--accent-dark)}
.check-list li b,.check-list li strong{color:var(--text);font-weight:700}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* Video hero. THE STACK BUG: the static fallback <img class="hero-dark-bg"> comes AFTER
   the <video> in the DOM, and both defaulted to z-index:0 — so the image painted ON TOP
   of the video and the video was never visible (a real shipped bug; the editor "added the
   video" but it stayed hidden under the still). Explicit, fallback-preserving stack for
   video heroes: fallback img 0 → video 1 → scrim ::before 2 → content 3. (.hero-dark
   sets no stacking context, so negative z-index would hide the img behind the dark bg —
   don't use it here.) */
/* Let the footage be footage. No filter dimming and no ken-burns drift — a slow CSS zoom over
   a hero reads as an animated photograph, which is exactly what this is not. The clip carries its
   own drone motion, so the video only gets a light grade and the readability comes from the
   scrim below. */
.hero-video .hero-bg-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:1;opacity:0;transition:opacity 1.4s ease;filter:saturate(1.06) contrast(1.03) brightness(1.04)}
.hero-video .hero-bg-video.ready{opacity:1}

/* Scrim for the video hero: a left-weighted wedge only as opaque as the headline actually needs,
   so the right two-thirds of the frame stay bright, plus top and bottom fades so the fixed header
   and the next section blend in instead of butting against a hard edge. */
.hero-video::before{background:
    linear-gradient(104deg,rgba(18,31,36,.80) 0%,rgba(20,34,39,.55) 34%,rgba(28,48,55,.20) 62%,rgba(38,62,70,.06) 100%),
    linear-gradient(to bottom,rgba(14,25,29,.52) 0%,rgba(14,25,29,0) 24%,rgba(14,25,29,0) 66%,rgba(14,25,29,.42) 100%)}
.hero-video .hero-dark-bg{z-index:0}     /* fallback stays UNDER the video (still visible if the video fails) */
.hero-video::before{z-index:2;will-change:transform;transform:translateZ(0)}           /* readability scrim sits ABOVE the video */
.hero-video .container{z-index:3}        /* hero copy sits above the scrim */

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

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

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

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

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

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

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

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

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

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

/* Quote FAB removed — floating button replaced by the Answering Legal chatbot widget. */

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

/* ---------- Reveal animation ---------- */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease,transform .6s ease}
.reveal.in{opacity:1;transform:none}
@media(prefers-reduced-motion:reduce){.reveal{opacity:1;transform:none;transition:none}.brand-track{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}
  .cc-avatar{width:40px;height:40px;font-size:.92rem}
  .cat-card .cc-attribution{gap:10px}
}
@media(max-width:479px){
  .section{padding:48px 0}
  .btn{white-space:normal;text-align:center}
  .btn-lg{padding:15px 24px}
  .hero-dark h1{font-size:1.95rem}
  .hero-actions .btn{width:100%}
  .product-meta{grid-template-columns:1fr}
  .ind-card{flex-basis:220px}
  .stat-num{font-size:1.7rem}
  .modal-body{padding:16px 18px 22px}
  .modal-header{padding:18px 18px 0}
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* Podcast episodes sit one level under "Podcast" in the Video & Podcast dropdown. */
.nav-dd-panel a.nav-dd-ep{padding-left:26px;font-size:.9rem;color:var(--text-secondary);position:relative}
.nav-dd-panel a.nav-dd-ep::before{content:"";position:absolute;left:12px;top:50%;width:6px;height:1px;
  background:var(--border)}
.nav-dd-panel a.nav-dd-ep:hover{color:var(--text)}
.mm-sub a.nav-dd-ep{padding-left:26px;font-size:.9rem;opacity:.85}

/* --- MARQUEE strip: a moving row of CAPSULE chips (duplicate the track once for a seamless loop).
   ⛔ HARD CONSTRAINT: every phrase is its own `.hm-pill` — a padded, bordered capsule with real
   spacing between items. The old giant bare-text marquee shipped as an unreadable run-on word blur
   and is BANNED. Never put bare text directly in `.hm-track`. Pauses on hover. --- */
/* `display:flex` (not the default inline flow) is load-bearing: the two tracks are
   sibling inline-flex boxes separated by a newline in the HTML, and in inline flow
   that newline renders as a real space. That space sat at the seam, so once per
   cycle a pill visibly popped in and vanished as the gap scrolled past. Flex drops
   the whitespace text node entirely and the loop closes cleanly. */
.headline-marquee{overflow:hidden;white-space:nowrap;width:100%;padding:6px 0;
  display:flex;flex-wrap:nowrap;align-items:center}
.headline-marquee > *{flex:0 0 auto}
.headline-marquee .hm-track{display:inline-flex;gap:16px;align-items:center;width:max-content;
  padding-right:16px;animation:hm-scroll 36s linear infinite}
.headline-marquee .hm-pill{display:inline-flex;align-items:center;gap:10px;padding:11px 24px;
  border-radius:999px;border:1px solid var(--border);background:var(--surface);
  font-weight:600;font-size:1.02rem;letter-spacing:.01em;line-height:1;color:var(--text)}
/* Icons on a LIGHT pill must never be raw --accent — a light client accent (cyan/yellow)
   on near-white --surface drops below 2:1 and the QA probe blocks it as an invisible band.
   Blend the accent toward --text so it stays brand-tinted but always readable; the dark
   override below restores light icons on dark sections. */
.headline-marquee .hm-pill svg,.headline-marquee .hm-pill .icon{width:1.05em;height:1.05em;color:color-mix(in srgb,var(--accent) 55%,var(--text))}
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-pill{
  background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.2);color:#fff}
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-pill svg,
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-pill .icon{color:#fff}
.headline-marquee .hm-dot{color:color-mix(in srgb,var(--accent) 55%,var(--text));font-weight:800}
:is(.on-dark,.section.dark,.hero-dark) .headline-marquee .hm-dot{color:rgba(255,255,255,.6)}
.headline-marquee:hover .hm-track{animation-play-state:paused}
/* Two identical `width:max-content` tracks sit side by side, so a seamless loop must
   translate each by a FULL track width. At -50% the strip jumped half a track every
   cycle and the pill at the seam appeared to pop in and vanish. */
@keyframes hm-scroll{from{transform:translateX(0)}to{transform:translateX(-100%)}}

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

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

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

/* ==========================================================================
   Hero v2 — portrait + in-hero trust seals + shorter copy variant
   ========================================================================== */
.hero-with-portrait .hero-content{max-width:none}
/* Row-gap kept separate from column-gap: the topline→content row break should read
   like the kicker/H1/tagline rhythm above it (client 09-08: "not evenly spaced" —
   the 56px grid gap on top of the tagline's own margin was nearly 3x any other gap
   in the block). Column-gap (content↔portrait) is unrelated and stays wide. */
.hero-grid{display:grid;grid-template-columns:1fr;gap:24px;align-items:center}
/* min-width:0 so the featured-video strip's intrinsic width can never force the
   column wider than the viewport (it clipped the hero copy at 390px). */
.hero-grid>*{min-width:0}
@media(min-width:960px){.hero-grid{grid-template-columns:minmax(0,1.25fr) minmax(280px,.95fr);gap:24px 56px}}
.hero-sub--short{font-size:1.2rem;max-width:520px;margin-bottom:24px}
/* Portrait bleeds into the hero background (client request: no framed card —
   the photo should melt into the scene like the old site). Soft edge masks +
   an ambient glow do the blending; works with a cutout or a full photo. */
.hero-portrait{position:relative;display:none;justify-self:end;align-self:end;width:100%;max-width:440px;aspect-ratio:4/5;
  transform:translateY(0);
  animation:hero-portrait-rise .9s ease-out both}
@media(min-width:960px){.hero-portrait{display:block}}
.hero-portrait::before{content:"";position:absolute;left:50%;bottom:-6%;transform:translateX(-50%);
  width:130%;aspect-ratio:1;border-radius:50%;
  background:radial-gradient(circle at 50% 62%,rgba(118,183,205,.30) 0%,rgba(118,183,205,.10) 42%,transparent 68%);
  pointer-events:none}
.hero-portrait img{position:relative;width:100%;height:100%;object-fit:contain;object-position:center bottom;
  filter:saturate(1.05) contrast(1.04) drop-shadow(0 26px 44px rgba(0,0,0,.5));
  -webkit-mask-image:linear-gradient(180deg,#000 80%,rgba(0,0,0,.5) 93%,transparent 100%);
  mask-image:linear-gradient(180deg,#000 80%,rgba(0,0,0,.5) 93%,transparent 100%)}
.hero-portrait-caption{position:absolute;left:24px;right:24px;bottom:6px;color:#fff;z-index:1;
  display:flex;flex-direction:column;line-height:1.2;text-shadow:0 2px 14px rgba(10,18,22,.85)}
.hero-portrait-caption strong{font-family:'Cormorant Infant',serif;font-size:1.4rem;font-weight:700;letter-spacing:.01em}
.hero-portrait-caption span{font-size:.78rem;color:rgba(255,255,255,.78);letter-spacing:.12em;text-transform:uppercase;margin-top:2px}
@keyframes hero-portrait-rise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:translateY(0)}}

/* Hero trust-seal row (in-hero, white-tinted, capped row height) */
.hero-trust-seals{display:flex;flex-wrap:wrap;align-items:center;gap:14px 22px;margin-top:30px;padding-top:22px;
  border-top:1px solid rgba(255,255,255,.18);max-width:640px}
.hero-trust-seals img{height:46px;width:auto;max-width:90px;object-fit:contain;
  background:rgba(255,255,255,.92);border-radius:6px;padding:5px 8px;
  filter:saturate(1.02);transition:transform .2s,box-shadow .2s,background .2s}
.hero-trust-seals img:hover{transform:translateY(-2px);box-shadow:0 8px 18px rgba(0,0,0,.25);background:#fff}
@media(max-width:640px){
  .hero-trust-seals{gap:10px 14px;margin-top:24px;padding-top:18px}
  .hero-trust-seals img{height:36px;max-width:72px;padding:4px 6px}
}

/* Trust-seal row on light surface (used on PA / WWS sub-pages) */
.trust-seal-row{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:24px 36px;max-width:1040px;margin:0 auto}
.trust-seal-row img{height:78px;width:auto;max-width:160px;object-fit:contain;
  filter:saturate(.95);transition:transform .25s,filter .25s,opacity .25s;opacity:.92}
.trust-seal-row img:hover{transform:translateY(-3px) scale(1.04);opacity:1}
.trust-seal-row--light img{background:#fff;border-radius:8px;padding:8px 10px;border:1px solid var(--border)}
@media(max-width:640px){.trust-seal-row{gap:16px 22px}.trust-seal-row img{height:56px;max-width:110px}}

/* ==========================================================================
   Linked image cards (homepage practice cards now link to real PA pages)
   ========================================================================== */
a.img-card--linked{text-decoration:none;color:inherit;display:flex;flex-direction:column}
a.img-card--linked:hover{transform:translateY(-4px)}
a.img-card--linked h3{color:var(--text)}
a.img-card--linked .cc-foot{color:var(--primary);font-weight:700;margin-top:auto}

/* ==========================================================================
   Mega-menu / dropdown navigation
   ========================================================================== */
.nav-dropdown{position:relative;display:inline-block}
.nav-dropdown .nav-dd-trigger{display:inline-flex;align-items:center;gap:5px}
.nav-dropdown .nav-dd-trigger svg{transition:transform .2s ease}
.nav-dropdown:hover .nav-dd-trigger svg,
.nav-dropdown:focus-within .nav-dd-trigger svg{transform:rotate(180deg)}
.nav-dd-panel{position:absolute;top:100%;left:50%;transform:translate(-50%,8px);min-width:260px;
  background:#fff;border:1px solid var(--border);border-radius:14px;
  box-shadow:0 22px 56px -16px rgba(20,40,46,.28),0 0 0 1px rgba(118,183,205,.08);
  padding:10px;display:flex;flex-direction:column;gap:2px;
  opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,transform .18s ease,visibility 0s linear .18s;z-index:1100}
.nav-dropdown:hover .nav-dd-panel,.nav-dropdown:focus-within .nav-dd-panel,.nav-dd-panel:hover{
  opacity:1;visibility:visible;pointer-events:auto;transform:translate(-50%,2px);transition:opacity .18s ease,transform .18s ease}
.nav-dd-panel a{padding:9px 14px;border-radius:8px;color:var(--text);font-weight:600;font-size:.92rem;
  text-decoration:none;transition:background .15s,color .15s}
.nav-dd-panel a:hover{background:var(--surface);color:var(--primary)}
.nav-dd-panel a:first-child{font-weight:800;color:var(--primary);border-bottom:1px solid var(--border);border-radius:8px 8px 0 0;margin-bottom:4px}
@media(max-width:1023px){
  .nav-dd-panel{display:none}
  .nav-dropdown .nav-dd-trigger svg{display:none}
}

/* Mobile menu collapsible groups */
.mm-group{border-top:1px solid var(--border);margin-top:4px;padding-top:6px}
.mm-group-toggle{display:flex;width:100%;align-items:center;justify-content:space-between;
  background:transparent;border:0;padding:10px 0;font-family:inherit;font-size:1rem;font-weight:600;color:var(--text);cursor:pointer}
.mm-group-toggle svg{transition:transform .2s ease}
.mm-group.open .mm-group-toggle svg{transform:rotate(180deg)}
.mm-sub{display:none;flex-direction:column;gap:2px;padding:4px 0 8px 14px;border-left:2px solid var(--border);margin-left:2px}
.mm-group.open .mm-sub{display:flex}
.mm-sub a{padding:7px 10px;color:var(--text-secondary);font-size:.93rem;text-decoration:none;border-radius:6px}
.mm-sub a:hover{background:var(--surface);color:var(--primary)}
.mm-sub .mm-cat{font-weight:800;color:var(--primary-darker);font-size:.78rem;text-transform:uppercase;letter-spacing:.06em;padding:8px 10px 2px;margin-top:6px}
.mm-sub .mm-cat:first-child{margin-top:0}

/* Practice-Areas mega dropdown: 4-column category layout */
.nav-dd-panel.nav-dd-panel--mega{min-width:760px;flex-direction:row;flex-wrap:wrap;gap:6px;padding:14px}
@media(min-width:1280px){.nav-dd-panel.nav-dd-panel--mega{min-width:840px}}
.nav-dd-panel.nav-dd-panel--mega a.nav-dd-leaf{white-space:normal}
.nav-dd-panel.nav-dd-panel--mega .nav-dd-all{flex:0 0 100%;font-weight:800;color:var(--primary);border-bottom:1px solid var(--border);border-radius:8px 8px 0 0;margin-bottom:4px;padding:9px 14px}
.nav-dd-panel.nav-dd-panel--mega .nav-dd-col{flex:1 1 0;min-width:170px;display:flex;flex-direction:column;gap:1px}
.nav-dd-panel.nav-dd-panel--mega .nav-dd-cat{font-weight:800;color:var(--primary-darker);font-size:.74rem;text-transform:uppercase;letter-spacing:.06em;padding:6px 10px 4px;border-bottom:1px solid var(--border);margin-bottom:4px;text-decoration:none}
.nav-dd-panel.nav-dd-panel--mega .nav-dd-cat:hover{background:transparent;color:var(--primary)}
.nav-dd-panel.nav-dd-panel--mega a.nav-dd-leaf{padding:7px 10px;font-size:.9rem;font-weight:600}
.nav-dd-panel.nav-dd-panel--mega a:first-child{font-weight:800}
@media(max-width:1023px){.nav-dd-panel.nav-dd-panel--mega{min-width:0}}

/* Category landing page cards (4-up at the top of /practice-areas/) */
.cat-row{display:grid;gap:22px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));margin-bottom:32px}
.cat-pill{display:flex;flex-direction:column;justify-content:space-between;background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:22px 22px 20px;text-decoration:none;color:inherit;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease}
.cat-pill:hover{transform:translateY(-3px);box-shadow:0 18px 36px -18px rgba(20,40,46,.18);border-color:var(--primary)}
.cat-pill h3{margin:0 0 8px;font-size:1.18rem;color:var(--primary-darker)}
.cat-pill p{margin:0 0 14px;color:var(--text-secondary);font-size:.93rem;line-height:1.55}
.cat-pill .cp-foot{font-weight:700;color:var(--primary)}

/* Category section headers on /practice-areas/ */
.cat-section{margin-top:48px}
.cat-section:first-of-type{margin-top:0}
.cat-section-head{display:flex;align-items:baseline;justify-content:space-between;gap:18px;margin-bottom:20px;padding-bottom:10px;border-bottom:2px solid var(--primary)}
.cat-section-head h2{margin:0;font-size:1.6rem;color:var(--primary-darker)}
.cat-section-head a{font-weight:700;color:var(--primary);text-decoration:none;font-size:.95rem;white-space:nowrap}
.cat-section-head a:hover{text-decoration:underline}

/* ==========================================================================
   Hero Variant B (index-alt.html) — portrait overlaid on video backdrop
   ========================================================================== */
.alt-banner{background:linear-gradient(90deg,#19262b,#2c3f46);color:#fff;padding:10px 18px;
  display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px 14px;font-size:.85rem;
  border-bottom:2px solid var(--accent)}
.alt-banner strong{color:var(--accent);font-weight:800}
.alt-banner a{color:#fff;text-decoration:underline;font-weight:700}
.hero-variant-b .hero-variant-b-content{position:relative;z-index:3;max-width:600px}
.hero-variant-b-portrait{position:absolute;right:0;bottom:0;top:0;width:55%;max-width:680px;z-index:2;
  pointer-events:none;display:none}
@media(min-width:960px){.hero-variant-b-portrait{display:block}}
.hero-variant-b-portrait img{position:absolute;right:-2%;bottom:0;height:96%;width:auto;max-width:none;
  object-fit:contain;object-position:right bottom;
  filter:drop-shadow(0 20px 40px rgba(0,0,0,.5)) saturate(1.05);
  animation:hero-portrait-rise 1.1s ease-out both}
/* Soft fade so the portrait blends INTO the video rather than sitting on top like a sticker */
.hero-variant-b-portrait::before{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(20,30,34,.78) 0%,rgba(20,30,34,.22) 32%,transparent 55%);
  z-index:1}
.hero-variant-b-portrait::after{content:"";position:absolute;inset:auto 0 0 0;height:30%;
  background:linear-gradient(180deg,transparent,rgba(20,30,34,.85));z-index:1}

/* ============================================================
   Quick stat strip — slim row between scroll sections (homepage)
   Distinct from the dark .stat-bar / .section.dark hero band.
   ============================================================ */
.qstat-strip{padding:22px 0;background:linear-gradient(90deg,var(--surface-2,#f3f5f6) 0%,#fff 50%,var(--surface-2,#f3f5f6) 100%);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.qstat-row{display:flex;flex-wrap:wrap;gap:12px 18px;justify-content:center;align-items:center}
.qstat-pill{display:inline-flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--border);border-radius:999px;padding:10px 18px;font-weight:700;color:var(--text);box-shadow:0 1px 2px rgba(20,40,46,.04)}
.qstat-pill .qstat-num{color:var(--primary);font-size:1.05rem;font-weight:800;letter-spacing:-.01em}
.qstat-pill svg{width:16px;height:16px;color:var(--primary)}
@media(max-width:600px){.qstat-pill{padding:8px 14px;font-size:.88rem}}

/* ============================================================
   Trust marker strip — pill bar of award badge images (homepage)
   Uses the existing /images/seals/ assets (no new badges invented).
   ============================================================ */
.trust-strip{padding:34px 0;background:var(--surface,#fafbfc);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.trust-strip .trust-strip-label{display:block;text-align:center;font-size:.72rem;letter-spacing:.18em;text-transform:uppercase;color:var(--text-muted);font-weight:700;margin-bottom:16px}
.trust-strip-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:18px 28px;max-width:1100px;margin:0 auto}
.trust-strip-row img{height:60px;width:auto;max-width:130px;object-fit:contain;opacity:.92;transition:opacity .18s,transform .18s;filter:saturate(.95)}
.trust-strip-row img:hover{opacity:1;transform:translateY(-2px)}
@media(max-width:640px){.trust-strip-row{gap:12px 18px}.trust-strip-row img{height:44px;max-width:96px}}

/* ============================================================
   Google reviews block — verified reviews from GBP
   ============================================================ */
.gr-section{padding:60px 0;background:#fff}
.gr-header{text-align:center;max-width:760px;margin:0 auto 36px}
.gr-rating-row{display:inline-flex;align-items:center;gap:14px;background:var(--surface-2,#f3f5f6);border:1px solid var(--border);border-radius:999px;padding:10px 22px;margin-bottom:18px}
.gr-google-logo{display:inline-flex;align-items:center;gap:8px;font-weight:700;color:var(--text)}
.gr-google-logo svg{width:18px;height:18px}
.gr-stars{color:#fbbc04;letter-spacing:2px;font-size:1.05rem}
.gr-score{font-weight:800;color:var(--text)}
.gr-count{color:var(--text-muted);font-size:.92rem}
.gr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;margin-bottom:28px}
.gr-card{background:#fff;border:1px solid var(--border);border-radius:var(--radius-lg);padding:24px 22px;display:flex;flex-direction:column;gap:12px;text-decoration:none;color:inherit;transition:transform .18s,box-shadow .18s,border-color .18s}
.gr-card:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:transparent}
.gr-card-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.gr-card-stars{color:#fbbc04;letter-spacing:2px;font-size:.95rem}
.gr-card-g{width:22px;height:22px;flex-shrink:0}
.gr-card-quote{font-size:.95rem;color:var(--text-secondary);line-height:1.55;margin:0;flex:1}
.gr-card-author{font-weight:700;color:var(--text);font-size:.94rem}
.gr-card-meta{font-size:.78rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.06em;font-weight:600}
.gr-cta-row{text-align:center}
.gr-cta-row .btn{display:inline-flex;align-items:center;gap:8px}
.gr-cta-row svg{width:16px;height:16px}

/* ---------- Why Hire teaser (compact homepage card that links to About) ---------- */
.why-teaser{position:relative;max-width:780px;margin:0 auto;background:linear-gradient(135deg,#FFFFFF 0%,#F5F7FA 100%);border:1px solid var(--border);border-left:6px solid var(--primary);border-radius:var(--radius-lg);padding:36px 38px;box-shadow:var(--shadow-md);overflow:hidden}
.why-teaser::before{content:"";position:absolute;top:-40px;right:-40px;width:160px;height:160px;background:radial-gradient(circle,rgba(232,182,0,.18) 0%,transparent 70%);pointer-events:none}
.why-teaser .eyebrow{margin-bottom:14px}
.why-teaser h2{font-size:clamp(1.55rem,3vw,2.05rem);margin-bottom:14px}
.why-teaser p{color:var(--text-secondary);margin-bottom:18px;font-size:1.02rem}
.why-teaser ul{list-style:none;display:flex;flex-direction:column;gap:10px;margin:0 0 24px 0;padding:0}
.why-teaser ul li{position:relative;padding-left:30px;font-weight:600;color:var(--text);font-size:.99rem}
.why-teaser ul li::before{content:"";position:absolute;left:0;top:7px;width:18px;height:18px;background:var(--primary);border-radius:50%;box-shadow:0 2px 6px rgba(232,182,0,.35)}
.why-teaser ul li::after{content:"";position:absolute;left:6px;top:11px;width:7px;height:4px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg)}
.why-teaser .why-teaser-cta{display:inline-flex;align-items:center;gap:10px}
.why-teaser .why-teaser-cta svg{width:16px;height:16px;transition:transform .2s ease}
.why-teaser .why-teaser-cta:hover svg{transform:translateX(3px)}
@media (max-width:640px){.why-teaser{padding:28px 22px}}

/* ---------- Split icon card — replaces photo on minimal-layout audience pages ---------- */
.split-icon-card{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:linear-gradient(150deg,var(--surface) 0%,#fff 100%);border:1px solid var(--border);border-radius:var(--radius-lg);padding:48px 36px;min-height:320px;height:100%;position:relative;overflow:hidden}
.split-icon-card::before{content:"";position:absolute;top:-50px;right:-50px;width:180px;height:180px;background:radial-gradient(circle,rgba(232,182,0,.10) 0%,transparent 70%);pointer-events:none}
.split-icon-card .sic-icon{width:96px;height:96px;border-radius:50%;background:var(--primary);color:var(--dark);display:flex;align-items:center;justify-content:center;margin-bottom:22px;box-shadow:0 8px 20px rgba(232,182,0,.30);position:relative;z-index:1}
.split-icon-card .sic-icon svg{width:48px;height:48px}
.split-icon-card h4,.split-icon-card .sic-title{font-family:var(--font-display);font-weight:800;color:var(--text);font-size:1.18rem;margin-bottom:8px;line-height:1.25;position:relative;z-index:1}
.split-icon-card p{font-size:.95rem;color:var(--text-muted);max-width:280px;position:relative;z-index:1}

/* ---------- Sitewide vanity-number top bar ---------- */
.vanity-bar{position:fixed;top:0;left:0;right:0;z-index:1010;background:linear-gradient(90deg,var(--primary) 0%,var(--primary-dark) 100%);color:var(--dark);font-size:.85rem;font-weight:700;letter-spacing:.02em;line-height:1;text-align:center;padding:9px 16px;border-bottom:1px solid rgba(16,30,50,.18);box-shadow:0 1px 3px rgba(16,30,50,.08)}
.vanity-bar a{color:var(--dark);text-decoration:none;display:inline-flex;align-items:center;gap:8px}
.vanity-bar a:hover{text-decoration:underline}
.vanity-bar .vb-num{font-size:1rem;font-weight:900;letter-spacing:.04em}
.vanity-bar .vb-svg{width:14px;height:14px;flex-shrink:0}
.vanity-bar .vb-sep{display:inline-block;margin:0 10px;opacity:.55}
@media (max-width:520px){.vanity-bar{font-size:.78rem;padding:8px 10px}.vanity-bar .vb-num{font-size:.92rem}.vanity-bar .vb-meta{display:none}}
/* When the vanity bar is present, push the rest of the page down by its height */
body.has-vanity-bar{padding-top:calc(var(--header-total) + 36px)}
body.has-vanity-bar .site-header{top:36px}
body.has-vanity-bar.has-transparent-header{padding-top:0}
body.has-vanity-bar.has-transparent-header .site-header{top:36px}
@media (max-width:520px){body.has-vanity-bar{padding-top:calc(var(--header-total) + 34px)}body.has-vanity-bar .site-header{top:34px}body.has-vanity-bar.has-transparent-header .site-header{top:34px}}

/* ==========================================================================
   Client feedback round (2026-07) — large-screen scaling, bolder practice
   titles, larger chat launcher
   ========================================================================== */

/* "Cases We Handle" card titles: bigger + bolder (client: not visible enough) */
.what-we-handle-grid .ic-body h3{font-size:1.5rem;font-weight:800;letter-spacing:-.01em;margin-bottom:10px}

/* Large monitors: the layout previously froze at 1200px and sat small in the
   middle of the screen. Scale the shell + hero up progressively so mid-large
   laptops (1440–1536) AND big desktops keep filling the viewport, instead of
   stranding the hero small and centered (client feedback). */
@media(min-width:1440px){
  :root{--maxw:1320px}
  h1{font-size:clamp(2.1rem,4.4vw,4rem)}
  .hero-fullscreen{min-height:90vh}
  .hero-sub--short{font-size:1.3rem;max-width:560px}
  .hero-portrait{max-width:480px}
}
@media(min-width:1600px){
  :root{--maxw:1400px}
  h1{font-size:clamp(2.1rem,4vw,4.4rem)}
  .hero-fullscreen{min-height:92vh}
  .hero-sub--short{font-size:1.38rem;max-width:600px}
  .hero-label{font-size:.95rem}
  .hero-portrait{max-width:520px}
  .hero-trust-seals{max-width:760px}
  .hero-trust-seals img{height:54px;max-width:104px}
}
@media(min-width:1920px){
  :root{--maxw:1560px}
  .hero-portrait{max-width:560px}
}

/* Answering Legal chat launcher: nudged larger (client request). The scale is
   applied by js/main.js to whichever fixed-position launcher the widget injects;
   this class carries the visual so the JS stays selector-only. */
.gw-chat-enlarged{transform:scale(1.18)!important;transform-origin:bottom right!important}

/* ==========================================================================
   Client feedback round 2 (2026-07) — mobile menu, text-us, social row,
   mobile portrait
   ========================================================================== */

/* Vanity bar now carries Call + Text side by side */
.vanity-bar{display:flex;align-items:center;justify-content:center;gap:8px 22px;flex-wrap:wrap}
.vanity-bar .vb-sms{position:relative;font-weight:800}
.vanity-bar .vb-sms::before{content:"";display:inline-block;width:1px;height:14px;background:rgba(16,30,50,.35);margin-right:14px}
@media (max-width:520px){
  .vanity-bar{gap:6px 12px}
  .vanity-bar .vb-sms::before{margin-right:8px}
}

/* Hero social row — "Check us out" above the fold */
.hero-social{display:flex;align-items:center;flex-wrap:wrap;gap:12px;margin-top:22px}
.hero-social .hs-label{font-size:.82rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:rgba(255,255,255,.72)}
.hero-social a{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#fff;
  transition:background .2s,transform .2s,border-color .2s}
.hero-social a:hover{background:var(--primary);border-color:var(--primary);color:var(--dark);transform:translateY(-2px)}
.hero-social a svg{width:17px;height:17px}

/* Portrait on phones/tablets: client wants his photo on the mobile version too.
   The hero grid stacks, so the portrait lands right under the hero content. */
@media(max-width:959px){
  .hero-portrait{display:block;max-width:min(64vw,280px);margin:6px auto 0;justify-self:center}
  .hero-portrait-caption{left:12px;right:12px;bottom:2px}
  .hero-portrait-caption strong{font-size:1.15rem}
}

/* The mobile menu is re-parented to <body> by main.js (the header's backdrop-filter
   was clipping the fixed menu to the header box). Offset it below the vanity bar,
   and keep it above the header. */
body.has-vanity-bar .mobile-menu{top:calc(var(--header-total) + 36px);z-index:1001}
@media (max-width:520px){body.has-vanity-bar .mobile-menu{top:calc(var(--header-total) + 34px)}}

/* Collapsible-group subs: the legacy .mobile-menu .mm-sub{display:block} rule (from the
   JS-rendered menu variant) kept every submenu permanently visible as inline-wrapped
   links. Accordion behavior is authoritative: closed = hidden, open = flex column. */
.mobile-menu .mm-group .mm-sub{display:none;flex-direction:column}
.mobile-menu .mm-group.open .mm-sub{display:flex}

/* Social row on small screens: label on its own line, icons in one tidy row */
@media(max-width:520px){
  .hero-social{gap:10px}
  .hero-social .hs-label{flex:0 0 100%}
  .hero-social a{width:34px;height:34px}
  .hero-social a svg{width:15px;height:15px}
}

/* Header breathing room: the bar was overflowing its 1200px container by ~3px at
   1440px (post-shed), collapsing the whole desktop nav to a hamburger. Let the
   header use more of the viewport and make the tight step shave real width. */
.site-header .container{max-width:min(1360px,100%)}
.site-header.header-tight .desktop-nav{gap:0}
.site-header.header-tight .nav-link{padding:8px 8px}
.site-header.header-tight .logo{padding:4px 7px}

/* Communities-we-serve link pills (homepage dark band) — client feedback 2026-07-15 */
.community-links a{display:inline-block;padding:7px 14px;border-radius:var(--radius-pill);background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.16);color:#fff;font-size:.88rem;font-weight:600;text-decoration:none;transition:background .2s,border-color .2s}
.community-links a:hover,.community-links a:focus-visible{background:var(--accent);border-color:var(--accent);color:#fff}

/* "3 ways to get in touch" block inside the bottom CTA band — client feedback 2026-07-15 */
.cfg-ways{display:flex;flex-direction:column;gap:14px;margin-top:22px}
.cfg-way{display:flex;align-items:flex-start;gap:14px}
.cfg-way-ico{flex-shrink:0;width:42px;height:42px;border-radius:50%;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;color:var(--primary)}
.cfg-way-ico svg{width:19px;height:19px}
.cfg-way-label{font-size:.78rem;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:rgba(255,255,255,.62);margin-bottom:3px}
.cfg-way-val{display:inline-block;font-size:1.18rem;font-weight:800;letter-spacing:.03em;color:#fff;text-decoration:none}
a.cfg-way-val:hover,a.cfg-way-val:focus-visible{color:var(--primary)}
.cfg-way-note{font-size:.86rem;color:rgba(255,255,255,.72);margin-top:3px}

/* Standalone .hm-pill capsules used outside the marquee (Who We Serve → Communities).
   Previously only `.headline-marquee .hm-pill` was styled, so these rendered as bare text. */
:not(.headline-marquee) > .flex > .hm-pill{display:inline-flex;align-items:center;gap:8px;padding:9px 18px;border:1px solid var(--border);border-radius:var(--radius-pill);background:var(--surface);color:var(--text);font-size:.9rem;font-weight:600;line-height:1;text-decoration:none;transition:background .2s,border-color .2s,color .2s}
:not(.headline-marquee) > .flex > a.hm-pill:hover,:not(.headline-marquee) > .flex > a.hm-pill:focus-visible{background:var(--accent);border-color:var(--accent);color:#fff}
:not(.headline-marquee) > .flex > span.hm-pill{color:var(--text-secondary)}

/* Case-results cards — "Real People. Real Results." (client's own settlement figures) */
.results-grid{display:grid;grid-template-columns:1fr;gap:24px}
@media(min-width:768px){.results-grid{grid-template-columns:repeat(3,1fr)}}
.result-card{background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-left:4px solid var(--primary);border-radius:var(--radius-md);padding:30px 26px}
.result-amount{font-size:2.1rem;font-weight:800;letter-spacing:-.02em;color:var(--primary);line-height:1.1;margin-bottom:6px}
.result-kind{font-size:.76rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6);margin-bottom:14px}
.result-card p{font-size:.94rem;color:rgba(255,255,255,.8);margin:0}
.results-disclaimer{margin-top:26px;font-size:.8rem;color:rgba(255,255,255,.55);text-align:center;max-width:760px;margin-left:auto;margin-right:auto}

/* ==========================================================================
   HERO "As Seen on Social Media" featured-video strip (client request 2026-07-21)
   Replaces the award-seal row in the hero — the seals now scroll in the
   Recognized & Trusted band below, so this space is freed for video.
   Keeps the same separator rule the seal row used, for continuity.
   ========================================================================== */
.hero-featured{margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.18);max-width:640px}
.hf-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:16px}
/* "As Seen on Social Media" — client asked (2026-08-19) for flare: a yellow bubble,
   a little larger, set at a slight diagonal so it pops off the dark hero. */
.hf-title{display:inline-block;background:var(--primary);color:#101E32;font-size:.95rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase;padding:9px 20px;border-radius:var(--radius-pill);box-shadow:0 6px 18px rgba(232,182,0,.32)}
.hf-all{font-size:.8rem;font-weight:600;color:var(--primary);text-decoration:none;white-space:nowrap}
.hf-all:hover{text-decoration:underline}

.hf-strip{display:flex;gap:12px;overflow-x:auto;scroll-behavior:smooth;scroll-snap-type:x mandatory;
  padding-bottom:6px;-ms-overflow-style:none;scrollbar-width:none}
.hf-strip::-webkit-scrollbar{display:none}

.hf-card{flex:0 0 158px;scroll-snap-align:start;display:flex;flex-direction:column;gap:7px;
  padding:0;background:none;border:0;font:inherit;color:inherit;text-align:left;cursor:pointer}
.hf-thumb{position:relative;width:100%;aspect-ratio:16/9;border-radius:10px;overflow:hidden;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.22);
  transition:transform .2s,border-color .2s,box-shadow .2s}
.hf-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.hf-play{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(180deg,rgba(0,0,0,.05),rgba(0,0,0,.45))}
.hf-play svg{width:30px;height:30px;filter:drop-shadow(0 2px 6px rgba(0,0,0,.5))}
.hf-card:hover .hf-thumb,.hf-card:focus-visible .hf-thumb{transform:translateY(-3px);
  border-color:var(--primary);box-shadow:0 10px 22px rgba(0,0,0,.35)}
.hf-cap{font-size:.76rem;line-height:1.35;color:rgba(255,255,255,.86);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

.hf-browse{display:flex;align-items:center;gap:10px;margin-top:12px}
.hf-browse-label{font-size:.78rem;font-weight:600;color:rgba(255,255,255,.66)}
.hf-nav{margin-left:auto;display:flex;gap:8px}
.hf-nav button{width:32px;height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.24);color:#fff;cursor:pointer;
  transition:background .2s,border-color .2s,transform .2s}
.hf-nav button:hover{background:var(--primary);border-color:var(--primary);color:var(--dark);transform:translateY(-1px)}
.hf-nav button svg{width:15px;height:15px}

@media(max-width:640px){
  .hero-featured{margin-top:24px;padding-top:16px}
  .hf-card{flex-basis:140px}
}

/* Shared lightbox for the hero strip (mirrors the Video & Podcast page player) */
.hl-lightbox{position:fixed;inset:0;z-index:9999;background:rgba(10,16,20,.92);
  display:flex;align-items:center;justify-content:center;padding:24px}
.hl-lightbox[hidden]{display:none}
.hl-inner{width:min(960px,100%);}
.hl-frame{position:relative;width:100%;aspect-ratio:16/9;background:#000;border-radius:12px;overflow:hidden}
.hl-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.hl-bar{display:flex;align-items:center;gap:14px;margin-bottom:10px;color:#fff}
.hl-cap{font-size:.95rem;font-weight:600;line-height:1.35}
.hl-close{margin-left:auto;flex-shrink:0;width:38px;height:38px;border-radius:50%;cursor:pointer;
  background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.28);color:#fff;
  display:inline-flex;align-items:center;justify-content:center}
.hl-close:hover{background:var(--primary);border-color:var(--primary);color:var(--dark)}
.hl-close svg{width:17px;height:17px}

/* Recognized & Trusted: logo marquee (row 1) + claim pills (row 2) */
.trust-logo-track{display:inline-flex;align-items:center;gap:28px;width:max-content;padding-right:28px;
  animation:hm-scroll 44s linear infinite}
.trust-logo-track img{height:52px;width:auto;max-width:104px;object-fit:contain;
  background:#fff;border-radius:7px;padding:6px 9px;border:1px solid var(--border)}
.headline-marquee:hover .trust-logo-track{animation-play-state:paused}
@media(max-width:640px){.trust-logo-track{gap:18px}.trust-logo-track img{height:40px;max-width:82px}}
@media(prefers-reduced-motion:reduce){.trust-logo-track{animation:none}}

/* Five-metric variant of the dark stat band (client added "Millions Recovered Each Year") */
@media(min-width:768px){.stat-grid--5{grid-template-columns:repeat(3,1fr)}}
@media(min-width:1024px){.stat-grid--5{grid-template-columns:repeat(5,1fr);gap:30px 12px}}

/* ==========================================================================
   Footer legibility (client feedback 2026-07-21: "under the logo — can't really
   read those words, the colour is very faint. Make that white, like the phone
   number to the right"). Raises the low-contrast footer text to at least the
   .82 white used by .fci-val (the phone number he pointed at).
   ========================================================================== */
.site-footer .footer-about{color:rgba(255,255,255,.9)}
.site-footer .footer-col ul li a{color:rgba(255,255,255,.82)}
.site-footer .footer-contact-item .fci-label{color:rgba(255,255,255,.68)}
.site-footer .footer-bottom-inner{color:rgba(255,255,255,.75)}
.site-footer .footer-bottom a{color:rgba(255,255,255,.82)}


/* ==========================================================================
   2026-08-23 client-feedback round (Jason Marker, email of 08-19 + 08-21)
   — homepage hero re-work + hero portrait quote + review-search chips.
   ========================================================================== */
/* Hero kicker line ("Your Naperville Personal Injury & Workers' Compensation Law
   Firm") and the "Voted Best Law Firm in Naperville" line: same face as the H1,
   deliberately one step smaller than it, per the client's spec. */
.hero-kicker{display:block;font-family:var(--font-display);font-size:clamp(1.2rem,2.4vw,1.72rem);font-weight:700;line-height:1.3;letter-spacing:.005em;color:rgba(255,255,255,.95);margin-bottom:12px}
.hero-h1-compact{font-size:clamp(1.95rem,4.3vw,3.12rem)}
/* Kicker + H1 + tagline pulled into their own full-width grid row (see .hero-topline
   below) so the two long sentences have the whole hero to lay out in — client feedback
   09-08: they were cramped into the narrower content column and wrapping badly. */
.hero-topline{grid-column:1/-1}
.hero-tagline{margin:0}
/* On phones even the full-width row isn't wide enough for either sentence at the
   kicker's normal size — both still wrap. Step the size down just enough that they
   sit on one line each, matching the client's "one line" ask for the top of the page. */
/* Client (later round): the .7rem step-down above read as illegibly tiny on
   phones. Traded the serif display face for Inter here (holds up better at
   small sizes) and sized it up; both lines now wrap to two lines on narrow
   phones instead of the earlier one-line-only constraint. */
@media(max-width:520px){.hero-topline .hero-kicker{font-size:.98rem;font-family:var(--font-sans);font-weight:600;letter-spacing:.01em}}
/* Pool/pond hero footage: the pool sits in the left third of the 16:9 source, so a narrow
   phone's tall center-crop misses it entirely. Bias the crop left on phones so the pool
   stays in frame instead of just downtown rooftops. */
@media(max-width:900px){.hero-with-portrait .hero-dark-bg,.hero-with-portrait .hero-bg-video{object-position:15% center}}
/* margin-top was 2px pre-existing — crowded straight up against the buttons above
   it. Client (09-08 follow-up): "this section is not fixed" — brought the whole
   rhythm here onto the 8px grid instead of patching just the one visible gap. */
.hero-voted{display:flex;align-items:center;gap:16px;margin:24px 0 24px}
.hero-voted img{height:66px;width:auto;flex-shrink:0}
.hero-voted .hv-text{font-family:var(--font-display);font-size:clamp(1.2rem,2.4vw,1.72rem);font-weight:700;line-height:1.3;color:#fff}
.hero-voted .hv-text .hl{color:var(--primary)}
@media(max-width:640px){.hero-voted img{height:52px}}
/* Quote under Jason's hero portrait (replaces "Naperville · 25+ years"). */
.hero-portrait-caption .hpq{display:block;font-family:var(--font-display);font-style:italic;font-size:.98rem;font-weight:600;line-height:1.45;letter-spacing:0;text-transform:none;color:rgba(255,255,255,.95);margin-top:6px;text-shadow:0 1px 10px rgba(16,30,50,.65)}
.hero-portrait-caption strong{text-shadow:0 1px 10px rgba(16,30,50,.65)}
/* Suggested search terms under the video search box (client: "make some more
   searchable terms… IME, Back injury, Neck injury, cervical injury, Car
   accident, Semi accident"). */
.vp-suggest{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:-6px 0 16px}
.vp-suggest-label{font-size:.82rem;font-weight:700;color:var(--text-muted);letter-spacing:.04em;text-transform:uppercase}
.vp-suggest button{font-size:.85rem;font-weight:600;color:var(--text-secondary);background:#fff;border:1px solid var(--border);border-radius:var(--radius-pill);padding:7px 14px;cursor:pointer;transition:border-color .15s,color .15s,background .15s}
.vp-suggest button:hover{border-color:var(--accent);color:var(--text);background:var(--secondary)}
