:root{
  /* Locked direction palette (Showroom Light: Cinematic Workmanlike) */
  --bg:#FFFFFF; --surface:#FFFFFF; --ink:#0F1B3D; --ink-soft:#5A6478;
  --accent:#CC0000; --accent-hover:#A80000; --accent-on:#FFFFFF; --panel:#F2F4F8;

  /* Type */
  --font-head:'Manrope',system-ui,sans-serif;
  --font-body:'Inter',system-ui,sans-serif;
  --font-accent:'Fraunces',Georgia,serif;

  --radius:6px;

  /* Motion tokens (interactions.md §0.1 / §0.2) */
  --ease-settle:cubic-bezier(0.25,0.74,0.22,0.99);
  --ease-hero:cubic-bezier(0.55,0,0.1,1);
  --ease-hover:cubic-bezier(0.4,0,0.2,1);
  --dur-hover:200ms; --dur-reveal:800ms; --dur-settle:600ms; --dur-hero:900ms;

  --header-h:76px;
}

*{box-sizing:border-box}
html,body{margin:0;padding:0}
html{ -webkit-text-size-adjust:100%; }
body{
  font-family:var(--font-body);
  color:var(--ink); background:var(--bg);
  font-size:clamp(16px,1rem + 0.1vw,17px);
  line-height:1.6; -webkit-font-smoothing:antialiased;
  font-synthesis:none;
}
/* overflow contract (§0.4.3): clip, never hidden, so sticky survives */
.page{overflow-x:clip;}

img{display:block;max-width:100%}
a{color:inherit}

/* =====================================================================
   3.4 Universal focus-visible rings (keyboard-accessible everywhere)
   2px accent outline + 4px offset. We replace the default ring with a
   crisp on-brand one; we NEVER leave `outline:none` dangling (3.8).
   ===================================================================== */
:focus{outline:none} /* paired replacement below, never bare */
:focus-visible{
  outline:2px solid var(--accent);
  outline-offset:4px;
  border-radius:3px;
}
/* On dark/photo surfaces the accent ring can wash out; add a white halo
   so the ring reads on both light and dark backgrounds. */
.site-header :focus-visible,.hero :focus-visible,.svc-card:focus-visible,
.pullquote-section :focus-visible,.closer :focus-visible,.call-bar :focus-visible,
.floating-cta:focus-visible,.drawer :focus-visible{
  outline-color:var(--accent);
  box-shadow:0 0 0 4px rgba(255,255,255,.55);
}
h1,h2,h3{font-family:var(--font-head);font-weight:800;line-height:1.05;letter-spacing:-0.02em;margin:0;
  text-wrap:pretty;text-wrap:balance}
/* P-005 orphan prevention (MANDATORY): balance headings + heading-adjacent short blocks */
.hero-sub,.lede,.eyebrow,.svc-lede,.faq .sub,.pullquote blockquote{text-wrap:balance}
.accent-serif{font-family:var(--font-accent);font-style:italic;font-weight:500;letter-spacing:-0.01em;}

.wrap{width:min(1180px,100% - 2.5rem);margin-inline:auto}

/* skip link */
.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--accent);color:#fff;
  padding:.7rem 1.1rem;border-radius:0 0 var(--radius) 0;font-family:var(--font-head);font-weight:700}
.skip:focus{left:0}

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  font-family:var(--font-head);font-weight:700;font-size:1rem;
  padding:.9rem 1.5rem;border-radius:var(--radius);
  min-height:48px;text-decoration:none;cursor:pointer;border:1.5px solid transparent;
  touch-action:manipulation;
  transition:background-color var(--dur-hover) var(--ease-hover),
             color var(--dur-hover) var(--ease-hover),
             border-color var(--dur-hover) var(--ease-hover),
             transform var(--dur-hover) var(--ease-hover);
}
/* 3.6 gradient fill (not flat) + 3.7 deep shadow that sharpens on hover */
.btn-primary{
  background:linear-gradient(135deg,var(--accent) 0%,var(--accent-hover) 100%);
  color:var(--accent-on);border-color:var(--accent);
  box-shadow:0 10px 26px -12px rgba(204,0,0,.62),0 3px 8px -4px rgba(11,20,46,.4);
}
.btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.6)}
.btn-ghost.on-light{color:var(--ink);border-color:var(--ink-soft)}
@media (hover:hover){
  .btn-primary:hover{
    background:linear-gradient(135deg,var(--accent-hover) 0%,#8f0000 100%);
    border-color:var(--accent-hover);transform:translateY(-1px);
    box-shadow:0 16px 36px -12px rgba(204,0,0,.82),0 5px 12px -4px rgba(11,20,46,.48);
  }
  .btn-ghost:hover{background:rgba(255,255,255,.12);border-color:#fff}
  .btn-ghost.on-light:hover{background:rgba(15,27,61,.06)}
}
.btn-primary:active{transform:translateY(0)}

/* =====================================================================
   P-003: Transparent -> solid sticky nav
   ===================================================================== */
.site-header{
  position:sticky;top:0;z-index:60;
  /* header height == --header-h exactly (via .nav-inner min-height), so the hero's
     -header-h pull-up lands flush at the top and 100dvh fills to the bottom */
  padding:env(safe-area-inset-top,0px) 0 0;
  padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px);
  /* SSR / no-JS fallback: render SOLID (legible without scrim) */
  background:var(--surface);
  border-bottom:1px solid rgba(15,27,61,.10);
  box-shadow:0 6px 24px -18px rgba(15,27,61,.5);
}
/* When JS is active, start transparent over the hero */
html.js-motion .site-header{
  background:transparent;border-bottom-color:transparent;box-shadow:none;
  transition:background-color var(--dur-settle) var(--ease-settle),
             border-color var(--dur-settle) var(--ease-settle),
             box-shadow var(--dur-settle) var(--ease-settle);
}
html.js-motion .site-header.is-solid{
  background:var(--surface);
  border-bottom-color:rgba(15,27,61,.10);
  box-shadow:0 6px 24px -18px rgba(15,27,61,.5);
}

/* ===================================================================
   Cinematic hero (homepage): the car drives in (video), then the logo
   + hero content enter. Header + scroll-cue wait for .hero-entered.
   =================================================================== */
.hero-vid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 55%;background:transparent}
/* Real poster image under the video: the LCP element on first paint; the video
   covers it once it can play. Same framing as the video for a seamless handoff. */
.hero-poster-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 55%;background:var(--ink)}
/* On narrow screens the wide clip crops tight; shift the framing left so the car
   sits left-of-center and reads cleanly (the centered ghost logo is a separate layer). */
@media (max-width:760px){ .hero-vid,.hero-poster-img{object-position:58% 50%} }
html.js-motion .cinematic-hero .site-header{
  opacity:0;
  transition:background-color var(--dur-settle) var(--ease-settle),
             border-color var(--dur-settle) var(--ease-settle),
             box-shadow var(--dur-settle) var(--ease-settle),
             opacity .8s var(--ease-settle);
}
html.js-motion .cinematic-hero.hero-entered .site-header{opacity:1}
html.js-motion .cinematic-hero .scroll-cue{opacity:0;transition:opacity .6s var(--ease-settle)}
html.js-motion .cinematic-hero.hero-entered .scroll-cue{opacity:.85}
@media (prefers-reduced-motion: reduce){
  html.js-motion .cinematic-hero .site-header,
  html.js-motion .cinematic-hero .scroll-cue{opacity:1;transition:none}
}
.nav-inner{display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:var(--header-h)}
.brand{display:flex;align-items:center;gap:.6rem;text-decoration:none;flex-shrink:0}
.brand img{height:38px;width:auto}
@media (max-width:480px){ .brand img,.brand-logo{height:32px} }
/* Adaptive logo: white wordmark over the transparent (dark) header, dark wordmark when solid.
   Default = dark (covers no-JS solid header on white); light only over the transparent state. */
.brand-logo{height:38px;width:auto;display:block}
.brand-logo--light{display:none}
html.js-motion .site-header:not(.is-solid) .brand-logo--light{display:block}
html.js-motion .site-header:not(.is-solid) .brand-logo--dark{display:none}
/* Ghost wordmark: faint centered brand mark during the cinematic load; fades on entrance */
.hero-ghost{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;pointer-events:none}
/* CSS background (not an <img>) so the ghost is NOT an LCP candidate; the full-bleed
   hero poster becomes the LCP instead. */
.hero-ghost::before{content:"";width:clamp(120px,17vw,250px);aspect-ratio:1;
  background:url(/assets/images/logo-mark.png) center/contain no-repeat;
  filter:drop-shadow(0 4px 40px rgba(0,0,0,.5));
  animation:ghost-fade 3s var(--ease-settle) forwards}
@keyframes ghost-fade{from{opacity:.38}to{opacity:0}}
@media (prefers-reduced-motion: reduce){ .hero-ghost{display:none} }
/* Internal-page hero bands inherit the homepage's transparent-nav-on-load: pull the
   dark band up UNDER the sticky header so the white logo + nav stay legible on load. */
.svc-hero, .page-head, .page-hero, .about-hero{ margin-top:calc(-1 * var(--header-h)); }

/* ---------- Internal-page hero imagery (shared) ----------
   Add `hero-photo` to any internal hero <section> and drop
   <div class="hero-bg" aria-hidden="true"><img ...></div> as its first child.
   Left-heavy navy scrim matches the interior page so heroes read consistently. */
.hero-photo{position:relative;overflow:hidden}
.hero-bg{position:absolute;inset:0;z-index:0;margin:0}
.hero-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 50%}
.hero-bg::after{content:"";position:absolute;inset:0;
  background:linear-gradient(to right,rgba(15,27,61,.95),rgba(15,27,61,.82) 50%,rgba(15,27,61,.58)),
             linear-gradient(0deg,rgba(15,27,61,.5),rgba(15,27,61,0) 55%)}
.hero-photo > *:not(.hero-bg){position:relative;z-index:1}
/* legibility: lift the hero text off the photo (section.* beats per-page hero rules) */
section.hero-photo h1, section.hero-photo .lead, section.hero-photo .lede, section.hero-photo .sub,
section.hero-photo p, section.hero-photo .crumbs, section.hero-photo .hero-eyebrow, section.hero-photo .eyebrow{
  text-shadow:0 2px 16px rgba(11,18,38,.7),0 1px 4px rgba(11,18,38,.55)}
@media (max-width:760px){ .hero-bg::after{background:linear-gradient(to right,rgba(15,27,61,.92),rgba(15,27,61,.82))} }

/* Nav "Book a Detail" CTA (red in both header states) */
.nav-book{display:inline-flex;align-items:center;justify-content:center;background:var(--accent);color:#fff;
  font-family:var(--font-head);font-weight:700;font-size:.92rem;text-decoration:none;
  padding:.6rem 1.1rem;border-radius:var(--radius);min-height:44px;white-space:nowrap;
  transition:background-color var(--dur-hover) var(--ease-hover),transform var(--dur-hover) var(--ease-hover)}
@media (hover:hover){ .nav-book:hover{background:var(--accent-hover);transform:translateY(-1px)} }

/* Stats bar (immediately below the hero) with count-up numbers */
.stats-bar{background:var(--panel);border-bottom:1px solid rgba(15,27,61,.06);padding:clamp(2rem,5vh,3.2rem) 0}
.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1.5rem;text-align:center}
@media (max-width:720px){ .stats-grid{grid-template-columns:repeat(2,1fr);gap:2.2rem 1rem} }
.stat{display:flex;flex-direction:column;align-items:center;gap:.3rem}
.stat-stars{color:var(--accent);display:flex;gap:.12rem;margin-bottom:.15rem}
.stat-stars svg{width:18px;height:18px}
.stat-num{font-family:var(--font-head);font-weight:800;font-size:clamp(2.1rem,4.8vw,3.3rem);line-height:1;
  color:var(--ink);letter-spacing:-0.02em}
.stat-num .u{color:var(--accent)}
.stat-label{font-family:var(--font-head);font-weight:600;font-size:clamp(.8rem,2vw,.92rem);
  color:var(--ink-soft);letter-spacing:.02em}
.nav-links{display:flex;align-items:center;gap:1.6rem;list-style:none;margin:0;padding:0}
.nav-links a{
  font-family:var(--font-head);font-weight:600;font-size:.95rem;text-decoration:none;
  color:var(--ink); /* solid/no-JS state */
  transition:color var(--dur-settle) var(--ease-settle),opacity var(--dur-hover) var(--ease-hover);
}
@media (hover:hover){ .nav-links a:hover{opacity:.7} }
/* transparent-over-hero text color (JS only) */
html.js-motion .site-header:not(.is-solid) .nav-links a,
html.js-motion .site-header:not(.is-solid) .nav-phone{color:#fff}
.nav-phone{
  font-family:var(--font-head);font-weight:700;font-size:.95rem;text-decoration:none;
  display:inline-flex;align-items:center;gap:.45rem;min-height:44px;white-space:nowrap;
  color:var(--accent);touch-action:manipulation;
  transition:color var(--dur-settle) var(--ease-settle),opacity var(--dur-hover) var(--ease-hover);
}
.nav-phone svg{width:16px;height:16px}
html.js-motion .site-header.is-solid .nav-phone{color:var(--accent)}
@media (hover:hover){ .nav-phone:hover{opacity:.8} }
.nav-right{display:flex;align-items:center;gap:1rem}

/* hamburger */
.nav-toggle{display:none;background:transparent;border:0;cursor:pointer;
  width:44px;height:44px;align-items:center;justify-content:center;
  color:var(--ink);touch-action:manipulation;border-radius:var(--radius)}
.nav-toggle svg{width:26px;height:26px}
html.js-motion .site-header:not(.is-solid) .nav-toggle{color:#fff}
@media (max-width:760px){
  .nav-links{display:none}
  .nav-phone{display:none}
  .nav-toggle{display:inline-flex}
}

/* mobile drawer (fully opaque per §7a) */
.drawer{
  position:fixed;inset:0;z-index:70;display:none;
  background:var(--surface);
  padding:calc(env(safe-area-inset-top,0px) + 1.25rem) clamp(1.25rem,5vw,2rem) calc(env(safe-area-inset-bottom,0px) + 2rem);
}
.drawer.is-open{display:flex;flex-direction:column}
.drawer-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:2.4rem}
.drawer-top img{height:36px}
.drawer-close{background:transparent;border:0;cursor:pointer;width:44px;height:44px;
  color:var(--ink);display:inline-flex;align-items:center;justify-content:center;touch-action:manipulation}
.drawer-close svg{width:28px;height:28px}
.drawer-links{display:flex;flex-direction:column;gap:.25rem;list-style:none;margin:0;padding:0}
.drawer-links a{font-family:var(--font-head);font-weight:700;font-size:1.6rem;color:var(--ink);
  text-decoration:none;padding:.7rem 0;border-bottom:1px solid rgba(15,27,61,.08);touch-action:manipulation}
.drawer-call{margin-top:auto;padding-top:1.6rem}
.drawer-call .btn{width:100%}
body.nav-open{overflow:hidden}

/* =====================================================================
   P-011: Immersive full-bleed hero  +  P-002 scrim  +  P-001 entrance
   ===================================================================== */
.hero{
  position:relative;
  /* fill the viewport AND compensate for the -header-h pull-up, so the hero
     reaches the very bottom of the screen with no strip showing underneath */
  min-height:100vh;
  min-height:100svh;
  min-height:100dvh;
  margin-top:calc(-1 * var(--header-h)); /* pull header transparent over photo */
  display:flex;align-items:center;
  overflow:hidden;color:#fff;
}
.hero-media{position:absolute;inset:0;z-index:0}
/* P-010 over-height layer so parallax never reveals an edge */
.hero-media .drift{position:absolute;left:0;right:0;top:-10%;height:120%;will-change:transform}
.hero-media img{width:100%;height:100%;object-fit:cover;object-position:50% 68%}
/* subtle cinematic vignette so the photo edges fall off into the frame */
.hero-media::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(120% 80% at 50% 38%,transparent 52%,rgba(15,27,61,.32) 100%)}
/* P-002 scrims: navy-tinted, not pure black. Deeper, more deliberate falloff. */
.hero-scrim-top{position:absolute;inset:0;z-index:1;
  background:linear-gradient(to bottom,rgba(15,27,61,.52),rgba(15,27,61,0) 30%)}
.hero-scrim-bottom{position:absolute;inset:0;z-index:1;
  background:linear-gradient(to top,rgba(11,20,46,.88),rgba(13,23,53,.32) 44%,rgba(15,27,61,0) 72%)}

/* P-003.3 (early): radial-gradient halo behind the headline for depth */
.hero-halo{position:absolute;z-index:1;left:clamp(-6rem,-4vw,-2rem);bottom:14%;
  width:min(70vw,720px);height:min(70vw,720px);pointer-events:none;
  background:radial-gradient(circle at 30% 50%,rgba(204,0,0,.20),rgba(204,0,0,.05) 42%,transparent 64%);
  filter:blur(8px)}

.hero-content{position:relative;z-index:2;padding-top:calc(var(--header-h) + 1rem);padding-bottom:1rem;min-width:0}
.hero-eyebrow{
  font-family:var(--font-head);font-weight:700;font-size:clamp(.72rem,2vw,.82rem);letter-spacing:.2em;
  text-transform:uppercase;color:#fff;opacity:1;margin:0 0 1.15rem;
  display:inline-flex;align-items:center;gap:.7rem;text-shadow:0 2px 10px rgba(11,20,46,.55);
}
.eyebrow-tick{display:inline-block;width:1.6rem;height:2px;background:var(--accent);flex:0 0 auto;
  box-shadow:0 0 12px rgba(204,0,0,.6)}
.hero h1{
  font-size:clamp(1.8rem,4.4vw,3.2rem);
  letter-spacing:-0.02em;line-height:1.08;
  text-shadow:0 3px 30px rgba(11,20,46,.5);
  max-width:30ch;text-wrap:balance;
}
.hero h1 .line{display:block}
.hero h1 .accent-serif{color:#fff;letter-spacing:-0.015em}
.hero-sub{
  margin:1.5rem 0 0;max-width:44ch;font-size:clamp(1.08rem,1.6vw,1.28rem);
  line-height:1.55;color:#fff;opacity:.96;text-shadow:0 1px 14px rgba(11,20,46,.5);text-wrap:balance;
}
.hero-cta{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:2rem}
.hero-cta .btn-primary{
  box-shadow:0 14px 34px -14px rgba(204,0,0,.7),0 4px 12px -4px rgba(11,20,46,.5);
}
@media (hover:hover){ .hero-cta .btn-primary:hover{box-shadow:0 18px 40px -12px rgba(204,0,0,.85),0 6px 14px -4px rgba(11,20,46,.55)} }

/* Glassmorphic founder-proof card (design.md signature move; checklist 1.5) */
.glass-card{
  background:linear-gradient(135deg,rgba(255,255,255,.16),rgba(255,255,255,.07));
  border:1px solid rgba(255,255,255,.28);
  -webkit-backdrop-filter:blur(14px) saturate(140%);backdrop-filter:blur(14px) saturate(140%);
  box-shadow:0 18px 50px -24px rgba(11,20,46,.8),inset 0 1px 0 rgba(255,255,255,.3);
}
.hero-proof{
  position:absolute;z-index:2;right:clamp(1.25rem,4vw,3rem);bottom:clamp(3rem,8vh,6rem);
  width:min(260px,76vw);border-radius:calc(var(--radius) + 4px);padding:1.1rem 1.25rem;color:#fff;
}
.hero-proof-stars{display:flex;gap:.18rem;margin-bottom:.55rem}
.hero-proof-stars svg{width:18px;height:18px;color:var(--accent)}
.hero-proof-line{margin:0;font-family:var(--font-head);font-weight:600;font-size:1rem;
  display:flex;align-items:center;gap:.55rem;text-shadow:none}
.hero-proof-line strong{font-weight:800;font-size:1.25rem;letter-spacing:-0.01em}
.hero-proof-sep{display:inline-block;width:4px;height:4px;border-radius:50%;background:rgba(255,255,255,.55)}
.hero-proof-meta{margin:.35rem 0 0;font-size:.82rem;font-family:var(--font-head);font-weight:600;
  color:rgba(255,255,255,.82);letter-spacing:.01em}
@media (max-width:760px){
  /* 8.5: stack the hero as a column so the proof card sits BELOW the
     headline at full width instead of being squeezed into the flex ROW
     and clipped at the right edge. align-items:stretch keeps both the
     content (its own .wrap width caps it) and the proof full-width;
     margin-top:auto on the content keeps it anchored to the bottom. */
  .hero{flex-direction:column;align-items:stretch}
  .hero-content{margin-top:auto}
  .hero-proof{position:relative;right:auto;bottom:auto;margin:1.5rem 0 0;width:auto;max-width:none;
    margin-inline:max(1.25rem,(100% - min(1180px,100% - 2.5rem))/2)}
}

.scroll-cue{
  position:absolute;left:clamp(1.25rem,4vw,3rem);bottom:1.4rem;z-index:2;
  font-family:var(--font-head);font-weight:600;font-size:.72rem;letter-spacing:.22em;
  text-transform:uppercase;color:#fff;opacity:.85;display:flex;align-items:center;gap:.6rem;
}
.scroll-cue::after{content:"";display:block;width:1px;height:34px;background:#fff;opacity:.7;
  animation:cuepulse 2.2s var(--ease-settle) infinite}
@keyframes cuepulse{0%,100%{transform:scaleY(.5);opacity:.4;transform-origin:top}50%{transform:scaleY(1);opacity:.9;transform-origin:top}}
/* on small screens the proof card sits in-flow; hide the absolute scroll cue to avoid overlap */
@media (max-width:760px){ .scroll-cue{display:none} }

/* P-001 hero line entrance: hidden state only under js-motion */
html.js-motion .hero-anim{opacity:0;transform:translateY(28px);
  transition:opacity var(--dur-hero) var(--ease-hero),transform var(--dur-hero) var(--ease-hero)}
html.js-motion .hero-anim.is-in{opacity:1;transform:none}

/* =====================================================================
   Section scaffolding + P-008 reveal ladder (§0.5)
   ===================================================================== */
section{padding:clamp(4rem,9vh,7.5rem) 0}
.alt{background:var(--panel)}
.eyebrow{font-family:var(--font-head);font-weight:700;font-size:.78rem;letter-spacing:.16em;
  text-transform:uppercase;color:var(--accent);margin:0 0 1rem}

html.js-motion .reveal{
  opacity:0;transform:translateY(24px);
  transition:opacity var(--dur-reveal) var(--ease-settle),
             transform var(--dur-reveal) var(--ease-settle);
  will-change:opacity,transform;
  transition-delay:var(--reveal-delay,0ms);
}
html.js-motion .reveal.is-visible{opacity:1;transform:none}

/* ---------- Intro / positioning ---------- */
.intro h2{font-size:clamp(1.9rem,4.4vw,3.2rem);max-width:20ch;line-height:1.12}
.intro .accent-serif{color:var(--accent)}
.intro p.lede{margin-top:1.4rem;max-width:54ch;color:var(--ink-soft);font-size:clamp(1.05rem,1.5vw,1.2rem)}

/* ---------- Services (P-012 spec-panel hover reveal) ---------- */
.svc-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:2.4rem}
.svc-head h2{font-size:clamp(1.8rem,4vw,2.8rem)}
.svc-head .svc-lede{color:var(--ink-soft);max-width:34ch;margin:.6rem 0 0}
.svc-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem}
@media (max-width:880px){.svc-grid{grid-template-columns:1fr;max-width:520px;margin-inline:auto}}
.svc-card{
  position:relative;border-radius:var(--radius);overflow:hidden;background:var(--ink);
  color:#fff;border:1px solid rgba(15,27,61,.08);text-decoration:none;
  transition:transform var(--dur-hover) var(--ease-hover),box-shadow var(--dur-hover) var(--ease-hover);
  min-height:420px;display:flex;flex-direction:column;justify-content:flex-end;
}
.svc-card .ph{position:absolute;inset:0;z-index:0;overflow:hidden}
.svc-card .ph img{width:100%;height:100%;object-fit:cover;
  transition:transform var(--dur-reveal) var(--ease-settle)}
.svc-card .ph::after{content:"";position:absolute;inset:0;
  background:linear-gradient(to top,rgba(15,27,61,.92),rgba(15,27,61,.45) 50%,rgba(15,27,61,.18))}
.svc-card-body{position:relative;z-index:1;padding:1.5rem}
.svc-tag{display:inline-block;font-family:var(--font-head);font-weight:700;font-size:.68rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--bg);background:var(--accent);
  padding:.3rem .55rem;border-radius:4px;margin-bottom:.8rem}
.svc-card h3{font-size:1.5rem;margin-bottom:.4rem}
.svc-card .blurb{color:rgba(255,255,255,.85);font-size:.96rem}
.svc-card-cta{display:inline-flex;align-items:center;gap:.4rem;margin-top:1rem;
  font-family:var(--font-head);font-weight:700;font-size:.9rem;color:#fff}
.svc-card-cta svg{width:15px;height:15px;transition:transform var(--dur-hover) var(--ease-hover)}
@media (hover:hover){
  .svc-card:hover,.svc-card:focus-within{transform:translateY(-6px);
    box-shadow:0 26px 46px -22px rgba(15,27,61,.72)}
  .svc-card:hover .svc-card-cta svg{transform:translateX(3px)}
  .svc-card:hover .ph img,.svc-card:focus-within .ph img{transform:scale(1.06)}
}
.svc-card.is-open{transform:translateY(-4px);box-shadow:0 22px 40px -24px rgba(15,27,61,.7)}

/* spec panel: visible by default (no-JS = trust content shown). JS collapses to 0fr. */
.svc-spec{margin-top:1rem;display:grid;grid-template-rows:1fr;
  transition:grid-template-rows var(--dur-hover) var(--ease-hover),opacity var(--dur-hover) var(--ease-hover)}
html.js-motion .svc-spec{grid-template-rows:0fr;opacity:0}
html.js-motion .svc-card.is-open .svc-spec{grid-template-rows:1fr;opacity:1}
@media (hover:hover){
  html.js-motion .svc-card:hover .svc-spec,
  html.js-motion .svc-card:focus-within .svc-spec{grid-template-rows:1fr;opacity:1}
}
.svc-spec-inner{overflow:hidden;min-height:0}
.svc-spec ul{list-style:none;margin:.6rem 0 0;padding:0;display:grid;gap:.45rem}
.svc-spec li{display:flex;gap:.55rem;font-size:.92rem;color:rgba(255,255,255,.9)}
.svc-spec li svg{flex:0 0 auto;width:16px;height:16px;margin-top:.18rem;color:var(--accent)}
.svc-note{margin-top:.9rem;font-family:var(--font-head);font-weight:600;font-size:.85rem;color:#fff;opacity:.95}
.svc-tap{display:none;margin-top:.6rem;font-size:.78rem;font-weight:600;
  font-family:var(--font-head);color:rgba(255,255,255,.7)}
@media (hover:none){.svc-tap{display:block}}
.svc-foot{margin-top:2.4rem;display:flex;flex-direction:column;align-items:center;gap:1rem}
.svc-fourth{margin:0;text-align:center;color:var(--ink-soft);font-size:1rem}
.svc-fourth a{color:var(--accent);font-weight:700;font-family:var(--font-head);text-decoration:none}
@media (hover:hover){ .svc-fourth a:hover{text-decoration:underline} }

/* ---------- The wedge / why this shop ---------- */
.wedge-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(2rem,5vw,4rem);align-items:center}
@media (max-width:900px){.wedge-grid{grid-template-columns:1fr}}
.wedge h2{font-size:clamp(1.8rem,4vw,2.8rem);max-width:18ch;line-height:1.12}
.wedge .accent-serif{color:var(--accent)}
.wedge p{margin:1.2rem 0 0;color:var(--ink-soft);max-width:52ch;font-size:clamp(1.02rem,1.4vw,1.12rem)}
.wedge-list{list-style:none;margin:1.6rem 0 0;padding:0;display:grid;gap:.9rem}
.wedge-list li{display:flex;gap:.7rem;align-items:flex-start;font-family:var(--font-head);font-weight:600;color:var(--ink)}
.wedge-list li svg{flex:0 0 auto;width:20px;height:20px;margin-top:.12rem;color:var(--accent)}
.wedge-media{position:relative;border-radius:var(--radius);overflow:hidden;aspect-ratio:4/5;background:var(--ink)}
.wedge-media img{width:100%;height:100%;object-fit:cover}

/* ---------- Framed editorial media (4.6): inner-border ring + outer drop-glow ----------
   Applied to every editorial figure (story/proc/cross/angle/consult/handoff/drop/dropoff/
   presale/wedge media). The inset ring crisps the photo edge against white; the layered
   outer shadow lifts it off the page so each customer photo reads as a deliberate, framed
   exhibit rather than a flush rectangle. Pseudo-element carries the inset ring so it sits
   above the (overflow-clipped) image. */
.story-media,.proc-media,.cross-media,.angle-media,.consult-media,
.handoff-media,.drop-media,.dropoff-media,.presale-media,.wedge-media{
  box-shadow:0 1px 2px rgba(15,27,61,.10),
             0 18px 34px -20px rgba(15,27,61,.42),
             0 40px 64px -44px rgba(15,27,61,.30)}
.story-media::after,.proc-media::after,.angle-media::after,.consult-media::after,
.handoff-media::after,.drop-media::after,.dropoff-media::after,.presale-media::after,
.wedge-media::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:2;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14),inset 0 0 0 2px rgba(15,27,61,.06)}
.wedge-proof{position:absolute;left:1rem;right:1rem;bottom:1rem;z-index:3;
  background:rgba(15,27,61,.86);color:#fff;border-radius:var(--radius);padding:1rem 1.2rem;
  font-family:var(--font-head)}
.wedge-proof .big{font-weight:800;font-size:1.6rem}
.wedge-proof .small{font-size:.85rem;opacity:.85;margin-top:.2rem}

/* ---------- How it works ---------- */
.steps-head{text-align:center;margin-bottom:2.6rem}
.steps-head h2{font-size:clamp(1.8rem,4vw,2.8rem)}
.steps-head p{color:var(--ink-soft);margin:.8rem auto 0;max-width:46ch}
.steps{display:grid;grid-template-columns:repeat(4,1fr);gap:1.25rem;counter-reset:step}
@media (max-width:880px){.steps{grid-template-columns:1fr 1fr}}
@media (max-width:520px){.steps{grid-template-columns:1fr}}
.step{background:var(--bg);border:1px solid rgba(15,27,61,.10);border-radius:var(--radius);
  padding:1.6rem 1.4rem;position:relative;
  transition:transform var(--dur-hover) var(--ease-hover),
             box-shadow var(--dur-hover) var(--ease-hover),
             border-color var(--dur-hover) var(--ease-hover)}
@media (hover:hover){
  .step:hover{transform:translateY(-4px);border-color:rgba(204,0,0,.28);
    box-shadow:0 18px 34px -22px rgba(15,27,61,.55)}
}
.step .num{counter-increment:step;font-family:var(--font-head);font-weight:800;font-size:1rem;
  width:38px;height:38px;border-radius:50%;background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;margin-bottom:1rem;
  /* 4.8 icon depth: inner highlight + soft accent halo + drop shadow */
  box-shadow:inset 0 1px 0 rgba(255,255,255,.30),0 0 0 5px rgba(204,0,0,.10),0 9px 16px -7px rgba(204,0,0,.5)}
.step .num::before{content:counter(step)}
.step h3{font-size:1.18rem;margin-bottom:.4rem}
.step p{color:var(--ink-soft);font-size:.95rem;margin:0}

/* ---------- Gallery rail (Portfolio-Forward) ---------- */
.gallery h2{font-size:clamp(1.8rem,4vw,2.8rem);margin-bottom:.6rem}
.gallery .sub{color:var(--ink-soft);margin:0 0 2rem;max-width:50ch}
.rail{display:grid;grid-auto-flow:column;grid-auto-columns:min(74%,420px);gap:1rem;
  overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;
  padding-bottom:1rem;margin-inline:calc(-1 * max(1.25rem,(100% - min(1180px,100% - 2.5rem))/2));
  padding-inline:max(1.25rem,(100% - min(1180px,100% - 2.5rem))/2);
  -webkit-overflow-scrolling:touch;scrollbar-width:thin}
.rail figure{margin:0;scroll-snap-align:start;border-radius:var(--radius);overflow:hidden;
  background:var(--ink);position:relative;aspect-ratio:4/3;
  box-shadow:0 1px 2px rgba(15,27,61,.10),0 16px 30px -20px rgba(15,27,61,.40)}
/* inner-border ring (4.6) sits above the clipped image */
.rail figure::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.14),inset 0 0 0 2px rgba(15,27,61,.06)}
.rail figure img{width:100%;height:100%;object-fit:cover;
  transition:transform 600ms var(--ease-settle)}
@media (hover:hover){ .rail figure:hover img{transform:scale(1.04)} }
.rail figcaption{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:.9rem 1rem;color:#fff;
  font-family:var(--font-head);font-weight:600;font-size:.9rem;
  background:linear-gradient(to top,rgba(15,27,61,.85),rgba(15,27,61,0))}

/* =====================================================================
   P-004: Pull-quote reveal
   ===================================================================== */
.pullquote-section{background:var(--ink);color:#fff}
.pullquote{text-align:center;margin-inline:auto;max-width:880px}
.pullquote .mark{font-family:var(--font-accent);font-style:italic;font-size:5rem;line-height:.5;
  color:var(--accent);display:block;margin-bottom:.4rem}
.pullquote blockquote{margin:0;font-family:var(--font-head);font-weight:700;
  font-size:clamp(1.5rem,3.4vw,2.4rem);line-height:1.25;letter-spacing:-0.01em}
.pullquote blockquote .accent-serif{color:#fff;display:inline}
.pq-stars{display:flex;justify-content:center;gap:.3rem;margin:1.6rem 0 .8rem}
.pq-stars svg{width:24px;height:24px;color:var(--accent)}
.pq-attr{font-family:var(--font-head);font-weight:600;color:rgba(255,255,255,.8);font-size:.98rem;letter-spacing:.01em}

/* P-004 motion */
html.js-motion .pullquote .pq-quote{opacity:0;transform:translateY(20px);
  transition:opacity var(--dur-settle) var(--ease-settle),transform var(--dur-settle) var(--ease-settle)}
html.js-motion .pullquote.is-visible .pq-quote{opacity:1;transform:none}
html.js-motion .pq-stars svg{opacity:0;transform:scale(.6);
  transition:opacity var(--dur-hover) var(--ease-hover),transform var(--dur-hover) var(--ease-hover)}
html.js-motion .pullquote.is-visible .pq-stars svg{opacity:1;transform:none}
html.js-motion .pq-attr{opacity:0;transition:opacity var(--dur-settle) var(--ease-settle)}
html.js-motion .pullquote.is-visible .pq-attr{opacity:1;transition-delay:560ms}

/* ---------- Second testimonial ---------- */
.testi-2{margin:3rem auto 0;max-width:720px;text-align:center}
.testi-2 .stars{display:flex;justify-content:center;gap:.25rem;margin-bottom:1rem}
.testi-2 .stars svg{width:18px;height:18px;color:var(--accent)}
.testi-2 blockquote{margin:0;font-family:var(--font-head);font-weight:600;font-size:clamp(1.05rem,2vw,1.25rem);
  line-height:1.45;color:#fff;opacity:.95}
.testi-2 .attr{margin-top:1rem;font-family:var(--font-head);font-weight:600;font-size:.92rem;color:rgba(255,255,255,.7)}

/* ---------- Service area ---------- */
.area{text-align:center}
.area h2{font-size:clamp(1.8rem,4vw,2.8rem);max-width:18ch;margin-inline:auto}
.area p{color:var(--ink-soft);margin:1.2rem auto 0;max-width:52ch;font-size:clamp(1.02rem,1.4vw,1.12rem)}
.area-cities{display:flex;flex-wrap:wrap;justify-content:center;gap:.6rem;margin:1.8rem auto 0;max-width:760px}
.area-cities span,.area-cities a{font-family:var(--font-head);font-weight:700;font-size:.92rem;color:var(--ink);text-decoration:none;transition:border-color .2s,color .2s;
  background:var(--bg);border:1px solid rgba(15,27,61,.12);border-radius:var(--radius);padding:.5rem .9rem;
  display:inline-flex;align-items:center;min-height:44px}
.area-cities a:hover{border-color:var(--accent);color:var(--accent)}
.area-note{margin-top:1.6rem;color:var(--ink-soft);font-size:.92rem}

/* ---------- FAQ (BUILD-STANDARDS §7b: centered column, left-aligned content) ---------- */
.faq .eyebrow{text-align:center}
.faq h2{font-size:clamp(1.8rem,4vw,2.8rem);margin-bottom:.6rem;text-align:center}
.faq .sub{color:var(--ink-soft);margin:0 auto 2.4rem;max-width:50ch;text-align:center}
.faq-list{display:grid;gap:1rem;max-width:820px;margin-inline:auto}
.faq-item{background:var(--bg);border:1px solid rgba(15,27,61,.12);border-radius:var(--radius);padding:1.4rem 1.5rem;text-align:left}
.faq-item h3{font-size:1.18rem;margin-bottom:.55rem;color:var(--ink)}
.faq-item p{margin:0;color:var(--ink-soft);font-size:1rem}

/* ---------- Closer ---------- */
.closer{background:var(--ink);color:#fff;text-align:center}
.closer h2{font-size:clamp(2rem,4.4vw,3rem);max-width:18ch;margin-inline:auto;color:#fff}
.closer .accent-serif{color:#fff}
.closer p{color:rgba(255,255,255,.82);margin:1.2rem auto 0;max-width:46ch;font-size:clamp(1.05rem,1.5vw,1.18rem)}
.closer .closer-cta{display:flex;flex-wrap:wrap;gap:.85rem;justify-content:center;margin-top:2rem}
.closer .btn-ghost{color:#fff;border-color:rgba(255,255,255,.6)}
/* §7.4 trust signal directly under the closer CTA */
.closer-trust{display:inline-flex;flex-wrap:wrap;align-items:center;justify-content:center;
  gap:.55rem 1rem;margin:1.4rem auto 0;color:rgba(255,255,255,.78);
  font-family:var(--font-head);font-weight:600;font-size:.92rem;letter-spacing:.01em}
.closer-trust .star{display:inline-flex;align-items:center;gap:.32rem;color:#fff}
.closer-trust .star svg{width:15px;height:15px;color:var(--accent)}
.closer-trust .dot{width:4px;height:4px;border-radius:999px;background:var(--accent);display:inline-block}

/* ---------- Footer (Wave 2 editorial: dark navy ground, accent section labels) ----------
   The footer closes the page on the same navy surface as the closer + pullquote, so
   the site lands on one deliberate dark frame instead of fading back to flat white.
   Section labels are accent-color tracked-out micro-eyebrows (§2.5). */
.site-footer{background:var(--ink);color:#fff;border-top:1px solid rgba(255,255,255,.10);
  padding:4rem 0 calc(2rem + env(safe-area-inset-bottom,0px))}
.foot-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1.3fr;gap:2.4rem 2rem}
@media (max-width:860px){ .foot-grid{grid-template-columns:1fr 1fr;gap:2.2rem} }
@media (max-width:520px){ .foot-grid{grid-template-columns:1fr} }
/* Footer brand lockup: red mark + white wordmark (logo-light.png) on the navy
   ground. No whitening filter, so the red circle is preserved. */
.foot-brand img{height:36px;width:auto;margin-bottom:1rem}
.foot-brand p{color:rgba(255,255,255,.72);font-size:.95rem;max-width:32ch;margin:0 0 1.3rem}
.foot-social{display:flex;gap:.6rem}
.foot-social a{width:38px;height:38px;border-radius:50%;border:1px solid rgba(255,255,255,.18);
  display:inline-flex;align-items:center;justify-content:center;color:#fff;
  transition:background-color var(--dur-hover) var(--ease-hover),border-color var(--dur-hover) var(--ease-hover)}
.foot-social svg{width:18px;height:18px}
@media (hover:hover){ .foot-social a:hover{background:var(--accent);border-color:var(--accent)} }
.foot-col h2{font-family:var(--font-head);font-weight:700;font-size:.74rem;letter-spacing:.16em;
  text-transform:uppercase;color:#ff5c5c;margin:0 0 1.1rem} /* lighter red passes 4.5:1 on navy */
.foot-col ul{list-style:none;margin:0;padding:0;display:grid;gap:.7rem}
.foot-col a{color:rgba(255,255,255,.78);font-size:.95rem;text-decoration:none;
  display:inline-flex;align-items:center;gap:.55rem}
.foot-col a svg{width:15px;height:15px;flex:0 0 auto;color:var(--accent)}
@media (hover:hover){ .foot-col a:hover{color:#fff} }
.foot-contact .foot-rating{color:rgba(255,255,255,.62);font-size:.9rem;
  display:inline-flex;align-items:center;gap:.45rem}
.foot-contact .foot-rating svg{width:15px;height:15px;flex:0 0 auto;color:var(--accent)}
.foot-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;
  gap:.6rem 1.5rem;margin-top:3rem;padding-top:1.5rem;border-top:1px solid rgba(255,255,255,.12);
  color:rgba(255,255,255,.6);font-size:.86rem}
.foot-bottom a{color:rgba(255,255,255,.82);text-decoration:underline;text-underline-offset:2px}
.foot-bottom a.lc{color:#ff5c5c;font-weight:600}
@media (hover:hover){ .foot-bottom a:hover{color:#fff} .foot-bottom a.lc:hover{text-decoration:underline} }
@media (max-width:560px){ .foot-bottom{flex-direction:column;align-items:flex-start;gap:.5rem}
  .foot-col a{min-height:40px} }

/* =====================================================================
   §7a Mobile sticky call bar
   ===================================================================== */
.call-bar{
  position:fixed;left:0;right:0;bottom:0;z-index:55;display:none;
  background:var(--accent);
  /* fill through the safe-area inset */
  padding:.85rem clamp(1rem,5vw,1.5rem) calc(.85rem + env(safe-area-inset-bottom,0px));
  box-shadow:0 -8px 24px -16px rgba(15,27,61,.6);
  transform:translateY(110%);
  transition:transform var(--dur-settle) var(--ease-settle);
}
.call-bar.is-up{transform:none}
/* the call-bar IS the <a>; its label sits in a <span>. Style the span, not a nested <a>.
   (.call-bar display is owned by the show/hide media query below.) */
.call-bar>span{display:flex;align-items:center;justify-content:center;gap:.55rem;
  font-family:var(--font-head);font-weight:800;font-size:1.08rem;color:#fff;text-decoration:none;
  min-height:48px;touch-action:manipulation}
.call-bar{font-size:1.08rem;text-decoration:none}
.call-bar svg{width:19px;height:19px;flex:0 0 auto}
@media (max-width:720px){
  .call-bar{display:block}
  /* 8.7 keep the fixed call bar from covering the last CTA: pad the final
     two sections so their buttons always clear the ~80px bar + safe-area. */
  .closer:last-of-type,.site-footer{
    padding-bottom:calc(6rem + env(safe-area-inset-bottom,0px));
  }
}

/* =====================================================================
   Desktop floating CTA pill (checklist 1.8). Phone-primary for trades.
   Appears after the hero; hidden on touch/mobile where the call-bar serves.
   ===================================================================== */
.floating-cta{
  position:fixed;right:clamp(1.25rem,2.5vw,2rem);bottom:clamp(1.25rem,2.5vw,2rem);z-index:54;
  display:none;align-items:center;gap:.55rem;
  font-family:var(--font-head);font-weight:800;font-size:1rem;color:#fff;text-decoration:none;
  background:var(--accent);border:1px solid var(--accent);
  padding:.85rem 1.35rem;border-radius:999px;
  box-shadow:0 16px 40px -14px rgba(204,0,0,.7),0 6px 16px -6px rgba(11,20,46,.5);
  opacity:0;transform:translateY(14px) scale(.96);pointer-events:none;
  transition:opacity var(--dur-settle) var(--ease-settle),
             transform var(--dur-settle) var(--ease-settle),
             background-color var(--dur-hover) var(--ease-hover),
             box-shadow var(--dur-hover) var(--ease-hover);
}
.floating-cta svg{width:18px;height:18px}
.floating-cta.is-up{opacity:1;transform:none;pointer-events:auto}
/* §7a: NO desktop floating/bottom CTA. Desktop uses the sticky-header click-to-call;
   mobile uses the .call-bar. The .floating-cta stays hidden (base display:none). */
@media (hover:hover){
  .floating-cta:hover{background:var(--accent-hover);border-color:var(--accent-hover);
    box-shadow:0 20px 46px -12px rgba(204,0,0,.82),0 8px 18px -6px rgba(11,20,46,.55)}
}

/* =====================================================================
   Reduced-motion bailout (§0.4.2): finished state, zero animation
   ===================================================================== */
@media (prefers-reduced-motion:reduce){
  html.js-motion .reveal,
  html.js-motion .hero-anim,
  html.js-motion .pullquote .pq-quote,
  html.js-motion .pq-stars svg,
  html.js-motion .pq-attr{opacity:1 !important;transform:none !important;transition:none !important}
  html.js-motion .site-header{transition:none !important}
  html.js-motion .svc-spec{grid-template-rows:1fr !important;opacity:1 !important;transition:none !important}
  .scroll-cue::after{animation:none}
  .rail figure img{transition:none}
  .svc-card .ph img,.svc-card,.step{transition:none !important}
  .hero-media .drift{transform:none !important}
  .call-bar{transition:none}
  .floating-cta{transition:none}
}

/* =====================================================================
   8.3 One delight per page: an accent underline that draws itself under
   the lead headline's serif phrase as the headline reveals. Hand-inked
   feel via a slightly skewed, soft-radius stroke. Reduced-motion shows
   it already-drawn. The about page's delight is the signature flourish
   instead, so .delight-underline is applied once per non-about page.
   ===================================================================== */
.delight-underline{position:relative;display:inline-block;max-width:100%}
.delight-underline::after{content:"";position:absolute;left:0;right:0;bottom:-.04em;height:.09em;
  border-radius:999px;background:var(--accent);transform:scaleX(0);transform-origin:left center;
  opacity:.92}
/* On photo heroes the serif phrase is white; the red stroke still reads as the brand mark. */
html.js-motion .delight-underline::after{
  transition:transform 760ms var(--ease-settle) 220ms}
/* draw when the headline's reveal wrapper becomes visible, or hero entrance settles */
html.js-motion .is-visible .delight-underline::after,
html.js-motion .reveal.is-visible.delight-underline::after,
html.js-motion .hero-anim.is-in .delight-underline::after,
html.js-motion .delight-underline.is-drawn::after{transform:scaleX(1)}
@media (prefers-reduced-motion:reduce){
  .delight-underline::after{transform:scaleX(1) !important;transition:none !important}
}

/* =====================================================================
   8.2 Founder signature flourish (about page). Fraunces-italic set large
   and loose as a hand-signed name under Justin's story. One-to-two uses
   site-wide only. This is the single instance.
   ===================================================================== */
.signature-script{
  font-family:var(--font-accent);font-style:italic;font-weight:500;
  font-size:clamp(2.2rem,5vw,3rem);line-height:1;color:var(--accent);
  letter-spacing:-0.01em;margin:1.6rem 0 0;display:inline-block;
  transform:rotate(-3deg);transform-origin:left center;
}
.signature-script .sig-role{display:block;transform:rotate(3deg);margin-top:.55rem;
  font-family:var(--font-head);font-style:normal;font-weight:600;font-size:.9rem;
  letter-spacing:.04em;color:var(--ink-soft)}

/* ---------- Footer nav (Step 2.5; recolored for the Wave 2 navy footer) ---------- */
.foot-nav{display:flex;flex-wrap:wrap;gap:.9rem 1.6rem;margin-top:1.4rem;padding-top:1.3rem;border-top:1px solid rgba(255,255,255,.12)}
.foot-nav a{font-family:var(--font-head);font-weight:600;font-size:.9rem;color:rgba(255,255,255,.78);text-decoration:none}
@media (hover:hover){ .foot-nav a:hover{color:var(--accent)} }

/* =====================================================================
   8.4 Mobile tap-target floor (≥44px). Bump the in-flow text links that
   don't otherwise reach the touch minimum. Desktop visual rhythm is
   unchanged; this only applies on coarse-pointer / small viewports.
   ===================================================================== */
@media (max-width:760px){
  .foot-nav{gap:.2rem 1.6rem}
  .foot-nav a{display:inline-flex;align-items:center;min-height:44px}
  .svc-fourth a,.attribution a{display:inline-flex;align-items:center;min-height:44px}
  .foot-phone{min-height:44px}
}
