/* ===========================================================================
   TRU AUTO SALES — DESIGN B ("motion") SITE-WIDE LAYER
   ---------------------------------------------------------------------------
   Ported from the approved design-review mockup B-motion-hero.html.

   Loaded LAST (after master.css, style.css and Bootstrap) so it wins the
   cascade without any of those files being edited. It REPLACES the older
   light-theme redesign.css — swap the single <link> in
   resources/views/layouts/header.blade.php to move between the two.

   Design decisions carried over from the approved concept:
     1. Pitch-black canvas, one amber/ember accent gradient for actions
     2. Open Sans throughout — the typeface the live site already asks for;
        display/body/label roles are separated by weight and tracking
     3. Motion as a first-class layer — but every animation is gated behind
        prefers-reduced-motion
     4. Dark theme applies to EVERY public page, so PART 9 re-skins the
        legacy Bootstrap/master.css markup the inner pages still use.

   This file is public-facing only. The admin panel renders through
   layouts/admin_header.blade.php and never loads it.
   =========================================================================== */

/* ===================== PART 0 — TYPEFACE =================================
   Open Sans — the face the rest of the site already asks for. master.css
   declares it, but its @font-face src is `url('web_assets/fonts/…')`, which
   resolves RELATIVE TO master.css as /web_assets/css/web_assets/fonts/… and
   404s on production. The result is that truautosales.com has never actually
   served a webfont: every visitor without Open Sans installed locally falls
   back to generic sans-serif.

   These declarations fix that. Paths are relative to THIS file
   (/web_assets/css/), so ../fonts/ resolves correctly under any host or
   subdirectory. woff2 first (~60KB each vs ~215KB for the TTF), with the
   existing TTF as the fallback. font-display:swap so text paints immediately.
   =========================================================================== */
@font-face{
  font-family:"Open Sans";font-style:normal;font-weight:400;font-display:swap;
  src:url("../fonts/OpenSans-Regular.woff2") format("woff2"),
      url("../fonts/OpenSans-Regular.ttf") format("truetype");
}
@font-face{
  font-family:"Open Sans";font-style:normal;font-weight:600;font-display:swap;
  src:url("../fonts/OpenSans-Semibold.woff2") format("woff2"),
      url("../fonts/OpenSans-Semibold.ttf") format("truetype");
}
@font-face{
  font-family:"Open Sans";font-style:normal;font-weight:700;font-display:swap;
  src:url("../fonts/OpenSans-Bold.woff2") format("woff2"),
      url("../fonts/OpenSans-Bold.ttf") format("truetype");
}
@font-face{
  font-family:"Open Sans";font-style:normal;font-weight:800;font-display:swap;
  src:url("../fonts/OpenSans-ExtraBold.woff2") format("woff2"),
      url("../fonts/OpenSans-ExtraBold.ttf") format("truetype");
}

/* ===================== PART 1 — TOKENS ==================================== */
:root{
  --pitch:#000000;
  --ink:#08090A;
  --carbon:#101114;
  --raise:#16181C;
  --edge:rgba(255,255,255,.10);
  --edge-hi:rgba(255,255,255,.22);
  --bone:#F2F0EB;
  --ash:#8B9099;
  /* The mockup's #5C6169 only reaches 3.37:1 on black — it fails WCAG AA for
     the 10–11px mono labels it is used on (eyebrows, stat captions, hours,
     breadcrumbs). Lifted to the darkest grey that still clears 4.5:1. */
  --ash-dim:#7C828B;
  --signal:#FFB020;
  --signal-deep:#B87400;
  --g1:#FFB020;
  --g2:#FF6A2C;
  --g3:#C2410C;
  --grad:linear-gradient(118deg,var(--g1) 0%,var(--g2) 52%,var(--g3) 100%);
  --ice:#93D2FF;
  --danger:#FF6B6B;
  --ok:#4ADE80;
  /* One family in three roles. The mockup used Archivo + Instrument Sans +
     JetBrains Mono; the site's own face is Open Sans, so the roles are now
     separated by weight, size and tracking rather than by typeface.
     NB: Open Sans is not a variable-width font, so the font-stretch values
     kept below are inert — harmless, and they document the intent. */
  --display:"Open Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --body:"Open Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --mono:"Open Sans",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --gutter:clamp(20px,5vw,72px);
  --maxw:1400px;
}

/* ===================== PART 2 — BASE ===================================== */
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  background:var(--pitch) !important;
  color:var(--bone) !important;
  font-family:var(--body) !important;
  font-size:16px !important;
  font-weight:400 !important;
  line-height:1.6 !important;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
img{max-width:100%}
a{color:inherit;text-decoration:none}
a:hover{text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px}
hr{border-color:var(--edge) !important;opacity:1}
::selection{background:var(--signal);color:#000}
.wrap{max-width:var(--maxw);margin:0 auto;padding-inline:var(--gutter)}

/* ===================== PART 3 — TYPE PRIMITIVES ========================== */
h1,h2,h3,h4,h5,h6{
  font-family:var(--display) !important;
  color:var(--bone);
  margin:0;
  line-height:.95;
  letter-spacing:-.02em;
}
p{color:var(--ash)}
.eyebrow{
  font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--signal);display:flex;align-items:center;gap:12px;margin:0 0 22px;
}
.eyebrow::before{content:"";width:26px;height:1px;background:var(--grad);flex:none}
.h-sec{font-size:clamp(34px,5.2vw,68px);font-weight:800;font-stretch:118%;text-transform:uppercase}
.lede{color:var(--ash);max-width:56ch;font-size:17px}
.grad-text{
  background:var(--grad);-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;color:var(--signal);
}

/* ===================== PART 4 — BUTTONS ================================== */
.btn-b{
  display:inline-flex;align-items:center;gap:12px;padding:16px 26px;
  font-family:var(--mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;font-weight:600;
  border:1px solid var(--edge-hi);border-radius:2px;
  transition:.28s cubic-bezier(.2,.7,.3,1);
  position:relative;overflow:hidden;color:var(--bone);
}
.btn-b > span{position:relative;z-index:1}
.btn-b::after{
  content:"";position:absolute;inset:0;background:var(--signal);
  transform:translateY(101%);transition:transform .34s cubic-bezier(.2,.7,.3,1);z-index:0;
}
.btn-b:hover::after{transform:translateY(0)}
.btn-b:hover{color:#000;border-color:var(--signal)}
.btn-b--fill{background:var(--grad);color:#000;border-color:transparent}
.btn-b--fill::after{background:var(--bone)}
.btn-b--fill:hover{color:#000;border-color:var(--bone)}
.arrow{font-family:var(--mono);transition:transform .3s}
.btn-b:hover .arrow{transform:translateX(4px)}

/* ===================== PART 5 — CHROME =================================== */
/* --- utility bar --- */
.utility{
  border-bottom:1px solid var(--edge);background:var(--pitch);
  font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--ash-dim);text-transform:uppercase;
}
.utility .wrap{display:flex;justify-content:space-between;gap:24px;padding-block:10px;flex-wrap:wrap}
.utility strong{color:var(--ash);font-weight:400}
.utility a:hover{color:var(--bone)}
.utility .dot{
  display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--signal);margin-right:8px;
  box-shadow:0 0 8px var(--signal);animation:pulse 2.6s infinite;
}
@keyframes pulse{50%{opacity:.35}}

/* --- sticky nav --- */
header.navb{
  position:sticky;top:0;z-index:60;background:rgba(0,0,0,.72);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--edge);transition:background .3s;
}
/* padding trimmed 14->10px so the taller logo below doesn't push the sticky bar
   out proportionally: 64 + 10*2 = 84px, versus 72px before */
.navb .wrap{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-block:10px}
.brand{display:flex;align-items:center;gap:14px}
/* logoo.png is a 2000x2000 SQUARE: circular monogram on top, "Tru Auto Sales"
   wordmark stacked beneath it. Both share this height, so at 44px the wordmark
   rendered ~6px tall and was illegible. 64px puts it near 10px. The drop-shadow
   lifts the mark off the translucent blurred nav behind it. */
.brand img{height:64px;width:auto;transition:height .35s;
  filter:drop-shadow(0 2px 6px rgba(0,0,0,.55))}
.menu{
  display:flex;gap:30px;font-size:14px;font-family:var(--mono);
  letter-spacing:.1em;text-transform:uppercase;color:var(--ash);
}
.menu a{position:relative;padding-block:6px;transition:color .25s}
.menu a::after{content:"";position:absolute;left:0;bottom:0;height:1px;width:0;background:var(--signal);transition:width .3s}
.menu a:hover{color:var(--bone)}
.menu a:hover::after{width:100%}
.menu a.is-active{color:var(--bone)}
.menu a.is-active::after{width:100%}
.nav-cta{display:flex;align-items:center;gap:14px}
.call{font-family:var(--display);font-stretch:112%;font-weight:700;font-size:19px;letter-spacing:0;white-space:nowrap}
.call:hover{color:var(--signal)}
.burger{display:none;width:44px;height:44px;border:1px solid var(--edge);border-radius:2px;align-items:center;justify-content:center}
.burger i{display:block;width:18px;height:1.5px;background:var(--bone);position:relative}
.burger i::before,.burger i::after{content:"";position:absolute;left:0;width:18px;height:1.5px;background:var(--bone)}
.burger i::before{top:-6px}
.burger i::after{top:6px}
/* scrolled state — kept proportional to the new 64px base so the wordmark
   stays readable once the bar condenses */
header.navb.tight .brand img{height:48px}

/* --- footer --- */
footer.footb{background:var(--pitch);border-top:1px solid var(--edge);margin-top:0}
.foot-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1.2fr;gap:44px;padding-block:72px 56px}
.foot h5{
  font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--signal);margin:0 0 20px;font-weight:600;
}
.foot p,.foot a,.foot li{color:var(--ash);font-size:14px}
.foot a:hover{color:var(--bone)}
.foot ul{list-style:none;padding:0;margin:0;display:grid;gap:11px}
.hours{font-family:var(--mono);font-size:14px;color:var(--bone);display:grid;gap:8px}
.hours span{color:var(--ash-dim);font-size:11px;letter-spacing:.14em;text-transform:uppercase;display:block}
.social{display:flex;gap:10px;margin-top:22px}
.social a{
  width:40px;height:40px;border:1px solid var(--edge);display:grid;place-items:center;
  border-radius:50%;transition:.25s;color:var(--ash);
}
.social a:hover{border-color:var(--signal);color:var(--signal)}
/* fill:currentColor is why the hover rule above now recolours the glyph. The
   previous PNGs were normalised with grayscale(1) brightness(1.7); brightness
   multiplies, so the pure-black TikTok tile stayed black and vanished into the
   footer. 18px reads better than the old 16px inside a 40px target. */
.social svg{width:18px;height:18px;fill:currentColor;display:block;transition:fill .25s}
/* The icon colour itself is set in section 10.6, which carries !important to
   beat master.css:791 `footer a{color:#999 !important}`. Setting it here would
   be silently overridden. */
.legal{
  border-top:1px solid var(--edge);padding-block:22px;display:flex;justify-content:space-between;
  gap:20px;flex-wrap:wrap;font-family:var(--mono);font-size:11px;letter-spacing:.1em;
  color:var(--ash-dim);text-transform:uppercase;
}
.legal a:hover{color:var(--bone)}

/* scroll progress (injected by design-b.js) */
.progress{position:fixed;top:0;left:0;height:2px;width:0;background:var(--grad);z-index:99;transition:width .1s linear}

/* ===================== PART 6 — HOMEPAGE COMPONENTS ====================== */
/* --- motion hero --- */
/* min-height, not height: the finder card is taller than the old hero copy,
   and a fixed height would clip it on short laptop screens (1366x768). The
   bottom padding reserves the band the ticker and scroll cue
   sit in, so content can never slide under them. */
.hero{
  position:relative;min-height:min(100vh,940px);
  display:flex;align-items:center;overflow:hidden;background:var(--pitch);
  padding-block:clamp(40px,6vh,80px) clamp(150px,18vh,200px);
}
.hero-video{position:absolute;inset:0;overflow:hidden;z-index:0}
.hero-video video{width:100%;height:100%;object-fit:cover;filter:saturate(.88) contrast(1.04) brightness(.92)}
.hero-poster{position:absolute;inset:0;background-size:cover;background-position:center;z-index:-1}
/* Scrim is deliberately asymmetric: it stays heavy on the left (0–42%) because
   the white H1/tagline/blurb sit there and need contrast, and thins out across
   the right where the footage is the point. Lightened 2026-09-23 so the video
   reads more clearly — if you lighten the 0%/42% stops further, re-check the
   hero copy still passes contrast against the brightest frame of the video. */
.hero-scrim{
  position:absolute;inset:0;background:
    linear-gradient(to right,rgba(0,0,0,.85) 0%,rgba(0,0,0,.58) 42%,rgba(0,0,0,.10) 78%,rgba(0,0,0,.55) 100%),
    linear-gradient(to top,rgba(0,0,0,.92) 1%,transparent 38%);
}
.hero-grain{
  position:absolute;inset:0;opacity:.05;pointer-events:none;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  animation:grain 7s steps(6) infinite;
}
@keyframes grain{
  0%{transform:translate(0,0)}20%{transform:translate(-3%,2%)}40%{transform:translate(2%,-3%)}
  60%{transform:translate(-2%,-2%)}80%{transform:translate(3%,1%)}100%{transform:translate(0,0)}
}
/* Two columns: headline left, vehicle finder card top-right. Both top-aligned
   so the card reads as sitting in the hero's upper-right corner, while the
   pair as a whole stays vertically centred by .hero's flex. */
.hero-inner{
  position:relative;z-index:2;width:100%;
  display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,380px);
  gap:clamp(28px,4vw,56px);align-items:start;
}
.hero-copy{max-width:660px}

/* --- hero vehicle finder card --- */
.hero-finder{
  background:rgba(8,9,10,.82);backdrop-filter:blur(16px);
  border:1px solid var(--edge-hi);border-radius:3px;
  padding:26px 24px 24px;
}
.hero-finder h2{
  font-size:21px;font-weight:700;font-stretch:112%;
  text-transform:uppercase;margin-bottom:7px;
}
.hf-sub{
  font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ash);margin:0 0 20px;font-variant-numeric:tabular-nums;
}
.hero-finder .field{margin-bottom:14px}
.hero-finder .btn-b{width:100%;justify-content:center;margin-top:4px}
.hf-foot{
  margin-top:15px;display:flex;align-items:center;gap:9px;
  font-family:var(--mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ash-dim);
}
.hf-foot b{color:var(--signal);font-weight:700}
.tagline{
  font-family:var(--mono);font-size:11px;letter-spacing:.26em;text-transform:uppercase;
  color:var(--signal);margin-bottom:20px;display:flex;align-items:center;gap:12px;flex-wrap:wrap;
}
.tagline b{font-weight:600;color:var(--bone)}
/* Sized for the SEO headline ("Used Cars in Calgary for Different Needs and
   Budgets", 51 chars). At the mockup's 102px that wrapped to six lines and
   pushed the blurb and both CTAs below the fold. */
.hero h1{
  font-size:clamp(32px,4.1vw,58px);font-weight:800;font-stretch:120%;
  text-transform:uppercase;line-height:1.02;text-wrap:balance;
  position:relative;padding-bottom:20px;
}
/* Same page-heading rule the interior pages carry, on the homepage headline.
   Delayed 0.85s: design-b.js splits this H1 into per-word spans with staggered
   transition-delays, and the last word lands around 0.7s — the rule draws in
   after the headline has settled rather than racing it. The JS rewrites
   innerHTML, which leaves a ::after untouched.
   @keyframes h1rule is declared further down with the .inv-title h1 rules —
   valid, since @keyframes resolve by name and are not order-dependent. */
.hero h1::after{
  content:"";position:absolute;left:0;bottom:0;height:4px;width:68px;
  background:var(--grad);transform-origin:left center;
  animation:h1rule .5s cubic-bezier(.2,.7,.3,1) .85s both;
}
.hero p.blurb{color:#C9CCD1;max-width:44ch;margin:22px 0 30px}
.hero-actions{display:flex;gap:14px;flex-wrap:wrap}

/* word-by-word headline reveal */
.word{display:inline-block;overflow:hidden;vertical-align:top}
.word i{
  display:inline-block;font-style:normal;transform:translateY(105%) rotate(4deg);
  transition:transform .95s cubic-bezier(.16,.84,.28,1);
}
.ready .word i{transform:none}

/* Staggered supporting lines.
   The hidden start state is scoped to .js-motion (set on <html> by an inline
   script in the head). If that script or design-b.js never runs, the copy
   simply renders visible instead of being stranded at opacity:0. */
.js-motion .stagger{opacity:0;transform:translateY(16px);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.3,1)}
.js-motion .ready .stagger,.ready .stagger{opacity:1;transform:none}
.ready .tagline{transition-delay:.15s}
.ready .blurb{transition-delay:.75s}
.ready .hero-actions{transition-delay:.9s}

/* scroll cue */
.cue{
  position:absolute;left:var(--gutter);bottom:104px;z-index:3;display:flex;align-items:center;gap:12px;
  font-family:var(--mono);font-size:10px;letter-spacing:.24em;text-transform:uppercase;color:var(--ash);
}
.cue i{width:34px;height:1px;background:var(--edge-hi);position:relative;overflow:hidden}
.cue i::after{
  content:"";position:absolute;inset:0;background:var(--grad);
  transform:translateX(-100%);animation:sweep 2.1s cubic-bezier(.6,0,.3,1) infinite;
}
@keyframes sweep{50%{transform:translateX(0)}100%{transform:translateX(100%)}}
.cue:hover{color:var(--bone)}

/* inventory ticker */
.ticker{
  position:absolute;left:0;right:0;bottom:0;z-index:3;border-top:1px solid var(--edge);
  background:rgba(0,0,0,.55);backdrop-filter:blur(8px);overflow:hidden;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 6%,#000 94%,transparent);
}
.ticker-row{display:flex;gap:0;width:max-content;animation:roll 46s linear infinite;padding-block:17px}
.ticker:hover .ticker-row{animation-play-state:paused}
@keyframes roll{to{transform:translateX(-50%)}}
.tick-item{
  display:flex;align-items:center;gap:14px;padding:0 30px;border-right:1px solid var(--edge);
  font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ash);white-space:nowrap;
}
.tick-item em{font-style:normal;color:var(--bone)}
.tick-item s{text-decoration:none;color:var(--signal);font-weight:700}

/* --- finder --- */
.finder{background:var(--carbon);border-block:1px solid var(--edge)}
/* the grid that used to sit under these chips moved into the hero card, so the
   strip now carries its own bottom padding */
.chips{display:flex;gap:10px;flex-wrap:wrap;padding-block:26px}
.chip{
  display:inline-flex;align-items:center;gap:9px;padding:10px 18px;border:1px solid var(--edge);
  border-radius:100px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ash);transition:.25s;
}
.chip:hover,.chip.is-on{
  border-color:transparent;color:var(--signal);
  background:linear-gradient(var(--ink),var(--ink)) padding-box,var(--grad) border-box;
  border:1px solid transparent;
}
/* The finder fields now live in the hero card (.hero-finder); the strip below
   the hero keeps only the quick-filter chips. */
.field label{
  display:block;font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ash-dim);margin-bottom:9px;
}
/* background-COLOR, not the background shorthand: the shorthand would wipe the
   SVG caret that PART 9.5 sets on every <select> via background-image. */
.field select,.field input{
  width:100%;background-color:var(--pitch) !important;border:1px solid var(--edge) !important;
  color:var(--bone) !important;padding:14px 38px 14px 14px !important;border-radius:2px !important;
  font-family:var(--body) !important;font-size:14px !important;
  appearance:none;-webkit-appearance:none;transition:.25s;height:auto !important;
}
.field input{padding-right:14px !important}
.field select:hover,.field input:hover{border-color:var(--edge-hi) !important}
.field select option{background:var(--ink);color:var(--bone)}
/* price range inside the finder */
.range-bar{position:relative;height:36px;margin-top:4px}
/* margin:0 is load-bearing. master.css:1161 gives .slider-track `margin:17px 0`
   (and 23px in a media query). On an absolutely positioned box that margin is
   ADDED to `top`, which pushed the track to an effective 33px — 7px clear of
   the inputs, so the thumbs floated above the line entirely.
   Geometry: input top 8 + height 18 => thumb centre at 17.
             track top 15 + height 4  => track centre at 17. Aligned. */
.range-bar .slider-track{
  position:absolute;top:15px;left:0;width:100%;height:4px;margin:0;
  background:var(--edge);border-radius:2px;
}
.range-bar input[type=range]{
  position:absolute;top:8px;left:0;width:100%;height:18px;margin:0;pointer-events:none;
  background:transparent !important;-webkit-appearance:none;appearance:none;padding:0 !important;border:0 !important;
}
/* margin-top:0 is load-bearing — master.css:1185 pulls every range thumb up
   9px to centre it on its own 5px track, which here floats the thumbs above
   the line. */
.range-bar input[type=range]::-webkit-slider-runnable-track{background:transparent;height:18px}
/* box-sizing:border-box keeps the thumb exactly 18px INCLUDING its border — the
   `*` reset does not reach pseudo-elements, so without this the thumb is
   18+2+2=22px and the fill maths below would be off by 2px at each end. */
.range-bar input[type=range]::-webkit-slider-thumb{
  -webkit-appearance:none;box-sizing:border-box;pointer-events:auto;
  width:18px;height:18px;border-radius:50%;margin-top:0;
  background:var(--signal);border:2px solid #000;cursor:pointer;box-shadow:0 0 0 1px var(--signal);
}
.range-bar input[type=range]::-moz-range-thumb{
  box-sizing:border-box;pointer-events:auto;width:18px;height:18px;border-radius:50%;
  background:var(--signal);border:2px solid #000;cursor:pointer;
}
.range-vals{
  display:flex;justify-content:space-between;font-family:var(--mono);font-size:12px;
  color:var(--bone);margin-top:6px;font-variant-numeric:tabular-nums;
}

/* --- sections --- */
section{position:relative}
.pad{padding-block:clamp(72px,9vw,132px)}
.sec-head{display:flex;justify-content:space-between;align-items:flex-end;gap:32px;flex-wrap:wrap;margin-bottom:48px}

/* --- ambient glow --- */
.glow{position:absolute;border-radius:50%;pointer-events:none;z-index:1;filter:blur(90px);opacity:.34}
.glow-a{
  width:min(56vw,720px);aspect-ratio:1;left:-14vw;top:-16vh;
  background:radial-gradient(circle,var(--g1) 0%,transparent 66%);opacity:.18;
}
.glow-b{
  width:min(44vw,560px);aspect-ratio:1;right:-8vw;bottom:-18vh;
  background:radial-gradient(circle,var(--g3) 0%,transparent 66%);opacity:.26;
}

/* --- featured vehicles: window-sticker cards, 4 per page ------------------
   Layout and the information hierarchy come from the approved showroom
   mockup (photo / head / spec rows / price plate). The mockup rendered these
   as cream paper stickers; here they are re-drawn in design B's palette and
   type, so the structure is the mockup's and the styling is the site's.
   Internals use the stk- prefix: the mockup's `.row`, `.photo` and `.badge`
   would collide with Bootstrap and master.css. */
.viewport{
  overflow:hidden;width:100%;
  -webkit-user-select:none;user-select:none;touch-action:pan-y;
}
.track{display:flex;gap:24px;will-change:transform;transition:transform .62s cubic-bezier(.22,.75,.24,1)}
.viewport.dragging .track{transition:none}
/* exactly four across, matching the live site's grid */
.track > *{flex:0 0 calc((100% - 3 * 24px) / 4)}

.card-b{
  background:var(--ink);border:1px solid var(--edge);padding:0;position:relative;
  display:flex;flex-direction:column;overflow:hidden;
  transition:border-color .35s,transform .35s cubic-bezier(.2,.7,.3,1),background .35s;
  transform-style:preserve-3d;
}
.card-b:hover{background:var(--raise);border-color:var(--edge-hi)}
.card-b::after{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .4s;
  background:radial-gradient(240px circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.09),transparent 65%);
}
.card-b:hover::after{opacity:1}

/* photo */
.stk-photo{
  position:relative;aspect-ratio:16/11;overflow:hidden;
  background:radial-gradient(120% 90% at 60% 40%,#22262C,#0B0C0E);
}
.stk-photo img{width:100%;height:100%;object-fit:cover;transition:transform .6s cubic-bezier(.2,.7,.3,1)}
.card-b:hover .stk-photo img{transform:scale(1.045)}
.stk-plateless{
  position:absolute;inset:0;display:grid;place-content:center;text-align:center;gap:6px;
  background:radial-gradient(120% 100% at 60% 35%,#1C2026,#0A0B0D);
}
.stk-plateless b{
  font-family:var(--display);font-size:17px;font-weight:700;color:var(--ash);
  text-transform:uppercase;letter-spacing:-.01em;display:block;
}
.stk-plateless span{
  font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ash-dim);
}
.badge-b{
  position:absolute;top:12px;left:12px;font-family:var(--mono);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;padding:5px 9px;background:rgba(0,0,0,.72);
  border:1px solid var(--edge-hi);color:var(--bone);border-radius:2px;
}
.badge-b.ev{color:var(--ice);border-color:rgba(147,210,255,.4)}
.stk-shots{
  position:absolute;right:12px;bottom:12px;font-family:var(--mono);font-size:10px;letter-spacing:.1em;
  padding:5px 9px;background:rgba(0,0,0,.72);border:1px solid var(--edge);color:var(--ash);border-radius:2px;
}

/* head: year + name, stock number right */
.stk-head{
  padding:16px 18px 13px;border-bottom:1px dashed var(--edge-hi);
  display:flex;justify-content:space-between;align-items:flex-start;gap:12px;
}
.stk-head .yr{
  font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:var(--ash-dim);
  display:block;margin-bottom:4px;
}
.stk-head h3{
  font-family:var(--display);font-weight:700;font-size:18px;line-height:1.15;
  text-transform:uppercase;letter-spacing:-.01em;margin:0;color:var(--bone);
}
.stk-head .st{
  font-family:var(--mono);font-size:10px;letter-spacing:.12em;color:var(--ash-dim);
  text-align:right;white-space:nowrap;line-height:1.5;
}

/* spec rows */
.stk-rows{padding:6px 18px 2px}
.stk-row{
  display:flex;justify-content:space-between;align-items:baseline;gap:10px;
  padding:8px 0;border-bottom:1px solid var(--edge);font-size:14px;
}
.stk-row:last-child{border-bottom:0}
.stk-row span{color:var(--ash);letter-spacing:.02em}
.stk-row b{
  font-family:var(--mono);font-weight:600;color:var(--bone);
  font-variant-numeric:tabular-nums;text-align:right;
}

/* price plate, pinned to the bottom of the card */
.stk-price{
  margin-top:auto;padding:14px 18px 17px;background:var(--carbon);
  border-top:2px solid var(--signal);
  display:flex;align-items:flex-end;justify-content:space-between;gap:12px;
}
.stk-price .big{
  font-family:var(--display);font-weight:800;font-size:25px;letter-spacing:-.02em;
  line-height:1;color:var(--bone);font-variant-numeric:tabular-nums;
}
.stk-price .big em{
  font-style:normal;font-family:var(--mono);font-size:10px;font-weight:400;color:var(--ash-dim);
  display:block;letter-spacing:.16em;margin-bottom:5px;
}
.stk-cta{
  background:var(--grad);color:#000;font-family:var(--mono);font-size:10px;font-weight:600;
  letter-spacing:.14em;text-transform:uppercase;padding:10px 14px;border-radius:2px;white-space:nowrap;
  transition:filter .25s;
}
.card-b:hover .stk-cta{filter:brightness(1.12)}

/* --- pager under the tiles --- */
.slider-ui{display:flex;align-items:center;gap:18px;margin-top:34px}
.slider-btns{display:flex;gap:10px}
.navbtn{
  width:52px;height:52px;border:1px solid var(--edge-hi);border-radius:50%;
  display:flex;align-items:center;justify-content:center;transition:.28s;color:var(--bone);
  font-size:18px;line-height:1;
}
.navbtn:hover:not(:disabled){background:var(--signal);border-color:var(--signal);color:#000}
.navbtn:disabled{opacity:.3;cursor:default}
.pager-count{
  font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--ash-dim);
  font-variant-numeric:tabular-nums;
}
.pager-count b{color:var(--bone);font-weight:700}

/* --- the Tru standard strip --- */
/* Black to match the #inventory section above, which has no background of its
   own and so shows body's --pitch. border-bottom only (was border-block): with
   identical backgrounds the top rule was the one seam still splitting them, so
   the two read as a single continuous black run. */
.standard{background:var(--pitch);border-bottom:1px solid var(--edge)}
/* background shows through the 1px grid gaps — it IS the divider colour, so it
   and the outer border move together */
.std-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
  background:rgb(255 255 255 / 31%);border:1px solid rgb(255 255 255 / 31%)}
/* Three-up variant (the about page's AMVIC cards). Declared HERE, beside the
   base rule, not down in the page-specific block: PART 8's breakpoints collapse
   .std-grid to 2 and then 1 column at equal specificity, so a later declaration
   would out-order them and keep three columns on a phone. */
.std-grid--3{grid-template-columns:repeat(3,1fr)}
.std{background:#101114;padding:38px 30px 42px}
.std h4{font-size:19px;font-weight:700;font-stretch:112%;text-transform:uppercase;margin:20px 0 10px}
.std p{color:#dbdbdb;font-size:14px;margin:0}
.std .std-mark{font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--signal)}

/* --- split panels --- */
.split{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--edge);position:relative;overflow:hidden}
.panel{background:var(--ink);padding:clamp(44px,6vw,86px) clamp(28px,4vw,64px);position:relative;overflow:hidden}
.panel h2{font-size:clamp(30px,3.6vw,50px);font-weight:800;font-stretch:118%;text-transform:uppercase;margin-bottom:18px}
.panel p{color:var(--ash);margin:0 0 30px;max-width:44ch}
.panel::before{
  content:"";position:absolute;right:-60px;top:-60px;width:260px;height:260px;border-radius:50%;
  background:radial-gradient(circle,color-mix(in srgb,var(--g1) 26%,transparent),transparent 70%);pointer-events:none;
}
.panel.trade::before{background:radial-gradient(circle,color-mix(in srgb,var(--g3) 30%,transparent),transparent 70%)}
.checks{list-style:none;padding:0;margin:0 0 30px;display:grid;gap:10px}
.checks li{
  display:flex;gap:12px;align-items:center;font-family:var(--mono);font-size:12px;
  letter-spacing:.08em;color:var(--ash);text-transform:uppercase;
}
.checks li::before{content:"";width:6px;height:6px;background:var(--signal);flex:none;transform:rotate(45deg)}
.panel.trade .checks li::before{background:var(--g3)}

/* --- about + stats --- */
.about-b{display:grid;grid-template-columns:1.05fr .95fr;gap:clamp(40px,6vw,90px);align-items:center}
.stats{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--edge);border:1px solid var(--edge)}
.stat{background:var(--ink);padding:34px 28px}
.stat v{
  display:block;font-family:var(--display);font-stretch:120%;font-weight:800;
  font-size:clamp(38px,4.6vw,62px);line-height:1;color:var(--bone);font-variant-numeric:tabular-nums;
}
.stat k{
  display:block;font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ash-dim);margin-top:12px;
}
.stat:nth-child(1) v{
  background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
}

/* --- shop used vehicles by need --- */
.need-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1px;
  background:var(--edge);border:1px solid var(--edge);
}
.need-card{
  background:var(--ink);padding:28px 26px 26px;display:flex;flex-direction:column;gap:7px;
  transition:background .3s;
}
.need-card:hover{background:var(--raise)}
.need-n{
  font-family:var(--display);font-weight:800;font-size:38px;line-height:1;
  color:var(--signal);font-variant-numeric:tabular-nums;
}
.need-card b{
  font-family:var(--display);font-size:17px;font-weight:700;text-transform:uppercase;
  color:var(--bone);letter-spacing:-.01em;
}
.need-go{
  font-family:var(--mono);font-size:10px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--ash-dim);display:flex;gap:8px;align-items:center;margin-top:4px;transition:color .3s;
}
/* .need-card had no paragraph style — it was built for a one-line card. The
   about page's values cards carry a sentence, so it gets the same size the
   other card components use. */
.need-card p{font-size:14.5px;color:var(--ash);margin:0}
.need-card:hover .need-go{color:var(--signal)}
.need-go i{font-style:normal;transition:transform .3s}
.need-card:hover .need-go i{transform:translateX(4px)}

.need-makes{margin-top:46px}
.make-links{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}
.make-links a{
  display:inline-flex;align-items:center;gap:9px;padding:10px 16px;border:1px solid var(--edge);
  border-radius:100px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;
  text-transform:uppercase;transition:.25s;
}
.make-links a:hover{border-color:var(--signal)}
.make-links a span{color:var(--ash-dim);font-variant-numeric:tabular-nums}

/* --- why Calgary drivers choose ---
   position:relative + overflow:hidden scope the .glow child to this section.
   An absolutely-positioned .glow with no positioned ancestor resolves against
   the initial containing block and drifts to the top of the document, which is
   exactly what was happening in .quote before (see below). */
.why{background:var(--carbon);border-block:1px solid var(--edge);position:relative;overflow:hidden}

/* --- FAQ --- */
.faq-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:1px;
  background:var(--edge);border:1px solid var(--edge);
}
.faq-item{background:var(--ink);padding:30px 28px}
/* an odd number of questions would otherwise leave a dead half-row */
.faq-item:last-child:nth-child(odd){grid-column:1/-1}
.faq-item h3{
  font-family:var(--display);font-size:17px;font-weight:700;text-transform:uppercase;
  letter-spacing:-.01em;color:var(--bone);margin-bottom:10px;line-height:1.22;
}
.faq-item p{color:var(--ash);font-size:14.5px;margin:0}

/* --- quote ---
   position:relative was missing: the .glow child resolved against the initial
   containing block, so its inline left:50%/top:-30% landed near the top of the
   document instead of in this section. Anchored now, matching .why. */
.quote{background:var(--carbon);border-block:1px solid var(--edge);text-align:center;position:relative;overflow:hidden}

/* content must out-stack the .glow (z-index:1) or the blurred gradient paints
   over the copy instead of behind it */
.why > .wrap,.quote > .wrap{position:relative;z-index:2}
.quote blockquote{
  margin:0 auto;max-width:22ch;font-family:var(--display);font-stretch:112%;font-weight:600;
  font-size:clamp(28px,4.4vw,54px);line-height:1.06;text-transform:uppercase;letter-spacing:-.02em;
}
.quote cite{
  display:block;margin-top:28px;font-family:var(--mono);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ash-dim);font-style:normal;
}

/* --- CTA band --- */
.band{background:var(--grad);color:#000;text-align:center;position:relative;overflow:hidden}
.band h2{font-size:clamp(34px,5.4vw,74px);font-weight:800;font-stretch:120%;text-transform:uppercase;margin-bottom:18px;color:#000}
.band p{margin:0 auto 34px;max-width:50ch;color:rgba(0,0,0,.72);font-weight:600}
/* Street address — display type, full black, no 50ch clamp so it never wraps
   mid-address. Two classes so it out-specifies the `.band p` rule above, which
   would otherwise force it back to muted body copy. */
.band .band-addr{
  font-family:var(--display);font-stretch:112%;font-weight:800;
  font-size:clamp(21px,3vw,32px);line-height:1.15;letter-spacing:-.01em;
  color:#000;max-width:none;margin:0 auto 10px;
}
.band .btn-b{border-color:#000;color:#000}
.band .btn-b::after{background:#000}
.band .btn-b:hover{color:var(--g2)}

/* ===================== PART 7 — MOTION / REVEAL ==========================
   Same no-JS guard as .stagger above: without .js-motion on <html> nothing
   is ever hidden, so a broken script can't blank out most of a page. */
.js-motion .rv{opacity:0;transform:translateY(22px);transition:opacity .8s cubic-bezier(.2,.7,.3,1),transform .8s cubic-bezier(.2,.7,.3,1)}
.js-motion .rv.in{opacity:1;transform:none}
.js-motion .rv-stagger > *{opacity:0;transform:translateY(26px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.3,1)}
.js-motion .rv-stagger.in > *{opacity:1;transform:none}
.magnet{transition:transform .35s cubic-bezier(.2,.7,.3,1),color .28s,border-color .28s}

/* ===================== PART 8 — RESPONSIVE =============================== */
@media(max-width:1080px){
  .foot-grid{grid-template-columns:1fr 1fr}
  .std-grid{grid-template-columns:1fr 1fr}
  .about-b{grid-template-columns:1fr}
  .hero-inner{grid-template-columns:minmax(0,1fr) minmax(300px,340px);gap:28px}
  /* the pager reads cards-per-page off the rendered card width, so these
     breakpoints are the single source of truth for how many show at once */
  .track > *{flex:0 0 calc((100% - 2 * 24px) / 3)}
  .need-grid{grid-template-columns:1fr 1fr}
  .opt-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:860px){
  .track > *{flex:0 0 calc((100% - 24px) / 2)}
  .faq-grid{grid-template-columns:1fr}
  .inv-guide-grid{grid-template-columns:1fr}
  /* form drops below the copy and stops sticking */
  .trade-grid{grid-template-columns:1fr}
  .trade-aside{position:static}
}
@media(max-width:900px){
  .menu,.nav-cta .btn-b{display:none}
  .burger{display:flex}
  .split{grid-template-columns:1fr}
  .cue{display:none}
  .hero{height:auto;min-height:0;padding-block:120px 150px}
  /* finder card drops below the headline rather than squeezing beside it */
  .hero-inner{grid-template-columns:1fr;gap:36px}
  .hero-copy{max-width:none}
  .menu.open{
    display:flex;position:fixed;inset:64px 0 auto;background:var(--pitch);flex-direction:column;
    padding:28px var(--gutter) 34px;gap:20px;border-bottom:1px solid var(--edge);font-size:16px;z-index:70;
  }
}
@media(max-width:640px){
  .std-grid,.stats,.foot-grid,.need-grid,.opt-grid{grid-template-columns:1fr}
  .track > *{flex:0 0 100%}
  .utility .wrap{justify-content:center;text-align:center}
  .slider-ui{flex-wrap:wrap;gap:14px}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none !important;transition-duration:.01ms !important}
  html{scroll-behavior:auto}
  .rv,.rv-stagger > *{opacity:1;transform:none}
  .word i,.stagger{transform:none !important;opacity:1 !important}
  .ticker-row,.hero-grain,.cue i::after{animation:none !important}
}

/* ===========================================================================
   PART 9 — LEGACY PAGE ADAPTATION
   ---------------------------------------------------------------------------
   /inventory, /used/*, /finance, /contact, /trade-in, /about, /privacy and
   /termsandconditions still render the original Bootstrap + master.css markup.
   Everything below re-skins that markup to design B rather than rewriting
   eight large templates. master.css uses !important liberally, so these
   overrides have to match it.
   =========================================================================== */

/* --- 9.1 surfaces: kill every hardcoded light background ------------------ */
.ta_search,
.box_service,
.ta_circle,
.form_inquiry,
.contact_box,
.trade_form form,
.reset_filters ul li,
ul.items,
.tas-shadow,
.tas_offer,
.tas_privacy,
.tas_tc,
.search_res{
  background:var(--ink) !important;
  border:1px solid var(--edge) !important;
  color:var(--bone) !important;
  border-radius:2px !important;
  box-shadow:none !important;
}
.ta_circle{border-radius:50% !important}

/* --- 9.2 headings and body copy ------------------------------------------ */
h1,h2,h3,h4,h5,h6,
.car_title,.welcome_ta h3,.s_title{color:var(--bone) !important}
.s_title,.car_title{
  font-family:var(--display) !important;font-weight:800 !important;
  font-stretch:112% !important;text-transform:uppercase !important;letter-spacing:-.02em !important;
}
/* master.css:805 brackets .s_title with a 4px amber border on BOTH sides plus
   15px of side padding. Both dropped here on request, so the heading now sits
   flush with the copy beneath it. The size comes down to match: the bracketed
   treatment needed that bulk to balance the rules, the plain one doesn't.
   26-42px -> 21-29px, the same ramp .inv-panel h2 already uses. */
.s_title{
  font-size:clamp(18px,1.8vw,24px) !important;line-height:1.2 !important;
  /* the opposite end of every axis the page H1 sits on: lighter (700 vs 800),
     open tracking (+.06em vs -.02em) and less than half the size. Uppercase is
     KEPT because several .s_title headings are hardcoded ALL CAPS in the markup
     ("REFINE YOUR SEARCH", "EXTRA FEATURES") — dropping text-transform would
     leave some sections caps and others sentence case. */
  font-weight:700 !important;letter-spacing:.06em !important;
  border-left:0 !important;border-right:0 !important;
  padding-left:0 !important;padding-right:0 !important;
}
/* short amber bar marks "a section starts here" — subordinate to the page
   title's full gradient rule. inline-block, not flex: several .s_title carry
   .text-center and flex would break that centring. */
.s_title::before{
  content:"";display:inline-block;width:20px;height:3px;background:var(--signal);
  vertical-align:middle;margin-right:13px;position:relative;top:-.14em;
}
p,li,td,th,dd,dt,address,.welcome_ta p{color:var(--ash)}
b,strong{color:var(--bone)}
small{color:var(--ash-dim)}

/* section eyebrow — master.css paints it as an orange badge; design B uses
   a mono label with a gradient rule instead. */
.ta_title{
  background:none !important;background-color:transparent !important;
  color:var(--signal) !important;font-family:var(--mono) !important;
  font-size:11px !important;letter-spacing:.22em !important;text-transform:uppercase !important;
  font-weight:600 !important;padding:0 !important;border-radius:0 !important;display:inline-block !important;
}

/* --- 9.3 in-content links — see PART 10, which owns all anchor colour ---- */

/* --- 9.4 page header band ------------------------------------------------ */
.top_page_head{
  background:var(--carbon) !important;border-bottom:1px solid var(--edge) !important;
  padding:clamp(48px,7vw,92px) 0 !important;position:relative;overflow:hidden;
}
.top_page_head::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--grad);opacity:.7;
}
.top_page_head h1{
  color:var(--bone) !important;font-family:var(--display) !important;font-weight:800 !important;
  font-stretch:118% !important;text-transform:uppercase !important;
  font-size:clamp(32px,5vw,64px) !important;line-height:.96 !important;
}
.breadcrumb{
  background:transparent !important;padding:0 !important;margin-top:14px !important;
  font-family:var(--mono) !important;font-size:11px !important;letter-spacing:.14em !important;
  text-transform:uppercase !important;
}
.breadcrumb a,.breadcrumb span{color:var(--ash-dim) !important}
.breadcrumb a:hover{color:var(--signal) !important}

/* --- 9.5 form controls --------------------------------------------------- */
/* Text-like controls ONLY.
   Every bare `input` here is qualified: a range, checkbox or radio picking up
   14px padding, a border and a 48px min-height is wrong, and min-height beats
   the height a control sets for itself. .main_form is the inventory filter
   sidebar — that is how its checkboxes ended up 13px wide by 48px tall, and how
   the price/odometer thumbs were pushed 15px below their own track. */
.form-control,
input[type=text],input[type=email],input[type=tel],input[type=number],
input[type=password],input[type=date],input[type=search],input[type=url],
select,textarea,
.main_form select,.main_form textarea,
.main_form input:not([type=range]):not([type=checkbox]):not([type=radio]),
.trade_form select,.trade_form textarea,
.trade_form input:not([type=range]):not([type=checkbox]):not([type=radio]),
.form_inquiry textarea,
.form_inquiry input:not([type=range]):not([type=checkbox]):not([type=radio]),
.pay_ment_cal select,
.pay_ment_cal input:not([type=range]):not([type=checkbox]):not([type=radio]),
.form_item textarea,.form_item select,
.form_item input:not([type=range]):not([type=checkbox]):not([type=radio]){
  background:var(--pitch) !important;
  color:var(--bone) !important;
  border:1px solid var(--edge) !important;
  border-radius:2px !important;
  font-family:var(--body) !important;
  font-size:15px !important;
  padding:14px 14px !important;
  box-shadow:none !important;
  -webkit-appearance:none;appearance:none;
  /* Bootstrap pins .form-control to height:calc(1.5em + .75rem + 2px) = 36.5px.
     Against the 14px padding above that leaves a 6.5px content box, which is
     shorter than the 18px line — <input> placeholders still paint (they are
     allowed to overflow) but a <select> clips its selected option outright, so
     the trade-in "Condition" field rendered completely blank. The height must
     be released for the padding to mean anything; min-height then keeps every
     control at a 48px touch target. */
  height:auto !important;
  min-height:48px;
  line-height:1.5;
}
textarea{min-height:140px !important}
select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%238B9099' stroke-width='1.6' fill='none'/%3E%3C/svg%3E") !important;
  background-repeat:no-repeat !important;
  background-position:right 14px center !important;
  padding-right:38px !important;
}
select option{background:var(--ink);color:var(--bone)}
/* :not([type=range]) matters — a range input is a full-width, 18px-tall box, so
   a focus ring on the ELEMENT draws an orange rectangle around the entire
   slider (visible the whole time you drag). Range focus is handled below, on
   the thumb, where it belongs. */
.form-control:not([type=range]):focus,
input:not([type=range]):focus,
select:focus,textarea:focus{
  border-color:var(--signal) !important;outline:none !important;box-shadow:0 0 0 3px rgba(255,176,32,.16) !important;
}

/* No ring around the bar itself, in any focus state... */
input[type=range]:focus,
input[type=range]:focus-visible{
  outline:none !important;box-shadow:none !important;border-color:transparent !important;
}
/* ...but keyboard users still get a visible indicator: the thumb's 1px amber
   halo thickens to 3px. Keeps WCAG 2.4.7 without the full-width box. */
.range-bar input[type=range]:focus-visible::-webkit-slider-thumb,
.inventory_range input[type=range]:focus-visible::-webkit-slider-thumb{
  box-shadow:0 0 0 3px rgba(255,176,32,.6) !important;
}
.range-bar input[type=range]:focus-visible::-moz-range-thumb,
.inventory_range input[type=range]:focus-visible::-moz-range-thumb{
  box-shadow:0 0 0 3px rgba(255,176,32,.6);
}
/* master.css:93-111 sets text-transform:capitalize on every placeholder, in all
   four vendor spellings. That rewrites examples the user is meant to copy:
   "e.g. you@gmail.com" renders as "E.G. You@Gmail.Com", which implies an email
   address is capitalised. Placeholders show literal examples.

   Each vendor spelling needs its OWN rule: a selector list containing a
   pseudo-element the browser does not recognise invalidates the WHOLE list, so
   grouping them means Chrome silently drops all of it. */
::placeholder{color:var(--ash-dim) !important;opacity:1;text-transform:none !important}
::-webkit-input-placeholder{color:var(--ash-dim) !important;opacity:1;text-transform:none !important}
::-moz-placeholder{color:var(--ash-dim) !important;opacity:1;text-transform:none !important}
:-ms-input-placeholder{color:var(--ash-dim) !important;opacity:1;text-transform:none !important}

/* Two legacy label bugs, fixed centrally because .main_form is used by the
   contact, trade-in AND finance forms:

   1. master.css:568 sets `.main_form span{position:relative;width:100%;float:left}`
      for its icon-inside-the-field pattern. A <label>'s required asterisk is
      also a span, so it became a full-width floated block and dropped onto a
      line of its own under every label.
   2. master.css:576 pads labels 10px from the left while the inputs sit flush,
      so every label hung 10px to the right of the field it names.

   The span reset covers buttons as well as labels: .btn-b wraps its text and
   arrow in spans, so a full-width float inside the button broke the label onto
   two lines and squeezed the button to a fraction of its content width. */
.main_form label span,
.main_form button span{
  position:static !important;width:auto !important;float:none !important;
}
.main_form label span{color:var(--signal) !important}
.main_form label{padding-left:0 !important}
label,.clabel{color:var(--ash) !important;font-family:var(--mono) !important;font-size:13px !important;
  letter-spacing:.1em !important;text-transform:uppercase !important}
.form_item .input_icon{background:var(--carbon) !important;color:var(--ash) !important;border:1px solid var(--edge) !important}
.main_form span i{color:var(--ash-dim) !important}
.text-danger{color:var(--danger) !important;font-family:var(--body) !important;
  font-size:14px !important;letter-spacing:0 !important;text-transform:none !important}
input[type=checkbox],input[type=radio]{accent-color:var(--signal);width:auto !important;padding:0 !important}

/* file inputs render a native light button otherwise — the finance form's
   "upload driving licence copy" field sits on a black panel */
input[type=file]{
  background:var(--pitch) !important;color:var(--ash) !important;
  border:1px solid var(--edge) !important;border-radius:2px !important;
  padding:11px 12px !important;font-size:14px !important;
}
input[type=file]::file-selector-button{
  background:var(--carbon);color:var(--bone);border:1px solid var(--edge-hi);
  border-radius:2px;padding:8px 14px;margin-right:12px;cursor:pointer;
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
}
input[type=file]::file-selector-button:hover{background:var(--signal);color:#000;border-color:var(--signal)}

/* --- 9.6 buttons (master.css paints .o-btn orange with !important) -------- */
.o-btn,.custom_btn,.btn-primary,.filter_btn,
button[type=submit],input[type=submit]{
  background:var(--grad) !important;
  color:#000 !important;
  border:1px solid transparent !important;
  border-radius:2px !important;
  font-family:var(--mono) !important;
  font-size:12px !important;
  font-weight:600 !important;
  letter-spacing:.16em !important;
  text-transform:uppercase !important;
  padding:16px 26px !important;
  box-shadow:none !important;
  transition:filter .25s,transform .25s !important;
}
.o-btn:hover,.custom_btn:hover,.btn-primary:hover,.filter_btn:hover,
button[type=submit]:hover,input[type=submit]:hover{
  filter:brightness(1.12) !important;color:#000 !important;transform:translateY(-1px);
}

/* --- inventory search bar ------------------------------------------------
   The field and its submit button are sized by two unrelated blocks above —
   the input by the shared .form-control rule (15px / 14px padding), the button
   by the submit-button rule (12px / 16px 26px padding) — so their intrinsic
   heights never matched, and both carried a 2px radius on all four corners,
   which made them read as two boxes shoved together. Pin both to one explicit
   height and split the radius so they form a single control.
   Scoped to .inv-search: every other form on the site keeps the shared sizing.
   The hover transform is cancelled here too — a button that lifts 1px out of
   the field it's welded to breaks the join. */
.inv-search__label{
  display:block;font-family:var(--mono);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--ash);margin-bottom:10px;
}
.inv-search__group{position:relative;border-radius:3px;transition:box-shadow .25s}
/* the whole control lights up, not just the field's 1px border — a far bigger
   visual cue that the bar is live, and it keeps the pair reading as one widget */
.inv-search__group:focus-within{box-shadow:0 0 0 3px rgba(255,176,32,.22)}

.inv-search .input-group{align-items:stretch}
.inv-search .form-control,
.inv-search .btn-primary{
  height:56px !important;
  padding-block:0 !important;
  border-radius:0 !important;
}
.inv-search .form-control{
  border-radius:3px 0 0 3px !important;
  /* the shared rule paints inputs --pitch, which on this black page made the
     field read as a hairline outline rather than something you can type in */
  background:var(--carbon) !important;
  border-color:var(--edge-hi) !important;
  font-size:16px !important;        /* 16px also stops iOS zooming on focus */
  padding-left:48px !important;     /* clears the icon */
}
.inv-search .form-control:hover{border-color:rgba(255,255,255,.34) !important}
.inv-search .form-control:focus{background:var(--ink) !important}

/* Two classes deliberately: master.css:568 sets `.main_form span{position:
   relative;width:100%;float:left}` for its legacy icon-inside-field pattern,
   and that selector (0,1,1) outranks a lone .inv-search__icon (0,1,0) — which
   flattened this icon into a full-width floated block sitting outside the bar.
   width/float are reset explicitly rather than just overridden by position. */
.inv-search .inv-search__icon{
  position:absolute;left:16px;top:0;height:56px;width:auto;float:none;z-index:4;
  display:flex;align-items:center;color:var(--ash);
  pointer-events:none;transition:color .25s;   /* never eat a click meant for the field */
}
.inv-search .inv-search__icon svg{width:18px;height:18px;display:block}
.inv-search .inv-search__group:focus-within .inv-search__icon{color:var(--signal)}

.inv-search .btn-primary{
  border-radius:0 3px 3px 0 !important;
  padding-inline:30px !important;
  font-size:13px !important;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
}
/* the global submit rule lifts buttons 1px on hover; here that would tear the
   button off the field it's welded to, so brightness carries the hover instead */
.inv-search .btn-primary:hover{transform:none !important;filter:brightness(1.18) !important}

.inv-search__status{
  margin:12px 0 0 !important;max-width:none !important;
  font-family:var(--mono);font-size:12px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ash) !important;
}
.inv-search__status b{color:var(--bone);font-weight:600}
.inv-search__status a{
  color:var(--signal);text-decoration:underline;text-underline-offset:3px;margin-left:10px;
}
@media (max-width:575px){
  .inv-search .btn-primary{padding-inline:16px !important}
  .inv-search .form-control{font-size:16px !important;padding-left:44px !important}
  .inv-search__icon{left:14px}
}
/* master.css floats a white pip inside .o-btn/.filter_btn — design B has no pip */
.o-btn span,.filter_btn span{background:transparent !important;color:inherit !important}
.btn-ghost,.btn-onDark{
  display:inline-flex;align-items:center;gap:10px;padding:15px 24px !important;
  border:1px solid var(--edge-hi) !important;background:transparent !important;color:var(--bone) !important;
  font-family:var(--mono) !important;font-size:12px !important;letter-spacing:.16em !important;
  text-transform:uppercase !important;border-radius:2px !important;transition:.25s;
}
.btn-ghost:hover,.btn-onDark:hover{background:var(--signal) !important;border-color:var(--signal) !important;color:#000 !important}

/* --- 9.7 orange legacy bands --------------------------------------------- */
.ta_features{background:var(--carbon) !important;border-block:1px solid var(--edge) !important}
.ta_features li{color:var(--ash) !important;font-family:var(--mono) !important;
  font-size:11px !important;letter-spacing:.16em !important;text-transform:uppercase !important}
.search_res{background:var(--carbon) !important}

/* --- 9.8 legacy card/list bits ------------------------------------------- */
.box_service{padding:34px 18px !important;text-align:center}
.box_service h4{color:var(--bone) !important;font-size:15px !important;text-transform:uppercase !important;
  font-stretch:110% !important;margin-top:14px !important}
.service_icon span,.ic{color:var(--signal) !important}
.service_icon span i,.ic i{color:var(--signal) !important}
ul.finance_list li,.checks li{color:var(--ash) !important}
ul.finance_list li::marker{color:var(--signal)}
.item_style_title{color:var(--ash-dim) !important;font-family:var(--mono) !important;
  font-size:10px !important;letter-spacing:.18em !important;text-transform:uppercase !important}
.item_style_value{color:var(--bone) !important;font-family:var(--mono) !important;font-size:14px !important}
.price_car,.price_label{color:var(--bone) !important;font-family:var(--display) !important;
  font-weight:800 !important;font-stretch:115% !important}
.fa-square-check,.fa-check,.fa-circle-check{color:var(--signal) !important}

/* --- 9.9 tables ---------------------------------------------------------- */
table{color:var(--bone)}
table th{
  background:var(--carbon) !important;color:var(--bone) !important;border-color:var(--edge) !important;
  font-family:var(--mono) !important;font-size:10px !important;letter-spacing:.18em !important;text-transform:uppercase !important;
}
table td{background:transparent !important;color:var(--ash) !important;border-color:var(--edge) !important}
.table-bordered,.table-bordered td,.table-bordered th{border-color:var(--edge) !important}

/* --- 9.10 Bootstrap neutralisers ----------------------------------------- */
.bg-white,.bg-light,.card,.modal-content,.dropdown-menu,.list-group-item,.accordion-item{
  background:var(--ink) !important;color:var(--bone) !important;border-color:var(--edge) !important;
}
.text-dark,.text-muted{color:var(--ash) !important}
.text-center p,.text-center li{color:var(--ash)}
.border,.border-top,.border-bottom,.border-left,.border-right{border-color:var(--edge) !important}
.page-link{background:var(--ink) !important;border-color:var(--edge) !important;color:var(--bone) !important}
.page-item.active .page-link{background:var(--grad) !important;border-color:transparent !important;color:#000 !important}
.alert{background:var(--carbon) !important;border:1px solid var(--edge) !important;color:var(--bone) !important;border-radius:2px !important}
.alert-success{border-color:rgba(74,222,128,.4) !important}
.alert-success,.alert-success *{color:var(--ok) !important}
.alert-danger{border-color:rgba(255,107,107,.4) !important}
.alert-danger,.alert-danger *{color:var(--danger) !important}

/* --- 9.11 inventory filter sidebar --------------------------------------- */
/* NB: inventory.blade.php renders this sidebar TWICE (mobile drawer + desktop)
   with identical ids. Style only — never add ids or scripts here.
   See the gotchas section in CLAUDE.md. */
.inventory_range,.range_slider,.reset_filters{color:var(--bone)}

/* Filter counts. master.css:1058 makes these a fixed 20px circle of legacy
   orange (#da793e) and never sets a text colour, so the number inherited
   --ash-dim grey from the list item: grey on orange measures about 1.1:1, which
   is invisible in practice and far below the 4.5:1 WCAG asks for.

   Now an amber numeral on the panel surface — the treatment this site already
   uses for counts and numerals elsewhere (.need-n, .opt-n, the numbered legal
   sections) — which measures ~10:1.

   width/height go auto with padding instead of a fixed 20px box: the old circle
   was sized for one digit and a three-digit count would have spilled out of it.
   Applies to both copies of the sidebar (mobile drawer + desktop) since they
   share the class. */
span.counts{
  float:right;
  width:auto !important;min-width:24px;height:auto !important;
  padding:3px 7px !important;
  background:var(--carbon) !important;
  border:1px solid var(--edge);border-radius:100px !important;
  color:var(--signal) !important;
  font-family:var(--mono) !important;font-size:11px !important;font-weight:600;
  font-variant-numeric:tabular-nums;
  line-height:1.2 !important;text-align:center;
}
.reset_filters ul li{
  padding:7px 12px !important;font-family:var(--mono) !important;font-size:10px !important;
  letter-spacing:.14em !important;text-transform:uppercase !important;
}
.remove-filter{color:var(--signal) !important;cursor:pointer}
.price_label,.values{color:var(--bone) !important;font-family:var(--mono) !important;font-variant-numeric:tabular-nums}
/* master.css paints every range input solid amber with !important (gotcha #4) —
   keep the thumb amber but let the track show the selected span. */
.slider-track{background:var(--edge) !important;border-radius:2px !important}

/* The inventory sidebar's price/odometer sliders have no track element of
   their own — master.css just paints the <input> itself #d77b4a, which on a
   dark page reads as a solid orange bar with the thumbs lost inside it. Draw
   a real track with a pseudo-element and put amber thumbs on top.
   Style only: no ids, no scripts. The sidebar is rendered twice with these
   same ids (CLAUDE.md gotcha #1), and CSS is the one thing that is safe to
   apply to both copies. */
.inventory_range{position:relative;height:34px;margin:14px 0 !important;padding:0 !important}
/* same centring as .range-bar: input top 8 + height 18 => thumb centre 17;
   track top 15 + height 4 => track centre 17.
   --fill-a / --fill-b are set by the mirroring script in inventory.blade.php
   and mark the two thumb centres, so the amber span sits exactly between the
   handles instead of each input painting its own full-width bar. */
.inventory_range::before{
  content:"";position:absolute;top:15px;left:0;right:0;height:4px;border-radius:2px;
  background:linear-gradient(to right,
    var(--edge) 0%, var(--edge) var(--fill-a,0%),
    var(--g1)   var(--fill-a,0%), var(--g2) var(--fill-b,100%),
    var(--edge) var(--fill-b,100%), var(--edge) 100%);
}
.inventory_range input[type="range"]{
  position:absolute !important;top:8px !important;left:0 !important;
  width:100% !important;height:18px !important;
  /* min-height wins over height, so a global form rule setting one silently
     re-centres the thumbs away from the track. Pinned here so the geometry
     above cannot be broken from a distance again. */
  min-height:0 !important;max-height:18px !important;
  background:transparent !important;border:0 !important;
  padding:0 !important;margin:0 !important;
  pointer-events:none;-webkit-appearance:none;appearance:none;
}
.inventory_range input[type="range"]::-webkit-slider-runnable-track{background:transparent;height:18px}
.inventory_range input[type="range"]::-moz-range-track{background:transparent;height:18px}
.inventory_range input[type="range"]::-webkit-slider-thumb{
  -webkit-appearance:none;box-sizing:border-box;pointer-events:auto;cursor:pointer;
  width:18px;height:18px;margin-top:0;border-radius:50%;
  background:var(--signal);border:2px solid #000;box-shadow:0 0 0 1px var(--signal);
}
.inventory_range input[type="range"]::-moz-range-thumb{
  box-sizing:border-box;pointer-events:auto;cursor:pointer;width:18px;height:18px;border-radius:50%;
  background:var(--signal);border:2px solid #000;
}
/* The price and odometer ranges are structurally identical, so side by side in
   the sidebar they read as one continuous smear of sliders. Each gets its own
   bordered card and an amber rule-and-label header to separate them from each
   other and from the select stack above. */
.filter-range{
  background:var(--ink) !important;
  border:1px solid var(--edge) !important;
  border-radius:2px !important;
  padding:15px 15px 11px !important;
  margin:0 0 14px !important;
}
.filter-range + .filter-range{margin-top:0 !important}
.filter-range__label{
  display:flex !important;align-items:center;gap:9px;
  font-family:var(--mono) !important;font-size:10px !important;
  letter-spacing:.2em !important;text-transform:uppercase !important;
  color:var(--signal) !important;margin:0 0 4px !important;
}
.filter-range__label::before{
  content:"";width:14px;height:1px;background:var(--grad);flex:none;
}
.filter-range__vals{margin:0 !important}
.filter-range__vals p{
  color:var(--bone) !important;font-family:var(--mono) !important;
  font-size:12px !important;font-variant-numeric:tabular-nums;margin:0 !important;
}

/* slim page title that replaced the removed .top_page_head banner */
.inv-title{padding-top:26px;padding-bottom:4px}
/* PAGE HEADING. Deliberately separated from .s_title (the section heading) on
   four axes, not just size — they previously shared font, weight, transform,
   colour AND tracking, so 40px vs 29px was the only signal and it read as one
   level. Page title: biggest, heaviest, tightest tracking, plus a gradient rule
   underneath that nothing else on the site carries. See .s_title for the
   opposite end of each axis. */
.inv-title h1{
  font-family:var(--display) !important;font-weight:800 !important;
  font-size:clamp(30px,4.2vw,54px) !important;text-transform:uppercase !important;
  letter-spacing:-.02em !important;line-height:1.02 !important;color:var(--bone) !important;
  position:relative;padding-bottom:18px !important;
}
.inv-title h1::after{
  content:"";position:absolute;left:0;bottom:0;height:4px;width:68px;
  background:var(--grad);transform-origin:left center;
  animation:h1rule .5s cubic-bezier(.2,.7,.3,1) both;
}
/* grows in on load — the page title is the one thing worth announcing.
   The prefers-reduced-motion block kills this via its blanket animation:none. */
@keyframes h1rule{from{transform:scaleX(0)}to{transform:scaleX(1)}}

/* Same treatment on the two page types that carry a real H1 but never used the
   .inv-title block: the vehicle detail page (the car name IS its page heading)
   and the error pages. Both inherited legacy styling that made them read as
   SECTION headings — master.css:947 gives .info_title h1 a 4px amber LEFT bar,
   the very marker .s_title now uses, so the car name wore the subordinate cue
   on its own page. Cleared here. */
.info_title h1,.error-content h1{
  font-family:var(--display) !important;font-weight:800 !important;
  /* capped at 44 rather than .inv-title's 54: the car name shares a flex row
     with the price plate, and long make-model-trim strings need the headroom */
  font-size:clamp(26px,3.4vw,44px) !important;text-transform:uppercase !important;
  letter-spacing:-.02em !important;line-height:1.02 !important;color:var(--bone) !important;
  position:relative;padding:0 0 18px !important;
  border-left:0 !important;border-right:0 !important;
}
.info_title h1::after,.error-content h1::after{
  content:"";position:absolute;left:0;bottom:0;height:4px;width:68px;
  background:var(--grad);transform-origin:left center;
  animation:h1rule .5s cubic-bezier(.2,.7,.3,1) both;
}
/* error pages centre their content, so the rule centres with it. Separate
   keyframe because the centring translate and the reveal scale would otherwise
   fight over the same transform property. */
.error-content h1::after{left:50%;transform-origin:center;animation-name:h1ruleCentre}
@keyframes h1ruleCentre{
  from{transform:translateX(-50%) scaleX(0)}
  to{transform:translateX(-50%) scaleX(1)}
}
/* __sub carries the tagline the old .top_page_head banner used to show in its
   right-hand column, on the interior pages that now use this slim title */
.inv-title__count,.inv-title__sub{
  font-family:var(--mono) !important;font-size:11px !important;letter-spacing:.18em !important;
  text-transform:uppercase !important;color:var(--ash-dim) !important;margin:10px 0 0 !important;
}

/* --- 9.11b inventory intro + FAQ (SEO report sections) ------------------- */
.inv-intro{
  color:var(--ash) !important;font-size:15px;line-height:1.75;
  max-width:78ch;margin:0 0 26px;padding-bottom:22px;
  border-bottom:1px solid var(--edge);
}
.inv-faq-q{
  font-family:var(--display) !important;font-size:16px !important;font-weight:700 !important;
  text-transform:uppercase !important;letter-spacing:-.01em !important;
  color:var(--bone) !important;line-height:1.25 !important;
}

/* --- 9.11c inventory guide panels + FAQ band ----------------------------
   The two guide columns and the FAQ used to be three plain Bootstrap rows on
   one flat background, so they read as a single wall of prose. Each is now a
   distinct surface: bordered panels for the guide, a darker ruled band for
   the FAQ, and a rule above the whole block to separate it from pagination. */
.inv-guide{
  border-top:1px solid var(--edge);
  padding-block:clamp(44px,5.5vw,78px);
}
.inv-guide-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:1px;
  background:var(--edge);border:1px solid var(--edge);
}
.inv-panel{background:var(--ink);padding:clamp(26px,3vw,40px)}
.inv-panel h2{
  font-family:var(--display) !important;font-weight:800 !important;
  font-size:clamp(21px,2.1vw,29px) !important;text-transform:uppercase !important;
  letter-spacing:-.02em !important;line-height:1.08 !important;
  color:var(--bone) !important;margin:0 0 16px !important;
  /* master.css .s_title brackets headings with an amber border on BOTH sides —
     these headings deliberately do not use that class, but guard anyway. */
  border:0 !important;padding:0 !important;
}
.inv-panel p{margin-bottom:14px}
.inv-panel p:last-child{margin-bottom:0}

/* .faq-band / .band-title are the generic names; the inv- prefixed ones are the
   originals from the inventory page and share the same treatment. */
.inv-faq-band,.faq-band{
  background:var(--carbon);border-block:1px solid var(--edge);
  padding-block:clamp(44px,5.5vw,78px);
}
.inv-faq-title,.band-title{
  font-family:var(--display) !important;font-weight:800 !important;
  font-size:clamp(24px,3vw,40px) !important;text-transform:uppercase !important;
  letter-spacing:-.02em !important;line-height:1.04 !important;
  color:var(--bone) !important;margin:0 0 30px !important;border:0 !important;padding:0 !important;
}
.faq-band .lede{margin-bottom:30px}

/* --- 9.11c(ii) generic section banding ----------------------------------
   Alternating surfaces down a page: carbon band, page black, carbon band, and
   so on. .sec-band is the carbon one and reuses the same tone + hairlines as
   .faq-band above and .fin-sec--band below, so a banded section looks the same
   whichever page it's on.

   .sec-plain looks like nothing but is not optional: it gives the UNbanded
   sections the same padding-block as the banded ones. Bootstrap's py-5 is a
   flat 48px, so without it the black sections sat tighter than the carbon ones
   and the alternation read as accidental rather than designed.

   Both replace .tas-shadow on the about page, which wrapped whole sections in
   a bordered --ink card while .opt-band and .faq-band on the same page were
   full-bleed — two different ideas of what a section is, stacked. */
.sec-band,.sec-plain{padding-block:clamp(44px,5.5vw,78px)}
.sec-band{background:var(--carbon);border-block:1px solid var(--edge)}
/* Two unbanded sections in a row share one continuous black, so nothing marks
   where one ends — a band would have its own hairlines to do that. This is the
   only case that needs the rule; a banded neighbour on either side already
   supplies the division. */
.sec-plain + .sec-plain{border-top:1px solid var(--edge)}
/* Cards have to sit a step away from whatever surface is under them, and the
   two card components were built for opposite backgrounds:

   .std is painted #101114 (= --carbon) for the black .standard strip, so on a
   carbon band it vanishes and drops to --ink.
   .need-card is painted --ink for carbon bands, so on page black it vanishes
   the other way and lifts to --carbon.

   Without these, the card is just its 1px grid lines. */
.sec-band .std{background:var(--ink)}
.sec-plain .need-card{background:var(--carbon)}

/* buttons closing a run of body copy */
.about-cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:32px}

/* --- 9.11d financing options cards ---------------------------------------- */
.opt-band{padding-block:clamp(44px,5.5vw,78px);border-top:1px solid var(--edge)}
.opt-band .band-title{margin-bottom:20px !important}
.opt-grid{
  display:grid;grid-template-columns:repeat(4,1fr);gap:1px;
  background:var(--edge);border:1px solid var(--edge);margin-top:34px;
}
/* BUG FIX: .opt-grid is listed in PART 8's 1080px and 640px breakpoints, but
   those blocks are declared ~600 lines ABOVE this base rule. At equal
   specificity the later declaration wins, so the collapse never applied and the
   four financing-option cards stayed four-across on a phone — roughly 90px per
   card, with the text spilling out of each one.
   Restated here, after the base rule, which is the only place it can win from.
   PART 8's mentions of .opt-grid are now redundant but harmless. */
@media (max-width:1080px){ .opt-grid{grid-template-columns:1fr 1fr} }
@media (max-width:640px){ .opt-grid{grid-template-columns:1fr} }

.opt-card{background:var(--ink);padding:28px 24px 30px;display:flex;flex-direction:column;gap:10px}
.opt-n{
  font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--signal);
  font-variant-numeric:tabular-nums;
}
.opt-card h3{
  font-family:var(--display) !important;font-weight:700 !important;
  font-size:17px !important;text-transform:uppercase !important;letter-spacing:-.01em !important;
  line-height:1.2 !important;color:var(--bone) !important;margin:0 !important;
  border:0 !important;padding:0 !important;
}
.opt-card p{color:var(--ash);font-size:14px;margin:0}

/* --- 9.11d finance intro: process steps, proof chips, jump CTA -----------
   The four-step explanation used to be a plain <ul>, so each stage was buried
   mid-sentence behind a bold lead-in. Cards put the stage name and its number
   on their own line, which is what makes the section skimmable. Grid/gap/border
   values mirror .opt-card above so the page reads as one system. */
.fin-banner{width:100%;height:auto;display:block;border:1px solid var(--edge)}

.fin-steps{
  list-style:none;margin:26px 0 0;padding:0;
  display:grid;grid-template-columns:1fr 1fr;gap:1px;
  background:var(--edge);border:1px solid var(--edge);
}
.fin-step{
  background:var(--ink);padding:22px 20px 24px;
  display:flex;flex-direction:column;gap:8px;transition:background .25s;
}
.fin-step:hover{background:var(--carbon)}
.fin-step__n{
  font-family:var(--mono);font-size:11px;letter-spacing:.2em;color:var(--signal);
  font-variant-numeric:tabular-nums;
}
.fin-step h3{
  font-family:var(--display) !important;font-weight:700 !important;
  font-size:16px !important;text-transform:uppercase !important;letter-spacing:-.01em !important;
  line-height:1.2 !important;color:var(--bone) !important;margin:0 !important;
  /* master.css brackets some headings with side borders — guard like .opt-card */
  border:0 !important;padding:0 !important;
}
.fin-step p{color:var(--ash) !important;font-size:14px;margin:0 !important}

.fin-facts{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 0;padding:0}
.fin-facts li{
  font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--ash) !important;background:var(--carbon);
  border:1px solid var(--edge);border-radius:100px;padding:7px 14px;
}
.fin-facts li::before{content:"\2713";color:var(--signal);margin-right:7px;font-weight:700}

.fin-note{
  margin:22px 0 0 !important;padding:16px 18px;
  background:var(--carbon);border-left:3px solid var(--signal);
}
.fin-note b{color:var(--bone)}

.fin-jump{margin-top:22px}

/* --- 9.11d(ii) credit-situation bands, full width below the form row -----
   --band is the one that changes surface: --carbon plus top/bottom rules so it
   separates from the black sections either side. The other two stay on the page
   background deliberately — banding all three would mean none of them stands
   out. Inner grid keeps the reading measure sane now that the container is
   roughly twice the old column width. */
.fin-sec{padding-block:clamp(38px,4.6vw,64px)}
.fin-sec--band{background:var(--carbon);border-block:1px solid var(--edge)}
.fin-sec__grid{
  display:grid;grid-template-columns:1.05fr .95fr;gap:34px;
  margin-top:22px;align-items:start;
}
.fin-sec__grid--single{grid-template-columns:1fr;max-width:80ch}
.fin-sec p{color:var(--ash) !important}

.fin-cases{
  list-style:none;margin:0;padding:0;
  display:grid;gap:1px;background:var(--edge);border:1px solid var(--edge);
}
.fin-cases li{
  background:var(--carbon);padding:14px 16px;margin:0;
  color:var(--ash) !important;font-size:14px;line-height:1.5;
}
/* inside the band the cards need to go darker, not lighter, to stay inset */
.fin-sec--band .fin-cases li{background:var(--ink)}
.fin-cases li b{color:var(--bone)}

/* --- trade-in panel -----------------------------------------------------
   Differentiated by construction rather than background: the bad-credit band
   above already owns "different surface", so a second banded section would
   just compete with it. This one is an inset card with a photo and a gradient
   spine — the only section on the page carrying either. */
/* minmax(0,…) not plain fr: an `fr` track carries an automatic min-content
   floor, and the photo's intrinsic width pushed that floor to 373px inside a
   330px panel at 360px wide — so the copy and the image were both clipped by
   the panel's overflow:hidden. minmax(0,…) removes the floor. */
.fin-trade__panel{
  display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);
  background:var(--ink);border:1px solid var(--edge);
  position:relative;overflow:hidden;margin-top:22px;
}
/* gradient spine — same token as the page-heading rule, so the accent reads as
   one family rather than a new colour */
.fin-trade__panel::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:4px;
  background:var(--grad);z-index:2;
}
/* NO aspect-ratio here, deliberately — it is a trap on this component.
   The panel is a two-column grid with overflow:hidden, so the row height is
   whatever the TALLER column needs, and that is always the copy: heading,
   paragraph, three chips and a button. Giving the media a fixed ratio pins the
   row to the image's height instead (~445px against the copy's ~500px), and
   overflow:hidden then slices the bottom off the CTA — it rendered as a 4px
   amber sliver on the panel edge.

   Instead the media stretches to the copy's height and object-fit:cover crops
   the photo to fit. There is no CLS cost: the row is sized by text, which is
   measurable on first paint, and the img carries width/height for its ratio. */
/* min-width:0 on the ITEMS as well as minmax(0,…) on the tracks. Fixing only
   the track sizes the column correctly but a grid item still defaults to
   min-width:auto and can overflow the track it sits in — which is why the photo
   stayed 373px wide in a 328px column. Both halves of the fix are needed. */
.fin-trade__media,.fin-trade__copy{min-width:0}
.fin-trade__media{position:relative;min-height:250px}
.fin-trade__media img{width:100%;height:100%;object-fit:cover;display:block}
/* Keeps a hyphenated compound from breaking at its hyphen. "TRADE-IN" was
   splitting across lines in this panel's heading at desktop widths, orphaning
   "IN" on a line of its own. */
.nowrap{white-space:nowrap}
.fin-trade__copy{padding:clamp(24px,3vw,40px)}
.fin-trade__copy .s_title{margin:6px 0 14px !important}
.fin-trade__copy p{color:var(--ash) !important;margin-bottom:0}
.fin-trade__copy .btn-b{margin-top:24px}

@media (max-width:767px){
  .fin-steps{grid-template-columns:1fr}
  .fin-sec__grid{grid-template-columns:1fr;gap:24px}
  /* photo stacks above the copy rather than squeezing beside it. aspect-ratio
     IS right here and wrong on desktop: stacked, the media is its own row with
     no sibling to take height from, so it needs a shape of its own — and it
     cannot clip the copy, which now sits in the row below it. */
  .fin-trade__panel{grid-template-columns:minmax(0,1fr)}
  /* min-height MUST be cleared here, not just left at a smaller value: with
     aspect-ratio:16/9 a 210px minimum height implies a 210 x 16/9 = 373px
     minimum WIDTH, which is wider than the 328px panel at a 360px viewport —
     so the photo hung out of the panel and got clipped. The ratio alone decides
     the height now (328 wide -> 184 tall). */
  .fin-trade__media{min-height:0;aspect-ratio:16/9}

  /* .map-panel's breakpoint is NOT here — it lives beside its base rule in the
     contact block below, which is declared later in this file and would
     otherwise out-order anything written here at equal specificity. */
}

/* --- 9.11e trade-in: content left, appraisal form right ------------------
   Per the SEO report — the form used to sit full-width below a long wall of
   copy, so the two were never on screen together. */
.trade-grid{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(320px,420px);
  gap:clamp(28px,3.5vw,54px);align-items:start;margin-top:40px;
}
/* BUG FIX — this page was unusable on a phone.
   PART 8 collapses .trade-grid to one column and unsticks .trade-aside, but
   those rules sit ~780 lines ABOVE this base rule, so at equal specificity the
   base won and the grid stayed two-column on mobile. The aside held its 320px
   minimum, which at a 360px viewport left the copy column 0px wide: the body
   text rendered one word per line behind the form, and the headings overlapped.
   Restated here, after the base rule, which is the only place it can win. */
@media (max-width:900px){
  .trade-grid{grid-template-columns:minmax(0,1fr)}
  .trade-aside{position:static}
}
/* Every H2 on this page now uses the shared .s_title section heading (9.2)
   instead of the page-local .trade-h2, so the look comes from there — only the
   vertical rhythm is set here. master.css:813 gives .s_title a flat 25px bottom
   margin and no top margin, which left no air above each new section. */
.trade-main .s_title{margin:38px 0 14px !important}
.trade-main > .s_title:first-child{margin-top:0 !important}
.trade-main p{margin-bottom:14px}
.trade-main ul.finance_list{margin-bottom:18px}
/* The appraisal form used to sit in a bordered, padded panel. Flattened: no
   border, no inset padding and no panel fill (--ink on a --pitch page reads as
   nothing once the border is gone), so the form sits directly on the page and
   its fields align flush with the column edge. */
.trade-aside{
  background:transparent;border:0;border-radius:0;
  padding:0;position:sticky;top:96px;
}
/* the form heading is a .s_title too now; it only needs its own tighter margin
   because it sits at the top of the column with nothing above it */
.trade-aside .s_title{margin:0 0 18px !important}
.trade-aside label{margin-bottom:6px;display:block}
.trade-aside .form-control{margin-bottom:4px}
.trade-aside .row{margin-left:-8px;margin-right:-8px}
.trade-aside .row > [class*="col-"]{padding-left:8px;padding-right:8px;margin-bottom:12px}

/* --- 9.12 map / iframe --------------------------------------------------- */
iframe{border:1px solid var(--edge) !important;filter:invert(.92) hue-rotate(180deg) saturate(.7) contrast(.95)}
.tas_location a{color:var(--signal) !important}

/* --- contact page --------------------------------------------------------
   The map moved from directly under the page title to the foot of the page, so
   the gap that used to sit above it now belongs between the heading of its band
   and the embed itself. */
/* Spans the full col-md-12 on request — no max-width cap, so the measure is
   whatever the container gives it (~110 characters at 1440px). */
.contact-lede{margin-bottom:clamp(34px,4vw,54px)}
.contact-lede p{margin-bottom:14px}
.contact-lede p:last-child{margin-bottom:0}

/* .map-band holds nothing but the map now — no heading, no eyebrow — so it has
   no padding and no border of its own. It runs flush from the section above
   into the footer, and .map-hero carries its own top and bottom rules. The
   class is kept as the section hook. */

/* Full-bleed map with a card floating over its lower left.

   Height is viewport-relative but capped: a map that grows without limit on a
   wide monitor stops being a map and becomes a wall. */
.map-hero{
  position:relative;
  /* no margin: nothing sits above the map inside this band, so it starts
     immediately where the previous section ends */
  height:clamp(420px,44vw,560px);
  border-top:1px solid var(--edge);border-bottom:1px solid var(--edge);
  overflow:hidden;background:var(--ink);
}
.map-hero__frame{
  position:absolute;inset:0;width:100%;height:100%;display:block;
  border:0 !important;
  /* The shared iframe rule inverts hue to fake a dark map, which left Google's
     greens as murky olive and its road labels washed out. Desaturating before
     the invert keeps the same dark result without the colour cast. */
  filter:grayscale(.55) invert(.92) hue-rotate(180deg) contrast(.88) brightness(.96) !important;
}

/* Only the left third is darkened, and it fades out well before the pin. A flat
   overlay across the whole map would dim the thing people came to look at. */
.map-hero__scrim{
  position:absolute;inset:0;pointer-events:none;z-index:2;
  background:linear-gradient(100deg,
    rgba(0,0,0,.78) 0%, rgba(0,0,0,.55) 22%, rgba(0,0,0,.18) 40%, transparent 58%);
}

.map-hero__card{
  position:absolute;z-index:3;
  left:clamp(16px,5vw,72px);
  /* NOT flush to the bottom: Google's embed prints its attribution and terms
     along the bottom edge, and the Maps terms require that stay visible. 56px
     clears it at every width. */
  bottom:56px;
  width:min(370px,calc(100% - 32px));
  background:rgba(8,9,10,.82);
  -webkit-backdrop-filter:blur(14px) saturate(1.15);
  backdrop-filter:blur(14px) saturate(1.15);
  border:1px solid var(--edge-hi);border-radius:3px;
  padding:22px 22px 24px;
  display:flex;flex-direction:column;gap:16px;
}
.map-hero__addr{
  margin:0 !important;font-style:normal;color:var(--bone) !important;
  font-family:var(--display);font-weight:700;font-size:21px;line-height:1.28;
  letter-spacing:-.01em;
}
.map-hero__cta{display:flex;flex-direction:column;gap:9px}
.map-hero__cta .btn-b{justify-content:center}

/* open/closed pill — the one thing someone checks before driving over */
.map-status{
  display:inline-flex;align-items:center;gap:9px;align-self:flex-start;margin:0 !important;
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  border:1px solid var(--edge-hi);border-radius:100px;padding:8px 14px;
}
.map-status__dot{width:7px;height:7px;border-radius:50%;flex:none}
.map-status.is-open{color:#6FCF8A !important}
.map-status.is-open .map-status__dot{background:#6FCF8A;box-shadow:0 0 0 3px rgba(111,207,138,.18)}
.map-status.is-shut{color:var(--ash) !important}
.map-status.is-shut .map-status__dot{background:var(--ash-dim)}

/* Breakpoint declared HERE, immediately after the base rules, not up in PART 8:
   these selectors are defined further down the file than that block, so an
   override written there loses on source order at equal specificity. */
@media (max-width:767px){
  /* The card stops floating and sits below the map. Floating it would cover
     most of a 390px-wide map, which defeats having a map at all — and a
     translucent blurred panel over a busy map is hardest to read at exactly
     the size where reading is hardest. */
  .map-hero{height:auto;overflow:visible}
  .map-hero__frame{position:relative;height:300px}
  .map-hero__scrim{display:none}
  .map-hero__card{
    position:static;width:auto;
    background:var(--ink);backdrop-filter:none;-webkit-backdrop-filter:none;
    border:0;border-top:1px solid var(--edge);border-radius:0;
    padding:22px clamp(16px,5vw,24px) 26px;
  }
}

/* Opening hours. A <dl> because that is what it is — each row a term and its
   value. The dotted leader is a border on the row rather than a pseudo-element
   so the day and the time can sit hard against either end at any width. */
.hours{margin:0;padding:0}
.hours > div{
  display:flex;justify-content:space-between;align-items:baseline;gap:16px;
  padding:11px 0;border-bottom:1px solid var(--edge);
}
.hours > div:last-child{border-bottom:0}
.hours dt{
  font-family:var(--mono);font-size:11px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ash);margin:0;
}
.hours dd{
  margin:0;color:var(--bone);font-family:var(--mono);font-size:12px;
  font-variant-numeric:tabular-nums;white-space:nowrap;
}
/* Sunday is the odd one out, so it is the one worth marking */
.hours > div:last-child dd{color:var(--signal)}

/* the send button is a <button>, not an <a>, so PART 10's anchor rules never
   reach it — it states its own colour here */
.contact-send{margin:22px 0 40px;cursor:pointer;color:#000 !important}

/* --- 9.13a long-form document layout (privacy, and any policy page) -------
   Full container width, sections packed into two columns.

   CSS multi-column rather than a grid: a grid row is as tall as its tallest
   cell, so unequal sections leave ragged gaps. Columns flow continuously and
   pack tight, which is the point here — the page is meant to be SHORT. */
.doc-cols{
  columns:2;column-gap:clamp(32px,4vw,72px);
  margin-top:clamp(24px,3vw,38px);
  counter-reset:sec;
}
/* The terms page keeps its <ul>/<li> structure, so .doc-cols has to work as a
   list too — no markers, no indent. */
ul.doc-cols{list-style:none;padding-left:0;margin-left:0;margin-right:0}

/* a section must never be split down the middle by the column break */
/* Must stay clearly larger than the 28px gap between clauses, or a new section
   reads as just another clause. */
.doc-sec{
  break-inside:avoid;page-break-inside:avoid;margin-bottom:clamp(34px,4vw,52px);
  counter-increment:sec;counter-reset:sub;
}

/* CLAUSE NUMBERING — counters, not hand-typed numbers, so inserting or deleting
   a clause renumbers everything automatically and the document can never
   contradict itself.

   On these pages the section number REPLACES the generic amber bar rather than
   sitting beside it: two markers before one heading is one too many, and the
   numeral keeps the amber. It is a fixed 20px + 13px margin — exactly the bar's
   own footprint — so the heading text stays on the same 33px edge as the body
   beneath it. That holds up to "9."; a tenth section would need the width
   nudged (terms has 9, privacy 7). */
.doc-sec > .s_title::before{
  content:counter(sec) "." !important;
  display:inline-block !important;
  width:20px !important;height:auto !important;
  margin-right:13px !important;
  background:none !important;
  font-family:var(--mono) !important;font-size:13px !important;font-weight:400 !important;
  letter-spacing:0 !important;color:var(--signal) !important;
  vertical-align:baseline !important;position:static !important;top:auto !important;
}

/* Clause numbers hang in the same left gutter as the section number, so every
   number lines up in one column and every piece of text lines up in another. */
.doc-sub > li{counter-increment:sub;position:relative}
.doc-sub > li > h6::before{
  content:counter(sec) "." counter(sub);
  position:absolute;left:-33px;top:.25em;
  font-family:var(--mono);font-size:10px;letter-spacing:.04em;
  color:var(--ash-dim);font-weight:400;
}

/* Sub-clauses within a section (Pricing, Warranties, ...). Subordinate to the
   amber-barred section heading: display face, no uppercase, no bar.

   The spacing here is the whole point. Previously the gap between a clause
   heading and its own paragraph was the same as the gap between one clause and
   the next, so four clauses read as one undifferentiated block. Tight inside a
   clause, loose between them — proximity does the grouping, no rules or boxes
   needed. The hairline is the only added mark, and it exists to tie the clauses
   to the section heading above them. */
/* ONE left edge for everything in a section.

   The page had three: the amber bar, the heading text 33px right of it, and the
   body — and the body moved depending on whether the section had sub-clauses
   (indented behind a hairline) or not (flush against the bar). Reading down a
   column you met a new left edge every few sections.

   Now every element in a section starts under the heading TEXT and the amber
   bar hangs into the margin as a marker. 33px is the bar's 20px width plus its
   13px margin — see .s_title::before. The hairline is gone: once everything
   lines up, alignment does the grouping the hairline was there to do. */
.doc-sec > p{margin-left:33px}
.doc-sub{list-style:none;margin:0 0 0 33px;padding-left:0;border-left:0}
/* Generous gap between clauses. The ratio is what matters: 3px inside a clause
   (heading to its own text) against 28px between clauses, so each one reads as
   a self-contained block rather than part of a running column of text. */
.doc-sub > li{margin-bottom:28px}
.doc-sub > li:last-child{margin-bottom:0}
.doc-sub h6{
  font-family:var(--display) !important;font-size:15.5px !important;font-weight:700 !important;
  letter-spacing:-.01em !important;color:var(--bone) !important;
  margin:0 0 3px !important;text-transform:none !important;
}
/* a notch under the body size, so the clause title reads as a level above it */
.doc-sub p{
  margin:0 !important;color:var(--ash) !important;
  font-size:14.5px;line-height:1.55;
}
/* a touch more air under a section heading than between its clauses, so the
   heading owns the group below it rather than floating between two */
.doc-sec > .s_title{margin:0 0 15px !important}
.doc-sec p{margin-bottom:12px}
.doc-sec p:last-child{margin-bottom:0}
/* margin-left 15 + padding-left 18 = 33: the bullet hangs and the TEXT lands on
   the same 33px edge as every paragraph. Kept as one rule rather than two at
   equal specificity, which would have come down to source order. */
.doc-sec ul.finance_list{margin:0 0 4px 15px;padding-left:18px}
/* bullets get room too, so the two legal pages breathe the same way */
.doc-sec ul.finance_list > li{margin-bottom:11px}
.doc-sec ul.finance_list > li:last-child{margin-bottom:0}

/* scroll-margin so a jumped-to heading clears the sticky site header instead of
   landing underneath it */
.doc-cols [id]{scroll-margin-top:110px}

/* Intro paragraph keeps a readable measure even though everything else is full
   width — it is one block of prose, not a scannable column. */
.doc-lede{max-width:78ch;margin-bottom:0 !important}



/* Closing contact block.

   Stacked, not split left/right. Side by side, the heading column ran out after
   two lines while the details column needed two rows, so the band carried a
   block of dead space under the heading and the address wrapped ragged against
   a one-line phone and e-mail. Full width across gives all three details an
   equal column and a shared baseline. */
.doc-contact{display:block}
.doc-contact .eyebrow{margin-bottom:12px}
.doc-contact__title{
  font-family:var(--display) !important;font-weight:800 !important;
  font-size:clamp(23px,2.5vw,32px) !important;text-transform:uppercase !important;
  letter-spacing:-.02em !important;line-height:1.05 !important;
  color:var(--bone) !important;margin:0 0 24px !important;
  border:0 !important;padding:0 !important;
}
/* no ::before — the amber bar belongs to numbered sections, not to this */
.doc-contact__title::before{content:none !important}
/* Three equal columns under a hairline, so the details read as a set rather
   than as three loose items floating beside the heading. */
.doc-contact__list{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:18px 32px;margin:0;
  border-top:1px solid var(--edge);padding-top:20px;
}
@media (max-width:640px){
  .doc-contact__list{grid-template-columns:1fr;gap:16px}
}
.doc-contact__list dt{
  font-family:var(--mono);font-size:10px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--ash-dim);margin-bottom:5px;
}
.doc-contact__list dd{margin:0;color:var(--bone) !important;font-size:15px;line-height:1.45}
/* (.doc-contact's 767px rule removed — it collapsed a two-column grid that no
   longer exists; the block stacks by default now and .doc-contact__list has its
   own breakpoint.) */

/* single most important sentence on the page */
.doc-callout{
  border-left:3px solid var(--signal);background:var(--carbon);
  padding:14px 18px;margin:18px 0 !important;
  color:var(--bone) !important;font-weight:600;
}

/* One column below 900px: two columns of legal text on a narrow screen leaves a
   measure too short to read, and the reader has to travel up and down twice. */
@media (max-width:900px){
  .doc-cols{columns:1}
}

/* --- 9.13 legal pages ---------------------------------------------------- */
.tas_privacy,.tas_tc{padding:clamp(28px,4vw,52px) !important;margin-block:clamp(40px,6vw,72px)}
.tas_privacy h2,.tas_tc h2,.tas_privacy h3,.tas_tc h3{
  font-size:clamp(20px,2.4vw,30px) !important;margin-top:34px !important;margin-bottom:12px !important;
}
.tas_privacy li,.tas_tc li{margin-bottom:8px}

/* --- 9.13b legacy grey + orange surfaces --------------------------------
   master.css paints a handful of panels #555 / #636262 and several price
   chips #f76d2b, all sized for white text on a light page. On black they
   either strand grey-on-grey text or blaze as orange blocks, so they get
   re-skinned to design B surfaces here. Sources: master.css 832 (.card-body),
   1026 (.aside_about_call), 816 (.serach_box), 1457 (.tas_box). */
.aside_about_call,.serach_box,.tas_box,.serach_box .card,
.serach_box .card .card-body{
  background:var(--carbon) !important;border:1px solid var(--edge) !important;color:var(--bone) !important;
}
.aside_about_call span,.tas_box p,.serach_box p,.serach_box li{color:var(--ash) !important}

/* price chips: orange block + white text becomes design B's display numeral */
.price_master,.car_price,.price_car{
  background:transparent !important;color:var(--bone) !important;
  font-family:var(--display) !important;font-weight:800 !important;font-stretch:115% !important;
  padding:0 !important;
}
.price_master.strike,.Price.strike{color:var(--ash-dim) !important;opacity:1 !important}
.price_car span{color:var(--signal) !important}

/* the finance CTA on the detail page is a raw .btn on legacy orange */
.btn,a.btn{border-radius:2px !important}
/* Rule removed: it recoloured side borders on .s_title and .info_title h1, and
   both now have those borders cleared — .s_title uses a leading amber bar and
   .info_title h1 uses the page-heading rule underneath. Recolouring borders
   that no longer exist would only mislead the next reader. */

/* Bootstrap's `mark, .mark` sets a cream highlight (#fcf8e3). Design B uses
   .std-mark for the card eyebrows now, but guard the utility class too. */
mark,.mark{background-color:transparent !important;color:inherit !important;padding:0 !important}

/* --- 9.13c detail-page specifics ----------------------------------------
   The vehicle detail page carries the most legacy colour of any template:
   an orange payment panel (master.css 1241), two orange CTA blocks
   (master.css 1485 .orange-tas), a near-black related-car title
   (master.css 1283) and spec values that fall through to #000. */
.details-aside ul li{color:var(--ash) !important;border-color:var(--edge) !important}
.details-aside ul li span{color:var(--bone) !important;font-family:var(--mono) !important;font-size:14px !important}
.details-aside h4{color:var(--bone) !important}

.payment_value{
  background:var(--carbon) !important;border:1px solid var(--edge) !important;color:var(--bone) !important;
}
.payment_value p,.payment_value span{color:var(--bone) !important}
.payment_value i{color:var(--signal) !important}

.orange-tas a,.black-tas a{
  border-radius:2px !important;font-family:var(--mono) !important;font-size:12px !important;
  letter-spacing:.16em !important;text-transform:uppercase !important;padding:16px 20px !important;
}
.orange-tas a{background:var(--grad) !important;color:#000 !important;border:1px solid transparent !important}
.black-tas a{background:transparent !important;color:var(--bone) !important;border:1px solid var(--edge-hi) !important}
.black-tas a:hover{background:var(--signal) !important;color:#000 !important;border-color:var(--signal) !important}

.b-auto_main-item h4 a{color:var(--bone) !important}
.b-auto_main-item span{color:var(--ash) !important}

/* --- 9.14 spacing so inner pages breathe --------------------------------- */
main > section:first-of-type:not(.hero):not(.top_page_head){padding-top:clamp(40px,5vw,72px)}
main{display:block;background:var(--pitch)}

/* ===========================================================================
   PART 10 — ANCHOR COLOUR RECONCILIATION
   ---------------------------------------------------------------------------
   master.css:92 is `a{color:#000 !important}` — it paints EVERY anchor on the
   site black, which on design B's black canvas means invisible text. An
   !important declaration can only be beaten by another !important one, no
   matter how specific the loser is, so every anchor colour on the site has to
   be restated here with !important. That is why this block exists and why it
   is last: it is the single place anchor colour is decided.

   Rule of thumb: anchors inherit their container's colour by default, prose
   links go amber, and each piece of chrome states its own.
   =========================================================================== */

/* 10.1 baseline — an anchor takes the colour of whatever it sits in, so
   buttons, cards, chips and nav items just work. */
a{color:inherit !important}

/* 10.2 prose links inside real body copy go amber and underline on hover */
p a,li a,.lede a,.welcome_ta a,.tas_privacy a,.tas_tc a,dd a,address a,td a{
  color:var(--signal) !important;
}
p a:hover,li a:hover,.lede a:hover,.welcome_ta a:hover,
.tas_privacy a:hover,.tas_tc a:hover,dd a:hover,address a:hover,td a:hover{
  color:var(--g2) !important;text-decoration:underline;
}
/* ...but a button or card that happens to sit inside a <p>/<li> is not prose */
p a.btn-b,li a.btn-b,p a.o-btn,li a.o-btn,p a.chip,li a.chip,
p a.card-b,li a.card-b,p a.btn-ghost,li a.btn-ghost{color:inherit !important}

/* 10.3 primary buttons — dark ink on the amber gradient */
a.btn-b--fill,a.btn-b--fill:hover,
a.o-btn,a.o-btn:hover,a.custom_btn,a.custom_btn:hover,
a.btn-primary,a.btn-primary:hover{color:#000 !important}
.btn-b:hover{color:#000 !important}
.btn-ghost:hover,.btn-onDark:hover{color:#000 !important}
/* the CTA band is amber, so its outline buttons invert */
.band .btn-b{color:#000 !important}
.band .btn-b:hover{color:var(--g2) !important}

/* 10.4 nav */
.menu a{color:var(--ash) !important}
.menu a:hover,.menu a.is-active{color:var(--bone) !important}
.call{color:var(--bone) !important}
.call:hover{color:var(--signal) !important}
.brand{color:inherit !important}

/* 10.5 utility bar */
.utility a{color:var(--ash-dim) !important}
.utility a:hover{color:var(--bone) !important}

/* 10.6 footer — master.css:791 `footer a{color:#999 !important}` lands here */
.foot a,.footb a{color:var(--ash) !important}
.foot a:hover,.footb a:hover{color:var(--bone) !important}
.legal a{color:var(--ash-dim) !important}
.legal a:hover{color:var(--bone) !important}
/* --bone rather than the --ash used for footer text links: these are 18px
   glyphs, not words, and they were the thing reported as hard to see. */
.social a{color:var(--bone) !important}
.social a:hover{color:var(--signal) !important}

/* 10.7 homepage components */
a.card-b,a.card-b *{text-decoration:none}
a.card-b .stk-price .big{color:var(--bone) !important}
a.card-b .stk-cta{color:#000 !important}
a.chip{color:var(--ash) !important}
a.chip:hover,a.chip.is-on{color:var(--signal) !important}
.make-links a{color:var(--ash) !important}
.make-links a:hover{color:var(--signal) !important}
a.cue{color:var(--ash) !important}
a.cue:hover{color:var(--bone) !important}

/* 10.8 legacy page bits */
.breadcrumb a{color:var(--ash-dim) !important}
.breadcrumb a:hover{color:var(--signal) !important}
.tas_location a,.remove-filter{color:var(--signal) !important}
.car_name a,.info_title h2 a{color:var(--bone) !important}
.contact_box a{color:var(--signal) !important}
.page-link{color:var(--bone) !important}
.page-item.active .page-link{color:#000 !important}

/* --- credit application (/finance) --------------------------------------
   The form grew from 6 fields to a full credit application, so it needs
   grouping and two columns to stay scannable. Scoped to .apply-form so the
   contact and trade-in forms are untouched. */
.apply-legend{
  font:700 13px/1.3 var(--head,inherit);letter-spacing:.12em;text-transform:uppercase;
  color:var(--amber,#f90);margin:28px 0 14px;padding-bottom:8px;
  border-bottom:1px solid var(--edge,#2a2a2a);
}
.apply-legend:first-of-type{margin-top:8px}
.apply-optional{font-weight:400;letter-spacing:.04em;text-transform:none;opacity:.65;font-size:12px}
.apply-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px}
.apply-grid__full{grid-column:1/-1}
@media (max-width:640px){ .apply-grid{grid-template-columns:1fr} }
.apply-form label{display:block;margin-bottom:6px;font-size:13px}
.apply-form label span{color:#e4572e}
.apply-form label small{opacity:.7}
.apply-help{font-size:11.5px;line-height:1.5;opacity:.7;margin:6px 0 0}
.apply-disclaimer{font-size:12px;line-height:1.6;opacity:.85;margin:18px 0 14px;
  padding:12px 14px;border-left:3px solid var(--amber,#f90);background:rgba(255,255,255,.03)}
.apply-errors{border-left:3px solid #e4572e;background:rgba(228,87,46,.08);
  padding:12px 16px;margin-bottom:18px;font-size:13px}
.apply-errors ul{margin:8px 0 0;padding-left:18px}
.apply-errors li{margin:2px 0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* --- mobile filter drawer ------------------------------------------------
   Only ever visible below 768px: master.css hides .modal_filter above that,
   so these rules cannot reach the desktop sidebar. The drawer becomes a flex
   column so the header and the apply/clear footer stay put while the facet
   list scrolls between them — with a long list the buttons were otherwise
   somewhere off the bottom of a very tall scroll area. */
.modal_filter:target{
  display:flex !important;flex-direction:column;padding:0 !important;
  overflow:hidden !important;   /* the scroll moves to .serach_box */
}
.modal_filter .filter-drawer__head{
  flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;
  gap:12px;padding:14px 16px;border-bottom:1px solid var(--edge,#2a2a2a);
  background:var(--pitch,#0b0b0b);
  font:700 12px/1 var(--head,inherit);letter-spacing:.14em;text-transform:uppercase;
  color:var(--bone,#eee);
}
.modal_filter .filter-drawer__close{
  font-size:30px;line-height:1;text-decoration:none;color:var(--bone,#eee);
  padding:0 6px;opacity:.75;
}
.modal_filter .filter-drawer__close:hover,
.modal_filter .filter-drawer__close:focus{opacity:1;color:var(--amber,#f90)}
.modal_filter .serach_box{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px}
.modal_filter .filter-drawer__foot{
  flex:0 0 auto;display:flex;gap:10px;padding:12px 16px;
  border-top:1px solid var(--edge,#2a2a2a);background:var(--pitch,#0b0b0b);
  /* clear of the iOS home indicator */
  padding-bottom:calc(12px + env(safe-area-inset-bottom,0px));
}
.modal_filter .filter-drawer__foot button{
  flex:1 1 0;min-height:48px;border-radius:3px;cursor:pointer;
  font:700 13px/1 var(--head,inherit);letter-spacing:.08em;text-transform:uppercase;
}
.modal_filter .filter-drawer__clear{
  flex:0 0 38%;background:transparent;color:var(--bone,#eee);
  border:1px solid var(--edge,#3a3a3a);
}
.modal_filter .filter-drawer__apply{
  background:linear-gradient(90deg,var(--g1,#ffb020),var(--g2,#ff6a2c));
  color:#1a1205;border:0;
}
.modal_filter .filter-drawer__count{font-weight:700}

/* Closing the drawer points the hash at #section-1, and the browser scrolls
   that anchor to the very top of the viewport — directly beneath the sticky
   header, which then swallowed clicks on the "Refine your search" link inside
   it. Measured: the link landed at y:-16 and the nav intercepted the tap, so
   the drawer could be closed but not reopened. scroll-margin-top leaves the
   header room. */
#section-1{scroll-margin-top:110px}
#terms-and-conditions{scroll-margin-top:110px}
