/* ============================================================
   CUSTOM AUTOMOTIVE DETAILING — proposal build
   Same template skeleton as the Just Dip It / Dental Collective
   builds, reskinned for a premium detailing studio.

   Brand tokens sampled from the supplied logo (Logo-01.png):
     gold       #f0bc60   (primary — the ring)
     gold deep  #c9a055   (gradient shadow side)
     gold light #f5d189   (highlight)
     black      #000      (logo background)
     type       Montserrat, uppercase headings
   Structure carried over: container 1216 / shell 1376, r=12 buttons,
   rounded slab lifted over a dark shell, sticky header, marquee.
   ============================================================ */

:root{
  --shell:#08080a;
  --panel:#121215;
  --panel-2:#1a1a1f;
  --panel-3:#232329;

  --amber:#f0bc60;      /* gold — primary */
  --amber-dk:#c9a055;   /* gold, deep */
  --gold-lt:#f5d189;    /* gold, highlight */

  --white:#fff;
  --body:#a8a8b0;
  --muted:#8b8b95;      /* lifted from #71717a — now =>4.5:1 on every surface */
  --on-gold:#000;       /* text sitting on the gold fill */
  --danger:#e5484d;
  --danger-ink:#ff9b9e;

  --line:rgba(255,255,255,.10);
  --line-2:rgba(255,255,255,.18);

  --container:1216px;
  --gutter:32px;
  --r:12px;
  --r-lg:20px;
  --r-xl:40px;

  --display:Montserrat,"Helvetica Neue",Arial,sans-serif;
  --sans:Montserrat,"Helvetica Neue",Helvetica,Arial,sans-serif;

  --ease:cubic-bezier(.22,.61,.36,1);
}

*,*::before,*::after{box-sizing:border-box}
/* single committed dark theme — tells the UA to render form controls,
   scrollbars and autofill to match rather than defaulting to light */
:root{color-scheme:dark}
html{scroll-behavior:smooth}
body{
  margin:0;
  background:var(--shell);
  font-family:var(--sans);
  font-size:17px;
  line-height:1.6;
  color:var(--body);
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block}
/* The build wraps every raster <img> in <picture> for WebP. picture is an
   inline element by default, which would insert a new box between the image
   and its styled parent and shift layouts that size the img directly.
   display:contents makes it generate no box at all, so the wrapper is
   invisible to layout and every existing rule keeps applying unchanged. */
picture{display:contents}
a{color:inherit;text-decoration:none}
h1,h2,h3,h4{margin:0;font-weight:700;color:var(--white)}
p{margin:0}
em{font-style:normal}

/* ── focus ────────────────────────────────────────────────── */
:focus-visible{
  outline:2px solid var(--amber);
  outline-offset:3px;
  border-radius:2px;
}
.btn:focus-visible,.side-tab:focus-visible{outline-offset:4px}
/* the skip link only exists for keyboard users */
.skip-link{
  position:absolute;left:16px;top:-64px;z-index:100;
  padding:13px 20px;border-radius:var(--r);
  background:var(--amber);color:var(--on-gold);
  font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  transition:top .2s var(--ease);
}
.skip-link:focus{top:16px}

.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--gutter)}

/* ── typography ───────────────────────────────────────────── */
h1{
  font-family:var(--display);
  font-size:clamp(34px,4.8vw,66px);line-height:1.02;
  font-weight:800;text-transform:uppercase;letter-spacing:-.01em;
}
h2{
  font-family:var(--display);
  font-size:clamp(25px,3vw,42px);line-height:1.1;
  font-weight:700;text-transform:uppercase;letter-spacing:0;
}
h3{font-family:var(--display);font-size:clamp(17px,1.5vw,22px);line-height:1.25;font-weight:700;text-transform:uppercase;letter-spacing:.01em}
h4{font-family:var(--sans);font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--white)}
/* non-heading label — same look as h4, no place in the document outline */
.label{
  font-family:var(--sans);font-size:12px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--white);
  margin:0 0 4px;
}
/* prose subheads are real headings (h3) but read as small labels */
.prose h3.sub{
  font-family:var(--sans);font-size:12px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--white);
  margin-top:28px;
}

.eyebrow{font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--amber);margin-bottom:12px}
.accent{color:var(--amber)}

/* ── buttons ──────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  padding:15px 22px;border-radius:var(--r);border:1px solid transparent;
  font-family:var(--sans);font-size:12px;font-weight:700;line-height:1.1;
  letter-spacing:.14em;text-transform:uppercase;
  cursor:pointer;white-space:nowrap;
  transition:background .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease),transform .2s var(--ease),box-shadow .25s var(--ease);
}
.btn:active{transform:translateY(1px)}
.btn--lg{padding:18px 30px;font-size:13px}
.btn--block{width:100%}
.btn__icon{width:16px;height:16px;flex:none}

.btn--primary{background:var(--amber);color:var(--on-gold)}
.btn--primary:hover{background:var(--gold-lt);box-shadow:0 0 0 3px rgba(240,188,96,.3)}

.btn--ghost{background:transparent;color:currentColor;border-color:var(--line-2)}
.btn--ghost:hover{border-color:var(--amber);color:var(--amber)}

.btn--outline{background:transparent;color:var(--white);border-color:rgba(255,255,255,.5)}
.btn--outline:hover{background:var(--white);color:var(--on-gold);border-color:var(--white)}

.link-arrow{
  display:inline-flex;align-items:center;gap:10px;
  padding-block:5px;
  font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--white);
  padding-bottom:6px;border-bottom:1px solid var(--line-2);
  transition:border-color .25s var(--ease),color .25s var(--ease);
}
.link-arrow span{transition:transform .25s var(--ease);color:var(--amber)}
.link-arrow:hover{border-color:var(--amber);color:var(--amber)}
.link-arrow:hover span{transform:translateX(4px)}

.icon-btn{width:40px;height:40px;display:grid;place-items:center;background:none;border:0;color:inherit;cursor:pointer}
.icon-btn svg{width:19px;height:19px}

/* ── announcement bar ─────────────────────────────────────── */
.announce{background:var(--amber);color:var(--on-gold);font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase}
.announce__inner{display:flex;align-items:center;justify-content:center;gap:16px;min-height:42px;padding:7px 20px;text-align:center}
.announce__btn{
  display:inline-flex;align-items:center;gap:7px;padding:8px 13px;
  border:1px solid rgba(0,0,0,.4);border-radius:8px;
  transition:background .25s var(--ease);
}
.announce__btn:hover{background:rgba(0,0,0,.12)}

/* ── header ───────────────────────────────────────────────── */
.site-header{
  position:sticky;top:0;z-index:60;background:transparent;color:var(--white);
  transition:background .3s var(--ease),box-shadow .3s var(--ease);
}
.site-header__inner{
  width:100%;max-width:1376px;margin-inline:auto;
  display:flex;align-items:center;gap:26px;padding:14px var(--gutter);
  border-bottom:1px solid var(--line);
  transition:border-color .3s var(--ease);
}
.site-header.is-solid{background:rgba(8,8,10,.94);backdrop-filter:blur(12px);box-shadow:0 1px 0 var(--line)}

/* flex:0 0 auto, not 0 1 auto. The wordmark is white-space:nowrap, so a
   shrinking flex box does not actually shrink it: the box narrows and the
   text bleeds straight out the side. Between 981px (where the desktop nav
   appears) and ~1272px (where everything genuinely fits) the header has no
   room for mark + wordmark + seven nav items, and the wordmark was rendering
   underneath the nav. Measured 98px of overlap at 981px, 75px at 1024px,
   still 8px at 1180px, so it covered the whole tablet-landscape and
   small-laptop band. */
.brand{display:flex;align-items:center;gap:12px;flex:0 0 auto;min-width:0}
.brand__logo{height:44px;width:auto;max-width:100%}
.brand__name{
  display:flex;flex-direction:column;line-height:1.1;
  font-family:var(--display);font-size:14px;font-weight:800;
  letter-spacing:.12em;text-transform:uppercase;color:var(--white);white-space:nowrap;
}
.brand__name em{
  font-size:9px;font-weight:600;letter-spacing:.42em;
  color:var(--amber);margin-top:3px;
}
/* In the band where the nav is shown but the header is short of room, the
   wordmark is what goes. The mark carries the identity on its own, and the
   business name is still in the title tag, the footer and the H1, so nothing
   is lost to a reader or to a crawler. Upper bound is the measured fit point,
   not a round number. */
@media (min-width:981px) and (max-width:1272px){
  .brand__name{display:none}
}

/* ── primary nav ──────────────────────────────────────────────
   Two levels. The dropdown opens on hover, on keyboard focus
   (:focus-within, so it works with JavaScript disabled) and on
   aria-expanded, which the click/touch handler sets. Hover alone
   would make it unusable on a touch screen. */
.nav{display:flex;align-items:center;gap:24px;margin-right:auto;
  font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}
.nav__item{position:relative}
.nav__top{
  position:relative;display:inline-flex;align-items:center;gap:6px;
  padding:5px 0;color:rgba(255,255,255,.78);white-space:nowrap;
  background:none;border:0;font:inherit;letter-spacing:inherit;
  text-transform:inherit;cursor:pointer;
  transition:color .2s var(--ease);
}
.nav__top::after{content:"";position:absolute;left:0;right:100%;bottom:0;
  height:2px;background:var(--amber);transition:right .3s var(--ease)}
.nav__top:hover{color:var(--white)}
.nav__top:hover::after{right:0}
.nav__top.is-active{color:var(--white)}
.nav__top.is-active::after{right:0}
.nav__chev{width:7px;height:7px;border-right:2px solid currentColor;
  border-bottom:2px solid currentColor;transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .25s var(--ease);flex:none}

.nav__menu{
  position:absolute;top:100%;left:-18px;z-index:70;
  min-width:238px;padding:10px;margin-top:14px;
  display:flex;flex-direction:column;gap:2px;
  background:var(--panel-2);border:1px solid var(--line-2);
  border-radius:var(--r);box-shadow:0 18px 44px rgba(0,0,0,.55);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .2s var(--ease),transform .2s var(--ease),visibility .2s;
}
/* the gap between trigger and panel would break a hover chain */
.nav__menu::before{content:"";position:absolute;top:-14px;left:0;right:0;height:14px}
.nav__item:hover .nav__menu,
.nav__item:focus-within .nav__menu,
.nav__top[aria-expanded="true"] + .nav__menu{
  opacity:1;visibility:visible;transform:translateY(0);
}
.nav__item:hover .nav__chev,
.nav__item:focus-within .nav__chev,
.nav__top[aria-expanded="true"] .nav__chev{transform:rotate(-135deg) translate(-3px,-3px)}

.nav__menu a{
  display:block;padding:10px 12px;border-radius:8px;
  font-size:11px;letter-spacing:.10em;color:var(--body);
  white-space:nowrap;transition:background .18s var(--ease),color .18s var(--ease);
}
.nav__menu a:hover{background:rgba(255,255,255,.06);color:var(--white)}
.nav__menu a.is-active{color:var(--amber)}

.burger{display:none;width:44px;height:44px;background:none;border:0;cursor:pointer;padding:0;color:inherit}
.burger span{display:block;height:2px;background:currentColor;margin:5px auto;width:22px}

/* ── sticky side tab ──────────────────────────────────────── */
.side-tab{
  position:fixed;left:0;top:50%;z-index:55;transform:translateY(-50%);
  writing-mode:vertical-rl;background:var(--amber);color:var(--on-gold);
  padding:22px 12px;font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  border-radius:0 var(--r) var(--r) 0;
  transition:padding-left .25s var(--ease);
}
.side-tab:hover{padding-left:17px;background:var(--gold-lt)}

/* ── hero ─────────────────────────────────────────────────── */
.hero{
  position:relative;min-height:760px;
  margin-top:-70px;padding-top:70px;
  display:flex;flex-direction:column;justify-content:flex-end;
  overflow:hidden;background:var(--on-gold);
}
.hero__media{position:absolute;inset:0}
.hero__media img{width:100%;height:100%;object-fit:cover}
.hero__vignette{
  position:absolute;inset:0;
  background:
    linear-gradient(180deg,rgba(0,0,0,.78) 0%,rgba(0,0,0,.28) 30%,rgba(0,0,0,.5) 62%,rgba(8,8,10,.97) 100%),
    linear-gradient(90deg,rgba(0,0,0,.82) 0%,rgba(0,0,0,.1) 62%);
}
.hero__content{position:relative;z-index:2;padding-bottom:150px}
.hero h1{max-width:16ch}
.hero h1 em{color:var(--amber)}
.hero__sub{margin-top:22px;max-width:48ch;font-size:clamp(15px,1.3vw,18px);line-height:1.7;color:rgba(255,255,255,.8)}
.hero__cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:34px}

.tag-pill{
  display:inline-flex;align-items:center;gap:11px;padding:9px 16px;margin-bottom:26px;
  border:1px solid var(--line-2);border-radius:999px;
  background:rgba(255,255,255,.06);backdrop-filter:blur(6px);
  font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.92);
}
.tag-pill i{width:6px;height:6px;border-radius:50%;background:var(--amber);flex:none}

/* ── dark sheet lifted over the shell ─────────────────────── */
.sheet{
  position:relative;z-index:3;
  margin:-70px var(--gutter) 0;
  background:var(--panel);
  border-radius:var(--r-xl) var(--r-xl) 0 0;
  border-top:1px solid var(--line);
}
.sheet > section{background:transparent;position:relative}
.sheet > .banner{background:var(--amber);border-radius:var(--r-lg);margin-inline:var(--gutter)}
.sheet > .newsletter{background:var(--panel-2);border-radius:var(--r-lg);margin-inline:var(--gutter);border:1px solid var(--line)}
.stats{padding-top:76px}

/* ── stat band ────────────────────────────────────────────── */
.stats__grid{display:grid;grid-template-columns:repeat(3,1fr);border-bottom:1px solid var(--line)}
.stat{padding:30px 0 42px;display:flex;flex-direction:column;gap:10px}
.stat + .stat{padding-left:44px;border-left:1px solid var(--line)}
.stat__label{font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.stat__num{font-family:var(--display);font-size:clamp(38px,4.4vw,58px);font-weight:800;letter-spacing:-.02em;line-height:1;color:var(--white)}
.stat__num em{color:var(--amber)}

/* ── capability strip ─────────────────────────────────────── */
.logostrip{border-bottom:1px solid var(--line)}
.logostrip__inner{
  display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;
  min-height:64px;padding-block:20px;
  font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);
}
.logostrip__inner span:nth-child(even){color:var(--amber);opacity:.5}

/* ── story ────────────────────────────────────────────────── */
.story{padding-block:92px}
.story__grid{display:grid;grid-template-columns:1.05fr .95fr;gap:68px;align-items:center}
.story__copy p{margin-top:20px;font-size:17px;line-height:1.8;max-width:52ch}
.story__cta{display:flex;align-items:center;gap:24px;flex-wrap:wrap;margin-top:34px}
.story__media img{aspect-ratio:4/5;object-fit:cover;border-radius:var(--r-lg);width:100%;height:auto}

/* ── amber banner ─────────────────────────────────────────── */
.banner{color:var(--on-gold)}
.banner h3,.banner h2{color:var(--on-gold)}
.banner__inner{display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap;padding-block:36px}
.banner .eyebrow{color:rgba(0,0,0,.62)}
.banner .link-arrow{color:var(--on-gold);border-color:rgba(0,0,0,.35)}
.banner .link-arrow span{color:var(--on-gold)}
.banner .link-arrow:hover{color:var(--on-gold);border-color:var(--on-gold)}

/* ── service cards ────────────────────────────────────────── */
.treatments{padding-block:92px}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;flex-wrap:wrap;margin-bottom:44px}
.section-head h2{max-width:20ch}

.cards{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.card{
  display:flex;flex-direction:column;gap:14px;
  background:var(--panel-2);border:1px solid var(--line);border-radius:var(--r-lg);
  overflow:hidden;padding-bottom:26px;
  transition:border-color .3s var(--ease),transform .3s var(--ease);
}
.card:hover{border-color:var(--amber);transform:translateY(-4px)}
.card__media{overflow:hidden}
.card__media img{aspect-ratio:4/3;object-fit:cover;width:100%;transition:transform .6s var(--ease);height:auto}
.card:hover .card__media img{transform:scale(1.06)}
.card h3,.card p,.card .link-arrow{margin-inline:24px}
.card h3{margin-top:8px}
.card p{font-size:14px;line-height:1.7;flex:1;color:var(--body)}
.card .link-arrow{align-self:flex-start}

/* ── enquiry form ─────────────────────────────────────────── */
.enquire{padding-block:92px;border-top:1px solid var(--line)}
.enquire__grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:68px;align-items:start}
.enquire__grid > *,.split > *,.step > *,.bio > *,.footer__col{min-width:0}
.enquire__intro p{margin-top:20px;font-size:17px;line-height:1.8;max-width:40ch}
.contact-lines{margin-top:34px;padding-top:28px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:14px}
.contact-lines p{font-size:16px;color:var(--white);overflow-wrap:anywhere}
.contact-lines a{font-size:15px;color:var(--white);overflow-wrap:anywhere;display:inline-flex;align-items:center;min-height:24px;padding-block:2px}
.contact-lines h4{margin-bottom:4px;color:var(--muted)}
.contact-lines a:hover{color:var(--amber)}

.form{display:flex;flex-direction:column;gap:16px}
.form__row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.field{display:flex;flex-direction:column;gap:9px;font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.field em{color:var(--amber)}
/* 16px, not 15px. iOS Safari zooms the whole page in when you focus a field
   whose font-size is under 16px, and it does not zoom back out afterwards, so
   the visitor is left scrolling a form that no longer fits the screen. This is
   the single most common mobile-form defect and it costs one pixel to avoid. */
.field input,.field select,.field textarea{
  font-family:var(--sans);font-size:16px;font-weight:400;letter-spacing:normal;text-transform:none;color:var(--white);
  padding:14px 15px;background:var(--panel-2);
  border:1px solid var(--line);border-radius:var(--r);
  transition:border-color .2s var(--ease),box-shadow .2s var(--ease);
}
.field textarea{resize:vertical;min-height:96px}
.field input:focus,.field select:focus,.field textarea:focus{
  outline:none;border-color:var(--amber);box-shadow:0 0 0 3px rgba(240,188,96,.22);
}
.field select option{background:var(--panel-2);color:var(--white)}
.form__fine{font-size:12px;letter-spacing:.02em;text-transform:none;color:var(--muted);font-weight:400}

/* ── trust strip ──────────────────────────────────────────── */
.awards{padding-block:52px;border-top:1px solid var(--line)}
.awards__title{font-family:var(--display);font-size:clamp(17px,2vw,24px);font-weight:700;text-transform:uppercase;text-align:center;color:var(--white)}
.awards__title em{color:var(--amber)}
.awards__row{
  display:flex;align-items:center;justify-content:space-between;gap:24px;flex-wrap:wrap;
  margin-top:26px;font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);
}

/* ── quote / callout band ─────────────────────────────────── */
.newsletter{padding-block:40px}
.newsletter__inner{display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap}
.newsletter p{font-size:17px;max-width:52ch;color:var(--white)}
.newsletter__form{display:flex;gap:10px}
.newsletter__form input{
  font-family:var(--sans);font-size:16px;padding:14px 16px;min-width:240px;   /* 16px: see .field input */
  border:1px solid var(--line);border-radius:var(--r);background:var(--panel-3);color:var(--white);
}
.newsletter__form input:focus{outline:none;border-color:var(--amber)}

/* ── accordion ────────────────────────────────────────────── */
.why{padding-block:92px;border-top:1px solid var(--line)}
.why__grid{display:grid;grid-template-columns:.8fr 1.2fr;gap:68px;align-items:start}
.why__intro{position:sticky;top:100px}
.why__intro p{margin-top:20px;font-size:17px;line-height:1.8;max-width:38ch}
.why__intro .btn{margin-top:30px}

.acc__item{border-top:1px solid var(--line)}
.acc__item:last-child{border-bottom:1px solid var(--line)}
.acc__item summary{
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding:26px 0;cursor:pointer;list-style:none;
  font-family:var(--display);font-size:clamp(15px,1.4vw,19px);font-weight:700;
  letter-spacing:.02em;text-transform:uppercase;color:var(--white);
  transition:color .25s var(--ease);
}
.acc__item summary:hover{color:var(--amber)}
.acc__item summary::-webkit-details-marker{display:none}
.acc__item summary i{position:relative;width:18px;height:18px;flex:none}
.acc__item summary i::before,.acc__item summary i::after{content:"";position:absolute;background:var(--amber);transition:transform .3s var(--ease),opacity .3s var(--ease)}
.acc__item summary i::before{left:0;top:8px;width:18px;height:2px}
.acc__item summary i::after{left:8px;top:0;width:2px;height:18px}
.acc__item[open] summary i::after{transform:rotate(90deg);opacity:0}
.acc__item[open] summary{color:var(--amber)}
.acc__body{padding-bottom:30px;max-width:64ch;font-size:16px;line-height:1.8}
.acc__body p + p,.acc__body ul{margin-top:14px}
.acc__body ul{padding-left:20px;display:flex;flex-direction:column;gap:9px}
.acc__body li::marker{color:var(--amber)}
.acc__body strong{color:var(--white);font-weight:700}
.acc__body .fine{font-size:13px;color:var(--muted)}
.acc__body .link-arrow{margin-top:18px}

/* ── vehicle type / grid tiles ────────────────────────────── */
.cases{padding-block:92px;border-top:1px solid var(--line)}
.cases__title{margin-bottom:44px}
.cases__title em{color:var(--amber)}
.cases__row{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.vcard{margin:0;position:relative;border-radius:var(--r-lg);overflow:hidden}
.vcard img{aspect-ratio:4/5;object-fit:cover;width:100%;transition:transform .6s var(--ease);height:auto}
.vcard:hover img{transform:scale(1.06)}
.vcard figcaption{
  position:absolute;inset:auto 0 0 0;padding:22px 20px;
  background:linear-gradient(180deg,rgba(0,0,0,0),rgba(0,0,0,.9));
  display:flex;flex-direction:column;gap:5px;
}
.vcard figcaption strong{font-family:var(--display);font-size:16px;font-weight:700;text-transform:uppercase;color:var(--white)}
.vcard figcaption span{font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--amber)}

.disclaimer{margin-top:32px;font-size:12px;line-height:1.75;color:var(--muted);max-width:88ch}

/* ── gallery scroller ─────────────────────────────────────── */
.gallery{padding-block:92px;border-top:1px solid var(--line)}
.gallery h2 em{color:var(--amber)}
.ba-track{
  display:grid;grid-auto-flow:column;grid-auto-columns:minmax(340px,1fr);gap:20px;
  overflow-x:auto;scroll-snap-type:x mandatory;
  padding-bottom:16px;margin-inline:calc(var(--gutter) * -1);padding-inline:var(--gutter);
  scrollbar-width:thin;scrollbar-color:var(--panel-3) transparent;
}
.ba{scroll-snap-align:start;margin:0}
.ba__img{overflow:hidden;border-radius:var(--r-lg)}
.ba__img img{aspect-ratio:4/3;object-fit:cover;width:100%;transition:transform .6s var(--ease);height:auto}
.ba:hover .ba__img img{transform:scale(1.05)}
.ba figcaption{display:flex;flex-direction:column;gap:5px;margin-top:14px}
.ba figcaption strong{font-family:var(--display);font-size:14px;font-weight:700;text-transform:uppercase;color:var(--white)}
.ba figcaption span{font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}

/* ── split / comfort ──────────────────────────────────────── */
.comfort{padding-block:92px;border-top:1px solid var(--line)}
.comfort__grid{display:grid;grid-template-columns:1fr 1fr;gap:68px;align-items:center}
.comfort__media img{aspect-ratio:5/6;object-fit:cover;border-radius:var(--r-lg);width:100%;height:auto}
.comfort__copy p{margin-top:18px;font-size:17px;line-height:1.8;max-width:48ch}
.comfort__copy .link-arrow{margin-top:26px}
.comfort__sub{margin-top:44px;padding-top:34px;border-top:1px solid var(--line)}

/* ── marquee ──────────────────────────────────────────────── */
.marquee{background:var(--amber);color:var(--on-gold);overflow:hidden;padding-block:20px}
.marquee__track{display:flex;gap:44px;width:max-content;animation:slide 30s linear infinite}
.marquee__track span{
  font-family:var(--display);font-size:clamp(20px,2.6vw,34px);font-weight:800;
  letter-spacing:.02em;text-transform:uppercase;white-space:nowrap;color:var(--on-gold);
  display:flex;align-items:center;gap:44px;
}
.marquee__track span::after{content:"◆";font-size:.5em;opacity:.5}
@keyframes slide{to{transform:translateX(-50%)}}

/* ── closing CTA ──────────────────────────────────────────── */
.finance{background:var(--shell);padding-block:64px}
.finance__inner{display:flex;align-items:center;justify-content:space-between;gap:48px;flex-wrap:wrap}
.finance h2{max-width:20ch}
.finance h2 em{color:var(--amber)}
.finance p{margin-top:18px;max-width:56ch;font-size:17px;line-height:1.8}

/* ── footer ───────────────────────────────────────────────── */
.footer{background:var(--shell);padding-top:8px;border-top:1px solid var(--line)}
.footer__grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:44px;padding-block:60px}
.footer__brand .brand{margin-bottom:20px}
.footer__logo{width:230px;height:auto;max-width:100%}
.footer__brand p{max-width:34ch;font-size:14px;line-height:1.75}
.footer__cta{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}
.footer__col{display:flex;flex-direction:column;gap:10px}
.footer__col h4{margin-bottom:8px;color:var(--amber)}
.footer__col p{font-size:14px;color:var(--body);overflow-wrap:anywhere}
.footer__col a{font-size:14px;color:var(--body);transition:color .2s var(--ease);overflow-wrap:anywhere;padding-block:5px;min-height:24px;display:flex;align-items:center}
.footer__col a:hover{color:var(--white)}
.socials{display:flex;gap:10px;margin-top:16px}
.socials a{
  width:44px;height:44px;display:grid;place-items:center;
  border:1px solid var(--line-2);border-radius:10px;color:var(--body);
  transition:border-color .25s var(--ease),color .25s var(--ease);
}
.socials svg{width:20px;height:20px;display:block}
.socials a:hover{border-color:var(--amber);color:var(--amber)}
.footer__base{
  display:flex;align-items:baseline;justify-content:space-between;gap:32px;flex-wrap:wrap;
  padding-block:24px 44px;border-top:1px solid var(--line);
  font-size:12px;color:var(--muted);
}

/* ── reveal ───────────────────────────────────────────────── */
.reveal{opacity:0;transform:translateY(20px)}
.reveal.is-in{opacity:1;transform:none;transition:opacity .7s var(--ease),transform .7s var(--ease)}

/* ============================================================
   INTERNAL PAGES
   ============================================================ */
.page-hero{
  position:relative;min-height:420px;
  margin-top:-70px;padding-top:70px;
  display:flex;flex-direction:column;justify-content:flex-end;
  overflow:hidden;background:var(--on-gold);
}
.page-hero__media{position:absolute;inset:0}
.page-hero__media img{width:100%;height:100%;object-fit:cover}
.page-hero__vignette{
  position:absolute;inset:0;
  background:
    linear-gradient(180deg,rgba(0,0,0,.82) 0%,rgba(0,0,0,.35) 38%,rgba(8,8,10,.96) 100%),
    linear-gradient(90deg,rgba(0,0,0,.8) 0%,rgba(0,0,0,.1) 66%);
}
.page-hero__content{position:relative;z-index:2;padding-bottom:110px}
.page-hero h1{max-width:18ch;font-size:clamp(30px,4vw,54px)}
.page-hero h1 em{color:var(--amber)}
.page-hero__sub{margin-top:18px;max-width:52ch;font-size:clamp(14px,1.2vw,17px);line-height:1.7;color:rgba(255,255,255,.8)}

/* Wraps as a row of whole crumbs, never inside a crumb. Without flex-wrap the
   four-level trail on a service-suburb page (Home / Service Areas / Bankstown
   / Car Detailing) did not fit 375px, so each item was squeezed until its own
   text broke across two lines. That put the crumbs on four different baselines
   with the slashes floating between them, which read as a rendering fault
   rather than a trail. Wrapping the row and refusing to shrink the items keeps
   every crumb on one line; on a phone it simply takes two rows. */
.breadcrumb{
  display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;margin-bottom:20px;
  font-size:10px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.55);
}
.breadcrumb > *{flex:0 0 auto;white-space:nowrap}
.breadcrumb a{padding-block:5px}
.breadcrumb a:hover{color:var(--amber)}
.breadcrumb span{opacity:.45}

.section{padding-block:84px}
.section + .section{border-top:1px solid var(--line)}
.section--tight{padding-block:60px}

.lede{font-size:clamp(17px,1.8vw,21px);line-height:1.6;color:var(--white);max-width:34ch;font-weight:500}

.prose{max-width:66ch;font-size:16px;line-height:1.85}
.prose > * + *{margin-top:16px}
.prose h3{margin-top:34px}
.prose h4{margin-top:28px;letter-spacing:.16em}
.prose strong{color:var(--white);font-weight:700}
.prose ul{padding-left:20px;display:flex;flex-direction:column;gap:10px}
.prose li::marker{color:var(--amber)}
.prose .fine{font-size:13px;color:var(--muted)}
.prose a:not(.btn):not(.link-arrow){color:var(--amber);border-bottom:1px solid rgba(240,188,96,.45)}

.split{display:grid;grid-template-columns:.62fr 1.38fr;gap:68px;align-items:start}
.split__rail{position:sticky;top:100px}
.split__rail h2{margin-bottom:20px}
.split__rail p{font-size:16px;line-height:1.8;max-width:34ch}
.split__rail .btn,.split__rail .link-arrow{margin-top:24px}

.jump{display:flex;flex-direction:column;margin-top:28px;border-top:1px solid var(--line)}
.jump a{
  padding:13px 0;border-bottom:1px solid var(--line);
  font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--body);
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  transition:color .2s var(--ease),padding-left .2s var(--ease);
}
.jump a::after{content:"→";color:var(--amber);opacity:0;transition:opacity .2s var(--ease)}
.jump a:hover{color:var(--white);padding-left:6px}
.jump a:hover::after{opacity:1}

/* feature blocks */
.feature{scroll-margin-top:100px}
.feature + .feature{margin-top:64px;padding-top:64px;border-top:1px solid var(--line)}
.feature__head{display:flex;align-items:baseline;gap:16px;margin-bottom:22px;flex-wrap:wrap}
.feature__num{font-family:var(--display);font-size:12px;font-weight:800;letter-spacing:.16em;color:var(--amber)}
.feature__media{margin:28px 0;overflow:hidden;border-radius:var(--r-lg)}
.feature__media img{width:100%;aspect-ratio:16/9;object-fit:cover;height:auto}

/* ── coating comparison table ──────────────────────────────
   Scrolls inside its own container on narrow screens so the
   page body never scrolls horizontally. */
.ctable-wrap{overflow-x:auto;margin-top:24px;-webkit-overflow-scrolling:touch}
.ctable{width:100%;min-width:640px;border-collapse:collapse;font-size:14px}
.ctable caption{text-align:left;color:var(--muted);font-size:13px;padding-bottom:12px}
.ctable th,.ctable td{
  padding:12px 14px;text-align:left;vertical-align:top;
  border-bottom:1px solid var(--line);line-height:1.6;
}
.ctable thead th{
  color:var(--white);font-family:var(--display);font-size:13px;font-weight:800;
  letter-spacing:.06em;text-transform:uppercase;border-bottom:1px solid var(--line-2);
}
.ctable tbody th{color:var(--body);font-weight:600;white-space:nowrap}
.ctable td{color:var(--body)}
.ctable tbody tr:hover td,.ctable tbody tr:hover th{background:rgba(255,255,255,.02)}
/* ── published price list ─────────────────────────────────────
   A price list is scanned, not read: people look down the right-hand
   column for a number they can afford, then left to see what it buys.
   So it is a two-column row with the price hard-right and tabular
   figures, not a card grid. Deliberately not a <table>: there is one
   value per row, and a table would promise a comparison across columns
   that does not exist here. */
.prices{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.prices__group{margin-top:30px}
.prices__group h3{
  font-family:var(--display);font-size:12px;font-weight:800;
  letter-spacing:.16em;text-transform:uppercase;color:var(--amber);margin-bottom:12px;
}
.prices__row{
  display:flex;align-items:baseline;justify-content:space-between;gap:20px;
  padding:16px 0;border-bottom:1px solid var(--line);
}
.prices__name{display:block;color:var(--white);font-size:16px;font-weight:600}
.prices__incl,.prices__note{display:block;font-size:13px;line-height:1.6;margin-top:4px}
.prices__incl{color:var(--body)}
.prices__note{color:var(--muted)}
.prices__price{
  flex:0 0 auto;font-family:var(--display);font-size:17px;font-weight:800;
  color:var(--white);font-variant-numeric:tabular-nums;
}
@media (max-width:520px){
  /* Stacking keeps the price on its own line rather than letting a long
     service name squeeze it to the point of wrapping mid-figure. */
  .prices__row{flex-direction:column;gap:6px}
  .prices__price{font-size:19px}
}

.ctable .yes{color:var(--amber);font-weight:700}
.ctable .no{color:var(--muted)}
/* The brand links in the header row were 16px tall. This table scrolls
   sideways on a phone, so those are targets you hit with a thumb while the
   thing under it is moving. Padding buys the height; the matching negative
   margin keeps the header row the size it already was. */
.ctable thead th a{display:inline-block;padding-block:5px;margin-block:-5px}

/* ── per-suburb service switcher ──────────────────────────────
   Sits directly under the hero on location pages. Someone landing
   on "Car Detailing Bankstown" who actually wants tinting should
   not have to reach the footer to find it; these links were
   previously 91% of the way down the page.

   Deliberately not a card grid: it is navigation, so it is a row
   of links that wraps. Min-height 44px keeps every target above
   the comfortable touch size on mobile. */
.svc-switch{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  padding:18px 0 4px;
}
.svc-switch__label{
  font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--muted);margin-right:4px;
}
.svc-switch a{
  display:inline-flex;align-items:center;min-height:44px;
  padding:10px 16px;border-radius:999px;
  border:1px solid var(--line-2);background:var(--panel-2);
  font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--body);
  transition:border-color .2s var(--ease),color .2s var(--ease),background .2s var(--ease);
}
.svc-switch a:hover{border-color:var(--amber);color:var(--white)}
.svc-switch a[aria-current="page"]{
  background:var(--amber);border-color:var(--amber);color:var(--on-gold);
}
@media (max-width:680px){
  .svc-switch{gap:8px}
  .svc-switch a{padding:10px 13px;font-size:11px;letter-spacing:.06em}
  .svc-switch__label{width:100%;margin-bottom:2px}
}

/* numbered process steps */
.steps{counter-reset:step;display:flex;flex-direction:column;gap:0}
.step{
  display:grid;grid-template-columns:88px 1fr;gap:28px;
  padding:30px 0;border-bottom:1px solid var(--line);
}
.step:first-child{border-top:1px solid var(--line)}
.step__num{
  font-family:var(--display);font-size:34px;font-weight:800;line-height:1;
  color:var(--amber);opacity:.85;
}
.step h3{margin-bottom:10px}
.step p{font-size:16px;line-height:1.8}
.step p + p{margin-top:12px}

/* comparison table */
.compare{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:8px}
.compare__col{
  padding:30px 28px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px solid var(--line);
}
.compare__col--good{border-color:rgba(240,188,96,.55)}
.compare__col h3{margin-bottom:6px}
.compare__col h3 em{color:var(--amber)}
.compare__col ul{list-style:none;padding:0;margin-top:18px;display:flex;flex-direction:column;gap:12px;font-size:14px;line-height:1.7}
.compare__col li{padding-left:26px;position:relative}
.compare__col li::before{content:"✕";position:absolute;left:0;top:0;color:var(--muted);font-weight:700}
.compare__col--good li::before{content:"✓";color:var(--amber)}

/* testimonials */
.quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.quote{
  padding:30px 28px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px solid var(--line);
  display:flex;flex-direction:column;gap:16px;
}
.quote__mark{font-family:var(--display);font-size:38px;font-weight:800;color:var(--amber);line-height:.7}
.quote p{font-size:14px;line-height:1.75;flex:1}
.quote footer{font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
.quote__stars{color:var(--amber);letter-spacing:3px;font-size:12px}

/* next cards */
.next-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:40px}
.next-card{
  display:flex;flex-direction:column;gap:12px;
  padding:28px 26px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px solid var(--line);
  transition:border-color .25s var(--ease),transform .25s var(--ease);
}
.next-card:hover{border-color:var(--amber);transform:translateY(-3px)}
.next-card p{font-size:14px;line-height:1.7;flex:1}
.next-card .link-arrow{align-self:flex-start;border-color:transparent;padding-bottom:0}

/* contact cards */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.contact-card{
  padding:34px 30px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px solid var(--line);
  display:flex;flex-direction:column;
}
.contact-card h3{margin-bottom:16px}
.contact-card .btn{margin-top:26px;align-self:flex-start}
.hours{margin:20px 0 0;display:flex;flex-direction:column;gap:8px}
.hours div{display:flex;justify-content:space-between;gap:20px;font-size:13px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.hours div:last-child{border-bottom:0}
.hours dt{font-size:10px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--muted);padding-top:2px}
.hours dd{margin:0;color:var(--white)}
.map{margin-top:22px;border-radius:var(--r);overflow:hidden;border:1px solid var(--line)}
.map img{width:100%;aspect-ratio:16/9;object-fit:cover;height:auto}

/* ── responsive ───────────────────────────────────────────── */
@media (max-width:1180px){
  .cards,.cases__row{grid-template-columns:repeat(2,1fr)}
  .quotes,.next-grid{grid-template-columns:1fr}
  .footer__grid{grid-template-columns:1fr 1fr 1fr}
  .footer__brand{grid-column:1 / -1}
}
@media (max-width:980px){
  .nav{display:none}
  .nav.is-open{display:flex;flex-basis:100%;flex-direction:column;align-items:stretch;
    gap:2px;padding-bottom:18px}
  .nav.is-open .nav__item{position:static}
  .nav.is-open .nav__top{padding:12px 0;justify-content:space-between}
  .nav.is-open .nav__top::after{display:none}
  .nav.is-open .nav__chev{display:none}
  /* menus stay open on mobile: a nested accordion inside a burger menu is a
     worse experience than a slightly longer scroll */
  .nav.is-open .nav__menu{
    position:static;opacity:1;visibility:visible;transform:none;
    min-width:0;margin:0 0 10px;padding:4px 0 4px 14px;
    background:none;border:0;border-left:1px solid var(--line-2);
    border-radius:0;box-shadow:none;
  }
  .nav.is-open .nav__menu::before{display:none}
  .nav.is-open .nav__menu a{padding:9px 0}
  .burger{display:block;flex-shrink:0}
  .header-actions{display:none}
  /* flex-wrap is what makes .nav.is-open{flex-basis:100%} mean "own row".
     Without it the open menu stayed on the brand/burger line and was pushed
     off the right edge: 23 of 24 links were outside the viewport at 375px and
     the page picked up horizontal scroll. It also squeezed the burger itself
     from 44px down to 22px, so the control you needed to close the menu was
     the hardest thing on screen to hit. */
  .site-header__inner{gap:14px;justify-content:space-between;flex-wrap:wrap}
  .brand{margin-right:auto}
  .story__grid,.enquire__grid,.why__grid,.comfort__grid,.split,.compare,.contact-grid{grid-template-columns:1fr;gap:40px}
  .why__intro,.split__rail{position:static}
  .story__media,.comfort__media{order:-1}
  .side-tab{display:none}
  .hero{min-height:620px}
  .hero__content{padding-bottom:118px}
  .page-hero{min-height:360px}
  .page-hero__content{padding-bottom:88px}
}
@media (max-width:680px){
  :root{--gutter:18px;--r-lg:16px;--r-xl:24px}
  .announce__inner{flex-direction:column;gap:8px}
  .cards,.cases__row,.form__row,.stats__grid{grid-template-columns:1fr}
  .stat + .stat{padding-left:0;border-left:0;border-top:1px solid var(--line)}
  .stat{padding-block:24px}
  .footer__grid{grid-template-columns:1fr}
  .newsletter__form{width:100%}
  .newsletter__form input{min-width:0;flex:1}
  .story,.treatments,.enquire,.why,.cases,.gallery,.comfort,.section{padding-block:56px}
  .sheet{margin-inline:10px}
  .sheet > .banner,.sheet > .newsletter{margin-inline:10px}
  .ba-track{grid-auto-columns:minmax(80vw,1fr)}
  .step{grid-template-columns:1fr;gap:12px}
  .step__num{font-size:26px}
  .feature + .feature{margin-top:44px;padding-top:44px}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}
  html{scroll-behavior:auto}
  .reveal{opacity:1;transform:none}
}


/* ── proposal placeholders ────────────────────────────────── */
.tbc{color:var(--amber)!important;font-weight:600}
.footer__note{margin-top:10px;font-size:12px;color:var(--muted);line-height:1.6}

/* ── form validation ──────────────────────────────────────── */
.field.has-error input,
.field.has-error select,
.field.has-error textarea{
  border-color:var(--danger);
  box-shadow:0 0 0 3px rgba(229,72,77,.18);
}
.field__error{
  display:block;margin-top:2px;
  font-size:12px;font-weight:500;letter-spacing:.01em;text-transform:none;
  color:var(--danger-ink);line-height:1.5;
}
.field.has-error > span{color:var(--danger-ink)}

/* ── partner / product badges ─────────────────────────────── */
.partners{
  display:flex;flex-wrap:wrap;gap:12px;align-items:stretch;
}
.partner{
  display:flex;flex-direction:column;gap:5px;
  padding:16px 20px;min-width:160px;flex:1 1 160px;
  border:1px solid var(--line-2);border-radius:var(--r);
  background:var(--panel-2);
  transition:border-color .25s var(--ease),transform .25s var(--ease);
}
.partner:hover{border-color:var(--amber);transform:translateY(-2px)}
/* real supplier marks — normalised to a common optical height */
/* aspect ratios differ hugely between these marks, so they're sized
   optically rather than to one shared height */
.partner__logo{
  width:auto;height:auto;
  max-height:30px;max-width:128px;object-fit:contain;
  opacity:.92;transition:opacity .25s var(--ease);
}
.partner__logo--sq{max-height:46px;max-width:52px}     /* Ethos — near-square */
.partner__logo--wide{max-height:20px;max-width:142px}  /* Rayno — long wordmark */
.partner__logo--stack{max-height:58px;max-width:58px}  /* Magnum — shield over a two-line wordmark */
.partner:hover .partner__logo{opacity:1}
.partner__role{
  font-size:9.5px;font-weight:700;letter-spacing:.18em;
  text-transform:uppercase;color:var(--amber);
}
.partners--compact .partner{
  flex-direction:row;align-items:center;gap:10px;
  padding:11px 16px;min-width:0;flex:0 0 auto;
}
.partners--compact .partner__role{display:none}

/* ── product blocks ───────────────────────────────────────── */
.product{
  padding:30px 28px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px solid var(--line);
  scroll-margin-top:100px;
}
.product + .product{margin-top:20px}
.product__head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:6px}
.product__tag{
  font-size:9.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;
  color:var(--amber);white-space:nowrap;
}
.product h3{margin-bottom:12px}
/* The link IS the whole heading here, so the WCAG 2.5.8 inline-in-a-sentence
   exception does not cover it, and at 20px it was under the 24px minimum.
   Padded to 30px, pulled back by the same amount so the card spacing is
   unchanged. */
.product h3 a{display:inline-block;padding-block:5px;margin-block:-5px}
.product p{font-size:16px;line-height:1.75}
.product p + p{margin-top:12px}
.product .chips{margin-top:18px}

/* ── payment methods ──────────────────────────────────────── */
/* Uniform card-sized tiles. The source logos have wildly different aspect
   ratios (Visa 3:1, Afterpay 5:1, Amex 1:1), so each is contained inside a
   fixed tile rather than matched on height — which is how acceptance marks
   are normally set. Explicit width/height keep it CLS-free. */
.pay{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:16px}
.pay img{
  width:54px;height:34px;display:block;
  object-fit:contain;padding:5px 7px;border-radius:5px;
  background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.4);
}
.pay img[alt="American Express"]{padding:0}
/* Afterpay is a 5.4:1 wordmark, not a card mark. In a card-shaped tile
   `contain` renders it under 8px tall and it reads as an empty chip, so it
   gets a wider tile — its artwork then draws at the same optical height as
   the Visa wordmark next to it. Black-on-mint is their own brand guideline. */
.pay img[alt="Afterpay"]{width:92px;background:#B2FCE4;padding-inline:10px}

/* ── partner cards as outbound links ──────────────────────── */
a.partner{position:relative;text-decoration:none}
a.partner:hover{border-color:var(--amber)}
.partner__ext{
  position:absolute;top:10px;right:12px;
  font-size:12px;line-height:1;color:var(--muted);
  transition:color .25s var(--ease),transform .25s var(--ease);
}
a.partner:hover .partner__ext{color:var(--amber);transform:translate(1px,-1px)}

/* ── Google reviews ───────────────────────────────────────── */
.reviews{padding-block:92px;border-top:1px solid var(--line)}
.reviews__head{
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:32px;flex-wrap:wrap;margin-bottom:38px;
}
.reviews__score{display:flex;align-items:center;gap:18px}
.reviews__num{
  font-family:var(--display);font-size:clamp(44px,5vw,66px);font-weight:800;
  line-height:1;color:var(--white);
}
.reviews__num em{color:var(--amber)}
.reviews__meta{display:flex;flex-direction:column;gap:5px}
.reviews__stars{color:var(--amber);letter-spacing:3px;font-size:15px}
.reviews__count{font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}

.reviews__track{
  display:grid;grid-auto-flow:column;grid-auto-columns:minmax(330px,1fr);gap:20px;
  overflow-x:auto;scroll-snap-type:x mandatory;
  padding-bottom:16px;margin-inline:calc(var(--gutter) * -1);padding-inline:var(--gutter);
  scrollbar-width:thin;scrollbar-color:var(--panel-3) transparent;
}
.review{
  scroll-snap-align:start;
  padding:26px 24px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px solid var(--line);
  display:flex;flex-direction:column;gap:14px;
}
.review__top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.review__stars{color:var(--amber);letter-spacing:2px;font-size:13px}
.review__when{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.review__body{font-size:16px;line-height:1.7;flex:1}
.review__who{
  display:flex;align-items:center;gap:11px;
  padding-top:14px;border-top:1px solid var(--line);
}
.review__avatar{
  width:34px;height:34px;border-radius:50%;flex:none;
  display:grid;place-items:center;
  background:var(--panel-3);color:var(--amber);
  font-size:13px;font-weight:700;
}
.review__name{font-size:14px;font-weight:600;color:var(--white)}

.reviews__empty{
  padding:34px 30px;border-radius:var(--r-lg);
  background:var(--panel-2);border:1px dashed var(--line-2);
  max-width:70ch;
}
.reviews__empty p{font-size:16px;line-height:1.75}
.reviews__empty p + p{margin-top:12px}
.reviews__empty .btn{margin-top:22px}

@media (max-width:680px){
  .reviews{padding-block:56px}
  .reviews__track{grid-auto-columns:minmax(80vw,1fr)}
}

/* ── service area list ────────────────────────────────────── */
.area-list{
  list-style:none;padding:0;margin:0 0 26px;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:2px 20px;
}
.area-list li{
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  padding:9px 0;border-bottom:1px solid var(--line);
}
.area-list a{color:var(--white);font-size:15px;transition:color .2s var(--ease)}
.area-list a:hover{color:var(--amber)}
.area-list span{font-size:11px;letter-spacing:.08em;color:var(--muted);white-space:nowrap}

/* narrow sticky rail: long single words (e.g. "STRAIGHTFORWARD") must not
   escape the column at large clamp sizes */
.split__rail h2{text-wrap:balance;overflow-wrap:break-word;hyphens:auto}

/* ---------- live Google reviews ----------
   Five is the Places API's hard cap, so the layout is built for five
   rather than pretending to be a carousel of hundreds. */
.cadrev {
  display: grid; gap: 18px; margin-top: 28px;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.cadrev__card {
  margin: 0; padding: 22px;
  background: rgba(255,255,255,.04);
  border: 1px solid rgba(255,255,255,.10);
  border-radius: 16px;
  display: flex; flex-direction: column; gap: 12px;
}
.cadrev__stars { color: #e8b64c; letter-spacing: 2px; font-size: 14px; }
.cadrev__text {
  margin: 0; font-size: 15px; line-height: 1.55;
  /* reviews run long; clamp so the grid stays even and the card stays readable */
  display: -webkit-box; -webkit-line-clamp: 7; -webkit-box-orient: vertical;
  overflow: hidden;
}
.cadrev__by { display: flex; align-items: center; gap: 10px; margin-top: auto; font-size: 13px; }
.cadrev__avatar { border-radius: 50%; flex: none; }
.cadrev__name { font-weight: 600; }
.cadrev__when { opacity: .78; }  /* .6 gave 3.49:1 on the card; .74 is the WCAG AA floor here */
@media (max-width: 640px) {
  /* Scroller, not a stack. Four cards stacked ran to ~1200px on a phone,
     which pushed everything after the reviews off the bottom of the page.
     Same mechanics as .ba-track so the gesture is consistent sitewide. */
  .cadrev {
    grid-template-columns: none;
    grid-auto-flow: column;
    grid-auto-columns: minmax(255px, 80vw);
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    overscroll-behavior-x: contain;
    padding-bottom: 14px;
    /* bleed to the screen edge so the next card is visibly clipped - that
       is the only affordance telling you there is more to the side */
    margin-inline: calc(var(--gutter) * -1);
    padding-inline: var(--gutter);
    scrollbar-width: thin;
    scrollbar-color: var(--panel-3) transparent;
  }
  .cadrev__card { scroll-snap-align: start; }
}

/* ---------------------------------------------------------------
   Spacing corrections
   --------------------------------------------------------------- */

/* Every other intro block gets its heading-to-paragraph gap from a rule
   scoped to that block (.why__intro p, .story__copy p, .split__rail p all
   set margin-top:20px). .section--tight never had one, so its heading sat
   flush against the paragraph while the rest of the page ran at 20px. */
.section--tight h2 + p { margin-top: 20px; }

/* Every prose block on this site is measured - .prose 66ch, .story__copy p
   52ch, .finance p 56ch, .why__intro p 38ch. This section had no measure at
   all and ran 144 characters per line. 66ch matches the general .prose rule. */
.section--tight .container > p,
.section--tight .container > ul:not(.prices) { max-width: 66ch; }

/* .prices is excluded above on purpose: a measure cap is right for prose,
   but the price menu needs the full container so the figures sit on the
   right-hand edge. Capped at 66ch it stopped 560px short and the whole
   list hugged the left. */
.section--tight .container > ul.prices { max-width: none; }

/* Full-bleed band. With no margin it butted straight into the rounded card
   above and the section below, so the amber read as part of both. */
.marquee { margin-block: 48px; }

/* The summary panel sits directly after the cards at every width, so this
   gap belongs outside the mobile query - it was scoped to mobile first and
   left the desktop grid butting straight into the panel. */
.cadrev { margin-bottom: 34px; }

@media (max-width: 640px) {
  /* the scroller's 14px padding-bottom leaves room for the scrollbar, not
     for the summary panel that follows it */
  .cadrev { margin-bottom: 26px; }
  .marquee { margin-block: 32px; }
}

/* ---------------------------------------------------------------
   Button hit area
   The theme's .btn rules land on the WordPress wrapper <div>, which
   carries the background, radius and padding. The <a> inside keeps its
   default size, so the visible pill was 249x74 while only the inner
   187x36 responded to a tap - the outer ~30px of every button did
   nothing. The stretched pseudo-element hands the whole wrapper to the
   anchor without touching a single layout value, so every variant
   (.btn--lg, .btn--primary, .btn--outline) keeps its exact appearance.
   --------------------------------------------------------------- */
.wp-block-button.btn { position: relative; }
.wp-block-button.btn > .wp-block-button__link::after {
  content: "";
  position: absolute;
  inset: 0;
  /* deliberately NOT inherit: that pulls the anchor's 9999px pill radius,
     which curves the hit area away from the wrapper's 12px corners and
     leaves them dead. A square hit area covers the visible shape. */
  border-radius: 0;
}

/* ---------------------------------------------------------------
   Nav density
   The primary nav gained a top-level item (Dash Cams). Between the
   burger breakpoint (980px) and roughly 1400px the row no longer
   clears the logo and the call/book buttons on 24px gaps - it
   overflowed by 73px at 1280. Tighten the gap over that band only;
   above it the original 24px still fits.
   --------------------------------------------------------------- */
@media (min-width: 981px) and (max-width: 1400px) {
  .nav { gap: 13px; }
}

/* ---------------------------------------------------------------
   Fluent Forms controls
   Fluent ships its own control styling at 13.3px. Under 16px, iOS
   Safari zooms the page when a field takes focus - and this is the
   contact form, the main conversion path. The theme's own .field
   input rule already sets 16px for this reason; Fluent's class
   names simply never matched it.
   --------------------------------------------------------------- */
.fluentform .ff-el-form-control { font-size: 16px; }

/* ---------------------------------------------------------------
   'Where to next' cards
   The link sits on the heading so the anchor text Google reads is
   the destination's name, not the whole card concatenated. The
   stretched pseudo-element gives the click target back to the
   entire card.
   --------------------------------------------------------------- */
.next-card { position: relative; }
.next-card h3 a {
  color: inherit;
  text-decoration: none;
}
.next-card h3 a::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
}
.next-card:hover h3 a { color: var(--amber); }

/* The description and arrow sit after the heading in the DOM, so without a
   z-index they paint over the stretched link and swallow the click. */
.next-card h3 a::after { z-index: 1; }

/* ---------------------------------------------------------------
   Header on the narrowest phones
   Below ~335px (iPhone SE, small Androids) the brand (241px) plus the
   burger (44px) and the 14px gap need 299px, but the header offers only
   284px inside its 18px padding. The burger wrapped onto a second row,
   orphaned bottom-left, and the header grew from 73px to 131px.
   Two points off the brand name brings the brand to 214px and the row
   fits with 12px to spare. 340px and up is untouched.
   --------------------------------------------------------------- */
@media (max-width: 339px) {
  .brand__name { font-size: 12px; }
}

/* ---------------------------------------------------------------
   Header buttons in the tight inline-nav band
   From 981px (where the nav goes inline) to about 1090px the two
   header buttons - the phone number and Book Online - need 314px side
   by side but get only 271px after the nav, so they stacked vertically
   and the header grew from 79px to 122px. The brand name is already
   hidden in this band to make room; tightening the buttons is the half
   that was missing. Both keep their full text. 1100px and up is
   untouched.
   --------------------------------------------------------------- */
@media (min-width: 981px) and (max-width: 1099px) {
  .header-actions .btn {
    padding: 12px 14px;
    font-size: 11px;
    letter-spacing: .08em;
  }
}

/* ---------------------------------------------------------------
   Call button on mobile
   .header-actions was hidden below 980px and the burger menu carries
   no phone number, so on a phone there was no persistent way to call -
   the first call button sat in the hero and then nothing until 10,000px
   down. For a business whose main conversion is a phone call that is
   the wrong thing to hide.
   Bring the call button back and drop the wordmark to pay for it: the
   same trade the 981-1272px band already makes, and the name is still
   in the title, the H1 and the footer. Book Online stays hidden - it
   duplicates Contact, which is in the menu.
   Measured: header 73px -> 77px at both 320 and 375. No overflow.
   --------------------------------------------------------------- */
@media (max-width: 980px) {
  .header-actions { display: flex; }
  .header-actions .btn--primary { display: none; }
  .brand__name { display: none; }
}

/* ---------------------------------------------------------------
   Required-field marker
   Fluent Forms tags required labels with .ff-el-is-required but ships
   no visual for it, so email, phone and service all looked optional
   until a submit failed. Now that a phone number is mandatory that
   guesswork costs enquiries.
   --------------------------------------------------------------- */
.fluentform .ff-el-is-required > label::after {
  content: " *";
  color: var(--amber);
  font-weight: 700;
}
