/* ==========================================================================
   Milton Dumpster Rental Group — styles.css
   Theme: "Blackwater" — BLACKWATER #231A15 ink + LOGO RED #A3111C CTA +
          deep red #7E0D16 secondary, with the logo's YELLOW #FACE01 on dark
          fields, over PALE SAND paper #F7F2E6
   Type:  Outfit (display, geometric sans) + Source Serif 4 (BODY SERIF)
   Motif: PILING divider + DIFFERENTIAL radius (16px cards, SQUARE buttons) +
          a CHIP eyebrow
   NOTE:  *** `--red` HOLDS A RED AGAIN HERE. *** Last build it held a GREEN.
          Read the values, never the token names.
   NOTE:  on DARK fields the CTA INVERTS to a YELLOW fill with an ink label.
          That is a WCAG 1.4.11 fix, not decoration — red is only 2.16:1
          against the blackwater hero. Yellow measures 11.30:1.
   NOTE:  *** THE HEADER IS DARK BECAUSE THE ARTWORK REQUIRES IT. *** The mark
          is a YELLOW container: 11.30:1 here, 1.04:1 on the mid-tone sand
          header that was the first choice. Do not lighten this header.
   NOTE:  the header logo is the MARK ONLY, cut out of a stacked wordmark. The
          business name is live HTML text beside it. Do not swap in the full
          lockup or the name will appear twice.
   NOTE:  the nav is SCOPED because the header is dark — the drawer is a light
          panel. Do not merge those media blocks.
   NOTE:  this banner is a COMMENT, so no colour or place sweep will ever
          update it. Rewrite it by hand on every clone.
   ========================================================================== */

:root{
  /* brand — repoint these three to recolour the whole site */
  --ink:#231A15;          /* BLACKWATER — the tannin-dark river ink */
  --red:#A3111C;          /* brand primary / CTA */
  --teal:#7E0D16;         /* DEEP RED — structural marks on light fields */

  --ink-2:#3A2A20;
  --ink-3:#7E0D16;
  --red-dk:#7E0D16;
  --red-lt:#F7E2E3;
  --teal-dk:#5E0A11;
  --teal-lt:#F6E6E7;
  --steel:#8F8F8F;

  --tx:#241C17;
  --tx-2:#6B6158;
  --tx-3:#9C948A;
  --line:#DFD6C0;
  --line-2:#EBE4D3;
  --bg:#F7F2E6;           /* PALE SAND paper — MUST match the divider tile fill */
  --bg-2:#EFE8D6;
  --bg-3:#DCD2BA;
  --paper:#FFFFFF;

  --ff-d:'Outfit',ui-sans-serif,system-ui,-apple-system,'Segoe UI',Roboto,Arial,sans-serif;
  --ff-t:'Source Serif 4',ui-serif,Georgia,Cambria,'Times New Roman',Times,serif;

  --r:16px;            /* CARD radius only — buttons are SQUARE (0). Differential, inverted. */
  --r-s:10px;          /* button radius */
  --wrap:1180px;
  --sh:0 1px 2px rgba(35,26,21,.05),0 10px 26px -16px rgba(35,26,21,.20);
  --sh-lg:0 2px 5px rgba(35,26,21,.07),0 26px 50px -22px rgba(35,26,21,.30);
  --hdr-h:66px;
}

/* ------------------------------------------------------------------ base */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;overflow-x:clip}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}
}
body{margin:0;font-family:var(--ff-t);font-size:17px;line-height:1.68;color:var(--tx);
  background:var(--bg);-webkit-font-smoothing:antialiased;overflow-x:clip}
img,svg,iframe,video{max-width:100%}
img{height:auto;display:block}
h1,h2,h3,h4{font-family:var(--ff-d);color:var(--ink);margin:0 0 .5em;
  letter-spacing:-.028em;line-height:1.12;font-weight:700;overflow-wrap:break-word}
h1{font-size:clamp(2rem,1.3rem + 2.75vw,3.35rem);font-weight:800;letter-spacing:-.038em}
h2{font-size:clamp(1.58rem,1.16rem + 1.6vw,2.3rem);font-weight:750;letter-spacing:-.032em}
h3{font-size:clamp(1.12rem,1.02rem + .4vw,1.3rem);font-weight:700}
h4{font-size:1.02rem;font-weight:700}
p{margin:0 0 1.15em}
a{color:var(--red);text-decoration-color:rgba(126,13,22,.30);text-underline-offset:3px}
a:hover{color:var(--red-dk)}
ul,ol{padding-left:1.15em}
li{margin:.34em 0}
strong,b{font-weight:700;color:var(--ink)}
:focus-visible{outline:3px solid var(--teal);outline-offset:2px;border-radius:2px}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--red);color:#fff;
  padding:.7rem 1.1rem;font-weight:700}
.skip:focus{left:0}
.wrap{width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:20px}
.wrap-narrow{max-width:820px}
.ic{width:20px;height:20px;flex:none}
.arw{display:inline-block;transition:transform .18s ease;margin-left:.35em}
a:hover .arw,.btn:hover .arw{transform:translateX(4px)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* --------------------------------------------------------------- eyebrow */
/* signature: leading diamond rather than a rule */
.eyebrow{font-family:var(--ff-d);font-size:.72rem;font-weight:800;letter-spacing:.19em;
  text-transform:uppercase;color:var(--tx-3);margin:0 0 .8rem;display:flex;
  align-items:center;gap:.55rem}
.eyebrow::before{content:"";width:8px;height:8px;background:currentColor;flex:none;
  transform:rotate(45deg)}
.eyebrow-amber{color:var(--teal-dk)}
.hero .eyebrow-amber,.sec-dark .eyebrow-amber{color:#A3111C}
.lede{font-size:1.08rem;color:var(--tx-2);max-width:66ch}

/* --------------------------------------------------------------- buttons */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.55rem;
  font-family:var(--ff-d);font-weight:750;font-size:.85rem;letter-spacing:.06em;
  text-transform:uppercase;padding:.86rem 1.4rem;border-radius:var(--r-s);
  border:2px solid transparent;text-decoration:none;cursor:pointer;
  transition:background .18s,color .18s,border-color .18s,transform .12s,box-shadow .18s;
  line-height:1.2;text-align:center}
.btn:active{transform:translateY(1px)}
.btn-ic{width:18px;height:18px}
.btn-lg{padding:1.02rem 1.7rem;font-size:.92rem}
.btn-sm{padding:.64rem 1rem;font-size:.775rem}
.btn-red{background:var(--red);color:#fff;box-shadow:0 6px 16px -8px rgba(126,13,22,.85)}
.btn-red:hover{background:var(--red-dk);color:#fff}
.btn-amber{background:var(--teal);color:#fff;box-shadow:0 6px 16px -8px rgba(250,206,1,.85)}
.btn-amber:hover{background:var(--teal-dk);color:#fff}
.btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.4)}
.btn-ghost:hover{background:rgba(255,255,255,.1);color:#fff;border-color:#fff}
.btn-line{background:transparent;color:var(--ink);border-color:var(--ink)}
.btn-line:hover{background:var(--ink);color:#fff}
.btn-dark{background:var(--ink);color:#fff}
.btn-dark:hover{background:var(--ink-2);color:#fff}

/* ---------------------------------------------------------------- header */
/* dark header with a red underscore rule */
.hdr{position:sticky;top:0;z-index:60;background:var(--bg);
  border-bottom:1px solid var(--line)}
.hdr-top{background:#0F1920;color:#93A4AD;font-size:.78rem;
  border-bottom:1px solid rgba(255,255,255,.07)}
.hdr-top-in{display:flex;gap:1.7rem;align-items:center;justify-content:center;
  min-height:34px;flex-wrap:wrap}
.ht-item{display:inline-flex;align-items:center;gap:.42rem;font-weight:500}
.ht-ic{width:15px;height:15px;color:#A3111C}
.hdr-in{display:flex;align-items:center;gap:1rem;min-height:var(--hdr-h)}
.brand{display:flex;align-items:center;text-decoration:none;flex:none;min-width:0}
/* Stacked lockup (1.356:1) with a two-line wordmark - needs more height
   than the square badges of the previous builds, or the subline is
   illegible. Revert to ~44px if a future clone uses a round badge. */
.brand img{height:58px;width:auto;object-fit:contain}
.brand-tx{display:none}          /* the lockup already contains the name */
.nav{margin-left:auto;display:flex;align-items:center;gap:1rem;min-width:0}
.nav-l{display:flex;align-items:center;gap:.1rem;list-style:none;margin:0;padding:0}
.nav-l>li{margin:0;position:relative}
.nav-l>li>a{display:block;padding:.55rem .66rem;font-family:var(--ff-d);font-weight:650;
  font-size:.855rem;color:#D4DCE1;text-decoration:none}
.nav-l>li>a:hover{color:#fff}
.nav-l>li>a[aria-current="page"]{color:#fff}
.nav-l>li>a[aria-current="page"]::after{content:"";display:block;height:3px;
  background:var(--red);margin-top:4px}
.has-sub>.sub-t::after{content:"";display:inline-block;width:6px;height:6px;
  border-right:2px solid currentColor;border-bottom:2px solid currentColor;
  transform:rotate(45deg) translateY(-2px);margin-left:.45rem;opacity:.65}
.sub-b{display:none}
.sub{position:absolute;top:calc(100% + 8px);left:0;min-width:270px;background:var(--paper);
  border:1px solid var(--line);border-top:3px solid var(--red);box-shadow:var(--sh-lg);
  list-style:none;margin:0;padding:.45rem;opacity:0;visibility:hidden;
  transform:translateY(-6px);transition:opacity .16s,transform .16s,visibility .16s;z-index:70}
.sub::before{content:"";position:absolute;top:-11px;left:0;right:0;height:11px}
.has-sub:hover>.sub,.has-sub:focus-within>.sub{opacity:1;visibility:visible;transform:none}
.sub li{margin:0}
.sub a{display:block;padding:.52rem .7rem;font-size:.875rem;font-weight:550;color:var(--ink-2);
  text-decoration:none}
.sub a:hover{background:var(--bg-2);color:var(--red)}
.sub-wide{display:grid;grid-template-columns:1fr 1fr;min-width:490px;gap:0 .2rem}
.sub-right{left:auto;right:0}
.sub-all{grid-column:1/-1;border-top:1px solid var(--line-2);margin-top:.3rem;padding-top:.3rem}
.sub-all a{color:var(--red);font-weight:750}
.nav-cta{display:none}
.hdr-act{display:flex;align-items:center;gap:.6rem;flex:none}
.hdr-call{display:inline-flex;align-items:center;gap:.45rem;background:var(--red);color:#fff;
  font-family:var(--ff-d);font-weight:750;font-size:.87rem;padding:.66rem 1.05rem;
  border-radius:var(--r-s);text-decoration:none;white-space:nowrap;letter-spacing:.02em}
.hdr-call:hover{background:var(--red-dk);color:#fff}
.burger{display:none;width:44px;height:44px;border:1px solid rgba(255,255,255,.28);
  background:transparent;border-radius:var(--r-s);cursor:pointer;padding:0;
  flex-direction:column;gap:5px;justify-content:center;align-items:center}
.burger span{display:block;width:20px;height:2px;background:#fff;transition:transform .2s,opacity .2s}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.scrim{position:fixed;inset:0;background:rgba(12,20,25,.55);z-index:58;border:0}

/* ------------------------------------------------------------------ hero */
.hero{position:relative;background:var(--ink);color:#DCE3E7;
  padding:clamp(2.6rem,1.4rem + 4vw,4.4rem) 0 clamp(3rem,2rem + 4vw,4.8rem);
  overflow:hidden;isolation:isolate}
.hero::before{content:"";position:absolute;inset:0;z-index:-1;
  background:radial-gradient(720px 400px at 78% 12%,rgba(250,206,1,.08),transparent 62%),
    radial-gradient(600px 420px at 2% 92%,rgba(250,206,1,.08),transparent 64%),
    linear-gradient(165deg,#A3111C 0%,#231A15 60%,#150F0C 100%)}
/* signature: fine diagonal hatch on dark panels */
.hero::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;
  background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.032) 0 1px,transparent 1px 9px)}
.hero-in{display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,.96fr);
  gap:clamp(1.8rem,1rem + 3vw,3.4rem);align-items:center}
.hero-tx{min-width:0}
.hero h1{color:#fff}
.hero h1 em{font-style:normal;color:#A3111C}
.hero-lede{font-size:clamp(1.02rem,.98rem + .3vw,1.16rem);color:#B4C2C9;max-width:52ch}
.hero-ul{list-style:none;padding:0;margin:1.4rem 0 1.7rem;display:grid;gap:.55rem}
.hero-ul li{display:flex;gap:.6rem;align-items:flex-start;font-size:.955rem;
  color:#CFD9DE;font-weight:500;margin:0}
.hero-ul .ic{color:#A3111C;width:19px;height:19px;margin-top:3px}
.hero-act{display:flex;flex-wrap:wrap;gap:.7rem;margin-bottom:1.1rem}
.hero-fine{display:flex;align-items:center;gap:.45rem;font-size:.84rem;color:#8B9BA4;margin:0}
.hero-fine .ic{width:16px;height:16px;color:#A3111C}
.hero-md{position:relative;min-width:0}
/* hard-edged frame with a thick red top rule — no offset outline */
.hero-frame{position:relative;border-top:6px solid var(--red);background:#231A15;
  box-shadow:0 26px 56px -26px rgba(0,0,0,.85)}
.hero-frame img{width:100%;aspect-ratio:3/2;object-fit:cover;display:block}
.hero-badge{position:absolute;left:0;bottom:-26px;z-index:2;background:var(--red);
  color:#fff;padding:.72rem 1.05rem;max-width:250px;display:flex;align-items:baseline;gap:.55rem}
.hero-badge b{font-family:var(--ff-d);font-size:1.3rem;font-weight:800;line-height:1;
  letter-spacing:-.03em}
.hero-badge span{font-size:.74rem;font-weight:600;line-height:1.25;opacity:.95}
.hero-cut{display:none}

/* -------------------------------------------------------- sub-page hero  */
.crumbs{background:var(--bg-2);border-bottom:1px solid var(--line);font-size:.82rem}
.crumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:.4rem;margin:0;padding:.6rem 0}
.crumbs li{margin:0;display:flex;align-items:center;gap:.4rem;color:var(--tx-3);min-width:0}
.crumbs li+li::before{content:"/";color:var(--line);font-weight:600}
.crumbs a{color:var(--tx-2);text-decoration:none;font-weight:600}
.crumbs a:hover{color:var(--red)}
.crumbs span{color:var(--ink);font-weight:700;overflow:hidden;text-overflow:ellipsis}
.phero{padding:clamp(1.8rem,1.2rem + 2vw,2.9rem) 0 0;background:var(--bg)}
/* signature: left vertical red rule on sub-page headings */
.phero h1{max-width:20ch;border-left:5px solid var(--red);padding-left:1.1rem}
.phero-lede{font-size:clamp(1.02rem,.98rem + .25vw,1.13rem);color:var(--tx-2);max-width:68ch}
.phero-act{display:flex;flex-wrap:wrap;gap:.65rem;margin:1.3rem 0 1.9rem}
.phero-md{border-top:5px solid var(--red);position:relative;background:var(--ink)}
.phero-md img{width:100%;max-height:340px;object-fit:cover;display:block}
@media (min-width:900px){.phero-md img{max-height:380px}}

/* ------------------------------------------------------------- trust bar */
/* light bone strip with thin vertical dividers and teal icons */
.tbar{background:var(--bg-2);color:var(--ink-2);border-bottom:1px solid var(--line)}
.tbar-in{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.4rem 1rem;
  padding-block:1rem}
.tbar-i{display:inline-flex;align-items:center;gap:.5rem;font-family:var(--ff-d);
  font-size:.84rem;font-weight:700;position:relative;padding-right:1.1rem;min-width:0}
.tbar-i .ic{width:19px;height:19px;color:var(--teal)}
.tbar-i:not(:last-child)::after{content:"";position:absolute;right:0;top:50%;
  transform:translateY(-50%);width:1px;height:22px;background:var(--line)}

/* -------------------------------------------------------------- sections */
.sec{padding:clamp(2.6rem,1.8rem + 3vw,4.4rem) 0}
.sec-alt{background:var(--bg-2)}
.sec-dark{background:var(--ink);color:#DCD2BA;position:relative;isolation:isolate}
.sec-dark::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;
  background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.03) 0 1px,transparent 1px 9px)}
.sec-dark h2,.sec-dark h3{color:#fff}
.sec-dark .lede{color:#D6CBB2}
.sec>.wrap>h2{max-width:24ch}
.sec-head{display:flex;justify-content:space-between;align-items:flex-end;gap:1.5rem;
  flex-wrap:wrap;margin-bottom:1.9rem}
.sec-head>div{min-width:0;flex:1 1 420px}
.sec-head h2{margin-bottom:.35em}
.prose>h2{margin-top:2.1em}
.prose>h2:first-child{margin-top:0}
.prose>h3{margin-top:1.7em}
.prose ul,.prose ol{margin:0 0 1.15em}
.prose li{margin:.42em 0}

/* ----------------------------------------------------------------- cards */
/* top accent rule, hard corners */
.grid{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(min(100%,272px),1fr))}
.grid-2{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr))}
.grid-4{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr))}
.card{position:relative;background:var(--paper);border:1px solid var(--line);
  border-top:3px solid var(--ink);border-radius:var(--r);
  padding:1.4rem 1.35rem;min-width:0;transition:box-shadow .2s,transform .2s,border-top-color .2s}
.card:hover{box-shadow:var(--sh);transform:translateY(-2px);border-top-color:var(--red)}
.card h3{margin:0 0 .4em}
.card h3 a{color:var(--ink);text-decoration:none}
.card h3 a::after{content:"";position:absolute;inset:0}
.card:hover h3 a{color:var(--red)}
.card p{margin:0;font-size:.94rem;color:var(--tx-2)}
.card-ic{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;
  background:var(--teal-lt);color:var(--teal-dk);margin-bottom:.9rem;border-radius:var(--r)}
.card-ic .ic{width:21px;height:21px}
.card-n{font-family:var(--ff-d);font-size:1.05rem;font-weight:800;line-height:1;
  color:#fff;background:var(--red);display:inline-flex;width:34px;height:34px;
  align-items:center;justify-content:center;margin-bottom:.75rem;border-radius:var(--r)}
.card-more{display:inline-block;margin-top:.9rem;font-family:var(--ff-d);font-size:.78rem;
  font-weight:800;color:var(--red);text-transform:uppercase;letter-spacing:.07em}
.sec-alt .card{background:var(--paper)}
.sec-dark .card{background:var(--ink-2);border-color:#A3111C;border-top-color:var(--teal)}
.sec-dark .card p{color:#D6CBB2}
.sec-dark .card-ic{background:rgba(126,13,22,.15);color:#A3111C}

/* ----------------------------------------------------------------- steps */
/* filled circular numerals joined by a connector line */
.steps{list-style:none;padding:0;margin:0;display:grid;gap:1.3rem;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}
.steps li{margin:0;min-width:0;position:relative;padding-top:3.2rem}
.steps li::before{content:"";position:absolute;top:22px;left:0;right:0;height:2px;
  background:var(--line)}
.steps li:last-child::before{right:50%}
.stp-n{position:absolute;top:0;left:0;width:44px;height:44px;border-radius:50%;
  background:var(--red);color:#fff;font-family:var(--ff-d);font-size:1.05rem;font-weight:800;
  display:flex;align-items:center;justify-content:center;z-index:1;
  box-shadow:0 0 0 6px var(--bg)}
.sec-alt .stp-n{box-shadow:0 0 0 6px var(--bg-2)}
.sec-dark .stp-n{box-shadow:0 0 0 6px var(--ink)}
.sec-dark .steps li::before{background:#A3111C}
.steps h3{margin:0 0 .35em;font-size:1.03rem}
.steps p{margin:0;font-size:.92rem;color:var(--tx-2)}
.sec-dark .steps p{color:#D6CBB2}

/* --------------------------------------------------------------- feature */
.split{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,330px),1fr));
  gap:clamp(1.6rem,1rem + 2.4vw,3.2rem);align-items:center}
.split>div{min-width:0}
.split .imgwrap img,.split-md img{width:100%;aspect-ratio:3/2;object-fit:cover;display:block}
.split .imgwrap,.split-md .imgwrap{border-top:5px solid var(--red)}
.split-md{position:relative}
.ticks{list-style:none;padding:0;margin:1.2rem 0 0;display:grid;gap:.6rem}
.ticks li{display:flex;gap:.6rem;align-items:flex-start;margin:0;font-size:.96rem}
.ticks .ic{color:var(--teal);width:19px;height:19px;margin-top:4px;flex:none}
.sec-dark .ticks .ic{color:#A3111C}

/* ------------------------------------------------------------- stat band */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,160px),1fr));
  gap:1rem;margin:0;padding:0;list-style:none}
.stats li{margin:0;min-width:0;padding:1.2rem 1.1rem;background:var(--paper);
  border:1px solid var(--line);border-left:3px solid var(--teal);border-radius:var(--r)}
.stats b{display:block;font-family:var(--ff-d);font-size:1.95rem;font-weight:800;
  line-height:1;color:var(--ink);letter-spacing:-.04em}
.stats span{display:block;font-size:.85rem;color:var(--tx-2);margin-top:.4rem;font-weight:550}
.sec-dark .stats li{background:var(--ink-2);border-color:#A3111C;border-left-color:#A3111C}
.sec-dark .stats b{color:#fff}
.sec-dark .stats span{color:#D6CBB2}

/* ----------------------------------------------------------------- table */
.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);
  background:var(--paper);max-width:100%;border-radius:var(--r)}
.table-scroll:focus-visible{outline:3px solid var(--teal);outline-offset:2px}
.tbl-compare{border-collapse:collapse;width:100%;min-width:660px;font-size:.925rem}
.tbl-compare caption{text-align:left;padding:.9rem 1rem;font-family:var(--ff-d);
  font-weight:700;font-size:.86rem;color:var(--tx-2);border-bottom:1px solid var(--line)}
.tbl-compare th,.tbl-compare td{padding:.78rem 1rem;text-align:left;
  border-bottom:1px solid var(--line-2);vertical-align:top}
.tbl-compare thead th{background:var(--ink);color:#fff;font-family:var(--ff-d);
  font-weight:700;font-size:.76rem;letter-spacing:.09em;text-transform:uppercase;
  border-bottom:0;white-space:nowrap}
.tbl-compare tbody th{font-family:var(--ff-d);font-weight:800;color:var(--ink);white-space:nowrap}
.tbl-compare tbody th a{color:var(--ink);text-decoration:none}
.tbl-compare tbody th a:hover{color:var(--red)}
.tbl-compare tbody tr:nth-child(even){background:var(--bg-2)}
.tbl-compare tbody tr:last-child th,.tbl-compare tbody tr:last-child td{border-bottom:0}
.tbl-plain{border-collapse:collapse;width:100%;font-size:.93rem;margin:0 0 1.3rem;
  background:var(--paper)}
.tbl-plain th,.tbl-plain td{padding:.64rem .8rem;border-bottom:1px solid var(--line-2);
  text-align:left;overflow-wrap:anywhere}
.tbl-plain thead th{font-family:var(--ff-d);font-size:.76rem;text-transform:uppercase;
  letter-spacing:.09em;color:var(--tx-2);border-bottom:2px solid var(--ink)}
.table-scroll>.tbl-plain{margin:0;border:0}
.prose .table-scroll{margin:0 0 1.3rem}

/* ------------------------------------------------------------------- faq */
.faqs{display:grid;gap:.55rem;margin-top:1.6rem}
.faq{background:var(--paper);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.faq[open]{border-color:var(--ink);box-shadow:var(--sh)}
.faq[open] summary{background:var(--bg-2)}
.faq summary{cursor:pointer;list-style:none;padding:1rem 3rem 1rem 1.15rem;position:relative;
  font-family:var(--ff-d);font-weight:700;font-size:1rem;color:var(--ink)}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";position:absolute;right:1.2rem;top:1.42rem;width:12px;height:2px;
  background:var(--red)}
.faq summary::before{content:"";position:absolute;right:1.2rem;top:1.42rem;width:12px;height:2px;
  background:var(--red);transform:rotate(90deg);transition:transform .2s}
.faq[open] summary::before{transform:rotate(0)}
.faq summary:hover{color:var(--red)}
.faq-a{padding:1rem 1.15rem 1.1rem;color:var(--tx-2);font-size:.955rem}
.faq-a p:last-child,.faq-a ul:last-child{margin-bottom:0}
.sec-faq{background:var(--bg-2)}

/* --------------------------------------------------------------- reviews */
.revs{display:grid;gap:1rem;grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr));
  margin-top:1.9rem}
.rev{margin:0;background:var(--paper);border:1px solid var(--line);border-radius:var(--r);
  padding:1.4rem;min-width:0;position:relative;border-top:3px solid var(--teal)}
.stars{display:flex;gap:2px;color:var(--red);margin-bottom:.75rem}
.stars .st{width:17px;height:17px;fill:currentColor;stroke:none}
.rev blockquote{margin:0;padding:0}
.rev p{font-size:.955rem;color:var(--tx);margin:0 0 .9rem}
.rev figcaption{font-family:var(--ff-d);font-weight:800;font-size:.9rem;color:var(--ink)}
.rev figcaption span{display:block;font-family:var(--ff-t);font-weight:500;font-size:.8rem;
  color:var(--tx-3);margin-top:2px}

/* ------------------------------------------------------------ link lists */
.links{list-style:none;padding:0;margin:1.6rem 0 0;display:grid;gap:.55rem;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,290px),1fr))}
.links li{margin:0;min-width:0}
.links a{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;
  column-gap:.7rem;padding:.9rem 1rem;background:var(--paper);
  border:1px solid var(--line);border-left:3px solid transparent;border-radius:var(--r);
  text-decoration:none;transition:border-color .18s,box-shadow .18s;min-width:0}
.links a:hover{border-left-color:var(--red);box-shadow:var(--sh)}
.links b{grid-column:1;grid-row:1;min-width:0;font-family:var(--ff-d);font-size:.955rem;
  color:var(--ink);font-weight:750;overflow-wrap:anywhere}
.links span{grid-column:1;grid-row:2;min-width:0;font-size:.83rem;color:var(--tx-2);
  margin-top:1px;overflow-wrap:anywhere}
.links a>i{grid-column:2;grid-row:1/-1;justify-self:end;color:var(--red);
  font-style:normal;flex:none}
.chips{list-style:none;padding:0;margin:1.4rem 0 0;display:flex;flex-wrap:wrap;gap:.45rem}
.chips li{margin:0}
.chips a{display:inline-block;padding:.44rem .9rem;background:var(--paper);
  border:1px solid var(--line);border-radius:var(--r);font-size:.855rem;font-weight:650;
  color:var(--ink-2);text-decoration:none}
.chips a:hover{border-color:var(--red);color:var(--red)}

/* ------------------------------------------------------------- cta strip */
.cta-strip{background:var(--red);color:#FFE6E5;position:relative;overflow:hidden;
  padding:clamp(2.4rem,1.6rem + 2.6vw,3.6rem) 0}
.cta-strip::before{content:"";position:absolute;inset:0;opacity:.55;
  background-image:repeating-linear-gradient(135deg,rgba(0,0,0,.05) 0 1px,transparent 1px 9px)}
.cta-in{position:relative;display:grid;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));
  gap:1.8rem;align-items:center}
.cta-in>div{min-width:0}
.cta-in h2{color:#fff;margin-bottom:.4em}
.cta-in p{margin:0;font-size:1rem;max-width:56ch;color:#FFDFDE}
.cta-strip .eyebrow,.cta-strip .eyebrow-amber{color:#FDF3D2}
.cta-act{display:flex;flex-direction:column;align-items:flex-start;gap:.6rem}
.cta-note{font-size:.85rem;color:#FDF3D2}
.cta-strip .btn-amber{background:#fff;color:var(--red);box-shadow:none}
.cta-strip .btn-amber:hover{background:var(--ink);color:#fff}
@media (min-width:820px){.cta-act{align-items:flex-end}}

/* ---------------------------------------------------------------- footer */
.ftr{background:var(--ink);color:#C4B99C;font-size:.92rem;position:relative;isolation:isolate}
.ftr::after{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;
  background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.03) 0 1px,transparent 1px 9px)}
.ftr-in{display:grid;gap:2rem;padding-block:clamp(2.2rem,1.6rem + 2vw,3.2rem);
  grid-template-columns:repeat(auto-fit,minmax(min(100%,215px),1fr))}
.ftr-col{min-width:0}
.ftr h3{color:#fff;font-size:.78rem;letter-spacing:.17em;text-transform:uppercase;
  margin:0 0 1.1rem;font-weight:800;position:relative;padding-bottom:.6rem}
.ftr h3::after{content:"";position:absolute;left:0;bottom:0;width:24px;height:3px;background:var(--red)}
.ftr-brand img{width:auto;max-width:100%;height:auto;margin-bottom:.9rem}
.ftr-name{display:none}
.ftr p{margin:0 0 1rem;font-size:.885rem;line-height:1.62}
.ftr-l{list-style:none;padding:0;margin:0}
.ftr-l li{margin:0 0 .55rem}
.ftr-l a{color:#C4B99C;text-decoration:none;font-size:.885rem}
.ftr-l a:hover{color:#fff}
.ftr-l b{color:#A3111C}
.ftr-l-2{columns:2;column-gap:1rem}
.nap{font-style:normal;display:grid;gap:.65rem;margin:0 0 1.1rem}
.nap span{display:flex;gap:.6rem;align-items:flex-start;min-width:0}
.nap .ic{color:#A3111C;width:18px;height:18px;margin-top:2px;flex:none}
.nap a{color:#BCC8CE;text-decoration:none;font-size:.885rem;min-width:0;overflow-wrap:anywhere}
.nap a:hover{color:#fff}
.ftr-mail{overflow-wrap:anywhere;word-break:break-word}
.soc{display:flex;gap:.5rem}
.soc a{display:inline-flex;width:38px;height:38px;align-items:center;justify-content:center;
  border:1px solid #A3111C;color:#C4B99C;border-radius:var(--r)}
.soc a:hover{border-color:var(--red);color:#fff;background:var(--red)}
.soc svg{width:19px;height:19px}
.hrs{list-style:none;padding:0;margin:0 0 1rem;font-size:.85rem}
.hrs li{display:flex;justify-content:space-between;gap:.7rem;padding:.32rem 0;
  border-bottom:1px dashed #123F56;margin:0;min-width:0}
.hrs b{color:#D3DCE1;font-weight:600;white-space:nowrap}
.hrs-note{font-size:.8rem!important;color:#9C948A}
.ftr-map{border:1px solid #A3111C}
.ftr-map iframe{display:block;filter:grayscale(.4) contrast(1.05)}
.ftr-bot{border-top:1px solid #123F56;font-size:.82rem}
.ftr-bot-in{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;justify-content:space-between;
  align-items:center;padding-block:1.1rem}
.ftr-bot p{margin:0;font-size:.82rem}
.ftr-bot ul{list-style:none;display:flex;flex-wrap:wrap;gap:1.2rem;margin:0;padding:0}
.ftr-bot li{margin:0}
.ftr-bot a{color:#C4B99C;text-decoration:none}
.ftr-bot a:hover{color:#fff}

/* -------------------------------------------------------- sticky callbar */
.callbar{display:none}

/* ------------------------------------------------------------- utilities */
.imgwrap{overflow:hidden}
.fig{margin:1.8rem 0}
.fig img{width:100%;border-top:4px solid var(--red)}
.fig figcaption{font-size:.83rem;color:var(--tx-3);margin-top:.55rem;font-style:italic}
.note{background:var(--teal-lt);border-left:4px solid var(--teal);padding:1.05rem 1.2rem;
  margin:1.6rem 0;font-size:.95rem}
.note p:last-child{margin-bottom:0}
.note b{color:var(--ink)}
.note-red{background:var(--red-lt);border-left-color:var(--red)}
.callout{background:var(--ink);color:#DCD2BA;padding:1.6rem 1.7rem;margin:2rem 0;
  border-left:5px solid var(--red)}
.callout h3{color:#fff;margin-top:0}
.callout p:last-child{margin-bottom:0}
.callout .btn{margin-top:.6rem}
.toc{background:var(--paper);border:1px solid var(--line);border-left:4px solid var(--ink);
  padding:1.2rem 1.4rem;margin:0 0 2.2rem}
.toc h2{font-size:.76rem!important;letter-spacing:.16em;text-transform:uppercase;
  color:var(--tx-2);margin:0 0 .8rem!important}
.toc ol{margin:0;padding-left:1.2rem;columns:2;column-gap:1.6rem}
.toc li{font-size:.9rem;break-inside:avoid}
@media (max-width:620px){.toc ol{columns:1}}
.meta-row{display:flex;flex-wrap:wrap;gap:.5rem 1.2rem;align-items:center;font-size:.85rem;
  color:var(--tx-3);margin:0 0 1.4rem}
.meta-row span{display:inline-flex;align-items:center;gap:.4rem}
.meta-row .ic{width:16px;height:16px;color:var(--red)}
.pill{display:inline-block;background:var(--ink);color:#fff;font-family:var(--ff-d);
  font-size:.7rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  padding:.3rem .7rem;border-radius:var(--r)}
.post-grid{display:grid;gap:1.1rem;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr))}
.post{background:var(--paper);border:1px solid var(--line);overflow:hidden;
  display:flex;flex-direction:column;min-width:0;position:relative;
  transition:box-shadow .2s,transform .2s;border-radius:var(--r)}
.post:hover{box-shadow:var(--sh);transform:translateY(-2px)}
.post img{width:100%;aspect-ratio:16/9;object-fit:cover}
.post-b{padding:1.1rem 1.2rem 1.3rem;display:flex;flex-direction:column;flex:1}
.post h3{font-size:1.05rem;margin:.55rem 0 .45em}
.post h3 a{color:var(--ink);text-decoration:none}
.post h3 a::after{content:"";position:absolute;inset:0}
.post:hover h3 a{color:var(--red)}
.post p{font-size:.9rem;color:var(--tx-2);margin:0 0 .9rem}
.post-m{margin-top:auto;font-size:.8rem;color:var(--tx-3);display:flex;gap:.8rem;flex-wrap:wrap}
.two-col{display:grid;grid-template-columns:minmax(0,1fr);gap:2.4rem}
@media (min-width:1000px){.two-col{grid-template-columns:minmax(0,1fr) 305px}}
.aside{min-width:0}
.aside-box{background:var(--paper);border:1px solid var(--line);border-top:3px solid var(--red);
  padding:1.35rem;margin-bottom:1.1rem;position:sticky;top:calc(var(--hdr-h) + 46px)}
.aside-box h3{font-size:1rem;margin-top:0}
.aside-box ul{list-style:none;padding:0;margin:0}
.aside-box li{margin:0 0 .5rem;font-size:.9rem}
.aside-box a{color:var(--ink-2);text-decoration:none;font-weight:550}
.aside-box a:hover{color:var(--red)}
.big-q{font-family:var(--ff-d);font-size:clamp(1.15rem,1.05rem + .5vw,1.38rem);font-weight:700;
  color:var(--ink);line-height:1.4;border-left:5px solid var(--red);padding-left:1.2rem;margin:2rem 0}
.err{text-align:center;padding:clamp(3rem,2rem + 5vw,6rem) 0}
.err b{display:block;font-family:var(--ff-d);font-size:clamp(4rem,2rem + 12vw,8rem);
  font-weight:800;line-height:1;color:var(--red);letter-spacing:-.055em;margin-bottom:.4rem}

/* ============================== RESPONSIVE ============================== */
@media (max-width:1100px){
  .nav-l>li>a{padding:.55rem .48rem;font-size:.82rem}
  .brand img{height:50px}
}
@media (max-width:980px){
  .sub-b{display:block}
  .nav{position:fixed;top:0;right:0;bottom:0;width:min(365px,86vw);background:var(--paper);
    flex-direction:column;align-items:stretch;gap:0;padding:calc(var(--hdr-h) + 12px) 0 90px;
    overflow-y:auto;transform:translateX(102%);transition:transform .26s ease;
    box-shadow:-16px 0 44px -20px rgba(0,0,0,.45);z-index:62;margin-left:0}
  .nav.open{transform:none}
  .nav-l{flex-direction:column;align-items:stretch;gap:0;padding:0 14px}
  .nav-l>li{border-bottom:1px solid var(--line-2)}
  .nav-l>li>a{padding:.9rem .5rem;font-size:1rem;color:var(--ink-2)}
  .nav-l>li>a:hover,.nav-l>li>a[aria-current="page"]{color:var(--red)}
  .nav-l>li>a[aria-current="page"]::after{display:none}
  .has-sub{display:grid;grid-template-columns:1fr 46px;align-items:center}
  .has-sub>.sub-t::after{display:none}
  .sub-b{grid-column:2;width:46px;height:46px;border:0;background:transparent;cursor:pointer;
    position:relative;justify-self:end}
  .sub-b::after{content:"";position:absolute;top:50%;left:50%;width:9px;height:9px;
    border-right:2px solid var(--tx-2);border-bottom:2px solid var(--tx-2);
    transform:translate(-50%,-70%) rotate(45deg);transition:transform .2s}
  .sub-b[aria-expanded="true"]::after{transform:translate(-50%,-30%) rotate(-135deg)}
  .sub{position:static;grid-column:1/-1;min-width:0!important;display:none;opacity:1;
    visibility:visible;transform:none;box-shadow:none;border:0;border-top:1px solid var(--line-2);
    padding:.3rem 0 .8rem;background:var(--bg-2);margin:0 -14px;
    grid-template-columns:1fr!important}
  .sub.open,.sub-wide.open{display:block}
  .sub a{padding:.6rem 1.2rem;font-size:.93rem}
  .sub-right{right:auto}
  .nav-cta{display:block;padding:1.1rem 20px 0}
  .nav-cta .btn{width:100%}
  .burger{display:flex}
  .hdr-in{min-height:66px}
  :root{--hdr-h:58px}
}
@media (max-width:900px){
  .hero-in{grid-template-columns:minmax(0,1fr)}
  .hero-md{order:-1;margin-bottom:2.2rem}
  .hero-badge{left:0;bottom:-20px;max-width:230px}
  .two-col{grid-template-columns:minmax(0,1fr)}
  .aside-box{position:static}
  .steps li{padding-top:0;padding-left:3.7rem;min-height:44px}
  .steps li::before{display:none}
  .stp-n{box-shadow:none!important}
}
@media (max-width:760px){
  body{font-size:16.5px}
  .callbar{display:block;position:fixed;left:0;right:0;bottom:0;z-index:57;
    background:var(--red);box-shadow:0 -6px 22px -10px rgba(0,0,0,.55)}
  .callbar a{display:flex;align-items:center;justify-content:center;gap:.65rem;
    padding:.74rem 1rem;color:#fff;text-decoration:none}
  .callbar .ic{width:22px;height:22px;flex:none}
  .callbar span{display:flex;flex-direction:column;line-height:1.18;min-width:0}
  .callbar b{font-family:var(--ff-d);font-size:.8rem;font-weight:700;color:#fff;
    text-transform:uppercase;letter-spacing:.06em}
  .callbar i{font-style:normal;font-family:var(--ff-d);font-size:1.04rem;font-weight:800}
  .ftr,.cta-strip{padding-bottom:0}
  .ftr-bot-in{padding-bottom:calc(1.1rem + 62px)}
  .ht-hide{display:none}
  .tbar-in{justify-content:flex-start;gap:.55rem .9rem}
  .tbar-i{font-size:.77rem;padding-right:.85rem}
  .tbar-i .ic{width:16px;height:16px}
  .stats b{font-size:1.6rem}
}
@media (max-width:520px){
  .wrap{padding-inline:16px}
  .hero-act .btn,.phero-act .btn{width:100%}
  .hero-badge{position:static;max-width:none;margin-top:1.4rem}
  .rev,.card{padding:1.15rem}
  .ftr-l-2{columns:1}
  .cta-act .btn{width:100%}
  .brand img{height:44px}
  .phero h1{padding-left:.85rem;border-left-width:4px}
}
@media (max-width:430px){
  .hdr-call-tx{display:none}
  .hdr-call{padding:.64rem .78rem}
  .brand img{height:30px}
}
@media (max-width:360px){
  .hdr-top{font-size:.72rem}
  .brand img{height:27px}
}

@media print{
  .hdr,.callbar,.cta-strip,.ftr-map,.scrim{display:none!important}
  body{font-size:11pt;background:#fff}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:9pt;color:#555}
}

/* ============================================================
   ORCHARD RIDGE — theme overrides
   Light header on warm paper, deep-green hero, apple-red CTAs,
   rounded cards and pill buttons, arc divider under the hero.
   ============================================================ */

/* --- header: light, with the green utility strip above it --- */
.hdr-top{background:var(--ink);color:#CBDFD1}
.hdr-top a{color:#EBE4D3}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red)}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--tx)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero sits on the deep orchard green --- */
.hero{background:
   radial-gradient(1100px 620px at 82% 12%,rgba(250,206,1,.08),transparent 62%),
   linear-gradient(168deg,#A3111C 0%,var(--ink) 58%,#150F0C 100%)}

/* signature: a soft arc scooped out of the bottom of the hero, so the paper
   colour rises into it. Distinct from the previous builds' diagonal cut and
   flat edge. */
.hero::after{
  content:"";position:absolute;left:-4%;right:-4%;bottom:-1px;height:74px;
  background:var(--bg);
  border-radius:50% 50% 0 0 / 100% 100% 0 0;
  z-index:2}
@media(max-width:760px){.hero::after{height:44px}}

/* --- buttons: pills --- */
.btn{border-radius:var(--r-s)}
.btn-amber{background:var(--teal);color:#FFFFFF;border-color:var(--teal)}
.btn-amber:hover{background:#8E1014;border-color:#8E1014}

/* --- cards: rounded, with a gold corner tab instead of a left bar --- */
.card,.svc-c,.size-c,.post,.aside-box,.links a,.note,.callout,.table-scroll{
  border-radius:var(--r)}
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:58px;height:4px;
  background:var(--teal);border-radius:var(--r) 0 var(--r) 0}
.card,.svc-c{position:relative;overflow:hidden}
.card:hover::before,.svc-c:hover::before{width:100%;transition:width .28s ease}

/* --- trust bar: gold ticks on the green field --- */
.trust{background:var(--ink);color:#D7E6DB}
.trust .ic{color:var(--teal)}

/* --- eyebrow rule --- */
.eyebrow::before{background:var(--red)}
/* red on navy is a low-contrast pair, so eyebrows on dark fields go light */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:var(--teal)}

/* --- section rules and small accents --- */
.sec-dark{background:linear-gradient(168deg,#A3111C,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}

/* --- footer stays deep green; the badge logo has a white disc so it reads --- */
.ftr{background:var(--ink)}

/* --- rounded images --- */
.imgwrap,.imgwrap img,figure img,.post img{border-radius:var(--r)}

/* ============================================================
   HEADER — slimmed top bar
   Desktop: thin strip, trust signals left, phone right.
   Mobile:  removed entirely (redundant with the header Call
            button and the sticky bottom call bar), which
            reclaims 35px of permanently sticky viewport.
   ============================================================ */

.hdr-top{background:var(--ink);color:#D6E5DB;font-size:.795rem;border-bottom:0}
.hdr-top-in{display:flex;align-items:center;justify-content:space-between;
  gap:1.2rem;min-height:30px;flex-wrap:nowrap}
.ht-left{display:flex;align-items:center;gap:1.5rem;min-width:0}
.ht-item{white-space:nowrap;font-weight:500}
.ht-ic{width:14px;height:14px;color:var(--teal)}

/* the phone is the point of the bar, so it reads as a link */
.ht-tel{display:inline-flex;align-items:center;gap:.45rem;flex:none;
  color:#fff;font-family:var(--ff-d);font-weight:700;letter-spacing:.01em;
  text-decoration:none;white-space:nowrap;padding:.2rem 0}
.ht-tel .ht-ic{color:var(--teal)}
.ht-tel:hover{color:var(--teal)}
.ht-tel:focus-visible{outline:2px solid var(--teal);outline-offset:3px;border-radius:3px}

/* header body: tighter, so the sticky chrome stops eating the fold */
.hdr-in{min-height:var(--hdr-h);padding-block:.4rem}
.brand img{height:40px}

/* drop the third trust item before it crowds the phone */
@media(max-width:1180px){.ht-hide + .ht-hide{display:none}}
@media(max-width:1024px){.ht-hide{display:none}}

/* mobile: no top bar at all */
@media(max-width:900px){
  .hdr-top{display:none}
  .brand img{height:44px}
  .hdr-in{padding-block:.3rem}
}

/* ============================================================
   HERO BADGE — was apple red sitting on an orange-red dumpster,
   square-cornered, flush to the image edge and unlifted.
   Now a paper card: separates from the photo above and the deep
   green hero below, and matches the rounded theme.
   ============================================================ */

.hero-badge{
  left:22px;                       /* deliberate inset, not flush to the edge */
  bottom:-24px;
  background:var(--bg);            /* warm paper - reads on red photo AND green field */
  color:var(--tx);
  border:1px solid var(--line);
  border-radius:var(--r);
  box-shadow:0 12px 30px rgba(21,15,12,.34);
  padding:.7rem .95rem;
  align-items:center;
  gap:.7rem;
  max-width:268px}

.hero-badge b{
  color:var(--red);                /* apple red numeral, now legible */
  font-size:1.45rem;
  letter-spacing:-.01em}

.hero-badge span{
  color:var(--tx-2);
  opacity:1;
  font-weight:600}

/* tablet: keep the inset proportional */
@media(max-width:1100px){
  .hero-badge{left:16px;bottom:-20px;max-width:238px}
}

/* mobile: it drops out of the image and becomes a normal block, so it does not
   need the lift - but it should still look like the same component */
@media(max-width:900px){
  .hero-badge{
    position:static;max-width:none;margin-top:1.2rem;
    box-shadow:none;
    background:rgba(255,255,255,.07);
    border-color:rgba(255,255,255,.16)}
  .hero-badge b{color:var(--teal)}
  .hero-badge span{color:#D3E3D8}
}

/* ============================================================
   HERO BADGE TYPOGRAPHY
   The numeral used to be a single "13 yrs" string in a flex item
   that shrank to 43px, so it wrapped to two same-size lines and
   read as two words rather than a statistic. Now split into a
   figure and a unit with a dividing rule.
   Class selectors are doubled up (.hero-badge .hb-*) so they beat
   the base .hero-badge b / .hero-badge span element rules.
   ============================================================ */

.hero-badge{display:flex;align-items:center;gap:0;padding:.72rem 1.05rem;max-width:336px}

.hero-badge .hb-stat{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  flex:none;white-space:nowrap;line-height:1;
  padding-right:.9rem;margin-right:.9rem;
  border-right:1px solid var(--line)}

.hero-badge .hb-n{
  font-family:var(--ff-d);font-size:1.85rem;font-weight:800;
  line-height:1;letter-spacing:-.025em;color:var(--red)}

.hero-badge .hb-u{
  font-family:var(--ff-d);font-size:.63rem;font-weight:700;
  text-transform:uppercase;letter-spacing:.13em;line-height:1;
  color:var(--tx-3);margin-top:.28rem}

.hero-badge .hb-tx{
  font-size:.795rem;line-height:1.38;font-weight:600;
  color:var(--tx-2);min-width:0;opacity:1;
  text-wrap:balance}          /* avoids a one-word widow on the last line */

@media(max-width:1100px){
  .hero-badge{max-width:300px;padding:.64rem .9rem}
  .hero-badge .hb-n{font-size:1.65rem}
  .hero-badge .hb-tx{font-size:.755rem}
}

/* mobile: block on the green hero, so the rule and colours invert */
@media(max-width:900px){
  .hero-badge{max-width:none;padding:.85rem 1rem}
  .hero-badge .hb-stat{border-right-color:rgba(255,255,255,.22)}
  .hero-badge .hb-n{color:var(--teal)}
  .hero-badge .hb-u{color:rgba(255,255,255,.6)}
  .hero-badge .hb-tx{color:#D6E4DA}
}

/* ============================================================
   RIVER & RAIL — Paducah
   Navy header, gold accents, slab-serif display, and a quilt
   strip under the hero (Paducah is a UNESCO Creative City of
   Crafts & Folk Art / National Quilt Museum).
   ============================================================ */

/* --- header: navy, with a gold hairline, and no utility strip --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--teal)}
.hdr .nav-l>li>a{color:#D3DEEC}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:var(--teal)}
.hdr .sub-b{color:#D3DEEC}
.hdr .burger span{background:#E8EEF6}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#9FB4CE}

/* --- hero on the deep navy, with a soft gold wash top-right --- */
.hero{background:
   radial-gradient(1000px 560px at 84% 10%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(166deg,#A3111C 0%,var(--ink) 56%,#150F0C 100%)}

/* --- SIGNATURE: quilt strip under the hero --- */
.hero::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:14px;z-index:2;
  background:
    repeating-linear-gradient(90deg,
      var(--teal) 0 28px,
      #14498C   28px 56px);
  opacity:.95}
@media(max-width:760px){.hero::after{height:10px;
  background:repeating-linear-gradient(90deg,var(--teal) 0 18px,#14498C 18px 36px)}}

/* --- CTAs: gold on dark fields, royal blue on light --- */
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--teal);border-color:var(--teal);color:#FFFFFF}
.hero .btn-red:hover,.sec-dark .btn-red:hover{background:#9E1116;border-color:#9E1116}
.btn-amber{background:var(--teal);color:#FFFFFF;border-color:var(--teal)}
.btn-amber:hover{background:#9E1116;border-color:#9E1116}

/* --- cards: squared slab feel, gold top rule instead of a corner tab --- */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:100%;height:3px;
  background:var(--line);border-radius:0}
.card:hover::before,.svc-c:hover::before{background:var(--teal);transition:background .22s ease}

/* --- trust bar --- */
.trust{background:var(--ink);color:#CFDCEC}
.trust .ic{color:var(--teal)}

/* --- accents --- */
.eyebrow::before{background:var(--teal)}
.eyebrow-amber{color:var(--teal)}
.sec-dark{background:linear-gradient(166deg,#A3111C,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* slab headings want a touch less letter-spacing */
h1,h2,h3,.logo-w b{letter-spacing:-.012em}

/* ============================================================
   SHOALS SOUND — Florence, AL
   Light ivory header (the previous build ran a navy one), gold
   CTAs with navy text, geometric display face, 10px radius, and
   a soundwave divider under the hero — Florence sits in the
   Shoals, home of FAME and Muscle Shoals Sound.
   ============================================================ */

/* --- header: light ivory, navy type, gold underline --- */
.hdr{background:var(--bg);border-bottom:1px solid var(--line);
  box-shadow:0 1px 0 rgba(35,26,21,.04)}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--teal);height:3px}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero: deep navy with a gold wash --- */
.hero{background:
   radial-gradient(980px 540px at 82% 8%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(164deg,#A3111C 0%,var(--ink) 58%,#150F0C 100%)}

/* --- SIGNATURE: soundwave bars under the hero ------------------
   A row of gold bars at varying heights, like a level meter. The
   Shoals is a music town, so the motif belongs here rather than
   being generic decoration. Pure CSS, no image request. */
.hero::after{
  /* SELF-CONTAINED ON PURPOSE. Four .hero::after rules are stacked in this
     file, one per build in the clone chain: a base diagonal hatch (inset:0,
     z-index:-1, opacity:.5), an arc scoop (border-radius + negative left/right)
     and a quilt strip (opacity:.95). Any property an earlier rule sets that
     this one does not reset will leak through. So reset all of them:
       top:auto        - base uses inset:0, which pins top:0. With bottom AND
                         height also set the box is over-constrained and the
                         browser honours top, putting the bar at the TOP.
       border-radius:0 - otherwise the arc scoop curves this bar.
       opacity:1       - otherwise the quilt rule's .95 applies.  */
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:20px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  /* each layer is a 4px bar inside a 64px tile, so the bars do NOT tile solid.
     8 layers offset 8px apart = 4px bar, 4px gap, heights staggered. */
  background-image:
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px),
    linear-gradient(to right,var(--teal) 0 4px,transparent 4px);
  background-size:
    64px 9px, 64px 20px, 64px 12px, 64px 16px,
    64px 7px, 64px 18px, 64px 11px, 64px 14px;
  background-position:
    0px    bottom,  8px bottom, 16px bottom, 24px bottom,
    32px   bottom, 40px bottom, 48px bottom, 56px bottom}

@media(max-width:760px){
  .hero::after{height:14px;
    background-size:
      48px 6px, 48px 14px, 48px 8px, 48px 11px,
      48px 5px, 48px 12px, 48px 7px, 48px 9px;
    background-position:
      0px  bottom,  6px bottom, 12px bottom, 18px bottom,
      24px bottom, 30px bottom, 36px bottom, 42px bottom}}


/* --- CTAs: GOLD with navy text. Gold is a fill colour only; it never
       carries small text on white, which would fail contrast. --- */
.btn-red{background:var(--teal);border-color:var(--teal);color:#FFFFFF}
.btn-red:hover{background:#A9151A;border-color:#A9151A;color:#101F16}
.btn-amber{background:var(--teal);border-color:var(--teal);color:#FFFFFF}
.btn-amber:hover{background:#A9151A;border-color:#A9151A}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.5);color:#fff}

/* --- cards: gold left rule, squared-off corners on the accent --- */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}
.card:hover::before,.svc-c:hover::before{background:var(--teal);
  transition:background .22s ease}

.trust{background:var(--ink);color:#CFDCE9}
.trust .ic{color:var(--teal)}
.eyebrow::before{background:var(--teal)}
.eyebrow-amber{color:var(--teal)}
.sec-dark{background:linear-gradient(164deg,#A3111C,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* geometric face sets tight */
h1,h2,h3,.logo-w b{letter-spacing:-.02em}

/* ============================================================
   KATY LINE — Katy, TX
   Deep rail blue, brand red CTAs, Archivo display, 4px radius,
   and a RAILROAD TRACK divider under the hero. Katy is named
   after the Missouri-Kansas-Texas Railroad — the "K-T", the Katy.
   ============================================================ */

/* --- header: deep blue with a red underline --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--red);box-shadow:none}
.hdr .nav-l>li>a{color:#DFD6C0}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:#DFD6C0}
.hdr .burger span{background:#F5EFE1}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#CCC1A6}

/* --- hero --- */
.hero{background:
   radial-gradient(960px 520px at 84% 10%,rgba(126,13,22,.15),transparent 60%),
   linear-gradient(163deg,#3A2A20 0%,var(--ink) 56%,#150F0C 100%)}

/* --- SIGNATURE: railroad track under the hero ------------------
   Two rails with crossties between them. Self-contained on purpose:
   four .hero::after rules are stacked in this file, one per build in
   the clone chain, and any property not reset here leaks through.
     top:auto        - the base rule's inset:0 pins top:0, which would
                       put the track at the TOP of the hero
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies          */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:18px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-image:
    /* crossties: 10px tie, 14px gap */
    linear-gradient(to right,var(--red) 0 10px,transparent 10px),
    /* top rail */
    linear-gradient(var(--teal),var(--teal)),
    /* bottom rail */
    linear-gradient(var(--teal),var(--teal));
  background-size:
    24px 12px,
    100% 3px,
    100% 3px;
  background-position:
    0 bottom 3px,
    0 bottom 12px,
    0 bottom 0}
@media(max-width:760px){
  .hero::after{height:13px;
    background-size:18px 9px,100% 2px,100% 2px;
    background-position:0 bottom 2px,0 bottom 9px,0 bottom 0}}

/* --- CTAs: brand red, white text ---
   NOTE the compound selectors. An earlier build's override block in this file
   sets `.hero .btn-red, .sec-dark .btn-red, .callbar .btn-red` (specificity
   0,2,0), which beats a bare `.btn-red` (0,1,0) and left every hero CTA
   rendering in the accent colour instead of brand red. Match the specificity
   rather than relying on source order. */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.5);color:#fff}

/* --- cards: red top rule, square corners on the accent --- */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:100%;height:3px;
  background:var(--line);border-radius:0}
.card:hover::before,.svc-c:hover::before{background:var(--red);
  transition:background .22s ease}

.trust{background:var(--ink);color:#DFD6C0}
.trust .ic{color:var(--red)}
.eyebrow::before{background:var(--red)}
/* red on navy is a low-contrast pair, so eyebrows on dark fields go light */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.sec-dark{background:linear-gradient(163deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

h1,h2,h3,.logo-w b{letter-spacing:-.018em}

/* ============================================================
   PINEY WOODS — Longview, TX
   Light warm-paper header, slab-serif display, square corners,
   and a PINE TREELINE divider under the hero. Longview sits in
   the East Texas Piney Woods.
   ============================================================ */

/* --- header: light warm paper, slate type, red underline --- */
.hdr{background:var(--bg);border-bottom:2px solid var(--red);box-shadow:none}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero --- */
/* GLOW OPACITY MUST SCALE WITH THE LUMINANCE GAP.
   The previous builds used .22-.36 for a blue or sky glow over navy, where the
   glow and the base are close in luminance. Brand YELLOW over near-black is an
   enormous gap, and .22 washed the whole upper hero to a solid olive-gold
   (#513: rgba mixes to (81,67,25)) - which is exactly the fast-food read this
   palette has to avoid. Dropped to .07 and tightened, which lifts the corner
   without colouring it. */
.hero{background:
   radial-gradient(720px 400px at 88% 6%,rgba(168,201,240,.10),transparent 58%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: pine treeline under the hero ------------------
   A sawtooth of paper-coloured peaks rising into the dark hero,
   reading as a treeline on the horizon. Longview is the gateway
   to the East Texas Piney Woods.

   Self-contained on purpose. FIVE .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0, which
                       would put the treeline at the TOP of the hero
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies       */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:24px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:0 bottom;
  background-size:36px 24px;
  background-image:
    linear-gradient(-45deg,var(--bg) 12px,transparent 0),
    linear-gradient( 45deg,var(--bg) 12px,transparent 0);
  /* a solid paper foot under the peaks so the join is clean */
  box-shadow:none}
.hero::before{}
@media(max-width:760px){
  .hero::after{height:16px;background-size:24px 16px;
    background-image:
      linear-gradient(-45deg,var(--bg) 8px,transparent 0),
      linear-gradient( 45deg,var(--bg) 8px,transparent 0)}}

/* --- CTAs: brand red, white text.
       Compound selectors deliberately match the specificity an earlier
       build's block uses (.hero .btn-red etc, 0,2,0) - a bare .btn-red
       loses to it regardless of source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.5);color:#fff}

/* --- cards: square, red left rule --- */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}
.card:hover::before,.svc-c:hover::before{background:var(--red);
  transition:background .22s ease}

.trust{background:var(--ink);color:#DFD6C0}
.trust .ic{color:var(--red)}
.eyebrow::before{background:var(--red)}
/* red on slate is a low-contrast pair, so eyebrows on dark fields go light */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

/* slab face wants a touch more room */
h1,h2,h3{letter-spacing:-.01em}
.logo-w b{letter-spacing:-.005em}

/* ============================================================
   CARD HOVER — self-contained, and it has to be.
   FIVE .card::before rules are stacked in this file, one per
   build in the clone chain. An early build's card used a small
   58px x 4px TOP tab that grew to full width on hover, so it set
   `.card:hover::before{width:100%}`. That rule still applies.
   This build's ::before is a 4px-wide FULL-HEIGHT left rule, so
   that width made it a solid brand-red panel covering the whole
   card and painting over the heading and body text on hover.

   So the hover state below re-states width AND height explicitly
   rather than trusting source order, and the lift is done on the
   card itself.
   ============================================================ */

.card,.svc-c{
  transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease}

.card:hover,.svc-c:hover,
.card:focus-within,.svc-c:focus-within{
  transform:translateY(-4px);
  box-shadow:0 14px 30px rgba(35,26,21,.16), 0 2px 6px rgba(35,26,21,.08);
  border-color:var(--line)}

/* the accent rule keeps its geometry and only changes colour */
.card:hover::before,.svc-c:hover::before,
.card:focus-within::before,.svc-c:focus-within::before{
  width:4px;height:100%;top:0;left:0;right:auto;bottom:auto;
  background:var(--red);
  transition:background .22s ease}

/* ONE accent, not two. The base stylesheet already gives .card a 3px top
   border, which is the accent actually visible at rest - the ::before left
   rule reads as almost nothing against the pale --line colour. So drive the
   hover off the top border and neutralise ::before, rather than lighting up
   two different edges. */
.card:hover,.svc-c:hover,
.card:focus-within,.svc-c:focus-within{border-top-color:var(--red)}
.card::before,.svc-c::before,
.card:hover::before,.svc-c:hover::before,
.card:focus-within::before,.svc-c:focus-within::before{background:transparent}

/* The heading link colour comes from `.card:hover h3 a`, not from the h3, so
   setting the h3 here would be dead code. Brand red on white measures 5.6:1,
   which passes AA, so the red heading on hover stays as a deliberate
   affordance. Body copy is left alone. */
.card:hover p,.svc-c:hover p{color:var(--tx-2)}

/* ============================================================
   BOLD TEXT ON DARK FIELDS
   The base stylesheet sets a global `strong, b {color:var(--ink)}`,
   which is right on white but renders bold text in EXACTLY the
   background colour inside .hero, .sec-dark and the footer - so
   the lead-in phrase of every dark-section bullet was invisible.
   ============================================================ */

.hero strong,.hero b,
.sec-dark strong,.sec-dark b,
.ftr strong,.ftr b,
.trust strong,.trust b{color:#fff}

/* the hero reassurance line now sits ABOVE the buttons, so give it
   a little more room and enough contrast to actually be read */
.hero-fine{margin-top:1.5rem!important;color:#BFC9D2;margin:0 0 1rem;font-size:.84rem}
.hero-act{margin-top:0}

/* ============================================================
   NORTH COUNTRY — Watertown, NY
   Dark navy header, brand gold CTAs, pill buttons, 16px cards,
   cool snow-white paper, and a SNOWDRIFT divider under the hero.
   Watertown is one of the snowiest cities in the country - the
   lake-effect belt off Lake Ontario runs straight over it.
   ============================================================ */

/* --- header: deep navy with a gold underline --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--teal);box-shadow:none}
.hdr .nav-l>li>a{color:#CBDCE9}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:var(--teal);height:3px}
.hdr .sub-b{color:#CBDCE9}
.hdr .burger span{background:#E7EEF5}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#A3B8CC}

/* --- hero --- */
.hero{background:
   radial-gradient(950px 520px at 84% 10%,rgba(126,13,22,.15),transparent 62%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: snowdrift under the hero ----------------------
   A run of soft paper-coloured mounds along the bottom edge, so
   the page below reads as drifted snow banking up against the
   dark field. Two offset layers of different radius keep it from
   looking like a mechanical scallop.

   Self-contained on purpose. SIX .hero::after rules are stacked
   in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0, which
                       would put the drift at the TOP of the hero
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies      */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:26px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:0 bottom, 34px bottom;
  background-size:96px 26px, 96px 26px;
  background-image:
    radial-gradient(30px 22px at 30px 26px,var(--bg) 99%,transparent 100%),
    radial-gradient(42px 26px at 42px 28px,var(--bg) 99%,transparent 100%)}
@media(max-width:760px){
  .hero::after{height:16px;
    background-position:0 bottom, 22px bottom;
    background-size:62px 16px, 62px 16px;
    background-image:
      radial-gradient(20px 13px at 20px 16px,var(--bg) 99%,transparent 100%),
      radial-gradient(28px 16px at 28px 17px,var(--bg) 99%,transparent 100%)}}

/* --- CTAs: brand GOLD with navy text. Gold is a fill colour only;
       it never carries small text on white, which would fail contrast.
       Compound selectors match the specificity an earlier build's block
       uses (.hero .btn-red etc, 0,2,0) - a bare .btn-red loses to it
       regardless of source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--teal);border-color:var(--teal);color:#FFFFFF}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:#7E0D16;border-color:#7E0D16;color:#101C30}
.btn-amber{background:var(--teal);border-color:var(--teal);color:#FFFFFF}
.btn-amber:hover{background:#7E0D16;border-color:#7E0D16}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* --- cards: rounded, gold left rule --- */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#CFDCEC}
.trust .ic{color:var(--teal)}
.eyebrow::before{background:var(--teal)}
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:var(--teal)}
.eyebrow-amber{color:var(--teal)}
.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

h1,h2,h3{letter-spacing:-.02em}

/* ============================================================
   HARBOUR LINE — Port Charlotte, FL
   Light sand header, brand red CTAs, 12px cards, squared
   buttons, and a WATERWAY divider under the hero. Port
   Charlotte is built around one of the largest residential
   canal networks in the country, on Charlotte Harbor.
   ============================================================ */

/* --- header: warm sand, navy type, red underline --- */
.hdr{background:var(--bg);border-bottom:3px solid var(--red);box-shadow:none}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero --- */
/* GLOW OPACITY MUST SCALE WITH THE LUMINANCE GAP.
   The previous builds used .22-.36 for a blue or sky glow over navy, where the
   glow and the base are close in luminance. Brand YELLOW over near-black is an
   enormous gap, and .22 washed the whole upper hero to a solid olive-gold
   (#513: rgba mixes to (81,67,25)) - which is exactly the fast-food read this
   palette has to avoid. Dropped to .07 and tightened, which lifts the corner
   without colouring it. */
.hero{background:
   radial-gradient(720px 400px at 88% 6%,rgba(168,201,240,.10),transparent 58%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: waterway under the hero ----------------------
   A smooth double wave, drawn as an inline SVG so the curve is
   exact rather than faked with stacked gradients. Reads as the
   canal network / harbour shoreline this town is built on.

   Self-contained on purpose. SEVEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and
   any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0, which
                       would put the wave at the TOP of the hero
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies      */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:34px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:200px 34px;
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' width='200' height='34' viewBox='0 0 200 34' preserveAspectRatio='none'>\
<path d='M0 18 C 25 4, 75 4, 100 18 S 175 32, 200 18 L200 34 L0 34 Z' fill='%23F8F5EF'/>\
<path d='M0 26 C 30 34, 70 18, 100 26 S 170 34, 200 26 L200 34 L0 34 Z' fill='%23F8F5EF' opacity='0.5'/>\
</svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:130px 22px}}

/* --- CTAs: brand red, white text.
       Compound selectors match the specificity an earlier build's block uses
       (.hero .btn-red etc, 0,2,0) - a bare .btn-red loses to it regardless of
       source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#CBDCE9}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--red)}
/* brand red on a navy field is a low-contrast pair, so eyebrows go light there */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

h1,h2,h3{letter-spacing:-.018em}

/* "Port Charlotte, FL" is a long place name and the inherited h1 clamp pushed
   "FL" onto a line of its own. Measured across sizes: 3rem is the largest that
   still sets the headline as two clean lines in this column.
   NOTE: text-wrap:balance was tried first and made it WORSE - it balances
   across the accent <em> as well, giving five short ragged lines. Don't. */
.hero h1{font-size:clamp(2.05rem,3.9vw,3rem)}

/* ============================================================
   SPINDLETOP — Beaumont, TX
   Dark navy header, brand green CTAs, SERIF display face,
   near-square corners, cool grey-green paper, and a DERRICK
   SKYLINE divider under the hero. The Spindletop gusher came
   in just south of town in 1901 and made this an oil city.
   ============================================================ */

/* --- header: deep navy with a green underline --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--red);box-shadow:none}
.hdr .nav-l>li>a{color:#F6E6E7}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:#F6E6E7}
.hdr .burger span{background:#EBE4D3}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#A8A08E}

/* --- hero --- */
.hero{background:
   radial-gradient(940px 520px at 84% 10%,rgba(250,206,1,.08),transparent 62%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: derrick skyline under the hero ---------------
   A repeating run of narrow tapered towers along the bottom
   edge, reading as the wooden derrick forest that stood over
   Spindletop after the 1901 gusher. Drawn as an inline SVG so
   the taper is exact, and built so the tile LOOPS: the path
   starts and ends mid-gap at the same height, which is what
   stops a visible notch at every repeat.

   Self-contained on purpose. EIGHT .hero::after rules are now
   stacked in this file, one per build in the clone chain, and
   any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0, which
                       would put the skyline at the TOP of the hero
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies      */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:56px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:230px 56px;
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' width='230' height='56' viewBox='0 0 230 56' preserveAspectRatio='none'>\
<path d='M18 56 L28 6 L38 56 Z' fill='%23F5F7F6'/>\
<path d='M22 34 L34 34 L35 40 L21 40 Z' fill='%23F5F7F6'/>\
<path d='M92 56 L100 20 L108 56 Z' fill='%23F5F7F6'/>\
<path d='M95 40 L105 40 L106 45 L94 45 Z' fill='%23F5F7F6'/>\
<path d='M158 56 L170 0 L182 56 Z' fill='%23F5F7F6'/>\
<path d='M163 30 L177 30 L178 37 L162 37 Z' fill='%23F5F7F6'/>\
<rect x='0' y='50' width='230' height='6' fill='%23F5F7F6'/>\
</svg>")}
@media(max-width:760px){.hero::after{height:34px;background-size:145px 34px}}

/* --- CTAs: brand green, white text.
       Compound selectors match the specificity an earlier build's block uses
       (.hero .btn-red etc, 0,2,0) - a bare .btn-red loses to it regardless of
       source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#CBDCE9}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--red)}
/* mid green on a navy field is a weak pair, so eyebrows on dark fields go light */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

/* Fraunces is a serif and sets tighter than the grotesks used previously */
h1,h2,h3{letter-spacing:-.012em}
.hero h1{font-size:clamp(2.15rem,4.2vw,3.3rem)}

/* --- GREEN ON NAVY NEEDS THE LIGHT TINT -----------------------
   The brand green (#A3111C) is a DARK green. It is correct on white
   (5.4:1 as a CTA fill with white text) but on the navy hero it
   measures only 2.33:1 - well under the 4.5:1 minimum - so the H1
   accent and every bullet tick were barely legible.

   Dark fields get the lighter tint #A3111C instead. Same hue family,
   reads as the same brand colour, but it actually passes.
   GENERAL RULE for this kit: whenever the brand accent is DARK, it
   cannot be reused as text or iconography on a dark field. Check it. */
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

/* ============================================================
   LAKESHORE — Roseville, MI
   Light bone header, brand red CTAs, 10px radius, warm bone
   paper, and a CHEVRON BELT divider under the hero. Macomb
   County is Detroit's manufacturing belt and Roseville sits on
   the Groesbeck / Gratiot industrial corridor.
   ============================================================ */

/* --- header: warm bone, navy type, red underline --- */
.hdr{background:var(--bg);border-bottom:3px solid var(--red);box-shadow:none}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero --- */
/* GLOW OPACITY MUST SCALE WITH THE LUMINANCE GAP.
   The previous builds used .22-.36 for a blue or sky glow over navy, where the
   glow and the base are close in luminance. Brand YELLOW over near-black is an
   enormous gap, and .22 washed the whole upper hero to a solid olive-gold
   (#513: rgba mixes to (81,67,25)) - which is exactly the fast-food read this
   palette has to avoid. Dropped to .07 and tightened, which lifts the corner
   without colouring it. */
.hero{background:
   radial-gradient(720px 400px at 88% 6%,rgba(168,201,240,.10),transparent 58%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: chevron belt under the hero ------------------
   A run of paper-coloured chevrons along the bottom edge, like a
   conveyor or drive belt. Macomb County is the manufacturing belt
   and Roseville sits on the Groesbeck corridor.

   Drawn as an inline SVG so the angles are exact, and built to
   LOOP: the tile starts and ends mid-gap at the same height, so
   there is no notch at the repeat. VERIFY THIS ON SCREEN - a
   previous build shipped a divider with a visible seam.

   Self-contained on purpose. NINE .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0, which
                       would put the belt at the TOP of the hero
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height must MATCH the background-size height,
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the block, not the line.        */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:34px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:120px 34px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='34' viewBox='0 0 120 34' preserveAspectRatio='none'><path d='M0 34 L0 20 L30 6 L60 20 L90 6 L120 20 L120 34 Z' fill='%23F7F5EF'/><rect x='0' y='28' width='120' height='6' fill='%23F7F5EF'/></svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:80px 22px}}

/* --- CTAs: brand red, white text.
       Compound selectors match the specificity an earlier build's block uses
       (.hero .btn-red etc, 0,2,0) - a bare .btn-red loses to it regardless of
       source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--red)}
/* --- DARK BRAND ACCENT ON A DARK FIELD -----------------------
   Brand red #A3111C is a DARK red. It is correct as a CTA fill with
   white text, but as text or iconography on the navy hero it fails
   contrast badly. Dark fields get the lighter tint #A3111C instead.
   Measured, not assumed - see the delivery notes. */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

h1,h2,h3{letter-spacing:-.02em}

/* ============================================================
   PIEDMONT — Loganville, GA
   Dark navy header, brand red CTAs, PILL buttons, 14px cards,
   warm greige paper, and a ROLLING RIDGELINE divider under the
   hero. Loganville sits at 978 ft on the rolling red-clay
   ridges of the Georgia Piedmont, east of Atlanta.

   Roseville shared this navy/red palette, so every other lever
   is pushed hard the other way: dark header (Roseville was
   light bone), Bricolage Grotesque (was Familjen Grotesk),
   ridgeline (was chevron belt), pills (was 10px), greige
   (was bone), and a brighter navy and red from this logo.
   ============================================================ */

/* --- header: deep navy with a red underline --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--red);box-shadow:none}
.hdr .nav-l>li>a{color:#F6E6E7}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:#F6E6E7}
.hdr .burger span{background:#EBE4D3}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#A8A08E}

/* --- hero --- */
/* GLOW OPACITY MUST SCALE WITH THE LUMINANCE GAP.
   The previous builds used .22-.36 for a blue or sky glow over navy, where the
   glow and the base are close in luminance. Brand YELLOW over near-black is an
   enormous gap, and .22 washed the whole upper hero to a solid olive-gold
   (#513: rgba mixes to (81,67,25)) - which is exactly the fast-food read this
   palette has to avoid. Dropped to .07 and tightened, which lifts the corner
   without colouring it. */
.hero{background:
   radial-gradient(720px 400px at 88% 6%,rgba(168,201,240,.10),transparent 58%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: rolling ridgeline under the hero -------------
   Two overlapping smooth hill curves, deliberately ROUNDED to
   sit against the pill buttons and to read differently from the
   angular chevrons and spiky derricks of the last two builds.
   The Georgia Piedmont is rolling red-clay ridge country and
   Loganville sits at 978 ft on one of them.

   Built to LOOP: the path enters at x=0 and leaves at x=240 at
   the SAME y (28) with the same direction, so there is no notch
   at the repeat. VERIFY THIS ON SCREEN.

   Self-contained on purpose. TEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and
   any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED
   with left/right/top/bottom - patch the BLOCK, not the line,
   then verify the computed height in the browser.          */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:44px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:240px 44px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='44' viewBox='0 0 240 44' preserveAspectRatio='none'><path d='M0 28 C 30 10, 55 10, 84 26 C 110 40, 132 40, 158 22 C 186 4, 214 12, 240 28 L240 44 L0 44 Z' fill='%23F6F3F0'/></svg>")}
@media(max-width:760px){.hero::after{height:28px;background-size:160px 28px}}

/* --- SIGNATURE 2: PILL buttons. No build in this run has used them,
       and they pair with the rounded ridgeline. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:999px}

/* --- CTAs: brand red, white text.
       Compound selectors match the specificity an earlier build's block uses
       (.hero .btn-red etc, 0,2,0) - a bare .btn-red loses to it regardless of
       source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:999px}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--red)}

/* --- DARK BRAND ACCENT ON A DARK FIELD -----------------------
   Applied UP FRONT, as a standard clone step, because this has
   now bitten twice. Brand red #A3111C is a strong mid-dark red:
   correct as a CTA fill with white text, but as TEXT or icons on
   the navy hero it does not clear 4.5:1. Dark fields use the
   lighter tint #A3111C instead. Measured against the HERO, not
   just against the CTA. */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

/* Bricolage Grotesque runs wide, so pull the display tracking in */
h1,h2,h3{letter-spacing:-.026em}
.hero h1{font-size:clamp(2.05rem,4vw,3.15rem)}

/* --- HEADER LOCKUP SIZING ------------------------------------
   An ancestor build's header block sets `.brand img{height:40px}`
   partway down this file, which beats the base rule on source
   order. 40px suits the SQUARE badges those builds used; this
   build's logo is a STACKED LOCKUP (1.356:1) carrying a two-line
   wordmark, and at 40px the subline renders about 6px tall and is
   unreadable.

   Overriding here, at the end of the file, where it wins - the
   same approach the stacked .hero::after rules take. Revert to
   40px if a future clone goes back to a round badge. */
.brand img{height:58px}
@media(max-width:900px){.brand img{height:50px}}
@media(max-width:520px){.brand img{height:42px}}

/* ============================================================
   POWDER HOLLOW — Enfield, CT
   Light blue-grey header with a TWO-TONE rule, brand red CTAs,
   SQUARE corners, cool blue-grey paper, and a SAWTOOTH MILL ROOF
   divider under the hero.

   Enfield's Thompsonville wove carpet at the Bigelow mills and
   Hazardville made gunpowder in Powder Hollow, so a north-light
   factory roofline is the honest local motif.

   The last three builds were all navy-primary. This one is RED
   primary on a cool SLATE ink - no navy anywhere - with sky blue
   as the secondary. Square corners follow Loganville's pills and
   Roseville's 10px.
   ============================================================ */

/* --- header: pale, with a two-tone red-over-sky rule --------
   Roseville also used a light header, so this one is
   differentiated by the DOUBLE rule and the slate type. */
.hdr{background:var(--bg);border-bottom:3px solid var(--red);
     box-shadow:0 2px 0 0 var(--teal)}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero: slate, with a sky-blue glow --- */
/* GLOW OPACITY MUST SCALE WITH THE LUMINANCE GAP.
   The previous builds used .22-.36 for a blue or sky glow over navy, where the
   glow and the base are close in luminance. Brand YELLOW over near-black is an
   enormous gap, and .22 washed the whole upper hero to a solid olive-gold
   (#513: rgba mixes to (81,67,25)) - which is exactly the fast-food read this
   palette has to avoid. Dropped to .07 and tightened, which lifts the corner
   without colouring it. */
.hero{background:
   radial-gradient(720px 400px at 88% 6%,rgba(168,201,240,.10),transparent 58%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: sawtooth mill roof under the hero ------------
   A north-light factory roofline: a vertical riser, a long
   shallow rake down, repeated. Deliberately ASYMMETRIC, which is
   what separates it from the symmetric chevron belt two builds
   back and the rounded ridgeline of the last one.

   Built to LOOP: the path enters at x=0 and leaves at x=200 at
   the SAME height with the same direction, so there is no notch
   at the repeat. VERIFY ON SCREEN.

   Self-contained on purpose. ELEVEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the BLOCK, not the line, then
   verify the computed height in the browser.               */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:38px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:200px 38px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='38' viewBox='0 0 200 38' preserveAspectRatio='none'><path d='M0 30 L0 12 L50 30 L50 12 L100 30 L100 12 L150 30 L150 12 L200 30 L200 38 L0 38 Z' fill='%23F2F5F7'/><rect x='0' y='29' width='200' height='9' fill='%23F2F5F7'/></svg>")}
@media(max-width:760px){.hero::after{height:24px;background-size:126px 24px}}

/* --- SQUARE corners. Loganville used pills, Roseville 10px, so
       this build goes hard the other way. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:0}

/* --- CTAs: brand red, white text (5.9:1).
       Compound selectors match the specificity an earlier build's block uses
       (.hero .btn-red etc, 0,2,0) - a bare .btn-red loses to it regardless of
       source order. --- */
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:0}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--red)}

/* --- DARK-FIELD ACCENT: A LIGHTENED SECONDARY, NOT A TINT OF THE
   PRIMARY. Brand red #A3111C measures 1.53-2.48:1 across the hero
   bands - unusable as text there. Rather than invent a pink tint,
   this build uses the SECONDARY sky blue, lightened to #A3111C so
   it clears 4.5 against EVERY band including a glow-lightened
   sample (worst case 5.01). Plain #A3111C measured 3.36 at worst
   and was rejected. */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

/* Chivo is a sturdy grotesque; it sets a touch looser than Bricolage */
h1,h2,h3{letter-spacing:-.018em}
.hero h1{font-size:clamp(2.05rem,4vw,3.2rem)}

/* --- HEADER LOCKUP SIZING ------------------------------------
   Carried from the previous build and still required: an ancestor
   build's header block sets `.brand img{height:40px}` partway down
   this file and beats the base rule on source order. That suits a
   square badge; this build's logo is another STACKED LOCKUP with a
   two-line wordmark, illegible at 40px. Override here at the end,
   where it wins. Revert if a future clone uses a round badge. */
.brand img{height:58px}
@media(max-width:900px){.brand img{height:50px}}
@media(max-width:520px){.brand img{height:42px}}

/* ============================================================
   CAMBRIA IRON — Johnstown, PA
   Near-black header with a YELLOW rule, deep red CTAs carrying a
   yellow safety-stripe edge, 6px corners, warm neutral paper, and
   a MILL STACK divider under the hero.

   First WARM-ONLY palette in the run - red and yellow on a warm
   near-black, with no blue or slate anywhere. Red+yellow can read
   as fast food, so: the red is DEEP rather than bright, the yellow
   is accent/rule/dark-field only and never a large fill, the
   near-black dominates, and the paper stays restrained.

   The divider is a BLOCKY STEPPED silhouette - rectangles at
   varying heights, no diagonals and no curves at all - which is
   what separates it from the sawtooth, the chevron belt and the
   ridgeline. Johnstown was built on the Cambria Iron Works and
   the yard address is Iron Street.
   ============================================================ */

/* --- header: near-black with a yellow rule --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--teal);box-shadow:none}
.hdr .nav-l>li>a{color:#F6E6E7}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:var(--teal);height:3px}
.hdr .sub-b{color:#F6E6E7}
.hdr .burger span{background:#EBE4D3}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#A8A08E}

/* --- hero: warm charcoal with a low yellow glow --- */
/* GLOW OPACITY MUST SCALE WITH THE LUMINANCE GAP.
   The previous builds used .22-.36 for a blue or sky glow over navy, where the
   glow and the base are close in luminance. Brand YELLOW over near-black is an
   enormous gap, and .22 washed the whole upper hero to a solid olive-gold
   (#513: rgba mixes to (81,67,25)) - which is exactly the fast-food read this
   palette has to avoid. Dropped to .07 and tightened, which lifts the corner
   without colouring it. */
.hero{background:
   radial-gradient(720px 400px at 88% 6%,rgba(168,201,240,.10),transparent 58%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- SIGNATURE: mill stack divider under the hero ------------
   A run of paper-coloured rectangular blocks at varying heights
   with a solid base rail - a mill roofline and stack profile.
   Deliberately ORTHOGONAL: no diagonals, no curves.

   Built to LOOP: the tile starts and ends mid-gap at the same
   height, so there is no notch at the repeat. VERIFY ON SCREEN.

   Self-contained on purpose. TWELVE .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the BLOCK, not the line, then
   verify the computed height in the browser.               */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:40px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:220px 40px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='40' viewBox='0 0 220 40' preserveAspectRatio='none'><rect x='0' y='30' width='220' height='10' fill='%23F4F2EF'/><rect x='10' y='14' width='22' height='16' fill='%23F4F2EF'/><rect x='44' y='22' width='16' height='8' fill='%23F4F2EF'/><rect x='70' y='6' width='18' height='24' fill='%23F4F2EF'/><rect x='100' y='18' width='26' height='12' fill='%23F4F2EF'/><rect x='138' y='10' width='16' height='20' fill='%23F4F2EF'/><rect x='166' y='24' width='20' height='6' fill='%23F4F2EF'/><rect x='196' y='16' width='14' height='14' fill='%23F4F2EF'/></svg>")}
@media(max-width:760px){.hero::after{height:26px;background-size:143px 26px}}

/* --- CTAs: deep red, white text (6.55:1), with a yellow
       safety-stripe bottom edge. The stripe is this build's small
       signature detail and pairs with the header rule. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:6px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:6px;
  box-shadow:inset 0 -3px 0 0 var(--teal)}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;
  box-shadow:inset 0 -3px 0 0 var(--teal)}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--line);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:var(--teal)}
.eyebrow::before{background:var(--red)}

/* --- DARK-FIELD ACCENT: THE BRAND YELLOW AT FULL STRENGTH -----
   A third distinct case in this run, and the simplest yet.
     Loganville  dark accent -> invent a lighter tint
     Enfield     secondary too dark -> lighten the secondary
     Johnstown   the secondary IS light - brand #A3111C measures
                 10.37:1 on this near-black, so NO tint is invented
                 and the true brand colour carries the dark fields.
   Brand red measures 2.04:1 here and is never used as text on dark. */
.hero .eyebrow,.sec-dark .eyebrow{color:#F1F4EE}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:var(--teal)}
.eyebrow-amber{color:var(--teal)}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:var(--teal)}
.ftr-l b{color:var(--teal)}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

/* Oswald is CONDENSED and sets tall and narrow - it needs looser
   tracking and a slightly larger size than the previous grotesques,
   and its lowercase wants a touch more line-height. */
h1,h2,h3{letter-spacing:.004em}
.hero h1{font-size:clamp(2.2rem,4.4vw,3.5rem);line-height:1.12}

/* --- HEADER LOCKUP SIZING ------------------------------------
   Carried from the previous two builds and still required: an
   ancestor block sets `.brand img{height:40px}` partway down this
   file and beats the base rule on source order.
   THIS lockup is SIDE-BY-SIDE at 2.78:1 - much wider than the
   stacked ones - so it needs a SMALLER height than they did or it
   overruns the nav. Sized by width, not height. */
.brand img{height:42px}
@media(max-width:900px){.brand img{height:38px}}
@media(max-width:520px){.brand img{height:32px}}

/* --- NEUTRALISE THE ANCESTOR .hero::before GLOW LAYER ---------
   THE REAL CAUSE of this build's washed-out hero, and worth
   recording because the mechanism is subtle.

   An ancestor build stacks a SECOND glow layer on `.hero::before`
   (three gradients, z-index:-1) on top of the `.hero` background.
   My stale-literal colour sweep recoloured it correctly and
   mechanically - and that is exactly the problem. In the ancestor
   the third layer was `linear-gradient(165deg,<mid-tone blue> 0%,
   ...)`, where a mid-tone start reads as a subtle tint. Swapping
   that hex for a VERY LIGHT brand yellow turned the same gradient
   into a solid yellow wash across the whole upper hero.

   The sweep was syntactically perfect and semantically wrong: the
   ROLE of the colour changed even though the substitution was
   valid. Nothing automated catches that - only looking at it does.

   Note also the empty `.hero::before{}` rule further up the file:
   an earlier build clearly hit this and tried to blank it, but an
   empty declaration block has no effect. Override the properties.

   This build's `.hero` already carries its own base gradient, so
   ::before only needs one restrained highlight. */
.hero::before{
  background:radial-gradient(680px 380px at 86% 8%,rgba(250,206,1,.07),transparent 60%)}

/* ============================================================
   HARDWARE CITY — New Britain, CT
   Deep pine header carrying the BRAND colour, green CTAs, red as
   the light-field accent, 20px corners and an ARCADE divider.

   Second Connecticut build in the chain, so the state carries
   none of the distinctiveness - the palette does. GREEN primary
   with a red accent is unused in this run, and the header is the
   first BRAND-COLOURED one: every previous build used a neutral
   dark or a neutral light.

   TOKEN NAMING IS INVERTED HERE: `--red` is the CTA token and
   holds the brand GREEN; `--teal` is the secondary token and
   holds the brand RED. The kit has always used `--red` as a role
   name rather than a hue. Read the values.
   ============================================================ */

/* --- header: deep pine, the brand family, with a red rule --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--teal);box-shadow:none}
.hdr .nav-l>li>a{color:#F6E6E7}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:#A3111C;height:3px}
.hdr .sub-b{color:#F6E6E7}
.hdr .burger span{background:#EBE4D3}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#A8A08E}

/* --- hero: pine, with a restrained mint lift --------------
   Opacity chosen against the LUMINANCE GAP, per the previous
   build: mint over pine is a moderate gap, so .10 here reads as
   the .07 yellow-over-black did. Both glow layers are set - see
   the ::before override below. --- */
.hero{background:
   radial-gradient(760px 420px at 86% 8%,rgba(168,201,240,.10),transparent 60%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- NEUTRALISE THE ANCESTOR .hero::before GLOW LAYER --------
   Carried forward deliberately. An ancestor build stacks a SECOND
   glow layer on `.hero::before` (three gradients, z-index:-1) and
   a colour sweep will recolour it mechanically - which is exactly
   how the previous build shipped a washed-out hero into QA. The
   third layer there is a linear-gradient whose 0% stop becomes
   whatever the sweep substituted, and a light substitution turns
   a subtle tint into a solid wash.
   Override it explicitly every clone. --- */
.hero::before{
  background:radial-gradient(680px 380px at 88% 6%,rgba(168,201,240,.08),transparent 62%)}

/* --- SIGNATURE: arcade divider under the hero ----------------
   A row of discrete SEMICIRCLES - a colonnade or arcade. Every
   other shape language in this run is taken: spikes, zigzag,
   rolling curves, asymmetric triangles, orthogonal blocks.
   Repeating half-circles is what is left, and it pairs with the
   20px corners.

   Built to LOOP: the tile begins and ends exactly at the join
   between two arches, so there is no notch at the repeat.
   VERIFY ON SCREEN.

   Self-contained on purpose. THIRTEEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the BLOCK, not the line, then
   verify the computed height in the browser.               */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:34px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:132px 34px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='132' height='34' viewBox='0 0 132 34' preserveAspectRatio='none'><path d='M0 34 L0 20 A22 20 0 0 1 44 20 A22 20 0 0 1 88 20 A22 20 0 0 1 132 20 L132 34 Z' fill='%23FBF9F5'/></svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:86px 22px}}

/* --- CTAs: brand GREEN, white text (6.61:1). 20px corners, the
       roundest in the run without being a pill. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:20px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:20px;
  box-shadow:none}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* red earns its keep as the accent on LIGHT fields, where it
   measures 4.95:1 on this paper */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--teal)}

/* --- DARK-FIELD ACCENT: A LIGHTENED PRIMARY, BECAUSE BOTH BRAND
   COLOURS FAIL. A fourth distinct case in this run:
     Loganville  dark primary          -> lighten the primary
     Enfield     secondary too dark    -> lighten the secondary
     Johnstown   secondary already light -> use it RAW, no tint
     New Britain BOTH fail             -> no raw option exists
   Brand green measures 2.86:1 on this pine and brand red 2.63:1,
   so neither could be used as text on dark at any size. The mint
   #A3111C clears 5.01:1 against the worst band. Measured against
   EVERY band including a glow-lightened sample. */
.hero .eyebrow,.sec-dark .eyebrow{color:#EBE4D3}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* Archivo is a sturdy normal-width grotesque after Oswald's
   condensed - it needs slightly tighter tracking and a smaller
   clamp ceiling than the condensed face did. */
h1,h2,h3{letter-spacing:-.016em}
.hero h1{font-size:clamp(2.05rem,4vw,3.15rem);line-height:1.14}

/* --- HEADER LOGO SIZING --------------------------------------
   Back to a CIRCULAR BADGE after three lockup builds, so this
   reverts toward the badge sizing. An ancestor block still sets
   `.brand img{height:40px}` mid-cascade, so the override stays -
   but a square badge wants more height than the wide side-by-side
   lockup did, and less than the tall stacked ones. */
.brand img{height:54px}
@media(max-width:900px){.brand img{height:46px}}
@media(max-width:520px){.brand img{height:40px}}

/* ============================================================
   WHIP CITY — Westfield, MA
   TWO-TIER header (navy utility strip over a white nav bar),
   brand red CTAs, navy as the structural secondary, 4px corners,
   light steel paper, and a DOVETAIL divider.

   Navy + red was already used by two earlier builds in this
   chain, so the palette cannot differentiate. The STRUCTURE
   does: a two-tier header is new (every previous build was
   single-tier), and the DOVETAIL divider is a row of trapezoids
   - flat tops, angled sides - which is the one silhouette left
   after spikes, zigzag, rolling curves, asymmetric triangles,
   orthogonal rectangles and semicircles.

   TOKENS ARE CONVENTIONAL AGAIN: --red is the red, --teal is the
   navy. The previous build inverted them; that note does not
   apply here.
   ============================================================ */

/* --- TWO-TIER HEADER: navy utility strip above a white nav ---
   The markup already carries `.hdr-top`; earlier builds hid it or
   let it inherit. Here it is the signature. --- */
.hdr{background:#fff;border-bottom:1px solid var(--line);box-shadow:0 1px 0 0 rgba(35,26,21,.04)}
.hdr-top{display:block;background:var(--ink);color:#F6E6E7;
  border-bottom:3px solid var(--red);font-size:.78rem;letter-spacing:.01em}
.hdr-top-in{display:flex;align-items:center;justify-content:space-between;
  gap:1rem;padding:.42rem 0}
.hdr-top-l,.hdr-top-r{display:inline-flex;align-items:center;gap:.4rem;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hdr-top .ic{width:14px;height:14px;flex:none;color:#A3111C}
.hdr-top a{color:#F6E6E7}
.hdr-top a:hover{color:#fff}
.hdr .nav-l>li>a{color:var(--tx)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}
@media(max-width:900px){.hdr-top{display:none}}

/* --- hero: deep navy with a restrained ice-blue lift --- */
.hero{background:
   radial-gradient(760px 420px at 86% 8%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- NEUTRALISE THE ANCESTOR .hero::before GLOW LAYER --------
   Carried forward every clone. An ancestor build stacks a SECOND
   glow layer here (three gradients, z-index:-1) and a colour
   sweep recolours it mechanically - which is how a washed-out
   hero once reached QA. Override it explicitly. --- */
.hero::before{
  background:radial-gradient(680px 380px at 88% 6%,rgba(250,206,1,.07),transparent 62%)}

/* --- SIGNATURE: dovetail divider under the hero --------------
   A row of TRAPEZOIDS: flat tops, angled sides, even gaps -
   joinery tabs, apt for a town built on toolmaking.

   Built to LOOP: the tile starts and ends mid-gap at the same
   height, so there is no notch at the repeat. VERIFY ON SCREEN.

   Self-contained on purpose. FOURTEEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the BLOCK, not the line, then
   verify the computed height in the browser.               */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:32px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:168px 32px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='168' height='32' viewBox='0 0 168 32' preserveAspectRatio='none'><rect x='0' y='22' width='168' height='10' fill='%23EDF0F3'/><path d='M14 22 L22 8 L48 8 L56 22 Z' fill='%23EDF0F3'/><path d='M70 22 L78 8 L104 8 L112 22 Z' fill='%23EDF0F3'/><path d='M126 22 L134 8 L160 8 L168 22 Z' fill='%23EDF0F3'/><path d='M-42 22 L-34 8 L-8 8 L0 22 Z' fill='%23EDF0F3'/></svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:116px 22px}}

/* --- CTAs: brand red, white text (5.98:1), 4px corners --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:4px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:4px;
  box-shadow:none}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* navy is the structural secondary - card rules and tiles */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--red)}

/* --- DARK-FIELD ACCENT: a lightened NAVY, because red fails.
   A fifth distinct case in this run:
     Loganville  dark primary            -> lighten the primary
     Enfield     secondary too dark      -> lighten the secondary
     Johnstown   secondary already light -> use it RAW
     New Britain BOTH fail               -> lighten the primary
     Westfield   red fails on navy, and the navy IS the field
                 -> lighten the SECONDARY well past the field
   Brand red measures 1.68:1 against the lightest hero band. The
   ice blue #A3111C clears 5.05:1 against every band including a
   glow-lightened sample; #8FB8E8 measured 4.19 and was rejected. */
.hero .eyebrow,.sec-dark .eyebrow{color:#EBE4D3}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--red)}
blockquote{border-left-color:var(--red)}
.ftr{background:var(--ink)}

/* Urbanist is a clean geometric grotesque - it sets a little wide,
   so pull the display tracking in slightly. */
h1,h2,h3{letter-spacing:-.02em}
.hero h1{font-size:clamp(2.05rem,4vw,3.2rem);line-height:1.13}

/* --- HEADER LOGO SIZING --------------------------------------
   STACKED LOCKUP at 1.22:1 - taller than the side-by-side one and
   squarer than the previous stacked ones. An ancestor block still
   sets `.brand img{height:40px}` mid-cascade, so the override
   stays. --- */
.brand img{height:52px}
@media(max-width:900px){.brand img{height:46px}}
@media(max-width:520px){.brand img{height:38px}}

/* ============================================================
   GULF COAST — Largo, FL
   Ocean-teal header, BLUE CTAs, brand green as the structural
   secondary, 8px corners, warm sand paper, and a SCALLOP divider
   of overlapping arcs.

   First Florida build in this chain. The palette moves to an
   OCEAN TEAL ink - a hue not used by any previous build, which
   have run navy, slate, pine and near-black - and the CTA is
   BLUE, which no previous build has used either (they have been
   red, green or navy).

   The SCALLOP divider is overlapping arcs, reading as both roof
   tile and water. It is distinct from New Britain's arcade
   because those semicircles sit discrete and separate; these
   overlap.
   ============================================================ */

/* --- header: ocean teal. Reverting to single-tier: the previous
       build's two-tier strip was its own signature and this build
       differentiates on hue and motif instead. --- */
.hdr{background:var(--ink);border-bottom:3px solid var(--teal);box-shadow:none}
.hdr-top{display:none}
.hdr .nav-l>li>a{color:#F6E6E7}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
.hdr .nav-l>li>a[aria-current]::after{background:#A3111C;height:3px}
.hdr .sub-b{color:#F6E6E7}
.hdr .burger span{background:#EBE4D3}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#A8A08E}

/* --- hero: ocean teal, TIGHTENED gradient with a WEAK aqua glow.
   The gradient ceiling and the glow strength were both tuned by
   measurement, not by eye: with the wider gradient this build
   started from, NO accent colour cleared 4.5 against the
   glow-lightened band without going essentially white. Pulling
   the top band down and the glow to .08 let the brand-adjacent
   aqua work instead. --- */
.hero{background:
   radial-gradient(720px 400px at 86% 8%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- NEUTRALISE THE ANCESTOR .hero::before GLOW LAYER --------
   Carried forward every clone. An ancestor build stacks a SECOND
   glow layer here (three gradients, z-index:-1) and a colour
   sweep recolours it mechanically - which is how a washed-out
   hero once reached QA. Override it explicitly. --- */
.hero::before{
  background:radial-gradient(680px 380px at 88% 6%,rgba(250,206,1,.06),transparent 62%)}

/* --- SIGNATURE: scallop divider under the hero ---------------
   A row of OVERLAPPING arcs - barrel tile, or water. The overlap
   is what separates it from the discrete semicircle arcade of an
   earlier build.

   Built to LOOP: the tile begins and ends mid-arc at the same
   height, so there is no notch at the repeat. VERIFY ON SCREEN.

   Self-contained on purpose. FIFTEEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the BLOCK, not the line, then
   verify the computed height in the browser.               */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:30px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:120px 30px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='30' viewBox='0 0 120 30' preserveAspectRatio='none'><rect x='0' y='18' width='120' height='12' fill='%23F8F4EC'/><path d='M-10 18 A26 16 0 0 1 42 18 Z' fill='%23F8F4EC'/><path d='M34 18 A26 16 0 0 1 86 18 Z' fill='%23F8F4EC'/><path d='M78 18 A26 16 0 0 1 130 18 Z' fill='%23F8F4EC'/></svg>")}
@media(max-width:760px){.hero::after{height:20px;background-size:80px 20px}}

/* --- CTAs: brand BLUE, white text (8.11:1), 8px corners.
       No previous build in this chain has used a blue CTA fill. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:8px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:8px;
  box-shadow:none}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* brand green is the structural secondary - card rules and ticks */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#A3111C}
.eyebrow::before{background:var(--teal)}

/* --- DARK-FIELD ACCENT: a light AQUA, and the gradient had to
   move to make it work. A sixth distinct case:
     Loganville  dark primary            -> lighten the primary
     Enfield     secondary too dark      -> lighten the secondary
     Johnstown   secondary already light -> use it RAW
     New Britain both brand colours fail -> lighten the primary
     Westfield   red fails, navy IS field-> lighten the secondary
     Largo       BOTH fail AND nothing
                 cleared the glow band   -> tighten the GRADIENT
                                            as well as the accent
   Brand blue measures 1.12:1 and brand green 1.01:1 against the
   glow-lightened band of the gradient this build started from -
   no tint of either would have worked without going white. The
   fix was to pull the gradient ceiling down and the glow to .08,
   after which #A3111C clears 5.42:1 against every band. */
.hero .eyebrow,.sec-dark .eyebrow{color:#EBE4D3}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#A3111C}
.eyebrow-amber{color:#A3111C}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#A3111C}
.ftr-l b{color:#A3111C}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* Plus Jakarta Sans is a touch wide and quite round */
h1,h2,h3{letter-spacing:-.022em}
.hero h1{font-size:clamp(2.05rem,4vw,3.15rem);line-height:1.14}

/* --- HEADER LOGO SIZING --------------------------------------
   Back to a CIRCULAR BADGE. An ancestor block still sets
   `.brand img{height:40px}` mid-cascade, so the override stays -
   a square badge wants more height than a wide lockup. --- */
.brand img{height:54px}
@media(max-width:900px){.brand img{height:46px}}
@media(max-width:520px){.brand img{height:40px}}

/* ============================================================
   MOBILE NAV DRAWER — CONTRAST FIX
   ============================================================
   *** LATENT INHERITED DEFECT, PRESENT IN EVERY DARK-HEADER
       BUILD IN THIS CHAIN, NOT JUST THIS ONE. ***

   Each dark-header clone adds a block like:

       .hdr .nav-l>li>a{color:#F6E6E7}
       .hdr .nav-l>li>a[aria-current]{color:#fff}

   written for the dark header BAR, and written at TOP LEVEL so
   it applies at every viewport width.

   At <=1100px `.nav` becomes a fixed drawer with
   `background:var(--paper)` — i.e. WHITE. The base stylesheet
   correctly sets `.nav-l>li>a{color:var(--ink-2)}` inside that
   breakpoint, but the clone rule carries the `.hdr` prefix and
   therefore HIGHER SPECIFICITY (0,3,1 vs 0,2,1), so it wins
   regardless of the media query.

   Result: pale blue links on white — nearly invisible — and the
   CURRENT page, which resolves to `color:#fff`, is COMPLETELY
   invisible.

   Three of these blocks are now stacked in this file, so scoping
   only the newest one is not enough; the older two still cascade.
   This block must therefore OVERRIDE ALL OF THEM, sit LAST, and
   carry at least the same specificity.

   >>> A DARK-HEADER COLOUR RULE MUST BE SCOPED TO THE DESKTOP
       BREAKPOINT. The header bar is dark; the mobile drawer that
       shares its markup is not. <<<
   ============================================================ */
@media(max-width:1100px){
  .hdr .nav-l>li>a,
  .hdr .nav-l>li>a:hover{color:var(--ink-2)}
  .hdr .nav-l>li>a[aria-current],
  .hdr .nav-l>li>a[aria-current="page"]{color:var(--red)}
  .hdr .nav-l>li>a[aria-current]::after,
  .hdr .nav-l>li>a[aria-current="page"]::after{display:none;background:none}
  .hdr .sub-b{color:var(--tx-2)}
  .hdr .sub-b::after{border-right-color:var(--tx-2);border-bottom-color:var(--tx-2)}
  .hdr .sub a{color:var(--ink-2)}
  .hdr .sub a:hover{color:var(--red)}
}

/* ============================================================
   CLOCKMAKER — Bristol, CT
   LIGHT stone header, deep navy hero, GOLD CTA fill with a NAVY
   label, 14px corners, and a TICK-MARK divider.

   *** GOLD IS A FILL, NOT A TEXT COLOUR. ***
   #A3111C on the stone paper measures 1.53:1. It must never be
   used for text, icons, eyebrow ticks or card rules on a light
   field - those take navy or the blue secondary. Gold is only
   safe as a FILL carrying a navy label, or as an accent on the
   dark hero, where it measures 5.54:1 raw.
   ============================================================ */

/* --- header: LIGHT stone, navy type. Reverting from the previous
       build's dark header; the gold accent rule carries the brand
       instead. --- */
.hdr{background:var(--bg);border-bottom:3px solid var(--red);box-shadow:none}
.hdr-top{display:none}
.hdr .nav-l>li>a{color:var(--ink-2)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--ink)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx-2)}
.hdr .burger span{background:var(--ink)}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}

/* --- hero: deep navy with a WEAK gold glow. Gold over navy is a
       wide luminance gap, so the glow stays low (.10) - the same
       scaling rule that keeps a bright accent from washing the
       panel. --- */
.hero{background:
   radial-gradient(700px 400px at 84% 10%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(158deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}

/* --- NEUTRALISE THE ANCESTOR .hero::before GLOW LAYER --------
   Carried forward every clone. An ancestor build stacks a SECOND
   glow layer here and a colour sweep recolours it mechanically,
   which is how a washed-out hero once reached QA. --- */
.hero::before{
  background:radial-gradient(660px 380px at 86% 8%,rgba(250,206,1,.06),transparent 62%)}

/* --- SIGNATURE 1: MIRRORED HERO ------------------------------
   Image LEFT, copy RIGHT on desktop. Every previous build in this
   chain runs copy-left / image-right, so this reads as a
   different layout at a glance rather than a recolour.

   Scoped to min-width:901px, so THE MOBILE STACK IS UNTOUCHED and
   still matches every previous build in the chain - media first,
   then copy, then the call buttons. Verified side by side against
   the previous build at 390px: identical offsets, direction:ltr.
   Only the desktop two-column order flips, so nothing about the
   mobile conversion path moves.                                */
@media(min-width:901px){
  /* The grid element is `.hero-in`, NOT `.hero-grid`.
     I wrote this rule against `.hero-grid` first and it styled NOTHING - the
     same failure as an earlier build in this chain, where a stylesheet rule
     referenced markup that did not exist and nobody noticed for several clones.
     >>> VERIFY THE SELECTOR AGAINST THE DOM BEFORE TRUSTING THE RULE. <<<
     `.hero-in` also carries `.wrap`, whose `padding-inline:var(--pad)` sets both
     sides equally, so flipping direction cannot unbalance it. */
  .hero-in{direction:rtl}
  .hero-in>*{direction:ltr}
}

/* --- SIGNATURE 2: TICK-MARK divider --------------------------
   Alternating tall and short vertical strokes - a clock face
   laid flat. Bristol was the clockmaking capital of America and
   the museum is still here.

   Every previous divider in this chain has been a filled
   SILHOUETTE edge (triangles, arcs, trapezoids, ridgelines).
   This one is LINEAR STROKES on a solid base, which is a
   different kind of mark entirely.

   Built to LOOP: the tile is 96px wide with strokes at a regular
   12px pitch, so the repeat lands mid-gap. VERIFY ON SCREEN.

   Self-contained on purpose. SIXTEEN .hero::after rules are now
   stacked in this file, one per build in the clone chain, and any
   property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED with
   left/right/top/bottom - patch the BLOCK, not the line, then
   verify the computed height in the browser.                   */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:26px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:96px 26px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='96' height='26' viewBox='0 0 96 26' preserveAspectRatio='none'><rect x='0' y='16' width='96' height='10' fill='%23F5F1E8'/><rect x='0' y='2' width='3' height='14' fill='%23F5F1E8'/><rect x='12' y='9' width='3' height='7' fill='%23F5F1E8'/><rect x='24' y='9' width='3' height='7' fill='%23F5F1E8'/><rect x='36' y='9' width='3' height='7' fill='%23F5F1E8'/><rect x='48' y='2' width='3' height='14' fill='%23F5F1E8'/><rect x='60' y='9' width='3' height='7' fill='%23F5F1E8'/><rect x='72' y='9' width='3' height='7' fill='%23F5F1E8'/><rect x='84' y='9' width='3' height='7' fill='%23F5F1E8'/></svg>")}
@media(max-width:760px){.hero::after{height:18px;background-size:66px 18px}}

/* --- SIGNATURE 3: GOLD CTA WITH A NAVY LABEL -----------------
   *** THE FIRST LIGHT CTA FILL IN THIS CHAIN. ***
   Every previous build filled its CTA with a dark colour and put
   white on it. Here white measures 1.72:1 against the gold and
   navy measures 8.02:1, so the label colour has to be overridden
   EVERYWHERE the button appears - hero, dark sections, cards and
   the sticky mobile call bar - because the inherited rules all
   assume a dark fill and hardcode #fff.                        */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:14px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:var(--ink);border-radius:14px;
  box-shadow:none;font-weight:700}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:var(--ink)}
.btn-red .ic,.callbar a .ic,.hero .btn-red .ic,.sec-dark .btn-red .ic{color:var(--ink)}
.btn-amber{background:var(--red);border-color:var(--red);color:var(--ink);box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:var(--ink)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* blue secondary carries the structural marks on LIGHT fields,
   because gold is unreadable there (1.53:1) */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:var(--red)}

/* --- DARK-FIELD ACCENT: gold used RAW. A seventh distinct case,
   and only the second where the brand colour needed no
   adjustment at all:
     Loganville  dark primary            -> lighten the primary
     Enfield     secondary too dark      -> lighten the secondary
     Johnstown   secondary already light -> use it RAW
     New Britain both brand colours fail -> lighten the primary
     Westfield   red fails, navy IS field-> lighten the secondary
     Largo       both fail, nothing
                 cleared the glow band   -> tighten the GRADIENT
     Bristol     gold already light      -> use it RAW (5.54:1)
   The catch on this build is the OPPOSITE of the usual one: gold
   is fine on the dark hero and unusable on the light paper, so
   the accent rules have to be scoped to dark fields only. */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:var(--red)}
.eyebrow-amber{color:var(--red)}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:var(--red)}
.ftr-l b{color:var(--red)}

.sec-dark{background:linear-gradient(158deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* Sora runs wide and geometric; pull the display tracking in */
h1,h2,h3{letter-spacing:-.03em}
.hero h1{font-size:clamp(2rem,3.9vw,3.05rem);line-height:1.15}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE again. An ancestor block still sets
   `.brand img{height:40px}` mid-cascade, so the override stays -
   a square badge wants more height than a wide lockup. --- */
.brand img{height:54px}
@media(max-width:900px){.brand img{height:46px}}
@media(max-width:520px){.brand img{height:40px}}

/* ============================================================
   TWO RANGES — Mt Pleasant, MI
   DEEP BLUE header carrying a LIGHT logo variant, deep blue
   hero, GREEN CTA with a white label, 16px corners, and a
   TWO-TONE LAYERED PEAK divider.

   NOTE: `--red` holds the GREEN and `--teal` holds the BLUE on
   this build. They are ROLE names, not hues. Read the values.
   ============================================================ */

/* --- header: DEEP BLUE with a green rule, carrying the LIGHT
       logo variant. This lockup has NO white interior disc (unlike
       the circular badges of recent builds), so the full-colour
       file would vanish here - its wordmark and its graphic are
       both blue. --- */
.hdr{background:#231A15;border-bottom:3px solid var(--red);box-shadow:none}
.hdr-top{display:none}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#F6E6E7}
.hdr .burger span{background:#fff}

/* --- DESKTOP-ONLY nav colours ------------------------------
   *** SCOPED DELIBERATELY. ***
   A dark header shares its markup with the MOBILE DRAWER, which
   has `background:var(--paper)` - white. Writing these light
   colours at top level (as several earlier builds in this chain
   did) makes them win at every width via the `.hdr` prefix's
   higher specificity, and the drawer becomes pale-on-white with
   the CURRENT PAGE, which resolves to #fff, completely invisible.

   That defect shipped on three builds before it was caught by a
   client looking at their phone. It is prevented here by scoping
   from the start, and the explicit mobile block below is kept as
   a belt-and-braces override because several stacked ancestor
   rules still cascade. --- */
@media(min-width:1101px){
  .hdr .nav-l>li>a{color:#F7E2E3}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
  .hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
  .hdr .sub-b{color:#F6E6E7}
}
@media(max-width:1100px){
  .hdr .nav-l>li>a,
  .hdr .nav-l>li>a:hover{color:var(--ink-2)}
  .hdr .nav-l>li>a[aria-current]{color:var(--red)}
  .hdr .nav-l>li>a[aria-current]::after{display:none}
  .hdr .sub-b{color:var(--tx-2)}
  .hdr .sub a{color:var(--ink-2)}
}

/* --- hero: deep blue, weak green glow --- */
.hero{background:
   radial-gradient(720px 420px at 82% 12%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(160deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(680px 390px at 84% 10%,rgba(250,206,1,.06),transparent 62%)}

/* --- SIGNATURE: TWO-TONE LAYERED PEAK divider ----------------
   *** THE FIRST MULTI-COLOUR DIVIDER IN THIS CHAIN. ***
   Every previous one has been a single flat silhouette cut in
   one colour. This stacks a MID-BLUE range behind a PAPER range,
   offset by half a period, so it reads as depth rather than as
   an edge. It also echoes the client's logo.

   Built to LOOP: tile is 120px wide with a 60px peak period, so
   two full peaks per tile and the repeat lands on a peak base.

   Self-contained on purpose. SEVENTEEN .hero::after rules are
   now stacked in this file, one per build in the clone chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED
   with left/right/top/bottom - patch the BLOCK, not the line,
   then verify the computed height in the browser. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:34px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:120px 34px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='34' viewBox='0 0 120 34' preserveAspectRatio='none'><path d='M-30 34 L0 6 L30 34 L60 6 L90 34 L120 6 L150 34 Z' fill='%232C6BB5'/><path d='M0 34 L30 14 L60 34 L90 14 L120 34 Z' fill='%23F1F4EE'/><rect x='0' y='30' width='120' height='4' fill='%23F1F4EE'/></svg>")}
@media(max-width:760px){.hero::after{height:24px;background-size:84px 24px}}

/* --- GREEN CTA, white label (5.41:1). Back to a dark fill after
       the previous build's light gold, so the inherited #fff
       labels are correct again - but the previous build OVERRODE
       them to navy, and those overrides must be undone. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:16px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:16px;
  box-shadow:none;font-weight:600}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-red .ic,.callbar a .ic,.hero .btn-red .ic,.sec-dark .btn-red .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* structural marks on LIGHT fields use the blue secondary */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: green LIGHTENED to #FACE01.
   An eighth distinct case, and back to the commonest one:
     Loganville  dark primary            -> lighten the primary
     Enfield     secondary too dark      -> lighten the secondary
     Johnstown   secondary already light -> use it RAW
     New Britain both brand colours fail -> lighten the primary
     Westfield   red fails, navy IS field-> lighten the secondary
     Largo       both fail, nothing
                 cleared the glow band   -> tighten the GRADIENT
     Bristol     gold already light      -> use it RAW
     Mt Pleasant brand green 1.55:1      -> LIGHTEN to #FACE01
   Brand green measures 1.55:1 on the hero - one of the worst
   raw readings in the series. #FACE01 clears every band
   including the glow-lightened sample at 5.30:1. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(160deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* Space Grotesk is wide and geometric; pull display tracking in */
h1,h2,h3{letter-spacing:-.025em}
.hero h1{font-size:clamp(2rem,3.85vw,3rem);line-height:1.16}

/* --- HEADER LOGO SIZING --------------------------------------
   A STACKED LOCKUP at roughly 1.05:1, so it wants height rather
   than width. An ancestor block still sets `.brand img{height:40px}`
   mid-cascade, so this override stays on every clone. --- */
.brand img{height:50px}
@media(max-width:900px){.brand img{height:44px}}
@media(max-width:520px){.brand img{height:38px}}

/* --- REVERT THE PREVIOUS BUILD'S MIRRORED HERO ---------------
   The clone source made image-left / copy-right its signature
   layout. It survived the sweep because it is pure CSS with no
   place name in it, so nothing flagged it - and it would have
   shipped here, quietly undoing that build's differentiation
   AND this one's.

   >>> A STRUCTURAL RULE FROM THE PREVIOUS BUILD IS INVISIBLE TO
       EVERY TEXT-BASED CHECK. Diff the theme block's STRUCTURAL
       rules, not just its colours, on every clone. <<<

   Restored to the chain-standard copy-left / image-right. */
@media(min-width:901px){
  .hero-in{direction:ltr}
  .hero-in>*{direction:ltr}
}

/* --- STACKED LOCKUP NEEDS MORE HEIGHT THAN A BADGE -----------
   At 50px the three-line wordmark under the graphic renders at
   roughly 10px and stops being readable. A circular badge is
   legible small because it is one mark; a lockup is not. */
.brand img{height:62px}
@media(max-width:900px){.brand img{height:54px}}
@media(max-width:520px){.brand img{height:46px}}

/* ============================================================
   FLOOD GAUGE — Bloomsburg, PA
   DEEP RED header, deep blue hero, RED CTA with a white label,
   GOLD on dark fields, 12px corners, and a STEPPED GAUGE
   divider.

   *** THE FIRST TRI-COLOUR SYSTEM IN THIS CHAIN. *** Every
   previous build ran two brand colours; this logo carries three.

   NOTE: `--red` genuinely holds RED on this build and `--teal`
   holds a BLUE. After several builds of inverted tokens that is
   worth stating rather than assuming - read the values anyway.

   *** GOLD IS A DARK-FIELD COLOUR ONLY. *** Brand gold measures
   1.93:1 on the pale slate paper. It may never carry text,
   icons or rules on a light field; those take the blue
   secondary or the red. Gold appears on the hero, the dark
   sections, the footer and the deep red header rule.
   ============================================================ */

/* --- header: DEEP RED, white nav, gold rule ------------------
   The first red header in the chain. White on this red measures
   7.98:1 and the gold rule 5.36:1.

   The badge logo needs NO light variant here: it carries an
   intact white interior disc, which separates it from the red
   exactly as it would from a dark blue or a pale paper. --- */
.hdr{background:#231A15;border-bottom:3px solid #FACE01;box-shadow:none}
.hdr-top{display:none}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#F6E6E7}
.hdr .burger span{background:#fff}

/* --- DESKTOP-ONLY nav colours ------------------------------
   *** SCOPED DELIBERATELY, as on the previous dark-header build.
   A dark header shares its markup with the MOBILE DRAWER, which
   has `background:var(--paper)`. Writing these light colours at
   top level makes them win at every width through the `.hdr`
   prefix's higher specificity, and the drawer becomes
   pale-on-white with the CURRENT PAGE - which resolves to #fff -
   completely invisible. That shipped on three builds in this
   family before a client caught it on their phone. --- */
@media(min-width:1101px){
  .hdr .nav-l>li>a{color:#F7E2E3}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
  .hdr .nav-l>li>a[aria-current]::after{background:#FACE01;height:3px}
  .hdr .sub-b{color:#F6E6E7}
}
@media(max-width:1100px){
  .hdr .nav-l>li>a,
  .hdr .nav-l>li>a:hover{color:var(--ink-2)}
  .hdr .nav-l>li>a[aria-current]{color:var(--red)}
  .hdr .nav-l>li>a[aria-current]::after{display:none}
  .hdr .sub-b{color:var(--tx-2)}
  .hdr .sub a{color:var(--ink-2)}
}

/* --- hero: deep blue, TIGHTENED gradient --------------------
   The gradient itself is a contrast lever, not just decoration.
   With a lighter top stop (#155A93) NOTHING cleared 4.5:1 -
   brand gold managed 3.08 and even a much-lightened gold only
   3.92. Darkening the top stop to #3A2A20 lets #FACE01 clear
   every band at 5.23:1 including the glow-lightened sample.
   Second time in this chain the gradient had to move. --- */
.hero{background:
   radial-gradient(720px 420px at 80% 12%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(162deg,#3A2A20 0%,var(--ink) 55%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(680px 390px at 82% 10%,rgba(250,206,1,.06),transparent 62%)}

/* --- SIGNATURE: STEPPED GAUGE divider ------------------------
   Solid blocks of stepped height, reading as marks on a river
   gauge. Bloomsburg floods when the gauge at the Town reaches
   19 feet and the Town publishes its crest history in feet, so
   the motif is the local fact rather than decoration.

   Every previous divider in this chain has been triangles,
   arcs, trapezoids, ridgelines, thin ticks or layered peaks.
   Solid stepped blocks are none of those.

   Built to LOOP: the tile is 132px wide and the step sequence
   returns to its starting height at the tile edge.

   Self-contained on purpose. EIGHTEEN .hero::after rules are
   now stacked in this file, one per build in the clone chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. That height sits on a line SHARED
   with left/right/top/bottom - patch the BLOCK, not the line,
   then verify the computed height in the browser. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:30px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:132px 30px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='132' height='30' viewBox='0 0 132 30' preserveAspectRatio='none'><rect x='0' y='22' width='132' height='8' fill='%23F2F4F7'/><rect x='0' y='14' width='22' height='8' fill='%23F2F4F7'/><rect x='22' y='6' width='22' height='16' fill='%23F2F4F7'/><rect x='44' y='18' width='22' height='4' fill='%23F2F4F7'/><rect x='66' y='10' width='22' height='12' fill='%23F2F4F7'/><rect x='88' y='2' width='22' height='20' fill='%23F2F4F7'/><rect x='110' y='14' width='22' height='8' fill='%23F2F4F7'/></svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:96px 22px}}

/* --- RED CTA, white label (6.23:1) --------------------------
   Back to a dark fill, so the inherited #fff labels are correct
   again. Two builds ago they were overridden to navy for a light
   gold fill; those overrides are undone here. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:12px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:12px;
  box-shadow:none;font-weight:600}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.btn-red .ic,.callbar a .ic,.hero .btn-red .ic,.sec-dark .btn-red .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* structural marks on LIGHT fields use the BLUE secondary -
   gold is 1.93:1 on this paper and must never appear there */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#F6E6E7}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: gold LIGHTENED to #FACE01, and the
   GRADIENT TIGHTENED as well. A ninth distinct case, and only
   the second needing both moves at once:
     Loganville  dark primary            -> lighten the primary
     Enfield     secondary too dark      -> lighten the secondary
     Johnstown   secondary already light -> use it RAW
     New Britain both brand colours fail -> lighten the primary
     Westfield   red fails, navy IS field-> lighten the secondary
     Largo       both fail, nothing
                 cleared the glow band   -> tighten the GRADIENT
     Bristol     gold already light      -> use it RAW
     Mt Pleasant brand green 1.55:1      -> lighten to #8FE09B
     Bloomsburg  gold 3.08 AND a light
                 gold only 3.92          -> LIGHTEN *AND* TIGHTEN
   --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(162deg,#3A2A20,var(--ink))}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* Zilla Slab is a SLAB SERIF - the first serif display in this
   chain since the second build. It sets wider and taller than a
   grotesque, so the display scale comes down slightly and the
   tracking stays near neutral rather than tightening. */
h1,h2,h3{letter-spacing:-.012em}
.hero h1{font-size:clamp(1.95rem,3.7vw,2.9rem);line-height:1.18}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE, so height rather than width, and it stays
   legible smaller than the previous build's stacked lockup did.
   An ancestor block still sets `.brand img{height:40px}`
   mid-cascade, so this override stays on every clone. --- */
.brand img{height:54px}
@media(max-width:900px){.brand img{height:46px}}
@media(max-width:520px){.brand img{height:40px}}

/* ============================================================
   SONORAN — Maricopa, AZ
   ESPRESSO header #231A15, deep GREEN hero, RED CTA with a
   white label, SAND on dark fields, 24px corners, and a
   DIAMOND BAND divider on warm linen paper.

   `--red` is red and `--teal` holds a GREEN on this build.
   Read the values regardless - several builds inverted them.

   *** BRAND GREEN IS A DARK-FIELD COLOUR ONLY. *** The logo's
   green measures 1.92:1 on this paper and may never carry text
   on a light field. Light-field marks use the DESERT GREEN
   #7E0D16 (4.59:1). The bright logo green appears only on the
   espresso header rule, where it reads 6.52:1.
   ============================================================ */

/* --- header: ESPRESSO, white nav, brand-green rule ----------
   The first warm-dark header in the chain. White on this brown
   measures 13.69:1 and the brand-green rule 6.52:1. The badge
   logo needs NO light variant - it carries an intact white
   interior disc. --- */
.hdr{background:#231A15;border-bottom:3px solid #A3111C;box-shadow:none}
.hdr-top{display:none}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:#F6E6E7}
.hdr .burger span{background:#fff}

/* --- DESKTOP-ONLY nav colours ------------------------------
   *** SCOPED DELIBERATELY. *** A dark header shares its markup
   with the MOBILE DRAWER, which has `background:var(--paper)`.
   At top level these light colours win at every width through
   the `.hdr` prefix's specificity and the drawer becomes
   pale-on-white, with the CURRENT PAGE - which resolves to #fff
   - completely invisible. That shipped on three builds in this
   family before a client caught it on their phone. --- */
@media(min-width:1101px){
  .hdr .nav-l>li>a{color:#231A15}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#fff}
  .hdr .nav-l>li>a[aria-current]::after{background:#A3111C;height:3px}
  .hdr .sub-b{color:#F6E6E7}
}
@media(max-width:1100px){
  .hdr .nav-l>li>a,
  .hdr .nav-l>li>a:hover{color:var(--ink)}
  .hdr .nav-l>li>a[aria-current]{color:var(--red)}
  .hdr .nav-l>li>a[aria-current]::after{display:none}
  .hdr .sub-b{color:var(--tx-2)}
  .hdr .sub a{color:var(--ink)}
}

/* --- hero: DEEP GREEN, first green hero in the chain --------
   Top stop chosen by measurement, not taste. At #2E6B27 the
   sand accent managed only 4.36:1; #3A2A20 lifts it to 5.47:1
   across every band including the glow-lightened sample. --- */
.hero{background:
   radial-gradient(720px 420px at 78% 12%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(160deg,#3A2A20 0%,#1F4A1C 55%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(680px 390px at 80% 10%,rgba(250,206,1,.06),transparent 62%)}

/* --- SIGNATURE: DIAMOND BAND divider ------------------------
   A row of lozenges on a baseline, referencing Southwestern
   textile banding. Every previous divider in this chain has
   been triangles, arcs, trapezoids, ridgelines, thin ticks,
   layered peaks or stepped blocks - never diamonds.

   Built to LOOP: the tile is 120px and the diamond sequence
   returns to its start at the tile edge.

   Self-contained on purpose. NINETEEN .hero::after rules are
   now stacked in this file, one per build in the clone chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:30px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:132px 30px;
  background-image:url("data:image/svg+xml;utf8,\
<svg xmlns='http://www.w3.org/2000/svg' width='132' height='30' viewBox='0 0 132 30' preserveAspectRatio='none'>\
<rect x='0' y='22' width='132' height='8' fill='%23FAF4ED'/>\
<path d='M16 20 L24 12 L32 20 L24 28 Z' fill='%23FAF4ED'/>\
<path d='M50 20 L60 6 L70 20 L60 34 Z' fill='%23FAF4ED'/>\
<path d='M88 20 L96 12 L104 20 L96 28 Z' fill='%23FAF4ED'/>\
<rect x='40' y='19' width='4' height='2' fill='%23FAF4ED'/>\
<rect x='78' y='19' width='4' height='2' fill='%23FAF4ED'/>\
<rect x='114' y='19' width='4' height='2' fill='%23FAF4ED'/>\
<rect x='4' y='19' width='4' height='2' fill='%23FAF4ED'/>\
</svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:96px 22px}}

/* --- RED CTA, white label (6.20:1) --------------------------
   *** THE SAND RING IS A CONTRAST FIX, NOT DECORATION. ***
   WCAG 1.4.11 wants 3:1 between a control's boundary and the
   surface behind it. The red fill measures just 1.65:1 against
   this green hero, so as a SHAPE the button barely exists even
   though its LABEL is perfectly legible at 6.20:1.

   That gap is real and it is not new: on the previous build a
   red CTA sat at 1.71:1 on its blue hero, and the one before
   that at 2.06:1. Every build was checking label-on-button and
   none was checking button-on-field.

   The 2px sand ring supplies the boundary: 8.05:1 against the
   hero and 4.88:1 against the red fill itself. On light fields
   no ring is needed - red on linen is already 5.67:1. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:24px}
.btn-red,
.hero .btn-red,.sec-dark .btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:24px;
  box-shadow:none;font-weight:600}
.hero .btn-red,.sec-dark .btn-red{border:2px solid #FACE01}
.btn-red:hover,
.hero .btn-red:hover,.sec-dark .btn-red:hover{
  background:var(--red-dk);border-color:#FACE01;color:#fff}
.btn-red .ic,.callbar a .ic,.hero .btn-red .ic,.sec-dark .btn-red .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* structural marks on LIGHT fields use DESERT GREEN - the
   logo's brand green is 1.92:1 on this paper and never appears
   as a light-field mark */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#EBE4D3}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: warm SAND #FACE01 -------------------
   Tenth distinct accent case in the chain. The logo's own green
   could not be made to work on a green hero at any lightness
   that still read as the brand colour, so the accent moves to
   the third colour in the desert palette instead. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(160deg,#3A2A20,#1F4A1C)}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* --- STRUCTURAL FIRST: CENTRED SECTION HEADINGS -------------
   Every previous build in this chain left-aligns section
   headings. Centring them - with a short centred rule under
   the h2 - changes the page rhythm noticeably while leaving
   the conversion structure untouched.

   *** SELECTOR VERIFIED AGAINST THE DOM. *** The class is
   `.sec-head`, NOT `.sec-h`, and it wraps the eyebrow, h2 and
   lede in an inner <div>. Written against the wrong name these
   rules match nothing and fail silently - the stylesheet looks
   right and the page is simply unchanged.

   Scoped to section headers only: the HERO stays copy-left, and
   body prose, cards and article text stay left-aligned, because
   centred running text is harder to read. --- */
.sec-head{display:block;text-align:center}
.sec-head>div{margin-left:auto;margin-right:auto;max-width:760px}
.sec-head .eyebrow{justify-content:center}
.sec-head h2::after{
  content:"";display:block;width:56px;height:3px;border-radius:2px;
  background:var(--teal);margin:14px auto 0}
.sec-dark .sec-head h2::after,.hero .sec-head h2::after{background:#FACE01}
.sec-head .lede{margin-left:auto;margin-right:auto}
.sec-head .btn,.sec-head .sec-cta{margin-left:auto;margin-right:auto}
@media(max-width:760px){.sec-head>div{max-width:none}}

/* Epilogue sets tighter and more geometric than the previous
   build's slab, so the display scale comes up slightly and the
   tracking tightens. */
h1,h2,h3{letter-spacing:-.022em}
.hero h1{font-size:clamp(2rem,3.9vw,3.05rem);line-height:1.14}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE, so height rather than width. An ancestor
   block still sets `.brand img{height:40px}` mid-cascade, so
   this override stays on every clone. --- */
.brand img{height:56px}
@media(max-width:900px){.brand img{height:48px}}
@media(max-width:520px){.brand img{height:42px}}

/* ============================================================
   VALLEY — Visalia, CA
   WHITE header with a brand-green rule, deep PINE GREEN hero,
   BLUE CTA with a white label, MINT on dark fields, 18px
   corners, and a DOUBLE WAVE divider on near-white paper.

   *** GREEN-LED, BLUE-ACTIONED. *** Three earlier builds paired
   blue and green and every one made the blue the ink. Here the
   INK is pine green and the BLUE is the action colour.
   `--red` holds a BLUE on this build. Read the values.

   *** THE LOGO'S BRIGHT GREEN IS 3.01:1 ON THIS PAPER. ***
   Below 4.5, so it may not carry text on a light field. Light
   field marks use the darker green #7E0D16 (5.96:1). The bright
   green appears only as the header rule, where 3:1 is the
   correct threshold for a graphical element.
   ============================================================ */

/* --- header: LIGHT, and deliberately so ---------------------
   Four of the last five builds used a dark header, and every
   one needed its nav colours scoping to the desktop breakpoint
   or the MOBILE DRAWER went illegible - the drawer shares this
   markup and has a light background, so unscoped dark-header
   rules win at every width through `.hdr` specificity and the
   current page, resolving to #fff, disappears entirely. That
   shipped three times before a client caught it.

   A light header shares its colours with the drawer, so the
   whole class of failure cannot arise. No scoping needed here,
   and none should be added. --- */
.hdr{background:#fff;border-bottom:3px solid #A3111C;box-shadow:0 1px 0 rgba(35,26,21,.04)}
.hdr-top{display:none}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}
.hdr .burger span{background:var(--ink)}
.hdr .nav-l>li>a{color:var(--ink)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--red)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx-2)}

/* --- hero: DEEP PINE GREEN ----------------------------------
   Top stop chosen by measurement. At #1B5C39 the mint accent
   managed only 4.06:1; #3A2A20 lifts it to 5.36:1 across every
   band including the glow-lightened sample. --- */
.hero{background:
   radial-gradient(720px 420px at 78% 12%,rgba(250,206,1,.08),transparent 60%),
   linear-gradient(158deg,#3A2A20 0%,#231A15 55%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(680px 390px at 80% 10%,rgba(250,206,1,.06),transparent 62%)}

/* --- SIGNATURE: DOUBLE WAVE divider -------------------------
   Two offset sine curves. Every previous divider in this chain
   has been angular or built from arc segments - triangles,
   arcs, trapezoids, ridgelines, ticks, layered peaks, stepped
   blocks, lozenges. A continuous smooth curve is none of them.

   Built to LOOP: the tile is 160px and both curves return to
   their starting height at the tile edge.

   Self-contained on purpose. TWENTY .hero::after rules are now
   stacked in this file, one per build in the clone chain, and
   any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:32px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:160px 32px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='32' viewBox='0 0 160 32' preserveAspectRatio='none'><path d='M0 20 C 20 8, 60 8, 80 20 C 100 32, 140 32, 160 20 L160 32 L0 32 Z' fill='%23FCFCFA' opacity='0.45'/><path d='M0 26 C 20 16, 60 16, 80 26 C 100 36, 140 36, 160 26 L160 32 L0 32 Z' fill='%23FCFCFA'/></svg>")}
@media(max-width:760px){.hero::after{height:22px;background-size:112px 22px}}

/* --- BLUE CTA, white label (7.14:1) -------------------------
   *** THE FIRST BLUE CTA IN THIS CHAIN, AND A DIFFERENT FIX
   FROM LAST BUILD FOR THE SAME PROBLEM. ***
   WCAG 1.4.11 wants 3:1 between a control's boundary and the
   surface behind it. Brand blue measures just 1.78:1 against
   this pine hero - so on DARK fields the button INVERTS to a
   bone fill with a deep blue label:
       bone vs the hero field .... 11.53:1
       blue label on bone ........  7.98:1
   The previous build solved the same failure with a light ring
   round a dark fill. Both work; the inversion is used here
   because a light-filled button reads as the primary action
   more strongly on a dark hero, and because varying the remedy
   keeps the builds visually distinct.

   On light fields no inversion is needed - blue on near-white
   paper is already 7.14:1. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:18px}
.btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:18px;
  box-shadow:none;font-weight:600}
.btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-red,.sec-dark .btn-red{
  background:#FFFFFF;border-color:#FFFFFF;color:#231A15}
.hero .btn-red:hover,.sec-dark .btn-red:hover{
  background:#fff;border-color:#fff;color:#7E0D16}
.hero .btn-red .ic,.sec-dark .btn-red .ic{color:#231A15}
.btn-red .ic,.callbar a .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* structural marks on LIGHT fields use the DARKER green -
   the logo's bright green is 3.01:1 on this paper */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#EBE4D3}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: MINT #FACE01 ------------------------
   Eleventh distinct accent case in the chain. The logo's own
   green sits at 3.4:1 on the pine hero, so it is lightened to
   a mint that clears every band at 5.36:1. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(158deg,#3A2A20,#231A15)}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* --- STRUCTURAL: SECTION HEADING WITH A RULE TO THE EDGE -----
   Left aligned, with a hairline continuing from the heading
   across the remaining width. The third distinct heading
   treatment in the chain after plain-left and the previous
   build's centred version.

   *** SELECTOR VERIFIED AGAINST THE DOM: the class is
   `.sec-head` and it wraps eyebrow/h2/lede in an inner <div>.
   Written against a guessed name these rules match nothing and
   fail silently - which is exactly what happened last build,
   where the whole structural differentiator was absent while
   the stylesheet looked correct. --- */
.sec-head{display:flex;align-items:flex-end;gap:28px;text-align:left}
.sec-head>div{max-width:720px;flex:0 1 auto}
.sec-head .eyebrow{justify-content:flex-start}
.sec-head::after{
  content:"";flex:1 1 auto;height:1px;background:var(--line);
  margin-bottom:14px;min-width:40px}
.sec-dark .sec-head::after{background:rgba(255,255,255,.22)}
@media(max-width:860px){
  .sec-head{display:block}
  .sec-head::after{display:none}
}

/* Rubik sets wide and geometric with a large x-height, so the
   display scale comes down slightly and tracking tightens. */
h1,h2,h3{letter-spacing:-.018em}
.hero h1{font-size:clamp(1.95rem,3.75vw,2.95rem);line-height:1.16}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE on a LIGHT header, so it can run a little
   larger than it could on a dark one without shouting. An
   ancestor block still sets `.brand img{height:40px}`
   mid-cascade, so this override stays on every clone. --- */
.brand img{height:58px}
@media(max-width:900px){.brand img{height:50px}}
@media(max-width:520px){.brand img{height:44px}}

/* ============================================================
   OLD TOWN — Florissant, MO
   NAVY header with a yellow rule, deep NAVY hero, LOGO YELLOW
   CTA with a navy label, 28px corners, and a PERFORATED STAMP
   EDGE divider on warm ash paper.

   *** `--red` HOLDS A YELLOW ON THIS BUILD. *** Read the
   values, never the token names. Two builds ago it held a
   blue.
   ============================================================ */

/* --- header: NAVY, so the nav rules MUST be scoped ----------
   The previous build used a LIGHT header specifically because
   dark headers in this chain have repeatedly broken the mobile
   drawer - the drawer shares this markup and has a light
   background, so an unscoped dark-header rule wins at every
   width through `.hdr` specificity and the nav text resolves to
   white on white. That shipped three times before a client
   caught it.

   Going dark again makes the scoping MANDATORY. Every rule
   below that sets a light nav colour is inside the desktop
   media query, and the mobile override follows it explicitly.
   Both states are measured in QA - do not "tidy" these into a
   single unscoped block. --- */
.hdr{background:#0D2036;border-bottom:4px solid var(--red)}
.hdr-top{display:none}
.hdr .logo-w b{color:#fff}
.hdr .logo-w span{color:rgba(255,255,255,.72)}
.hdr .burger span{background:#fff}
@media(min-width:1101px){
  .hdr .nav-l>li>a{color:#fff}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--red)}
  .hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
  .hdr .sub-b{color:rgba(255,255,255,.72)}
}
@media(max-width:1100px){
  /* EXPLICIT mobile override — the drawer is a LIGHT panel. */
  .hdr .nav-l>li>a{color:var(--ink)}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--teal)}
  .hdr .nav-l>li>a[aria-current]::after{background:var(--teal)}
  .hdr .sub-b{color:var(--tx-2)}
}

/* --- hero: DEEP NAVY ---------------------------------------- */
.hero{background:
   radial-gradient(720px 420px at 76% 14%,rgba(250,206,1,.09),transparent 60%),
   linear-gradient(160deg,#3A2A20 0%,#231A15 56%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(680px 390px at 78% 12%,rgba(250,206,1,.07),transparent 62%)}

/* --- SIGNATURE: PERFORATED STAMP EDGE divider ---------------
   A straight paper-coloured band with a tight row of small
   semicircular bites along its top edge, like the edge of a
   postage stamp. Every previous divider in this chain has been
   angular (triangles, chevrons, trapezoids, ridgelines, ticks,
   layered peaks, stepped blocks, lozenges, slants), an arc
   segment, or a continuous wave. A fine repeating perforation
   is none of those — the bites are small and numerous, so it
   reads as texture rather than as a shaped edge.

   Built to LOOP: 96px tile holds exactly 8 bites of 12px pitch.

   Self-contained on purpose. TWENTY-ONE .hero::after rules are
   now stacked in this file, one per build in the clone chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:24px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:96px 24px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='96' height='24' viewBox='0 0 96 24'><path d='M0 24 L0 10 L96 10 L96 24 Z' fill='%23F7F6F1'/><circle cx='6' cy='10' r='5' fill='%23F7F6F1'/><circle cx='18' cy='10' r='5' fill='%23F7F6F1'/><circle cx='30' cy='10' r='5' fill='%23F7F6F1'/><circle cx='42' cy='10' r='5' fill='%23F7F6F1'/><circle cx='54' cy='10' r='5' fill='%23F7F6F1'/><circle cx='66' cy='10' r='5' fill='%23F7F6F1'/><circle cx='78' cy='10' r='5' fill='%23F7F6F1'/><circle cx='90' cy='10' r='5' fill='%23F7F6F1'/></svg>")}
@media(max-width:760px){.hero::after{height:18px;background-size:72px 18px}}

/* --- YELLOW CTA with a navy label ---------------------------
   *** A NEW WCAG 1.4.11 CASE, AND THE OPPOSITE OF THE LAST
   THREE BUILDS. ***
   Every previous build used a DARK CTA, so the only boundary
   risk was against the DARK hero. Yellow is a LIGHT colour, so
   the risk inverts: it is perfectly visible on the navy hero
   (9.32:1) and nearly invisible against the LIGHT paper:
       yellow vs warm ash paper .....  1.52:1  <-- FAILS
       yellow vs the navy hero ....... 9.32:1  <-- fine
       navy label on yellow .......... 9.32:1
   So the fix runs the other way round from the last two builds:
   a NAVY BORDER on light fields gives the button its boundary
   (14.16:1), and on dark fields the border is dropped because
   the fill already provides one.

   `validate.py` now checks BOTH fields. The old gate only ever
   looked at the hero, because until this build every CTA in the
   chain happened to be dark. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:28px}
.btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border:2px solid var(--ink);color:var(--ink);
  border-radius:28px;box-shadow:none;font-weight:600}
.btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--ink);color:var(--ink)}
.hero .btn-red,.sec-dark .btn-red{
  /* *** border-radius MUST be repeated here. *** An ancestor theme block sets
     `.hero .btn-red{border-radius:24px}` at (0,2,0); the bare `.btn-red` rule
     above is (0,1,0) and loses regardless of source order. A previous build
     found this exact hole and patched it FOR COLOUR PROPERTIES ONLY, so it
     re-opened the moment this build set a new radius. EVERY property a theme
     sets on these buttons must be declared at compound specificity. */
  background:var(--red);border-color:var(--red);color:var(--ink);border-radius:28px}
.hero .btn-red:hover,.sec-dark .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:var(--ink)}
.btn-red .ic,.callbar a .ic,.hero .btn-red .ic,.sec-dark .btn-red .ic{color:var(--ink)}
.btn-amber{background:var(--red);border:2px solid var(--ink);color:var(--ink);box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--ink);color:var(--ink)}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* structural marks on LIGHT fields use the MID BLUE -
   the logo's yellow is 1.52:1 on this paper and can never
   carry text or a hairline on a light field */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#EBE4D3}
.trust .ic{color:var(--red)}

/* --- DARK-FIELD ACCENT: #FACE01 ----------------------------
   Twelfth distinct accent case in the chain. A touch lighter
   than the logo yellow so it clears every band of the navy
   gradient at 8.07:1. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(160deg,#3A2A20,#231A15)}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* --- STRUCTURAL: SECTION HEADING WITH A TWO-TONE UNDERLINE ---
   The previous build ran a hairline from the heading out to the
   right edge. This one sits a short two-segment rule directly
   under the heading block — a navy segment butted against a
   yellow one. Fourth distinct heading treatment in the chain
   after plain-left, centred, and rule-to-edge.

   *** SELECTOR VERIFIED AGAINST THE DOM: the class is
   `.sec-head` and it wraps eyebrow/h2/lede in an inner <div>.
   Written against a guessed name these rules match nothing and
   fail silently — which is exactly what happened two builds
   ago, where the whole structural differentiator was absent
   while the stylesheet looked correct. --- */
.sec-head{text-align:left;display:block}
.sec-head>div{max-width:760px}
.sec-head .eyebrow{justify-content:flex-start}
.sec-head::after{
  content:"";display:block;width:96px;height:4px;margin-top:20px;
  border-radius:2px;
  background:linear-gradient(90deg,var(--ink) 0 46px,var(--red) 46px 96px)}
.sec-dark .sec-head::after{
  background:linear-gradient(90deg,#fff 0 46px,var(--red) 46px 96px)}

/* Newsreader is an editorial serif with a modest x-height, so
   the display scale comes UP slightly and tracking opens a
   little — the opposite adjustment from the last build's wide
   geometric sans. */
h1,h2,h3{letter-spacing:-.005em}
.hero h1{font-size:clamp(2.05rem,4vw,3.15rem);line-height:1.14}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE on a DARK header. An ancestor block still
   sets `.brand img{height:40px}` mid-cascade, so this override
   stays on every clone. --- */
.brand img{height:56px}
@media(max-width:900px){.brand img{height:48px}}
@media(max-width:520px){.brand img{height:42px}}

/* ============================================================
   THE ROUGE — Dearborn, MI
   LIGHT header with a red rule, deep NAVY hero, RED CTA with a
   white label, 5px corners, and a GRILLE divider on oatmeal
   paper.

   *** `--red` GENUINELY HOLDS A RED ON THIS BUILD. *** Two
   builds ago it held a yellow and three ago a blue. Read the
   values, never the token names — including when they happen
   to agree.
   ============================================================ */

/* --- header: LIGHT, and FORCED BY THE LOGO --------------------
   Only 21% of this badge's interior reads near-white, the
   lowest measured in the chain and below the 25% threshold at
   which a light variant becomes necessary. The badge is a solid
   NAVY ring, so on a dark navy header it has no edge at all and
   the mark dissolves into the background.

   Rather than generate a second logo file, the header is light
   and the one artwork sits correctly on it. That also removes
   the recurring mobile-drawer bug: the drawer shares this
   markup and has a light background, so unscoped dark-header
   rules can never win at mobile widths here. No scoping is
   needed, and none should be added. --- */
.hdr{background:#231A15;border-bottom:4px solid var(--red);
     box-shadow:0 1px 0 rgba(35,26,21,.05)}
.hdr-top{display:none}
.hdr .logo-w b{color:var(--ink)}
.hdr .logo-w span{color:var(--tx-2)}
.hdr .burger span{background:var(--ink)}
.hdr .nav-l>li>a{color:var(--ink)}
.hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--red)}
.hdr .nav-l>li>a[aria-current]::after{background:var(--red);height:3px}
.hdr .sub-b{color:var(--tx-2)}

/* --- hero: DEEP NAVY ---------------------------------------- */
.hero{background:
   radial-gradient(720px 420px at 74% 14%,rgba(250,206,1,.10),transparent 60%),
   linear-gradient(162deg,#3A2A20 0%,#231A15 56%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(680px 390px at 76% 12%,rgba(250,206,1,.07),transparent 62%)}

/* --- SIGNATURE: GRILLE divider ------------------------------
   A solid paper-coloured band with a row of LEANING
   PARALLELOGRAM SLOTS cut through it — a vent or radiator
   grille. Every previous divider in this chain has been a
   shaped EDGE (triangles, chevrons, trapezoids, ridgelines,
   ticks, layered peaks, stepped blocks, lozenges, slants,
   waves) or a perforated edge. A slotted band is a different
   construction: the boundary itself is straight and the
   interest is cut THROUGH the band rather than out of its rim.

   Suits a manufacturing town, and pairs with the slab display
   face without either one shouting.

   Built to LOOP: 84px tile holds exactly 4 slots at 21px pitch,
   and the lean is contained so nothing is clipped at the tile
   edge.

   Self-contained on purpose. TWENTY-TWO .hero::after rules are
   now stacked in this file, one per build in the clone chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:22px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:84px 22px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='84' height='22' viewBox='0 0 84 22'><path d='M0 0h84v22H0z' fill='%23F3F1EC'/><path d='M6 0 L13 0 L7 13 L0 13 Z' fill='%230B2B57' opacity='.30'/><path d='M27 0 L34 0 L28 13 L21 13 Z' fill='%230B2B57' opacity='.30'/><path d='M48 0 L55 0 L49 13 L42 13 Z' fill='%230B2B57' opacity='.30'/><path d='M69 0 L76 0 L70 13 L63 13 Z' fill='%230B2B57' opacity='.30'/></svg>")}
@media(max-width:760px){.hero::after{height:16px;background-size:60px 16px}}

/* --- RED CTA, white label (7.44:1) --------------------------
   *** WCAG 1.4.11 FAILS ON THE DARK SIDE AGAIN — THIRD BUILD
   RUNNING THAT THE GATE HAS CAUGHT THIS. ***
       red vs the oatmeal paper .....  6.59:1   fine
       red vs the navy hero .........  1.89:1   FAILS
   So on DARK fields the button INVERTS to a WHITE fill with a
   RED label:
       white fill vs the hero field .. 14.02:1
       red label on white ............  7.44:1
   Two builds ago the same failure was fixed with a bone fill
   and a blue label; one build ago a light CTA needed the
   opposite fix, a dark border on light paper. Same criterion,
   three different remedies. The gate checks the PROPERTY —
   whether the control has a visible boundary against whatever
   is behind it — not any particular fix. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:5px}
.btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:5px;
  box-shadow:none;font-weight:600}
.btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-red,.sec-dark .btn-red{
  background:#fff;border-color:#fff;color:var(--red);border-radius:5px}
.hero .btn-red:hover,.sec-dark .btn-red:hover{
  background:#F7E2E3;border-color:#F7E2E3;color:var(--red-dk)}
.hero .btn-red .ic,.sec-dark .btn-red .ic{color:var(--red)}
.btn-red .ic,.callbar a .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* structural marks on LIGHT fields use the STEEL BLUE */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#EBE4D3}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: #FACE01 -----------------------------
   Thirteenth distinct accent case in the chain. The logo's own
   red sits at 1.9:1 on the navy hero and can never carry text
   there, so the accent is the brand blue lightened to a pale
   steel that clears every band at 6.06:1. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(162deg,#3A2A20,#231A15)}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* --- STRUCTURAL: INLINE EYEBROW BESIDE THE HEADING ----------
   The eyebrow sits to the LEFT of the h2 on the same line,
   divided by a vertical rule, instead of stacking above it.
   Fifth distinct heading treatment in the chain after
   plain-left, centred, rule-to-edge and the two-tone underline.

   *** SELECTOR VERIFIED AGAINST THE DOM: the class is
   `.sec-head` and it wraps eyebrow/h2/lede in an inner <div>.
   Written against a guessed name these rules match nothing and
   fail silently — which is exactly what happened three builds
   ago, where the whole structural differentiator was absent
   while the stylesheet looked correct. --- */
.sec-head{text-align:left;display:block}
.sec-head>div{max-width:780px}
.sec-head .eyebrow{
  float:left;margin:0 16px 0 0;padding-right:16px;
  border-right:2px solid var(--red);line-height:1.5}
.sec-head h2{overflow:hidden}
.sec-head .lede{clear:both;padding-top:4px}
@media(max-width:760px){
  .sec-head .eyebrow{float:none;margin:0 0 10px;padding-right:0;border-right:0}
  .sec-head h2{overflow:visible}
}

/* Bitter is a slab with a large x-height and sturdy stems, so
   the display scale comes down slightly and tracking stays
   neutral — the opposite adjustment from the last build's
   editorial serif. */
h1,h2,h3{letter-spacing:-.012em}
.hero h1{font-size:clamp(1.95rem,3.7vw,2.9rem);line-height:1.17}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE on a LIGHT header. An ancestor block still
   sets `.brand img{height:40px}` mid-cascade, so this override
   stays on every clone. --- */
.brand img{height:58px}
@media(max-width:900px){.brand img{height:50px}}
@media(max-width:520px){.brand img{height:44px}}

/* ============================================================
   THE CURVE — Altoona, PA
   DEEP FOREST GREEN header, deep navy-blue hero, GREEN CTA,
   a TRACK divider, sharp 2px cards against PILL buttons, on
   SAND paper.

   *** `--red` HOLDS A GREEN ON THIS BUILD. *** Last build it
   held a red, before that a yellow, before that a blue. Read
   the values, never the token names.
   ============================================================ */

/* --- header: DEEP FOREST GREEN, the first in the chain -------
   Available because the badge measures 46% near-white interior
   — well above the 25% threshold — so it holds an edge on a
   dark field without a light variant. Headers so far have been
   white, navy, charcoal, deep red and light; green is new.

   *** THIS HEADER IS DARK, SO THE NAV RULES MUST BE SCOPED. ***
   The previous build had a LIGHT header and got drawer safety
   for free, because the drawer shared the header's colours.
   That is not true here. White nav rules live inside the
   desktop media query with an explicit mobile override below,
   and the drawer contrast is MEASURED after the build.
   This bug has shipped three times in this series. --- */
.hdr{background:#231A15;border-bottom:4px solid #FACE01;
     box-shadow:0 1px 0 rgba(21,15,12,.18)}
/* *** THE RULE IS PALE BLUE, NOT THE LOGO BLUE. *** The obvious choice was
   var(--teal) #7E0D16, and it MEASURED 1.73:1 against this green header —
   below the 3:1 that WCAG 1.4.11 requires of a graphical boundary. A dark blue
   on a dark green simply has no edge. Pale blue #FACE01 measures 8.91:1 and is
   already the dark-field accent, so the roles stay consistent: pale blue marks
   structure on dark, pale green is the CTA. Measured, not eyeballed. */
.hdr-top{display:none}
@media(min-width:1101px){
  .hdr .logo-w b{color:#fff}
  .hdr .logo-w span{color:#E4D8BE}
  .hdr .nav-l>li>a{color:#fff}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#FACE01}
  .hdr .nav-l>li>a[aria-current]::after{background:#FACE01;height:3px}
  .hdr .sub-b{color:#E4D8BE}
}
.hdr .burger span{background:#fff}
/* *** EXPLICIT MOBILE OVERRIDE — the drawer is a LIGHT panel. *** */
@media(max-width:1100px){
  .hdr .nav{background:#fff}
  .hdr .nav-l>li>a{color:var(--ink)}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--red)}
  .hdr .sub-b{color:var(--tx-2)}
}

/* --- hero: DEEP NAVY-BLUE ------------------------------------ */
.hero{background:
   radial-gradient(700px 410px at 72% 16%,rgba(250,206,1,.11),transparent 60%),
   linear-gradient(166deg,#3A2A20 0%,#231A15 55%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(660px 380px at 74% 14%,rgba(250,206,1,.07),transparent 62%)}

/* --- SIGNATURE: TRACK divider -------------------------------
   Two thin horizontal rules with short cross-ties between
   them — railway track seen from above, for the town the
   Pennsylvania Railroad built and ran.

   *** THIS IS THE FIRST LINE-BASED DIVIDER IN THE CHAIN. ***
   Every previous one has been a FILLED SHAPE: a shaped edge
   (triangles, chevrons, trapezoids, ridgelines, ticks, layered
   peaks, stepped blocks, lozenges, slants, waves, arcs), a
   perforated rim, or a slotted band. This one is drawn with
   strokes. The boundary is straight and the structure sits
   ON the band rather than being cut out of it.

   Built to LOOP: 72px tile holds exactly 4 ties at 18px pitch,
   and the rails run the full tile width so successive tiles
   join without a visible seam.

   Self-contained on purpose. TWENTY-THREE .hero::after rules
   are now stacked in this file, one per build in the chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:20px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:72px 20px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='72' height='20' viewBox='0 0 72 20'><path d='M0 0h72v20H0z' fill='%23EFEAE0'/><path d='M0 6h72M0 13h72' stroke='%230A3457' stroke-width='2' opacity='.34'/><path d='M5 4v11M23 4v11M41 4v11M59 4v11' stroke='%230A3457' stroke-width='3' opacity='.24'/></svg>")}
@media(max-width:760px){.hero::after{height:15px;background-size:54px 15px}}

/* --- GREEN CTA, white label (6.15:1) ------------------------
   *** WCAG 1.4.11 FAILS ON THE DARK SIDE — FOURTH BUILD
   RUNNING THAT THE GATE HAS CAUGHT THIS. ***
       green vs the sand paper ......  5.13:1   fine
       green vs the navy-blue hero ..  2.38:1   FAILS
   On DARK fields the button inverts to a PALE GREEN fill with
   a deep navy label:
       pale green vs the hero field ..  6.06:1
       navy label on pale green ......  9.35:1

   *** THIS IS A FOURTH DISTINCT REMEDY. *** Earlier builds
   used a light ring on a dark fill, an inversion to a NEUTRAL
   light fill (bone, white), and a dark border on a light CTA.
   This one inverts to a TINTED fill drawn from the accent
   family, so the button stays recognisably green on both
   fields instead of going neutral on one of them.

   The gate tests the PROPERTY — whether the control keeps a
   visible boundary against whatever is behind it — not any
   particular fix. Four builds, four remedies, one criterion.

   *** AND THE RADIUS IS DIFFERENTIAL. *** Buttons are pills;
   cards and images are 2px. See the note below. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:999px}
.btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:999px;
  box-shadow:none;font-weight:600}
.btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-red,.sec-dark .btn-red{
  background:#FACE01;border-color:#FACE01;color:var(--ink);border-radius:999px}
.hero .btn-red:hover,.sec-dark .btn-red:hover{
  background:#FFDD4A;border-color:#FFDD4A;color:var(--ink)}
.hero .btn-red .ic,.sec-dark .btn-red .ic{color:var(--ink)}
.btn-red .ic,.callbar a .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* --- DIFFERENTIAL RADIUS: A DELIBERATELY NEW AXIS -----------
   Cards, images and panels are razor-sharp at 2px. Buttons are
   fully round.

   Every previous build in this chain used ONE radius token
   everywhere, which reduced this axis to choosing an unused
   number between 0 and 28 — and after forty-one builds those
   are effectively exhausted, with 22px reading no differently
   from 20px to any human being.

   Two values held in deliberate tension is a real visual
   decision rather than a numeric one, and it re-opens the axis
   honestly. Sharp panels suit the industrial subject; the pill
   buttons keep the calls to action soft and obviously
   clickable against them. --- */
.card,.svc-c,.pic,.pic img,.tbl-plain,.note,.big-q,.loc-c{border-radius:2px}

/* structural marks on LIGHT fields use the LOGO BLUE */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}
.eyebrow{color:var(--teal)}
.eyebrow::before{background:var(--teal)}

.trust{background:var(--ink);color:#EBE4D3}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: #FACE01 -----------------------------
   Fourteenth distinct accent case. The CTA already owns the
   pale GREEN on dark fields, so the accent is a pale BLUE —
   keeping the two roles visually separate rather than having
   one green stand for both. Clears every band at 6.39:1. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:#FDF3D2}
.hero .eyebrow::before,.sec-dark .eyebrow::before{background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(166deg,#3A2A20,#231A15)}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* --- STRUCTURAL: SPLIT SECTION HEADING ----------------------
   At desktop the h2 sits in a LEFT column and the lede in a
   RIGHT column, side by side. Sixth heading treatment after
   plain-left, centred, rule-to-edge, the two-tone underline
   and the inline eyebrow — and the first that changes LAYOUT
   rather than decoration.

   *** SELECTOR VERIFIED AGAINST THE DOM: the class is
   `.sec-head` and it wraps eyebrow/h2/lede in an inner <div>.
   Written against a guessed name these rules match nothing and
   fail silently — which is exactly what happened four builds
   ago, where the whole structural differentiator was absent
   while the stylesheet looked correct. --- */
.sec-head{text-align:left}
.sec-head>div{max-width:none}
@media(min-width:901px){
  .sec-head>div{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
                gap:8px 44px;align-items:start}
  .sec-head .eyebrow{grid-column:1;margin-bottom:8px}
  .sec-head h2{grid-column:1;margin:0}
  .sec-head .lede{grid-column:2;grid-row:1 / span 2;margin:0;padding-top:4px;
                  border-left:2px solid var(--line);padding-left:28px}
}

/* Fraunces is a high-contrast old-style face with a modest
   x-height, so the display scale comes UP slightly and
   tracking stays neutral — the opposite adjustment from the
   last build's sturdy slab. */
h1,h2,h3{letter-spacing:-.008em}
.hero h1{font-size:clamp(2.05rem,3.9vw,3.05rem);line-height:1.14}

/* --- HEADER LOGO SIZING --------------------------------------
   A CIRCULAR BADGE on a DARK header. An ancestor block still
   sets `.brand img{height:40px}` mid-cascade, so this override
   stays on every clone. --- */
.brand img{height:60px}
@media(max-width:900px){.brand img{height:52px}}
@media(max-width:520px){.brand img{height:46px}}

/* ============================================================
   BLACKWATER — Milton, FL
   Deep BLACKWATER header and hero, LOGO RED CTA, YELLOW on
   dark fields, a PILING divider, soft 16px cards against
   SQUARE buttons, on PALE SAND paper.

   *** `--red` GENUINELY HOLDS A RED AGAIN ON THIS BUILD. ***
   Last build it held a GREEN, before that a red, before that a
   yellow, before that a blue. Read the values, never the token
   names — including when they happen to agree.
   ============================================================ */

/* --- header: BLACKWATER, and FORCED BY THE ARTWORK ----------
   The mark is a YELLOW container with red trim. Measured:
       yellow #FACE01 on this header .............. 11.30:1
       yellow #FACE01 on a mid-tone sand header ....  1.04:1
   The sand header was the first choice and would have been a
   genuine first in this chain — no build has used a mid-tone
   header. It had to go: on it the container body disappears
   entirely and the mark collapses to a thin red outline.
   The artwork decided the header, as it did two builds ago.

   *** THIS HEADER IS DARK, SO THE NAV RULES ARE SCOPED. ***
   Light nav rules live inside the desktop media query with an
   explicit mobile override below, because the drawer is a
   LIGHT panel and does not share the header's colours. The
   drawer contrast is MEASURED after the build. This bug has
   shipped three times in this series. --- */
.hdr{background:#231A15;border-bottom:4px solid #FACE01;
     box-shadow:0 1px 0 rgba(21,15,12,.20)}
.hdr-top{display:none}
@media(min-width:1101px){
  .hdr .logo-w b{color:#fff}
  .hdr .logo-w span{color:#E4D8BE}
  .hdr .nav-l>li>a{color:#fff}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:#FACE01}
  .hdr .nav-l>li>a[aria-current]::after{background:#FACE01;height:3px}
  .hdr .sub-b{color:#E4D8BE}
}
.hdr .burger span{background:#fff}
/* *** EXPLICIT MOBILE OVERRIDE — the drawer is a LIGHT panel. *** */
@media(max-width:1100px){
  .hdr .nav{background:#fff}
  .hdr .nav-l>li>a{color:var(--ink)}
  .hdr .nav-l>li>a:hover,.hdr .nav-l>li>a[aria-current]{color:var(--red)}
  .hdr .sub-b{color:var(--tx-2)}
}

/* --- hero: BLACKWATER ---------------------------------------
   Named for the Blackwater River that Milton sits on — tannin
   stained, genuinely near-black, and running past white sand.
   That contrast is the whole palette. --- */
.hero{background:
   radial-gradient(700px 410px at 73% 15%,rgba(250,206,1,.10),transparent 60%),
   linear-gradient(168deg,#3A2A20 0%,#231A15 55%,#150F0C 100%)}
.hero::before{
  background:radial-gradient(660px 380px at 75% 13%,rgba(250,206,1,.07),transparent 62%)}

/* --- SIGNATURE: PILING divider ------------------------------
   Short posts of ALTERNATING height hanging DOWN from the
   boundary, crossed by a horizontal rail. Milton and
   neighbouring Bagdad were lumber and shipbuilding towns on the
   Blackwater, and the river is still lined with pilings.

   *** TWO THINGS ARE NEW HERE. ***
   1. THE ALTERNATING RHYTHM. Every previous divider in this
      chain repeats ONE shape at one size — uniform triangles,
      uniform slots, uniform ties. Alternating tall and short
      posts gives the band a rhythm rather than a texture.
   2. FILLED SHAPES AND A DRAWN LINE IN THE SAME TILE. Earlier
      dividers were either filled shapes (edges, perforations,
      slotted bands) or strokes (the track). This combines
      both — posts are filled, the rail is stroked.

   Built to LOOP: 80px tile holds four posts at 20px pitch,
   alternating 13px and 8px, with the rail at y=6 running the
   full tile width so successive tiles join without a seam.

   Self-contained on purpose. TWENTY-FOUR .hero::after rules are
   now stacked in this file, one per build in the clone chain,
   and any property this rule does not reset leaks through:
     top:auto        - the base rule's inset:0 pins top:0
     border-radius:0 - or an earlier arc scoop curves it
     opacity:1       - or an earlier quilt rule's .95 applies
   AND the element height MUST MATCH the background-size height
   or the tile is cropped. --- */
.hero::after{
  content:"";position:absolute;
  left:0;right:0;top:auto;bottom:0;height:18px;
  z-index:2;opacity:1;border-radius:0;
  background-repeat:repeat-x;
  background-position:bottom left;
  background-size:80px 18px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='80' height='18' viewBox='0 0 80 18'><path d='M0 0h80v18H0z' fill='%23F7F2E6'/><path d='M4 0h7v13H4z' fill='%23231A15' opacity='.34'/><path d='M24 0h7v8h-7z' fill='%23231A15' opacity='.34'/><path d='M44 0h7v13h-7z' fill='%23231A15' opacity='.34'/><path d='M64 0h7v8h-7z' fill='%23231A15' opacity='.34'/><path d='M0 6h80' stroke='%23231A15' stroke-width='2' opacity='.22'/></svg>")}
@media(max-width:760px){.hero::after{height:14px;background-size:62px 14px}}

/* --- RED CTA, white label (7.91:1) --------------------------
   *** WCAG 1.4.11 FAILS ON THE DARK SIDE — FIFTH BUILD RUNNING
   THAT THE GATE HAS CAUGHT THIS. ***
       red vs the pale sand paper ...  7.08:1   fine
       red vs the blackwater hero ...  2.16:1   FAILS
   On DARK fields the button inverts to a YELLOW fill with a
   blackwater label:
       yellow vs the hero field ...... 11.30:1
       ink label on yellow ........... 11.30:1

   *** BEING HONEST ABOUT THIS ONE: it is the same remedy class
   as an earlier build in the chain, which also inverted a red
   CTA to yellow on a dark field. *** Four distinct remedies
   have now been used — light ring on dark fill, inversion to a
   neutral light fill, dark border on a light CTA, and inversion
   to a tinted fill from the accent family. This is the second
   of those, reused because the logo is literally a yellow
   container with red trim and any other choice would have been
   novelty for its own sake. The gate tests the PROPERTY, not
   the fix, and reusing a remedy is not a failure.

   *** AND THE RADIUS IS DIFFERENTIAL, INVERTED. *** Buttons are
   SQUARE; cards are soft. See the note below. --- */
.btn,.btn-red,.btn-ghost,.btn-amber,.callbar a{border-radius:0}
.btn-red,.callbar .btn-red,.callbar a{
  background:var(--red);border-color:var(--red);color:#fff;border-radius:0;
  box-shadow:none;font-weight:600}
.btn-red:hover,.callbar .btn-red:hover{
  background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-red,.sec-dark .btn-red{
  background:#FACE01;border-color:#FACE01;color:var(--ink);border-radius:0}
.hero .btn-red:hover,.sec-dark .btn-red:hover{
  background:#FFDD4A;border-color:#FFDD4A;color:var(--ink)}
.hero .btn-red .ic,.sec-dark .btn-red .ic{color:var(--ink)}
.btn-red .ic,.callbar a .ic{color:#fff}
.btn-amber{background:var(--red);border-color:var(--red);color:#fff;box-shadow:none}
.btn-amber:hover{background:var(--red-dk);border-color:var(--red-dk);color:#fff}
.hero .btn-ghost,.sec-dark .btn-ghost{border-color:rgba(255,255,255,.55);color:#fff}

/* --- DIFFERENTIAL RADIUS, THE OTHER WAY ROUND ---------------
   The previous build opened this axis with SHARP 2px cards
   against PILL buttons. This one reverses it: SOFT 16px cards
   and panels against SQUARE 0px buttons.

   That is deliberate. A new axis is only worth having if it
   has range, and demonstrating the opposite pairing proves it
   does — where simply picking another number between 0 and 28
   would have proved nothing. Soft panels sit well under the
   rounded forms in this logo; square buttons keep the calls to
   action emphatic against them. --- */
.card,.svc-c,.pic,.pic img,.tbl-plain,.note,.big-q,.loc-c{border-radius:16px}

/* structural marks on LIGHT fields use the DEEP RED */
.card::before,.svc-c::before{
  content:"";position:absolute;top:0;left:0;width:4px;height:100%;
  background:var(--teal);border-radius:0}

/* --- STRUCTURAL: EYEBROW AS A FILLED CHIP -------------------
   The section eyebrow is a small solid tab with its own
   background and padding, rather than text with a leading dash
   or rule. Seventh heading treatment in the chain after
   plain-left, centred, rule-to-edge, the two-tone underline,
   the inline eyebrow and the split two-column head. --- */
.eyebrow{display:inline-block;color:#fff;background:var(--teal);
         padding:5px 12px;border-radius:999px;letter-spacing:.10em}
.eyebrow::before{display:none}

.trust{background:var(--ink);color:#EBE4D3}
.trust .ic{color:#FACE01}

/* --- DARK-FIELD ACCENT: #FACE01 -----------------------------
   Fifteenth distinct accent case. The logo red sits at 2.2:1 on
   the blackwater hero and can never carry text there, so the
   accent is the logo's own yellow, which clears every band at
   9.07:1. On this build the CTA and the accent deliberately
   SHARE that yellow — the palette is only two colours and
   splitting them would have invented a third for no reason. --- */
.hero .eyebrow,.sec-dark .eyebrow{color:var(--ink);background:#FACE01}
.eyebrow-amber{color:#FACE01}
.hero h1 em,
.hero .hero-ul .ic,.hero .hero-fine .ic,
.sec-dark .ticks .ic,.sec-dark .card-ic,
.hero .ic,.sec-dark .ic{color:#FACE01}
.ftr-l b{color:#FACE01}

.sec-dark{background:linear-gradient(168deg,#3A2A20,#231A15)}
.big-q{border-left-color:var(--teal)}
blockquote{border-left-color:var(--teal)}
.ftr{background:var(--ink)}

/* Undo the previous build's split heading — that was its
   structural signature, not ours. Back to a single column with
   the chip eyebrow above. */
.sec-head{text-align:left}
.sec-head>div{max-width:820px}
@media(min-width:901px){
  .sec-head>div{display:block}
  .sec-head .eyebrow,.sec-head h2,.sec-head .lede{grid-column:auto}
  .sec-head .lede{border-left:0;padding-left:0;padding-top:0;margin-top:14px}
  .sec-head h2{margin:10px 0 0}
}

/* --- TYPE: SANS DISPLAY OVER A SERIF BODY -------------------
   *** THE FIRST TIME THIS CHAIN HAS RUN A SERIF BODY FACE. ***
   Every previous build paired a serif display with a sans body,
   or a sans with a sans. Reversing it changes the texture of
   every paragraph rather than only the headings, which is the
   most far-reaching typographic change available.

   Source Serif 4 has a large x-height and holds up at body
   sizes on screen, but it still needs slightly more line height
   and a slightly smaller measure than a grotesque would.
   Outfit is geometric and wide, so display tracking tightens. */
h1,h2,h3{letter-spacing:-.018em}
.hero h1{font-size:clamp(2rem,3.8vw,3rem);line-height:1.13}
body{line-height:1.72}
p{max-width:74ch}

/* --- HEADER LOGO SIZING --------------------------------------
   *** THIS MARK IS WIDE, NOT SQUARE. *** It was cut out of a
   stacked wordmark and measures roughly 512x333 — aspect 1.54,
   where every recent build's badge was 1.00. Sized by HEIGHT
   as usual, it renders far wider than a badge and crowds the
   text lockup, so the heights here are lower than the badge
   builds' and were set by looking at it. An ancestor block
   still sets `.brand img{height:40px}` mid-cascade, so this
   override stays on every clone. --- */
.brand img{height:46px}
@media(max-width:900px){.brand img{height:40px}}
@media(max-width:520px){.brand img{height:34px}}
