/* ==========================================================================
   Big Easy Fence Supply - design system v2, "Property Line Pro".

   SCOPE (corrected 2026-08-27): ONLY THE STRUCTURE of the reference site was
   copied - information architecture, per-page-type section ORDER, section
   composition (contained vs full-width, column counts, grid splits,
   image/text alternation), where CTA bands and trust blocks sit, and the
   DOM shape of a section.

   THE VISUAL DESIGN SYSTEM IS FENCE SUPPLY'S OWN, unchanged from the
   2026-08-26 contractor-tone correction: Archivo / Manrope / Space Mono,
   ink #171B24, safety-orange #D8481F, steel #3E5C76, 4px radius, 8px
   buttons, 112px section rhythm, 1260px container, and FS's own shadow
   ramp and type sizes. No reference-site colour, font, type scale, button
   skin, radius, shadow or spacing value survives in this file.

   Structural additions that fix defects the audit found:
   - A real estimate form living inside the hero (the site previously had
     zero form elements and 24 CTAs pointing at a dead anchor).
   - Footer column headings promoted out of the orphan-h5 that staging
     introduced (live production does not have that defect).
   - An explicit 768px tablet checkpoint and a 380px small-phone guard,
     per Content-Layout-Image-Positioning-Standards.md.
   ========================================================================== */

:root{
  /* --- Brand tokens, retoned again 2026-09-09 (v4) to CONTRAST WITH THE
         LOGO, per instruction. The forest green of the first pass sat next
         to the logo's blue as an analogous colour and muddied it. The
         palette is now built OUT OF the logo and a neutral dark, which is
         also exactly what the client's own live site does.

         Sampled from logo-new.png: blue #007AC3, amber #F5A950.
         Neutral dark and cool near-white sampled from the nine supplied
         live-site screenshots: #22222E and #F4F7FC.

         Logo legibility, measured on every surface it appears on:
           header  blue on #F4F7FC   4.13:1   amber on #F4F7FC  1.77:1
           footer  blue on #22222E   3.49:1   amber on #22222E  5.85:1
         Logotypes are exempt from WCAG 1.4.11, and both surfaces carry at
         least one half of the mark well clear of 3:1.

         Text contrast, measured: ink/white 15.36, ink/near-white 14.47,
         blue-d/white 6.54, blue-t/white 5.04, accent-d/white 4.83,
         accent-dd/white 6.28, muted/near-white 6.43, accent/ink 5.60,
         accent-l/ink 6.72 - all AA.
         --accent (#F0A952) and --brand-blue (#007AC3) are FILLS. Small text
         on them must be --ink, not white. */
  --ink:#22222E;
  --ink-soft:#2C2C3B;
  --ink-softer:#454556;
  --base:#FFFFFF;
  --base-d:#F4F7FC;
  --base-dd:#E4EAF3;
  --accent:#F0A952;         /* brand amber - primary CTA fill */
  --accent-d:#A2651B;       /* AA amber for text on light */
  --accent-dd:#8A5514;      /* AA for white text on an amber-dark fill */
  --accent-l:#F7C083;       /* amber on the dark band */
  --brand-blue:#007AC3;     /* logo blue - fills, icon rings */
  --brand-blue-d:#00629E;   /* AA for white text on a blue fill */
  --brand-blue-t:#0A73B8;   /* AA blue for accent WORDS on light */
  --brand-blue-l:#5FB8F0;   /* blue on the dark band */
  --steel:#4E5A6B;
  --steel-l:#8E9AAC;
  --white:#FFFFFF;
  --ink-line:rgba(34,34,46,.13);
  --white-line:rgba(255,255,255,.16);
  --muted:#55596A;
  --muted-on-ink:rgba(244,247,252,.76);

  /* --- FS v1 radius + shadow ramp, restored 2026-08-27 --- */
  --radius:4px;
  --radius-btn:8px;
  --shadow:0 20px 40px -24px rgba(34,34,46,.22);
  --shadow-lg:0 24px 48px -24px rgba(34,34,46,.22);

  /* --- FS v1 type sizes --- */
  --h1:clamp(2.5rem, 4.4vw, 3.7rem);
  --h2:clamp(2rem, 3.2vw, 2.7rem);
  --h3:1.5rem;
  --h4:1.18rem;

  /* --- FS v1 fonts --- */
  --font-serif:'Playfair Display', Georgia, 'Times New Roman', serif;
  --font-display:'Archivo', sans-serif;
  --font-body:'Manrope', sans-serif;
  --font-mono:'Space Mono', monospace;
}

*,*::before,*::after{box-sizing:border-box;}
html{scroll-behavior:smooth;}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important;}
}

body.bef-v2{
  margin:0;
  font-family:var(--font-body);
  line-height:1.65;
  color:var(--ink);
  background:var(--base);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
body.bef-v2 img{max-width:100%;height:auto;display:block;}
body.bef-v2 a{color:var(--accent-d);}
body.bef-v2 ul{list-style:none;}
body.bef-v2 a:focus-visible,
body.bef-v2 button:focus-visible,
body.bef-v2 input:focus-visible,
body.bef-v2 select:focus-visible,
body.bef-v2 textarea:focus-visible{outline:3px solid var(--accent);outline-offset:2px;}

body.bef-v2 h1,body.bef-v2 h2,body.bef-v2 h3,body.bef-v2 h4{
  font-family:var(--font-display);
  font-weight:800;
  line-height:1.08;
  letter-spacing:-0.01em;
  color:var(--ink);
  margin:0 0 .5em;
}
body.bef-v2 h1{font-size:var(--h1);}
body.bef-v2 h2{font-size:var(--h2);}
body.bef-v2 h3{font-size:var(--h3);}
body.bef-v2 h4{font-size:var(--h4);}
body.bef-v2 p{margin:0 0 1em;}

.skip-link{position:absolute;left:-999px;top:0;z-index:999;background:var(--ink);color:#fff;padding:.6rem 1rem;}
.skip-link:focus{left:0;}

.container{max-width:1260px;margin:0 auto;padding:0 32px;}
.container--narrow{max-width:820px;margin:0 auto;padding:0 32px;}
.center{text-align:center;}
.measure{max-width:660px;}
.lead{font-size:1.08rem;color:var(--muted);line-height:1.6;}

.eyebrow{
  font-family:var(--font-mono);font-weight:700;text-transform:uppercase;
  letter-spacing:.14em;font-size:.72rem;color:var(--accent-d);
  display:inline-flex;align-items:center;gap:10px;margin:0 0 14px;
}
.eyebrow::before{content:'';width:6px;height:6px;background:var(--accent);border-radius:50%;flex-shrink:0;}

/* --- placeholder marker: anything a human must still supply --------------
   Deliberately loud. These must not survive to production. */
.needs-data{
  display:inline-block;
  font-family:var(--font-mono);font-size:.68rem;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;
  background:repeating-linear-gradient(45deg,#FFE9B0,#FFE9B0 8px,#FFD980 8px,#FFD980 16px);
  color:#6B4A00;border:1px dashed #B58900;border-radius:4px;
  padding:.2rem .5rem;line-height:1.4;
}
.needs-block{
  border:2px dashed #B58900;border-radius:var(--radius);
  background:#FFFBEF;padding:1.2rem;color:#6B4A00;
}
.needs-block p{margin:.4rem 0 0;font-size:.9rem;}

/* ==========================================================================
   Buttons  (ported: 6px radius, uppercase, 800, 2px transparent border)
   ========================================================================== */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  padding:16px 30px;border-radius:var(--radius-btn);
  font-family:var(--font-body);font-weight:800;font-size:.94rem;
  text-decoration:none;border:2px solid transparent;cursor:pointer;
  transition:transform .2s ease, background .2s ease, color .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.btn-primary{background:var(--accent-d);color:var(--white);box-shadow:0 10px 28px -12px rgba(178,58,23,.5);}
.btn-primary:hover,.btn-primary:focus-visible{background:var(--accent-dd);transform:translateY(-2px);}
/* Call CTA on dark backgrounds uses FS's own light-outline button. */
.btn-call{border-color:rgba(255,255,255,.55);color:var(--white);background:transparent;}
.btn-call:hover{background:var(--white);color:var(--ink);transform:translateY(-2px);}
.btn-outline{border-color:var(--ink);color:var(--ink);background:transparent;}
.btn-outline:hover{background:var(--ink);color:var(--white);transform:translateY(-2px);}
.btn-outline-light{border-color:rgba(255,255,255,.55);color:#fff;background:transparent;}
.btn-block{width:100%;}

/* CTA label visibility fix — 2026-08-27.
   Buttons are <a> elements, so `body.bef-v2 a` (specificity 0,1,2) outranked
   the flat `.btn-*` rules (0,1,0) and repainted every CTA label in --accent-d.
   On the --accent-d fill that rendered the text at 1.00:1 — literally invisible.
   Re-assert each button's own colour at matching specificity. */
body.bef-v2 a.btn-primary,
body.bef-v2 a.btn-primary:hover,
body.bef-v2 a.btn-primary:focus-visible{color:var(--white);}
body.bef-v2 a.btn-call{color:var(--white);}
body.bef-v2 a.btn-call:hover,
body.bef-v2 a.btn-call:focus-visible{color:var(--ink);}
body.bef-v2 a.btn-outline{color:var(--ink);}
body.bef-v2 a.btn-outline:hover,
body.bef-v2 a.btn-outline:focus-visible{color:var(--white);}
body.bef-v2 a.btn-outline-light{color:#fff;}


/* ==========================================================================
   Util strip + header
   ========================================================================== */
.util-strip{background:var(--ink-soft);color:var(--muted-on-ink);font-size:.82rem;font-family:var(--font-mono);}
.util-strip .container{display:flex;gap:1.6rem;align-items:center;padding:.42rem 0;}
.util-strip span{display:inline-flex;align-items:center;gap:.4rem;}
.util-strip a{color:var(--accent-l);text-decoration:none;font-weight:700;font-size:.95rem;}
.util-phone{margin-left:auto;}

.site-header{
  position:sticky;top:0;z-index:60;background:#fff;
  border-bottom:1px solid var(--ink-line);
}
.header-bar{display:flex;align-items:center;gap:1.4rem;padding:.6rem 0;}
.brand{display:inline-flex;align-items:center;text-decoration:none;}
.brand img{display:block;}

.nav-primary .menu{display:flex;align-items:center;gap:.2rem;margin:0;padding:0;}
.nav-primary a{
  display:block;text-decoration:none;color:var(--ink);
  font-weight:700;font-size:.95rem;padding:.6rem .7rem;border-radius:4px;
}
.nav-primary a:hover{color:var(--accent-d);background:var(--base-d);}
.nav-primary li{position:relative;}
.sub-menu{
  position:absolute;top:100%;left:0;min-width:250px;margin:0;padding:.4rem;
  background:#fff;border:1px solid var(--base-dd);border-radius:var(--radius);
  box-shadow:var(--shadow-lg);
  opacity:0;visibility:hidden;transform:translateY(6px);
  transition:opacity .18s ease,transform .18s ease,visibility .18s;
}
.nav-primary li:hover > .sub-menu,
.nav-primary li:focus-within > .sub-menu{opacity:1;visibility:visible;transform:none;}
.sub-menu a{font-weight:600;font-size:.92rem;}
.menu-item-has-children > a::after{
  content:"";display:inline-block;margin-left:.4rem;
  border:4px solid transparent;border-top-color:currentColor;
  transform:translateY(2px);
}

/* Third level (Products > Aluminum Fencing > Commercial). Desktop only: flies
   out to the right of its parent row instead of stacking over the first-level
   panel. Below 1300 the nav is off-canvas and nests as an indented accordion. */
@media (min-width:1301px){
  .sub-menu .sub-menu{top:-.4rem;left:100%;margin-left:.2rem;}
  .sub-menu .menu-item-has-children > a{display:flex;align-items:center;justify-content:space-between;}
  .sub-menu .menu-item-has-children > a::after{
    border-top-color:transparent;border-left-color:currentColor;
    transform:none;margin-left:.6rem;
  }
}
.header-cta{display:flex;align-items:center;gap:.8rem;margin-left:auto;}
.header-phone{
  text-decoration:none;color:var(--ink);font-weight:800;
  font-family:var(--font-mono);font-size:.92rem;
}
.nav-toggle{
  display:none;align-items:center;justify-content:center;
  width:44px;height:44px;background:#fff;border:1px solid var(--base-dd);
  border-radius:6px;cursor:pointer;color:var(--ink);
}
.nav-toggle span{display:block;width:20px;height:2px;background:currentColor;position:relative;}
.nav-toggle span::before,.nav-toggle span::after{
  content:"";position:absolute;left:0;width:20px;height:2px;background:currentColor;
}
.nav-toggle span::before{top:-6px;}
.nav-toggle span::after{top:6px;}

/* ==========================================================================
   Hero  (ported: 1.15fr/.85fr copy + form grid, image bg, dark gradient)
   ========================================================================== */
.hero{position:relative;overflow:hidden;background:var(--ink);}
.hero-bg{position:absolute;inset:0;}
.hero-bg img{width:100%;height:100%;object-fit:cover;object-position:68% 50%;}
.hero::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(100deg, rgba(23,27,36,.94) 0%, rgba(23,27,36,.72) 55%, rgba(23,27,36,.42) 100%);
}
.hero-grid{
  position:relative;z-index:2;
  display:grid;grid-template-columns:1.15fr .85fr;gap:3rem;
  align-items:center;padding:4rem 0 4.4rem;
}
.hero h1{color:#fff;max-width:22ch;text-wrap:balance;}
.hero h1 em{font-style:normal;color:var(--accent-l);}
.hero-sub{font-size:1.14rem;color:#D3D7DE;max-width:56ch;}
.herolist{list-style:none;margin:1.3rem 0 0;padding:0;display:grid;gap:.55rem;font-weight:600;color:#E7E9ED;}
.herolist li{display:flex;gap:.6rem;align-items:baseline;}
.herolist li::before{content:"\2714";color:var(--accent-l);font-weight:800;}
.hero-actions{display:flex;flex-wrap:wrap;gap:.9rem;margin-top:1.5rem;}

/* ==========================================================================
   Estimate form  (Patios' PATTERN, native implementation — see functions.php)
   ========================================================================== */
.estimate-form-wrap{
  background:#fff;border-radius:var(--radius);
  border-top:6px solid var(--accent);
  box-shadow:var(--shadow-lg);padding:1.5rem 1.4rem 1.2rem;
}
.estimate-form-wrap h3{font-size:1.3rem;margin-bottom:.2rem;}
.estimate-form-wrap .form-intro{font-size:.88rem;color:var(--muted);margin-bottom:1rem;}
.form-fineprint{font-size:.78rem;color:var(--muted);margin:.8rem 0 0;text-align:center;}
.form-row{display:grid;gap:.7rem;margin-bottom:.7rem;}
.form-row--2{grid-template-columns:1fr 1fr;}
.ef-field label{
  display:block;font-size:.74rem;font-weight:800;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ink-softer);margin-bottom:.25rem;
}
.ef-field .req{color:var(--accent);}
.ef-field input,.ef-field select,.ef-field textarea{
  width:100%;padding:.62rem .7rem;font-family:var(--font-body);font-size:.95rem;
  color:var(--ink);background:#fff;
  border:1px solid var(--base-dd);border-radius:6px;
}
.ef-field textarea{min-height:76px;resize:vertical;}
.ef-field input:focus,.ef-field select:focus,.ef-field textarea:focus{border-color:var(--accent);}
/* honeypot — must never be visible or focusable to a real user */
.ef-hp{position:absolute!important;left:-9999px!important;width:1px;height:1px;overflow:hidden;}
.form-notice{
  border-radius:6px;padding:.7rem .85rem;margin-bottom:.9rem;font-size:.9rem;font-weight:600;
}
.form-notice--ok{background:#E7F6EC;border:1px solid #A8D9B9;color:#14532D;}
.form-notice--err{background:#FDECEA;border:1px solid #F3B5AE;color:#7F1D1D;}
.form-error{display:block;font-size:.78rem;color:#B3261E;font-weight:700;margin-top:.2rem;}

/* ==========================================================================
   Badge bar / trust bar   (ported)
   ========================================================================== */
.badge-bar{background:#fff;border-bottom:1px solid var(--base-dd);}
.badge-bar-inner{display:flex;flex-wrap:wrap;justify-content:center;gap:.6rem 2.4rem;padding:.95rem 0;margin:0;padding-inline:0;}
.badge-item{display:inline-flex;align-items:center;gap:.55rem;font-weight:700;font-size:.9rem;color:var(--ink);}
.badge-item .ico{
  color:var(--accent);background:var(--base-d);border-radius:50%;
  padding:.4rem;width:34px;height:34px;flex:0 0 34px;
  display:inline-flex;align-items:center;justify-content:center;
}

/* ==========================================================================
   Sections + bands   (ported)
   ========================================================================== */
.section{padding:112px 0;}
.section--sand{background:var(--base-d);}
.section--dusk{background:var(--ink);color:#E8EAEE;}
.section--dusk h2,.section--dusk h3,.section--dusk h4{color:#fff;}
.section--dusk .lead{color:#C3C8D0;}
.section--dusk a:not(.btn){color:var(--accent-l);}
.section-head{margin-bottom:2.4rem;}
.section-head.center{text-align:center;margin-inline:auto;max-width:660px;}

/* ==========================================================================
   Grid + cards   (ported vocabulary)
   ========================================================================== */
.grid{display:grid;gap:24px;}
.grid-2{grid-template-columns:repeat(2,1fr);}
.grid-3{grid-template-columns:repeat(3,1fr);}
.grid-4{grid-template-columns:repeat(4,1fr);}

.card{
  display:flex;flex-direction:column;background:var(--white);
  border:1px solid var(--ink-line);border-radius:var(--radius);
  overflow:hidden;padding:0 0 22px;
  text-decoration:none;color:var(--ink);
  transition:transform .25s ease, box-shadow .25s ease;
}
.card:hover{transform:translateY(-4px);box-shadow:var(--shadow);}
.card h3{padding:0 1.2rem;margin-top:1.05rem;}
.card p{padding:0 1.2rem;color:var(--muted);font-size:.93rem;flex-grow:1;margin-bottom:.8rem;}
.card-media{position:relative;overflow:hidden;aspect-ratio:3/2;background:var(--base-d);}
.card-media img{width:100%;height:100%;object-fit:cover;object-position:50% 55%;transition:transform .3s ease;}
.card:hover .card-media img{transform:scale(1.04);}
.card-tags{display:flex;flex-wrap:wrap;gap:.35rem;padding:0 1.2rem .6rem;}
.card-tags span{
  font-family:var(--font-mono);font-size:.66rem;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;
  background:var(--base-d);color:var(--ink-softer);border-radius:3px;padding:.18rem .45rem;
}
.card-link{
  display:inline-flex;align-items:center;gap:.4rem;padding:0 1.2rem;
  font-weight:800;font-size:.85rem;text-transform:uppercase;letter-spacing:.06em;color:var(--accent-d);
}
.card-date{
  display:inline-flex;gap:.4rem;font-family:var(--font-mono);font-size:.72rem;
  color:var(--muted);font-weight:700;margin:.9rem 1.2rem .2rem;
  text-transform:uppercase;letter-spacing:.06em;
}

/* Stats band (ported) */
.stat{text-align:center;padding:.6rem;border-left:1px solid var(--ink-softer);}
.grid-4 .stat:first-child{border-left:0;}
.stat-n{font-family:var(--font-display);font-weight:800;font-size:2.2rem;color:var(--accent-l);line-height:1;}
.stat-l{margin-top:.45rem;font-size:.85rem;color:#C3C8D0;text-transform:uppercase;letter-spacing:.06em;font-weight:600;}

/* Why-us checks (ported) */
.why-split{display:grid;grid-template-columns:1.05fr .95fr;gap:3rem;align-items:center;}
.checks{list-style:none;margin:16px 0 0;padding:0;display:flex;flex-direction:column;gap:10px;}
.checks li{
  position:relative;padding-left:18px;font-size:.94rem;color:var(--ink-soft);
}
.checks li::before{
  content:'';position:absolute;left:0;top:11px;width:6px;height:6px;
  background:var(--accent);border-radius:50%;
}
.checks li strong{display:block;font-family:var(--font-display);font-size:1rem;}
.checks li span{display:block;font-weight:500;font-size:.88rem;color:var(--muted);}
.why-img img{border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;object-position:50% 55%;}

/* Process (ported: white card, dark top rule, overhanging accent number) */
.process-track{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem;}
.process-track--5{grid-template-columns:repeat(5,1fr);gap:1.1rem;}
.process-step{
  position:relative;background:var(--white);border:1px solid var(--ink-line);
  border-radius:var(--radius);border-top:3px solid var(--steel);
  padding:26px 26px 24px;
}
/* FS v1 step marker: light disc, ink hairline, Space Mono numeral. */
.process-watermark{
  width:40px;height:40px;border-radius:50%;background:var(--base);
  border:2px solid var(--ink-line);display:flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-weight:700;font-size:.9rem;color:var(--muted);
  margin-bottom:14px;
}
.process-step.is-visible .process-watermark{border-color:var(--accent);color:var(--accent);}
.process-step h3{font-size:1.18rem;margin-bottom:8px;}
.process-step p{color:var(--muted);font-size:.95rem;margin:0;}

/* Quotes / testimonials (ported) */
.quote{
  margin:0;background:#fff;border-radius:var(--radius);
  padding:1.5rem 1.5rem 1.3rem;box-shadow:var(--shadow);
  display:flex;flex-direction:column;
}
.quote .stars{color:var(--accent);letter-spacing:.1em;}
.quote p{color:#33414E;font-size:.96rem;flex-grow:1;margin:.6rem 0 1rem;}
.quote footer{display:flex;align-items:center;gap:.7rem;}
.quote cite{font-style:normal;font-weight:800;display:block;color:var(--ink);}
.quote .loc{display:block;font-size:.8rem;color:var(--muted);}
.avatar-ph{
  width:46px;height:46px;border-radius:50%;flex:0 0 46px;
  background:var(--base-dd);border:1px dashed #B58900;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-size:.55rem;color:#6B4A00;text-align:center;line-height:1.1;
}

/* Work / gallery tiles (ported) */
.work-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.1rem;}
.work-tile{margin:0;border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow);background:var(--base-d);}
.work-tile img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;object-position:50% 55%;transition:transform .3s ease;}
.work-tile:hover img{transform:scale(1.04);}
.work-ph{
  aspect-ratio:4/3;display:flex;flex-direction:column;gap:.5rem;
  align-items:center;justify-content:center;text-align:center;padding:1rem;
  border:2px dashed #B58900;background:#FFFBEF;color:#6B4A00;border-radius:var(--radius);
}

/* Areas (ported) */
.areas-layout{display:grid;grid-template-columns:1.15fr 1fr;gap:2.4rem;align-items:center;}
.area-tags{display:grid;grid-template-columns:1fr 1fr;gap:.8rem;margin:0;padding:0;}
.area-tags li{
  background:#fff;border:1px solid var(--base-dd);border-left:3px solid var(--accent);
  border-radius:6px;padding:.7rem .9rem;color:var(--ink);font-weight:700;font-size:.92rem;
  box-shadow:0 4px 14px rgba(23,27,36,.08);
}

/* FAQ (ported) */
.faq-split{display:grid;grid-template-columns:1.15fr 1fr;gap:3rem;align-items:start;}
.faq details{border-bottom:1px solid var(--ink-line);}
.faq details:first-of-type{border-top:1px solid var(--ink-line);}
.faq summary{
  font-family:var(--font-display);font-weight:700;font-size:1.05rem;
  padding:1.1rem 2rem 1.1rem 0;cursor:pointer;list-style:none;position:relative;color:var(--ink);
}
.faq summary::-webkit-details-marker{display:none;}
.faq summary::after{
  content:"+";position:absolute;right:0;top:1rem;
  font-family:var(--font-display);font-weight:800;color:var(--accent);font-size:1.3rem;
}
.faq details[open] summary::after{content:"\2212";}
.faq details > p{padding:0 0 1.1rem;margin:0;color:var(--muted);}
.faq-media img{border-radius:var(--radius);box-shadow:var(--shadow-lg);position:sticky;top:140px;}

/* CTA band (ported) */
.cta-band .cta-inner{display:grid;grid-template-columns:1.3fr .7fr;gap:2rem;align-items:center;}
.cta-actions{display:flex;flex-wrap:wrap;gap:.9rem;justify-content:flex-end;}

/* ==========================================================================
   Comparison table — Web-Redesign-Agent-Spec §12-19 table design system.
   Real <table>/<thead>/<tbody>. No div grids. Brand colors verified above.
   Pills used ONLY for the genuinely categorical maintenance judgement.
   ========================================================================== */
.table-wrap{overflow-x:auto;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);}
table.bef-table{width:100%;border-collapse:collapse;font-size:.94rem;}
table.bef-table caption{
  caption-side:top;text-align:left;padding:1.1rem 1.2rem .2rem;
  font-family:var(--font-mono);font-size:.72rem;font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;color:var(--muted);
}
table.bef-table th,table.bef-table td{
  padding:.85rem 1.1rem;text-align:left;border-bottom:1px solid var(--base-dd);vertical-align:top;
}
table.bef-table thead th{
  background:var(--ink);color:#fff;font-family:var(--font-display);font-weight:700;
  font-size:.82rem;letter-spacing:.06em;text-transform:uppercase;border-bottom:0;
}
table.bef-table tbody th{
  font-family:var(--font-display);font-weight:700;color:var(--ink);
  background:var(--base-d);border-left:3px solid var(--accent);width:26%;
}
table.bef-table tbody tr:last-child th,
table.bef-table tbody tr:last-child td{border-bottom:0;}
.pill{
  display:inline-block;border-radius:999px;padding:.16rem .6rem;
  font-size:.74rem;font-weight:800;letter-spacing:.03em;
}
.pill--low{background:#E7F6EC;color:#14532D;border:1px solid #A8D9B9;}
.pill--med{background:#FFF4E0;color:#7A4A00;border:1px solid #F0CC8A;}

/* ==========================================================================
   Footer   (ported: 1.5fr 1fr 1fr 1fr, h4 column headings)
   ========================================================================== */
.site-footer{background:var(--ink);color:var(--muted-on-ink);padding:3.4rem 0 1.6rem;}
.footer-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:2.4rem;}
.site-footer h2{
  color:#fff;font-size:.95rem;letter-spacing:.04em;text-transform:uppercase;margin-bottom:1rem;
}
.site-footer ul{margin:0;padding:0;display:flex;flex-direction:column;gap:.55rem;}
.site-footer a{color:var(--muted-on-ink);text-decoration:none;font-size:.92rem;}
.site-footer a:hover{color:var(--accent-l);}
.site-footer address{font-style:normal;font-size:.92rem;margin:.9rem 0;line-height:1.6;}
.footer-brand p{font-size:.92rem;line-height:1.6;}
.footer-hours{display:block;font-family:var(--font-mono);font-size:.8rem;margin-top:.3rem;}
.footer-social{display:flex;gap:.7rem;margin-top:1rem;flex-direction:row !important;}
.footer-social img{width:16px;height:16px;}
.footer-bottom{
  display:flex;flex-wrap:wrap;gap:1rem;justify-content:space-between;
  margin-top:2.6rem;padding-top:1.3rem;border-top:1px solid var(--white-line);font-size:.85rem;
}
.footer-legal a{margin-inline:.2rem;}

/* Mobile call bar (ported: TWO actions, was one) */
.mobile-callbar{
  display:none;grid-template-columns:1fr 1fr;
  position:fixed;bottom:0;left:0;right:0;z-index:70;
  box-shadow:0 -6px 20px rgba(0,0,0,.28);
}
.mobile-callbar a{
  display:flex;align-items:center;justify-content:center;gap:.45rem;
  padding:.95rem .5rem;text-decoration:none;color:#fff;
  font-weight:800;font-size:.86rem;text-transform:uppercase;letter-spacing:.03em;
}
.mobile-callbar a:first-child{background:var(--accent);}
.mobile-callbar a:last-child{background:var(--ink);}

/* ==========================================================================
   Reveal (kept from v1, with the no-JS guard)
   ========================================================================== */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s cubic-bezier(.2,.6,.2,1),transform .7s cubic-bezier(.2,.6,.2,1);}
.reveal.is-visible{opacity:1;transform:none;}
.no-js .reveal{opacity:1;transform:none;}

/* ==========================================================================
   RESPONSIVE
   Ported skeleton: 1300 (off-canvas nav) / 980 / 640, plus the ≤640
   "proof content stays horizontal" carousel behaviour.
   ADDED per Content-Layout standard: 768 tablet checkpoint, 380 small phone.
   ========================================================================== */
@media (max-width:1300px){
  .nav-primary{
    position:fixed;inset:0;top:0;z-index:100;
    background:var(--ink);padding:5rem 1.6rem 2rem;
    transform:translateX(100%);transition:transform .25s ease;
    overflow-y:auto;margin:0;
  }
  .nav-primary.open{transform:none;}
  .nav-primary .menu{flex-direction:column;align-items:stretch;gap:.1rem;}
  .nav-primary a{color:#fff;font-size:1.05rem;padding:.8rem .6rem;}
  .nav-primary a:hover{background:rgba(255,255,255,.07);color:#fff;}
  .sub-menu{
    position:static;opacity:1;visibility:visible;transform:none;
    background:transparent;border:0;box-shadow:none;display:none;padding:0 0 0 1rem;
  }
  .nav-primary li.open > .sub-menu{display:block;}
  .sub-menu a{color:#C3C8D0;font-size:.95rem;}
  .nav-toggle{display:inline-flex;z-index:110;position:relative;}
  body.nav-open .nav-toggle{color:#fff;border-color:var(--ink-softer);background:transparent;}
  .header-phone span{display:none;}
  .util-strip .util-lic{display:none;}
}

@media (max-width:980px){
  .grid-3,.grid-4,.work-grid{grid-template-columns:repeat(2,1fr);}
  .process-track,.process-track--5{grid-template-columns:repeat(2,1fr);gap:1.6rem;}
  .why-split,.areas-layout,.faq-split,.hero-grid,.cta-band .cta-inner{grid-template-columns:1fr;}
  .hero-grid{gap:2.2rem;padding:3rem 0 3.4rem;}
  /* Form first on tablet — it is the conversion action. */
  .hero-form{order:-1;}
  .faq-media img{position:static;}
  .header-quote{display:none;}
  .grid-4 .stat{border-left:0;}
  .cta-actions{justify-content:flex-start;}
}

/* ADDED — explicit 768 tablet reflow checkpoint. */
@media (max-width:768px){
  .section{padding:3.6rem 0;}
  .grid-4{grid-template-columns:repeat(2,1fr);}
  .why-split,.areas-layout{gap:2rem;}
}

@media (max-width:640px){
  .section{padding:3.2rem 0;}
  .grid-2,.grid-3,.grid-4,.work-grid,.area-tags{grid-template-columns:1fr;}
  .util-strip .util-hours{display:none;}
  .mobile-callbar{display:grid;}
  .site-footer{padding-bottom:7rem;}
  .footer-grid{grid-template-columns:1fr;gap:1.8rem;}
  .form-row--2{grid-template-columns:1fr;}
  .hero-grid{padding:2.4rem 0 3rem;}

  /* Ported from Patios: proof content stays HORIZONTAL as swipe strips
     instead of stacking into an endless scroll. */
  .badge-bar-inner{
    display:flex;flex-wrap:nowrap;justify-content:flex-start;
    gap:1.5rem;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;
  }
  .badge-bar-inner::-webkit-scrollbar{display:none;}
  .badge-item{flex:0 0 auto;white-space:nowrap;}
  .stats-band .grid-4{grid-template-columns:repeat(2,1fr);row-gap:1.4rem;}
  .work-grid,.quote-grid{
    display:flex;overflow-x:auto;gap:.9rem;
    scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;
    padding-bottom:.6rem;scrollbar-width:none;
  }
  .work-grid::-webkit-scrollbar,.quote-grid::-webkit-scrollbar{display:none;}
  .work-tile{flex:0 0 78%;scroll-snap-align:center;}
  .quote-grid > .quote{flex:0 0 86%;scroll-snap-align:center;}
}


/* ==========================================================================
   Components added 2026-08-27 when v2 went site-wide.
   All ported from the reference template's equivalents, in FS brand tokens.
   ========================================================================== */

/* Breadcrumb — reference template puts this in every inner-page hero. */
.breadcrumb{
  font-family:var(--font-mono);font-size:.74rem;color:#9AA2AE;
  margin-bottom:.9rem;text-transform:uppercase;letter-spacing:.06em;font-weight:700;
}
.breadcrumb a{color:#C7CBD3;text-decoration:none;}
.breadcrumb a:hover{color:#fff;}
.breadcrumb .sep{margin-inline:.4rem;opacity:.6;}
.breadcrumb .current{color:#fff;}

/* Trust bar base (the ≤640 swipe-strip rule already exists above). */
.trust-bar-inner{margin:0;padding:0;}

/* Contact page two-column layout. */
.contact-layout{display:grid;grid-template-columns:1fr 1.05fr;gap:3rem;align-items:start;}

/* Blog post hero + body. */
.post-hero{background:var(--ink);color:#E8EAEE;padding:2.6rem 0 0;}
.post-hero h1{color:#fff;font-size:clamp(1.9rem,3.4vw,2.9rem);margin-bottom:0;}
.post-hero .post-meta{
  font-family:var(--font-mono);font-size:.76rem;color:var(--muted-on-ink);
  text-transform:uppercase;letter-spacing:.06em;margin-bottom:.8rem;
}
.post-featured{
  margin-top:2rem;border-radius:var(--radius) var(--radius) 0 0;
  overflow:hidden;aspect-ratio:3/2;background:var(--ink-soft);
}
.post-featured img{width:100%;height:100%;object-fit:cover;object-position:50% 50%;}

.article-content h2{font-size:1.5rem;margin:36px 0 14px;}
.article-content h3{font-size:1.18rem;margin:26px 0 10px;}
.article-content h2:first-child,.article-content h3:first-child{margin-top:0;}
.article-content p{color:var(--muted);margin-bottom:1rem;}
.article-content p strong{color:var(--ink);}
.article-content ul,.article-content ol{margin:0 0 1.2rem;padding-left:0;}
.article-content ul li,.article-content ol li{
  list-style:none;color:var(--ink-soft);padding-left:1.4rem;position:relative;margin-bottom:.6rem;
}
.article-content ul li::before{
  content:"";position:absolute;left:0;top:.6em;width:6px;height:6px;
  background:var(--accent);border-radius:50%;
}
.article-content ol{counter-reset:art-ol;}
.article-content ol li{counter-increment:art-ol;}
.article-content ol li::before{
  content:counter(art-ol) ".";background:none;width:auto;top:0;
  font-family:var(--font-mono);font-weight:700;color:var(--accent);
}
.article-content a{color:var(--accent-d);font-weight:700;}
.article-content img{border-radius:var(--radius);margin:1.6rem 0;}
.article-content figure{margin:1.6rem 0;}
.article-content blockquote{
  margin:1.6rem 0;padding:1rem 1.2rem;background:var(--base-d);
  border-left:4px solid var(--accent);border-radius:0 var(--radius) var(--radius) 0;
}
.article-content details{border-bottom:1px solid var(--ink-line);padding:1.1rem 0;}
.article-content details summary{
  font-family:var(--font-display);font-weight:700;cursor:pointer;list-style:none;
}
.article-content details summary::-webkit-details-marker{display:none;}
.article-content table{width:100%;border-collapse:collapse;margin:1.6rem 0;}
.article-content th,.article-content td{
  padding:.7rem .9rem;border-bottom:1px solid var(--base-dd);text-align:left;
}
.article-content thead th{background:var(--ink);color:#fff;font-family:var(--font-display);}

/* Pagination. */
.pagination{margin-top:2.6rem;}
.pagination .nav-links{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center;}
.pagination .page-numbers{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:44px;height:44px;padding:0 .8rem;
  background:#fff;border:1px solid var(--base-dd);border-radius:6px;
  color:var(--ink);text-decoration:none;font-weight:700;font-size:.92rem;
}
.pagination .page-numbers:hover{border-color:var(--accent);color:var(--accent-d);}
.pagination .page-numbers.current{background:var(--accent);border-color:var(--accent);color:#fff;}

/* HTML sitemap. */
.sitemap-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2.4rem;}
.sitemap-col h3{font-size:1rem;margin-bottom:.9rem;padding-bottom:.5rem;border-bottom:2px solid var(--accent);}
.sitemap-col ul{margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem;}
.sitemap-col a{color:var(--muted);font-size:.93rem;text-decoration:none;}
.sitemap-col a:hover{color:var(--accent-d);}

@media (max-width:980px){
  .contact-layout{grid-template-columns:1fr;}
  .sitemap-grid{grid-template-columns:repeat(2,1fr);}
}
@media (max-width:640px){
  .sitemap-grid{grid-template-columns:1fr;}

}

/* ==========================================================================
   v1 -> v2 COMPATIBILITY LAYER (2026-08-27).

   The 16 legacy pages (aluminum/wrought-iron child + product-detail pages,
   privacy, terms, thank-you) hold fully-composed v1 HTML in post_content —
   real Big Easy Fence Supply copy that must be preserved verbatim. Rather
   than rewrite that content, these rules map the v1 class vocabulary onto
   the v2 design tokens so the same markup renders correctly inside the v2
   chrome. Content untouched; presentation unified.
   ========================================================================== */

body.bef-v2 .wrap{max-width:1260px;margin:0 auto;padding:0 32px;}
/* 2026-09-11 prnt.sc/HqoDkaNbo16L "gaps are too wide fix all pages like this" (LAYER 42):
   was padding:112px 0 at EVERY width - this (0,1,2) rule also beat the .section
   breakpoint values below (0,1,0), so phones got 112px too. Measured before on
   53 pages: median 171px between section contents, p90 230px, max 345px (390px wide).
   Now 72px per side on desktop easing to 48px on phones. Sections with their own
   padding rules are unaffected. Old value in system-v2.css.bak-gaps-20260911. */
body.bef-v2 section{padding:clamp(48px,3vw + 30px,72px) 0;}
body.bef-v2 section:first-child{padding-top:2.6rem;}

/* v1 buttons -> v2 button system */
body.bef-v2 .btn-rust{background:var(--accent);color:#fff;box-shadow:0 6px 18px rgba(216,72,31,.35);}
body.bef-v2 .btn-rust:hover{background:var(--accent-d);}
body.bef-v2 .btn-ink{background:var(--ink);color:#fff;}
body.bef-v2 .btn-ink-outline{border-color:var(--ink);color:var(--ink);background:transparent;}
body.bef-v2 .btn-sand-outline{border-color:rgba(255,255,255,.55);color:#fff;background:transparent;}

/* v1 hero/intro blocks. The v2 template supplies its own hero above the
   content, so any hero left inside content is demoted to a plain intro. */
body.bef-v2 .mat-hero{background:transparent;padding:0 0 1.4rem;}
body.bef-v2 .mat-intro{max-width:760px;}
body.bef-v2 .mat-intro p{color:var(--muted);font-size:1.08rem;line-height:1.6;}
body.bef-v2 .hero-cta{display:flex;flex-wrap:wrap;gap:.9rem;margin-top:1.4rem;}

/* v1 two-column category rows -> v2 split rhythm */
body.bef-v2 .mat-cat-row{
  display:grid;grid-template-columns:1.05fr .95fr;gap:3rem;align-items:center;margin-bottom:3rem;
}
body.bef-v2 .mat-cat-row.is-reverse .mat-cat-media{order:-1;}
body.bef-v2 .mat-cat-media img{border-radius:var(--radius);box-shadow:var(--shadow-lg);width:100%;height:auto;}
body.bef-v2 .mat-cat-copy h2,body.bef-v2 .mat-cat-copy h3{margin-bottom:.6rem;}

/* v1 factor/spec cards -> v2 card system */
body.bef-v2 .mat-factors-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.5rem;}
body.bef-v2 .mat-factor-card{
  background:#fff;border-radius:var(--radius);border-top:5px solid var(--accent);
  padding:1.6rem 1.2rem 1.3rem;box-shadow:var(--shadow);
}
body.bef-v2 .mat-factor-card p{color:var(--muted);font-size:.92rem;margin:0;}
body.bef-v2 .spec-list{margin:1rem 0 0;padding:0;display:grid;gap:.6rem;}
body.bef-v2 .spec-list li{
  position:relative;padding-left:1.4rem;color:var(--ink-soft);font-size:.95rem;list-style:none;
}
body.bef-v2 .spec-list li::before{
  content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;
  background:var(--accent);border-radius:50%;
}

/* v1 inline link arrow */
body.bef-v2 .product-link{
  display:inline-flex;align-items:center;gap:.4rem;font-weight:800;font-size:.85rem;
  text-transform:uppercase;letter-spacing:.06em;color:var(--accent);text-decoration:none;
}

/* v1 in-content CTA band -> v2 dusk band */
body.bef-v2 .cta-band{background:var(--ink);color:#E8EAEE;border-radius:var(--radius);padding:3rem 2.6rem;}
body.bef-v2 .cta-band h2,body.bef-v2 .cta-band h3{color:#fff;}
body.bef-v2 .cta-band p{color:#C3C8D0;}
body.bef-v2 .cta-inner{display:grid;grid-template-columns:1.3fr .7fr;gap:2rem;align-items:center;}
body.bef-v2 .cta-actions{display:flex;flex-wrap:wrap;gap:.9rem;justify-content:flex-end;}

/* v1 figures + FAQ items */
body.bef-v2 .article-figure{margin:1.6rem 0;}
body.bef-v2 .article-figure img{border-radius:var(--radius);width:100%;height:auto;}
body.bef-v2 .faq-item{border-bottom:1px solid var(--ink-line);padding:1.1rem 0;}
body.bef-v2 .faq-item summary{
  font-family:var(--font-display);font-weight:700;cursor:pointer;list-style:none;
  position:relative;padding-right:2rem;
}
body.bef-v2 .faq-item summary::-webkit-details-marker{display:none;}
body.bef-v2 .faq-item summary::after{
  content:"+";position:absolute;right:0;top:0;color:var(--accent);font-weight:800;font-size:1.2rem;
}
body.bef-v2 .faq-item[open] summary::after{content:"\2212";}

/* v1 testimonial cards -> v2 quote cards */
body.bef-v2 .testi-card{
  background:#fff;border-radius:var(--radius);padding:1.5rem;box-shadow:var(--shadow);
  border-top:3px solid var(--accent);
}
body.bef-v2 .testi-who{display:flex;align-items:center;gap:.7rem;margin-top:1rem;}
body.bef-v2 .testi-who .name{font-weight:800;color:var(--ink);}
body.bef-v2 .stars{color:var(--accent);letter-spacing:.1em;}

@media (max-width:980px){
  body.bef-v2 .mat-cat-row{grid-template-columns:1fr;gap:1.8rem;}
  body.bef-v2 .mat-cat-row.is-reverse .mat-cat-media{order:0;}
  body.bef-v2 .mat-factors-grid{grid-template-columns:repeat(2,1fr);}
  body.bef-v2 .cta-inner{grid-template-columns:1fr;}
  body.bef-v2 .cta-actions{justify-content:flex-start;}
}
@media (max-width:640px){
  body.bef-v2 .mat-factors-grid{grid-template-columns:1fr;}
  body.bef-v2 .cta-band{padding:2rem 1.3rem;}
}

/* ==========================================================================
   2026-08-27 — BANNER, CTA VISIBILITY AND RESPONSIVE LADDER PASS
   Everything below is a CODE-LEVEL fix to a reported VISUAL symptom. No page
   was rendered while writing it. Each block names the mechanism it targets.
   ========================================================================== */

/* --------------------------------------------------------------------------
   B1. HERO BANNER — stop the crop.

   Mechanism: .hero-bg is position:absolute/inset:0 with object-fit:cover, so
   the image is forced to fill whatever height the hero content dictates. The
   hero is content-driven and TALL (headline + sub + CTAs + facts, and on the
   homepage a whole form). A very wide, short source image cover-fitted into a
   tall box loses most of its height.

   Fix has three parts:
     (a) put a floor AND a sensible ceiling on the banner box so it cannot be
         dragged to an extreme ratio by content,
     (b) declare an explicit focal point at every width,
     (c) art-direct the focal point for portrait viewports, where the crop is
         worst.
   Images whose native ratio is simply wrong for this slot cannot be rescued
   by CSS and are listed in the human-supplies-images note in the report.
   -------------------------------------------------------------------------- */
.hero{
  position:relative;overflow:hidden;background:var(--ink);
  /* isolate creates a stacking context so .hero-bg / ::after / .hero-grid
     can never be re-ordered by a sibling's z-index. */
  isolation:isolate;
}
.hero-bg{position:absolute;inset:0;z-index:0;overflow:hidden;}
.hero-bg img{
  width:100%;height:100%;
  object-fit:cover;
  object-position:50% 42%;   /* focal point: upper-middle, where fence tops sit */
  display:block;
}

/* --------------------------------------------------------------------------
   B1b. HERO MOTION — slow Ken Burns drift on the background photograph.
   Transform-only (scale + translate) so it runs on the compositor and never
   triggers layout: no CLS, no effect on LCP, nothing to download. The photo
   starts already scaled to 1.05 so the pan can never expose a bare edge.
   Origin matches the object-position focal point (50% 42%) so the fence tops
   stay in frame through the whole cycle. The global prefers-reduced-motion
   block at the top of this file (animation-duration:.01ms !important) stops
   this for anyone who asks for reduced motion, so no separate guard here.
   -------------------------------------------------------------------------- */
.hero-bg img{
  transform-origin:50% 42%;
  will-change:transform;
  animation:bef-hero-drift 32s ease-in-out infinite alternate;
}
@keyframes bef-hero-drift{
  from{transform:scale(1.05) translate3d(0,0,0);}
  to{transform:scale(1.14) translate3d(-1.2%,-1.4%,0);}
}
/* The later global `body.bef-v2 img,svg,video{height:auto}` (see B7) outranks
   `.hero-bg img{height:100%}` above, so below ~1200px the photo collapsed to
   its intrinsic ratio and filled only the top strip of the hero, leaving flat
   ink behind the copy and the form. Restated here at matching specificity so
   the background photograph fills the hero at every width. */
body.bef-v2 .hero-bg img{height:100%;}

.hero::after{z-index:1;}
.hero-grid{position:relative;z-index:2;}

/* --------------------------------------------------------------------------
   B2. HERO OVERLAY GRADIENT — the mobile contrast failure.

   Mechanism: the gradient runs 100deg (left-to-right), dark on the left. On
   desktop the copy sits left, over the dark end — fine. Below 980px the grid
   collapses to ONE column, so the copy spans the full width and its right-hand
   side lands on the 42%-opacity end, over open photo. Measured: hero sub text
   drops from 8.25:1 to 5.10:1, and it degrades further over a light photo.
   Fix: rotate the gradient to vertical and deepen it once the layout stacks.
   -------------------------------------------------------------------------- */
@media (max-width:980px){
  .hero::after{
    background:linear-gradient(180deg, rgba(23,27,36,.72) 0%, rgba(23,27,36,.88) 55%, rgba(23,27,36,.96) 100%);
  }
}

/* --------------------------------------------------------------------------
   C1. CTA VISIBILITY — focus, hover and hit area.

   Every interactive element gets a visible focus ring (keyboard users), and
   every tap target is brought to at least 44x44 CSS px.
   -------------------------------------------------------------------------- */
.btn{min-height:44px;}
.btn:focus-visible{outline:3px solid var(--accent);outline-offset:3px;}
.btn-call:hover,.btn-call:focus-visible{background:var(--white);color:var(--ink);}
.btn-outline:hover,.btn-outline:focus-visible{background:var(--ink);color:var(--white);}

/* card-link reads as body copy at rest; give it an affordance. */
.card-link{text-decoration:none;}
.card:hover .card-link,.card:focus-visible .card-link{text-decoration:underline;text-underline-offset:3px;}
.card:focus-visible{outline:3px solid var(--accent);outline-offset:3px;}

/* Footer social icons were 16x16 anchors — far under the 44px minimum. */
.footer-social a{
  display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;border-radius:6px;
}
.footer-social a:hover,.footer-social a:focus-visible{background:rgba(255,255,255,.10);}

/* Header phone and util-strip links: give them a real hit area. */
.header-phone{display:inline-flex;align-items:center;min-height:44px;padding:0 .4rem;}
.util-strip a{display:inline-flex;align-items:center;min-height:32px;}

/* Mobile call bar: both actions must clear 44px. */
.mobile-callbar a{min-height:52px;}

/* --------------------------------------------------------------------------
   C2. TRUST SIGNALS ALWAYS VISIBLE.

   The v1 design hid every trust signal — including "Licensed & Insured" —
   inside a 26-second infinite marquee with no pause control. v2 replaced that
   with a static badge bar, but the <=640 rule turned it into a horizontal
   swipe strip, which still means most badges are off-screen at rest on a
   phone. Wrap them instead so all of them are visible without interaction.
   -------------------------------------------------------------------------- */
@media (max-width:640px){
  .badge-bar-inner,.trust-bar-inner{
    display:grid !important;
    grid-template-columns:1fr 1fr;
    gap:.5rem .9rem;
    overflow:visible !important;
    padding:.9rem 0;
  }
  .badge-item{
    flex:none !important;white-space:normal !important;
    font-size:.82rem;line-height:1.35;align-items:flex-start;
  }
  .badge-item .ico{width:26px;height:26px;flex:0 0 26px;padding:.28rem;}
}
@media (max-width:400px){
  .badge-bar-inner,.trust-bar-inner{grid-template-columns:1fr;}
}

/* --------------------------------------------------------------------------
   D. RESPONSIVE LADDER — consolidated.

   The v1 system had two breakpoints (980 / 640) and no tablet treatment at
   all. This is the full ladder. Declared last so it resolves cleanly against
   the earlier partial rules.

     1600+  large desktop comfort
     1300   nav goes off-canvas
     1200   4-up grids -> 2-up
     1024   tablet landscape
      900   hero stacks
      768   tablet portrait
      640   phone
      400   small phone
   -------------------------------------------------------------------------- */

@media (min-width:1600px){
  .container{max-width:1380px;}
  .section{padding:128px 0;}
}

@media (max-width:1200px){
  .grid-4{grid-template-columns:repeat(2,1fr);}
  .hero-grid{gap:2.4rem;}
}

@media (max-width:1024px){
  .section{padding:88px 0;}
  .grid-3,.work-grid{grid-template-columns:repeat(2,1fr);}
  .process-track--5{grid-template-columns:repeat(3,1fr);}
  .contact-layout,.faq-split,.areas-layout{grid-template-columns:1fr;gap:2.4rem;}
  .sitemap-grid{grid-template-columns:repeat(2,1fr);}
}

@media (max-width:900px){
  .hero-grid{grid-template-columns:1fr;gap:2rem;padding:3rem 0 3.4rem;}
  /* Form first once stacked: it is the conversion action, and burying it
     under the full headline block pushes it far below the fold. */
  .hero-form{order:-1;}
  .hero h1{max-width:none;}
  .why-split{grid-template-columns:1fr;gap:2rem;}
  .cta-band .cta-inner{grid-template-columns:1fr;}
  .cta-actions{justify-content:flex-start;}
}

@media (max-width:768px){
  .section{padding:72px 0;}
  .grid-2,.grid-3,.grid-4,.work-grid{grid-template-columns:repeat(2,1fr);}
  .process-track,.process-track--5{grid-template-columns:1fr;gap:1.4rem;}
  .sitemap-grid{grid-template-columns:1fr;}
  .footer-grid{grid-template-columns:1fr 1fr;gap:2rem;}
}

@media (max-width:640px){
  .section{padding:56px 0;}
  .grid-2,.grid-3,.grid-4,.work-grid,.area-tags{grid-template-columns:1fr;}
  .footer-grid{grid-template-columns:1fr;gap:1.8rem;}
  .form-row--2{grid-template-columns:1fr;}
  .hero-grid{padding:2.2rem 0 2.8rem;}
  .site-footer{padding-bottom:7rem;}
  .mobile-callbar{display:grid;}
  /* Quote cards stay swipeable, but aligned to the container gutter. */
  .quote-grid{
    display:flex;overflow-x:auto;gap:.9rem;
    scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;
    padding-bottom:.6rem;scrollbar-width:none;
  }
  .quote-grid::-webkit-scrollbar{display:none;}
  .quote-grid > .quote{flex:0 0 86%;scroll-snap-align:start;}
  /* Work tiles stack rather than scroll: they are content, not proof. */
  .work-grid{display:grid;overflow:visible;}
}

@media (max-width:400px){
  .container,.container--narrow{padding:0 16px;}
  .btn{padding:14px 20px;font-size:.9rem;}
  .hero h1{font-size:clamp(1.9rem,8vw,2.4rem);}
  .mobile-callbar a{font-size:.78rem;padding:.8rem .3rem;}
  .estimate-form-wrap{padding:1.1rem 1rem 1rem;}
}

/* --------------------------------------------------------------------------
   E. OVERFLOW / STACKING GUARDS.
   Cheap insurance against horizontal scroll and text-over-text, both of which
   were named as symptoms.
   -------------------------------------------------------------------------- */
body.bef-v2{overflow-x:hidden;}
body.bef-v2 img,body.bef-v2 svg,body.bef-v2 video{max-width:100%;height:auto;}
body.bef-v2 table{max-width:100%;}
.table-wrap{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;}
/* Long unbroken strings (URLs in legal copy) must not push the layout wide. */
.article-content,.article-content p,.article-content li,.site-footer address{
  overflow-wrap:anywhere;
}
/* Sticky header must always sit above hero content. */
.site-header{z-index:80;}
.mobile-callbar{z-index:90;}
.nav-primary{z-index:100;}

/* --------------------------------------------------------------------------
   In-hero trust line. Used on About / Contact / FAQ / Testimonials / Sitemap,
   where the reference site uses a compact trust line rather than the full
   badge bar. Keeps every trust signal visible on every page without stacking
   two trust blocks on top of each other.
   -------------------------------------------------------------------------- */
.hero-trust{
  display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.4rem;
  margin:1.6rem 0 0;padding:0;list-style:none;
  font-size:.88rem;color:#D3D7DE;font-weight:600;
}
.hero-trust li{display:inline-flex;align-items:center;gap:.45rem;}
.hero-trust li::before{
  content:"\2714";color:var(--accent-l);font-weight:800;font-size:.9em;
}
@media (max-width:640px){
  .hero-trust{gap:.4rem 1rem;font-size:.82rem;}
}

/* ==========================================================================
   2026-08-27 — UNSTYLED-CLASS PASS.
   A markup-vs-stylesheet diff across all 22 rendered pages found classes
   present in the DOM with no rule behind them. Untreated, each renders as
   unstyled inline text or leaves dead space. Fixed below.
   ========================================================================== */

/* .hero--plain — THE IMPORTANT ONE.
   Inner-page heroes carry no form column, but .hero-grid is a two-column
   1.15fr/.85fr grid. With only one child, every inner hero was reserving an
   empty 0.85fr column: a large dead gap to the right of the headline at every
   width above 900px. Collapse to a single column and let the copy breathe. */
.hero--plain .hero-grid{grid-template-columns:1fr;}
.hero--plain .hero-copy{max-width:62ch;}
.hero--plain h1{max-width:20ch;}

/* Product-card index label ("01 / Aluminum"). */
.card-num{
  display:block;padding:0 1.2rem;margin:1.05rem 0 -.4rem;
  font-family:var(--font-mono);font-weight:700;font-size:.72rem;
  letter-spacing:.08em;text-transform:uppercase;color:var(--accent-d);
}

/* Testimonial initials disc. Without this the initials rendered as loose
   inline text jammed against the customer name. */
.avatar-initials{
  width:46px;height:46px;flex:0 0 46px;border-radius:50%;
  background:var(--base-d);color:var(--ink-softer);
  display:inline-flex;align-items:center;justify-content:center;
  font-family:var(--font-display);font-weight:800;font-size:.86rem;
  letter-spacing:.02em;
}

/* Hero facts strip (homepage). */
.hero-facts{
  display:flex;flex-wrap:wrap;gap:.6rem 1.8rem;
  margin:1.6rem 0 0;padding:1.2rem 0 0;list-style:none;
  border-top:1px solid rgba(255,255,255,.18);
  font-family:var(--font-mono);font-size:.78rem;color:#C3C8D0;
}
.hero-facts li{display:inline-flex;align-items:center;gap:.4rem;}
.hero-facts b{color:#fff;font-weight:700;}

/* Form heading: an <h2> inside a form card must not inherit the full page
   h2 scale (up to 2.7rem) or it dwarfs the fields under it. */
.estimate-form-wrap .ef-title{font-size:1.3rem;line-height:1.2;margin:0 0 .2rem;}

/* Legacy content: eyebrow-style index label inside migrated category rows. */
body.bef-v2 .mat-cat-copy .num,
body.bef-v2 .num{
  display:block;margin-bottom:14px;
  font-family:var(--font-mono);font-weight:700;font-size:.76rem;
  letter-spacing:.08em;text-transform:uppercase;color:var(--accent-d);
}

@media (max-width:900px){
  .hero--plain .hero-copy{max-width:none;}
  .hero--plain h1{max-width:none;}
}

/* Process track final ladder (declared last so it governs cleanly):
   5-up desktop -> 3-up tablet landscape -> 2-up tablet portrait -> 1-up phone. */
@media (max-width:1024px){ .process-track--5{grid-template-columns:repeat(3,1fr);} }
@media (max-width:900px){  .process-track--5,.process-track{grid-template-columns:repeat(2,1fr);} }
@media (max-width:640px){  .process-track--5,.process-track{grid-template-columns:1fr;} }

/* ==========================================================================
   Dark-surface text visibility fix — 2026-08-27
   Same root cause as the CTA fix above: the `body.bef-v2 ...` base rules
   (specificity 0,1,2) outrank the component rules written flat (0,1,0 / 0,1,1),
   so components sitting on dark surfaces inherited light-background colours:
     .hero h1      wanted #fff, got --ink   -> near-black headline on a dark photo
     .skip-link    wanted #fff, got --accent-d -> 2.88:1
     .util-strip a wanted --accent-l, got --accent-d -> 2.33:1
   Re-assert each at matching specificity. Util-strip links go to white rather
   than --accent-l, which measured only 4.1:1 on --ink-soft and still failed AA.
   ========================================================================== */
body.bef-v2 .hero h1{color:var(--white);}
body.bef-v2 .hero h1 em{color:var(--accent-l);}
body.bef-v2 a.skip-link{color:var(--white);}
body.bef-v2 .util-strip a{color:var(--white);}
body.bef-v2 .util-strip a:hover,
body.bef-v2 .util-strip a:focus-visible{color:var(--accent-l);}

/* Util-strip edge-clipping fix — 2026-08-27.
   .util-strip .container set `padding:.42rem 0`, which overrode the global
   .container `padding:0 32px`. The phone number then sat flush against the
   viewport edge and read as cut off, worst at <=640px. Restore the horizontal
   padding while keeping the tighter vertical rhythm. */
body.bef-v2 .util-strip .container{padding-left:32px;padding-right:32px;}
@media(max-width:640px){
  body.bef-v2 .util-strip .container{padding-left:20px;padding-right:20px;}
}

/* ==========================================================================
   2026-08-27 — LIVE CONTENT MIGRATION SUPPORT.
   Styles for components brought across from the client's own live homepage.
   Appended at the end so nothing above (including the CTA/heading contrast
   fix blocks) is modified. Fence Supply's identity is unchanged: Archivo /
   Manrope / Space Mono, existing accent ramp, 8px buttons, 4px radius.
   ========================================================================== */

/* ---- Trust badge bar (googlestars / facebookstars / pseal / seal) ---- */
.badge-bar .trust-rated{
  margin:0 0 14px;text-align:center;
  font-family:var(--font-mono);font-weight:700;font-size:.74rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--accent-d);
}
.trust-logos{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:center;
  gap:14px;margin:0;padding:0 0 4px;list-style:none;
}
.trust-logos li{
  display:flex;align-items:center;justify-content:center;
  background:var(--white);border:1px solid var(--ink-line);border-radius:var(--radius);
  padding:10px 22px;min-height:64px;
}
/* Badges are supplied at their native size; cap the height and let width
   follow so none of them is squashed (they range 1:1 to 2.06:1). */
.trust-logos img{height:38px;width:auto;max-width:100%;display:block;}
.trust-logos li:nth-child(3) img,
.trust-logos li:nth-child(4) img{height:44px;}

@media (max-width:640px){
  .trust-logos{gap:10px;}
  .trust-logos li{padding:8px 14px;min-height:54px;flex:0 0 calc(50% - 5px);}
  .trust-logos img{height:30px;}
  .trust-logos li:nth-child(3) img,
  .trust-logos li:nth-child(4) img{height:34px;}
}

/* ---- Process steps: live uses an icon + "Step N" label ---- */
.process-icon{
  width:74px;height:74px;margin:0 0 16px;border-radius:50%;
  background:var(--base-d);border:1px solid var(--ink-line);
  display:flex;align-items:center;justify-content:center;
}
.process-icon img{width:38px;height:auto;display:block;}
.process-count{
  display:block;margin-bottom:6px;
  font-family:var(--font-mono);font-weight:700;font-size:.72rem;
  letter-spacing:.1em;text-transform:uppercase;color:var(--accent-d);
}

/* ---- "Why choose" cards (sit on the dark band) ---- */
.why-card{
  background:var(--white);border:1px solid var(--ink-line);
  border-radius:var(--radius);border-top:3px solid var(--accent);
  padding:26px 24px 24px;height:100%;
}
.why-card h3{font-size:1.18rem;margin-bottom:8px;color:var(--ink);}
.why-card p{color:var(--muted);font-size:.95rem;margin:0;}
.why-card-icon{
  width:64px;height:64px;margin-bottom:16px;border-radius:50%;
  background:var(--base-d);display:flex;align-items:center;justify-content:center;
}
.why-card-icon img{width:34px;height:auto;display:block;}

/* ---- Product / category tiles ---- */
.cat-card{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  gap:12px;padding:30px 20px 26px;text-decoration:none;color:var(--ink);
  background:var(--white);border:1px solid var(--ink-line);border-radius:var(--radius);
  transition:transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.cat-card:hover,.cat-card:focus-visible{
  transform:translateY(-4px);box-shadow:var(--shadow);border-color:var(--accent);
}
.cat-card:focus-visible{outline:3px solid var(--accent);outline-offset:3px;}
.cat-card h3{font-size:1.15rem;margin:0;}
.cat-card .card-link{padding:0;}
.cat-card-icon{
  width:96px;height:96px;border-radius:50%;
  background:var(--base-d);border:1px solid var(--ink-line);
  display:flex;align-items:center;justify-content:center;
}
.cat-card-icon img{width:52px;height:auto;display:block;}

/* ---- Testimonial photo avatar (Natasha Foster) ---- */
.avatar-photo{
  width:46px;height:46px;flex:0 0 46px;border-radius:50%;overflow:hidden;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--base-d);
}
.avatar-photo img{width:100%;height:100%;object-fit:cover;object-position:50% 40%;display:block;}

/* ---- Image + copy band ("Easy and Quick FREE Estimates") ---- */
.split-band{display:grid;grid-template-columns:.85fr 1.15fr;gap:3rem;align-items:center;}
.split-band-media img{
  width:100%;height:auto;aspect-ratio:3/4;object-fit:cover;object-position:50% 45%;
  border-radius:var(--radius);box-shadow:var(--shadow-lg);
}
@media (max-width:900px){
  .split-band{grid-template-columns:1fr;gap:2rem;}
  .split-band-media{max-width:420px;}
  .split-band-media img{aspect-ratio:4/3;}
}

/* Four-up testimonial grid needs a tighter card at large widths. */
.grid-4 .quote{padding:1.2rem 1.2rem 1.1rem;}
.grid-4 .quote p{font-size:.92rem;}

/* ==========================================================================
   FLOATING TOOLS — back-to-top + automated chat assistant
   Both sit below the off-canvas nav (z-index:100) so the nav always covers
   them, and above the mobile call bar (z-index:70). At <=640 they are lifted
   clear of that bar. Colours come from the existing token ramp only.
   ========================================================================== */
.bef-totop,
.bef-chat-launch{
  position:fixed;right:1.15rem;z-index:80;
  border:0;cursor:pointer;font-family:var(--font-body);
  box-shadow:0 10px 26px -8px rgba(23,27,36,.5);
}
.bef-totop:focus-visible,
.bef-chat-launch:focus-visible,
.bef-chat-close:focus-visible,
.bef-chat-q:focus-visible{outline:3px solid var(--accent-l);outline-offset:2px;}

/* --- back to top ------------------------------------------------------- */
.bef-totop{
  bottom:5.6rem;width:44px;height:44px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--ink);color:#fff;
  opacity:0;transform:translateY(10px);pointer-events:none;
  transition:opacity .22s ease,transform .22s ease,background .18s ease;
}
.bef-totop.is-on{opacity:1;transform:none;pointer-events:auto;}
.bef-totop:hover{background:var(--ink-soft);}

/* --- chat launcher ----------------------------------------------------- */
.bef-chat-launch{
  bottom:1.15rem;
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.8rem 1.05rem;border-radius:999px;
  background:var(--accent-dd);color:#fff;
  font-weight:800;font-size:.9rem;letter-spacing:.01em;
  transition:background .18s ease,transform .18s ease;
}
.bef-chat-launch:hover{background:var(--accent-d);transform:translateY(-1px);}
.bef-chat.is-open .bef-chat-launch{background:var(--ink);}
.bef-chat.is-open .bef-chat-ico-open{display:none;}

/* --- panel ------------------------------------------------------------- */
.bef-chat-panel{
  position:fixed;right:1.15rem;bottom:4.9rem;z-index:81;
  width:min(360px,calc(100vw - 2.3rem));
  max-height:min(560px,calc(100vh - 8rem));
  display:flex;flex-direction:column;overflow:hidden;
  background:#fff;border:1px solid var(--base-dd);border-radius:12px;
  box-shadow:0 30px 60px -20px rgba(23,27,36,.5);
}
/* display:flex above would otherwise beat the [hidden] attribute and leave the
   closed panel covering the page, swallowing clicks on everything under it. */
.bef-chat-panel[hidden]{display:none;}
.bef-chat-head{
  display:flex;align-items:center;justify-content:space-between;gap:.8rem;
  padding:.85rem 1rem;background:var(--ink);color:#fff;
}
.bef-chat-title{margin:0;font-family:var(--font-display);font-weight:800;font-size:1rem;}
.bef-chat-sub{margin:.15rem 0 0;font-size:.76rem;color:var(--muted-on-ink);}
.bef-chat-close{
  border:0;background:transparent;color:#fff;cursor:pointer;
  display:inline-flex;padding:.3rem;border-radius:4px;
}
.bef-chat-close:hover{background:rgba(255,255,255,.12);}

.bef-chat-log{
  flex:1 1 auto;overflow-y:auto;padding:1rem;display:grid;gap:.6rem;
  background:var(--base-d);
}
.bef-chat-msg{
  max-width:88%;padding:.62rem .8rem;border-radius:10px;
  font-size:.9rem;line-height:1.5;
}
.bef-chat-msg--bot{background:#fff;color:var(--ink);border:1px solid var(--base-dd);justify-self:start;border-bottom-left-radius:3px;}
.bef-chat-msg--user{background:var(--ink);color:#fff;justify-self:end;border-bottom-right-radius:3px;}
.bef-chat-msg a{color:var(--accent-d);font-weight:700;}
.bef-chat-msg--user a{color:#fff;}

.bef-chat-quick{
  display:flex;flex-wrap:wrap;gap:.4rem;padding:.7rem 1rem 0;background:#fff;
}
.bef-chat-q{
  border:1px solid var(--accent);background:#fff;color:var(--accent-d);
  font:inherit;font-size:.82rem;font-weight:700;cursor:pointer;
  padding:.42rem .7rem;border-radius:999px;
  transition:background .15s ease,color .15s ease;
}
.bef-chat-q:hover{background:var(--accent);color:#fff;}

.bef-chat-foot{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;padding:.8rem 1rem 1rem;background:#fff;}
.bef-chat-cta{
  display:flex;align-items:center;justify-content:center;
  padding:.6rem .5rem;border-radius:var(--radius-btn);
  text-decoration:none;font-weight:800;font-size:.82rem;text-align:center;
}
/* Scoped to body.bef-v2 because the global `body.bef-v2 a{color:var(--accent-d)}`
   outranks a bare class selector and would otherwise paint this button text
   dark red on orange / dark red on navy. Same trap as the primary nav. */
body.bef-v2 .bef-chat-cta--call{background:var(--accent-dd);color:#fff;}
body.bef-v2 .bef-chat-cta--call:hover{background:var(--accent-dd);color:#fff;}
body.bef-v2 .bef-chat-cta--quote{background:var(--ink);color:#fff;}
body.bef-v2 .bef-chat-cta--quote:hover{background:var(--ink-soft);color:#fff;}
body.bef-v2 .bef-chat-msg--user{color:#fff;}

/* Hide both while the off-canvas nav is open so they cannot sit on top of it. */
body.nav-open .bef-totop,
body.nav-open .bef-chat{display:none;}

@media (max-width:640px){
  /* Clear the fixed two-action call bar. */
  .bef-chat-launch{bottom:4.5rem;padding:.7rem .9rem;}
  .bef-totop{bottom:8.6rem;}
  .bef-chat-panel{bottom:8.2rem;max-height:calc(100vh - 12rem);}
  .bef-chat-launch-label{display:none;}
  .bef-chat-launch{border-radius:50%;width:48px;height:48px;padding:0;justify-content:center;}
}

@media (prefers-reduced-motion:reduce){
  .bef-totop{transition:none;}
}

/* ==========================================================================
   REDESIGN LAYER - 2026-09-08
   Ports the design language of the supplied reference onto the existing
   Big Easy Fence Supply markup. Copy is untouched; only the look moves.

   The language, as read off the reference:
     - warm near-black chrome (header, dark bands, footer) rather than navy
     - cream ground alternating with white, rather than cool grey
     - terracotta accent rather than vivid orange-red
     - high-contrast SERIF for display headings, centred, over a clean sans body
     - photo-led white cards, generous radius, soft warm shadow
     - a quiet stats/trust band directly under the hero
     - small letterspaced eyebrows above section headings

   Written as a layer at the end of the sheet so the original cascade is intact
   and the whole redesign can be lifted out by deleting this block. Selectors
   are scoped to body.bef-v2 where they must outrank the global link colour.
   ========================================================================== */

/* --------------------------------------------------------- 1. GROUND ---- */
body.bef-v2{background:var(--base);}
.section--sand{background:var(--base-d);}
.section--dusk{background:var(--ink);}

/* --------------------------------------------- 2. DISPLAY TYPOGRAPHY ---- */
body.bef-v2 h1,
body.bef-v2 h2,
body.bef-v2 h3{
  font-family:var(--font-serif);
  font-weight:600;
  letter-spacing:-.012em;
  text-wrap:balance;
}
body.bef-v2 h1{font-weight:700;line-height:1.06;}
body.bef-v2 h2{line-height:1.14;}
body.bef-v2 h3{font-weight:600;line-height:1.24;}
/* Card and list headings stay sans - the serif is for section-level display
   only, which is how the reference uses it. */
body.bef-v2 .card h3,
body.bef-v2 .cat-card h3,
body.bef-v2 .why-card h3,
body.bef-v2 .process-step h3,
body.bef-v2 .footer-col h2,
body.bef-v2 .bef-chat-title{
  font-family:var(--font-display);
  font-weight:800;
  letter-spacing:0;
}

/* Section headings centre, as in the reference. */
.section-head{text-align:center;margin-inline:auto;max-width:56rem;}
.section-head .lead{margin-inline:auto;}
.eyebrow{
  font-family:var(--font-body);
  font-size:.74rem;font-weight:800;
  letter-spacing:.18em;text-transform:uppercase;
  color:var(--accent-d);
}
.section--dusk .eyebrow{color:var(--accent-l);}
/* A short rule under a centred section heading, the reference's quiet divider. */
.section-head h2::after{
  content:"";display:block;width:54px;height:2px;margin:.9rem auto 0;
  background:var(--accent);opacity:.85;
}
.section--dusk .section-head h2::after{background:var(--accent-l);}

/* ------------------------------------------------------- 3. CHROME ------ */
/* The reference runs a dark bar across the top. The brand mark is the site's
   original logo (logo-new.png), used unmodified - no filter, no recolour. */
.site-header{background:var(--ink);border-bottom:1px solid rgba(255,255,255,.10);}
body.bef-v2 .nav-primary a{color:#F2EFE9;}
body.bef-v2 .nav-primary a:hover{color:#fff;background:rgba(255,255,255,.09);}
body.bef-v2 .header-phone{color:#F2EFE9;}
body.bef-v2 .header-phone:hover{color:var(--accent-l);}
.nav-toggle{color:#F2EFE9;border-color:rgba(255,255,255,.28);}
.sub-menu{background:var(--ink-soft);border-color:rgba(255,255,255,.14);}
body.bef-v2 .sub-menu a{color:#E8E4DC;}
body.bef-v2 .sub-menu a:hover{color:#fff;background:rgba(255,255,255,.10);}

/* ------------------------------------------------------ 4. BUTTONS ------ */
body.bef-v2 .btn{
  border-radius:6px;
  font-family:var(--font-body);
  letter-spacing:.01em;
}
body.bef-v2 .btn-primary{background:var(--accent-d);color:#fff;border:1px solid var(--accent-d);}
body.bef-v2 .btn-primary:hover{background:var(--accent-dd);border-color:var(--accent-dd);color:#fff;}
body.bef-v2 .btn-outline{border:1px solid rgba(255,255,255,.62);color:#fff;background:transparent;}
body.bef-v2 .btn-outline:hover{background:rgba(255,255,255,.12);color:#fff;}
/* On a light ground an outline button needs ink, not white. */
.section:not(.section--dusk) .btn-outline,
body.bef-v2 .section:not(.section--dusk) .btn-outline{border-color:var(--ink);color:var(--ink);}
body.bef-v2 .section:not(.section--dusk) .btn-outline:hover{background:var(--ink);color:#fff;}

/* -------------------------------------------------------- 5. CARDS ------ */
body.bef-v2 .card,
body.bef-v2 .cat-card,
body.bef-v2 .why-card,
body.bef-v2 .quote{
  background:var(--base);
  border:1px solid var(--base-dd);
  border-radius:10px;
  box-shadow:0 14px 30px -22px rgba(35,35,31,.45);
  overflow:hidden;
}
body.bef-v2 .card:hover,
body.bef-v2 .cat-card:hover{
  box-shadow:0 22px 44px -24px rgba(35,35,31,.5);
  transform:translateY(-2px);
}
body.bef-v2 .card,
body.bef-v2 .cat-card{transition:box-shadow .25s ease,transform .25s ease;}
.card-media img{border-radius:0;}
/* Cards sitting on the cream band get a hairline instead of a heavy edge. */
.section--sand .card,
.section--sand .cat-card,
.section--sand .quote{border-color:rgba(35,35,31,.10);}

/* -------------------------------------- 6. TRUST BAND UNDER THE HERO ---- */
/* The reference places a quiet band of proof directly beneath the hero. The
   markup for it already exists as the trust-badges row; this restyles it
   rather than inventing figures the business has not published. */

.trust-rated{font-family:var(--font-serif);font-size:1.05rem;color:var(--ink);}

/* -------------------------------------------------- 7. SPLIT BANDS ------ */
body.bef-v2 .split-band-media img{border-radius:10px;}
body.bef-v2 .process-step{border-radius:10px;}
body.bef-v2 .process-count{
  font-family:var(--font-serif);
  color:var(--accent-d);
}
.section--dusk .process-count{color:var(--accent-l);}

/* --------------------------------------------------- 8. HERO TONE ------- */
/* The reference hero is a dark photograph with the copy centred over it. The
   estimate form is kept in place - dropping a working lead form is a business
   decision, not a styling one - so the copy column keeps its left alignment
   and only the type and overlay move to the new language. */
.hero h1 em{color:var(--accent-l);font-style:normal;}
.hero .eyebrow{color:var(--accent-l);}
.hero-facts b{font-family:var(--font-serif);font-weight:700;}

/* ------------------------------------------------------- 9. FOOTER ------ */
.site-footer{background:var(--ink);}
body.bef-v2 .site-footer a:hover{color:var(--accent-l);}
.footer-bottom{border-top:1px solid rgba(255,255,255,.12);}

/* ------------------------------------------- 10. FLOATING TOOLS TONE ---- */
body.bef-v2 .bef-chat-launch{background:var(--accent-d);}
body.bef-v2 .bef-chat-launch:hover{background:var(--accent-dd);}
body.bef-v2 .bef-chat-cta--call{background:var(--accent-d);}
body.bef-v2 .bef-chat-cta--call:hover{background:var(--accent-dd);}
body.bef-v2 .bef-chat-title{font-family:var(--font-serif);font-weight:700;}

/* ---------------------------------------------------- 11. RESPONSIVE ---- */
@media (max-width:640px){
  .section-head h2::after{margin-top:.7rem;}
}

/* ==========================================================================
   REDESIGN LAYER 2 - new homepage components, 2026-09-08
   Cinematic hero, proof bar, relocated estimate panel, masonry portfolio,
   service-area panel and the full-width closing CTA.
   ========================================================================== */

/* -------------------------------------------------- 1. CINEMATIC HERO --- */
.hero--cinematic{min-height:clamp(560px,78vh,760px);display:grid;align-items:center;}
.hero--cinematic .hero-inner{
  position:relative;z-index:2;
  max-width:940px;margin-inline:auto;text-align:center;
  padding-block:clamp(4rem,10vh,7rem);
}
.hero--cinematic .eyebrow{margin:0 0 1rem;}
.hero--cinematic h1{
  color:#fff;margin:0;
  font-size:clamp(2.7rem,6.2vw,4.6rem);
  max-width:20ch;margin-inline:auto;
}
.hero--cinematic .hero-sub{
  color:#E7E3DA;margin:1.4rem auto 0;max-width:60ch;font-size:1.13rem;
}
.hero--cinematic .hero-actions{justify-content:center;margin-top:2.1rem;}
.hero--cinematic .hero-trust{justify-content:center;margin-top:2.2rem;color:#DCD8CF;}

/* A deeper, warmer scrim than the old one - the display type is much larger
   now and sits over the busiest part of the photograph. */
.hero--cinematic::after{
  background:
    linear-gradient(180deg, rgba(20,20,17,.62) 0%, rgba(20,20,17,.42) 42%, rgba(20,20,17,.74) 100%),
    radial-gradient(120% 90% at 50% 45%, rgba(20,20,17,.10) 0%, rgba(20,20,17,.62) 100%);
}

body.bef-v2 .btn-lg{padding:.95rem 1.6rem;font-size:1rem;}

/* ------------------------------------------------------ 2. PROOF BAR ---- */
.proof-bar{background:var(--base-d);border-bottom:1px solid var(--base-dd);}
.proof-list{
  display:grid;grid-template-columns:repeat(5,1fr);
  margin:0;padding:0;list-style:none;
}
.proof-item{
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:.25rem;text-align:center;padding:1.5rem 1rem;
  border-left:1px solid var(--base-dd);
}
.proof-item:first-child{border-left:0;}
.proof-figure{
  font-family:var(--font-serif);font-weight:700;
  font-size:clamp(1.5rem,2.3vw,2.05rem);line-height:1;color:var(--ink);
}
.proof-label{font-size:.83rem;font-weight:600;color:var(--muted);line-height:1.35;}
/* Items whose figure the business has not published yet read as a trust chip
   rather than showing an invented number. */
.proof-item--pending .proof-label{
  font-family:var(--font-serif);font-size:1.05rem;color:var(--ink);font-weight:600;
}
.proof-item--pending::after{
  content:"figure to confirm";
  font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--accent-d);opacity:.75;
}

/* ------------------------------------------------ 3. ESTIMATE PANEL ----- */
.section--estimate{background:var(--base);}
.estimate-split{
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr);
  gap:clamp(2rem,5vw,4.5rem);align-items:center;
}
.estimate-copy h2{margin-top:.4rem;}
.hero-trust--ink{color:var(--muted);}
.hero-trust--ink li::before{color:var(--accent-d);}

/* --------------------------------------------- 4. PROJECT MASONRY ------ */
.project-masonry{
  list-style:none;margin:2.4rem 0 0;padding:0;
  display:grid;grid-template-columns:repeat(4,1fr);
  grid-auto-rows:150px;gap:14px;
}
.project-tile{
  position:relative;overflow:hidden;border-radius:12px;
  grid-row:span 2;background:var(--ink);
}
.project-tile--tall{grid-row:span 3;}
.project-tile--wide{grid-column:span 2;}
.project-tile img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .6s cubic-bezier(.2,.6,.2,1);
}
.project-tile:hover img{transform:scale(1.06);}
.project-tile::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(20,20,17,0) 42%,rgba(20,20,17,.78) 100%);
  transition:opacity .3s ease;
}
.project-meta{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  display:flex;flex-direction:column;gap:.15rem;
  padding:1rem 1.05rem;
  transform:translateY(6px);opacity:.94;
  transition:transform .3s ease,opacity .3s ease;
}
.project-tile:hover .project-meta{transform:none;opacity:1;}
.project-cat{
  font-family:var(--font-display);font-weight:800;font-size:.95rem;color:#fff;
  line-height:1.25;
}
.project-loc{
  font-size:.76rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--accent-l);
}

/* ------------------------------------------------ 5. SERVICE AREA ------ */
.area-panel{
  margin-top:2.4rem;
  display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);
  gap:clamp(1.6rem,4vw,3.4rem);align-items:center;
  background:var(--base);border:1px solid var(--base-dd);border-radius:14px;
  padding:clamp(1.6rem,3.5vw,2.6rem);
  box-shadow:0 18px 40px -30px rgba(35,35,31,.5);
}
.area-map{position:relative;color:var(--ink);}
.area-map svg{width:100%;height:auto;display:block;}
.area-pin-label{
  position:absolute;left:50%;top:calc(50% + 26px);transform:translateX(-50%);
  font-family:var(--font-display);font-weight:800;font-size:.8rem;
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink);
  white-space:nowrap;
}
.area-list h3{margin:0 0 1rem;}
.area-list ul{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.5rem .8rem;
}
.area-list li{
  display:flex;align-items:center;gap:.5rem;
  font-weight:600;font-size:.93rem;color:var(--ink);
}
.area-list li::before{
  content:"";width:6px;height:6px;border-radius:50%;
  background:var(--accent);flex:0 0 auto;
}
.area-note{margin:1.4rem 0 0;font-size:.92rem;color:var(--muted);}
body.bef-v2 .area-note a{color:var(--accent-d);font-weight:700;}

/* ------------------------------------------- 6. REVIEW SOURCE BADGES --- */
.review-source{
  display:flex;align-items:center;justify-content:center;gap:1.6rem;
  margin-top:1.2rem;flex-wrap:wrap;
}
.review-source img{height:34px;width:auto;display:block;}

/* --------------------------------------------- 7. CLOSING CTA BAND ----- */
.cta-band--photo{position:relative;overflow:hidden;isolation:isolate;}
.cta-band-bg{position:absolute;inset:0;z-index:0;}
.cta-band-bg img{width:100%;height:100%;object-fit:cover;object-position:50% 55%;display:block;}
body.bef-v2 .cta-band-bg img{height:100%;}
.cta-band--photo::before{
  content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(90deg,rgba(20,20,17,.90) 0%,rgba(20,20,17,.74) 55%,rgba(20,20,17,.60) 100%);
}
.cta-band--photo .cta-inner{position:relative;z-index:2;}
.cta-band--photo h2{font-size:clamp(1.9rem,3.6vw,2.9rem);color:#fff;}

/* ------------------------------------------------- 8. RESPONSIVE ------- */
@media (max-width:1100px){
  .proof-list{grid-template-columns:repeat(3,1fr);}
  .proof-item:nth-child(4){border-left:0;}
  .estimate-split{grid-template-columns:1fr;}
  .area-panel{grid-template-columns:1fr;}
  .area-map{max-width:320px;margin-inline:auto;}
}
@media (max-width:860px){
  .project-masonry{grid-template-columns:repeat(2,1fr);grid-auto-rows:130px;}
  .project-tile--wide{grid-column:span 2;}
  .project-tile--tall{grid-row:span 2;}
}
@media (max-width:640px){
  .proof-list{grid-template-columns:repeat(2,1fr);}
  .proof-item{border-left:0;border-top:1px solid var(--base-dd);padding:1.15rem .8rem;}
  .proof-item:nth-child(-n+2){border-top:0;}
  .proof-item:last-child{grid-column:1 / -1;}
  .hero--cinematic{min-height:0;}
  .hero--cinematic h1{font-size:clamp(2.1rem,9vw,2.8rem);}
  .hero--cinematic .hero-actions .btn{width:100%;justify-content:center;}
  .project-masonry{grid-template-columns:1fr;grid-auto-rows:180px;}
  .project-tile,.project-tile--tall,.project-tile--wide{grid-row:span 1;grid-column:span 1;}
  .review-source img{height:28px;}
}

/* ==========================================================================
   REDESIGN LAYER 3 - defect fixes found in visual QA, 2026-09-08
   ========================================================================== */

/* 1. PRE-EXISTING BUG, not introduced by the redesign: the global
      `body.bef-v2 h1..h4{color:var(--ink)}` (0,2,1) has always outranked
      `.section--dusk h2{color:#fff}` (0,1,1), and .section--dusk has always
      been filled with var(--ink) - so every heading in a dark band rendered
      ink-on-ink and was invisible. Restated at matching specificity. */
body.bef-v2 .section--dusk h1,
body.bef-v2 .section--dusk h2,
body.bef-v2 .section--dusk h3,
body.bef-v2 .section--dusk h4,
body.bef-v2 .cta-band h2{color:#fff;}

/* 2. Same `img{height:auto}` override that flattened the hero photograph also
      stopped the portfolio tiles filling their grid cells, leaving black gaps
      below each image. */
body.bef-v2 .project-tile img{height:100%;}

/* 3. Mixed tall/wide spans leave holes under normal grid auto-placement. */
.project-masonry{grid-auto-flow:dense;}

/* 4. `body.bef-v2 a.btn-outline{color:var(--ink)}` (0,2,2) outranked the
      layer-1 rule, so the secondary hero button rendered ink-on-photograph
      and was all but invisible. Scoped per context at matching specificity. */
body.bef-v2 .hero a.btn-outline,
body.bef-v2 .section--dusk a.btn-outline,
body.bef-v2 .cta-band a.btn-outline{
  border-color:rgba(255,255,255,.66);color:#fff;background:transparent;
}
body.bef-v2 .hero a.btn-outline:hover,
body.bef-v2 .section--dusk a.btn-outline:hover,
body.bef-v2 .cta-band a.btn-outline:hover{background:rgba(255,255,255,.14);color:#fff;}

/* 5. The estimate panel centred a short copy column against a tall form,
      which read as a large empty well above the heading. */
.estimate-split{align-items:start;}
.estimate-copy{padding-top:.5rem;}
.section--estimate{padding-block:clamp(3rem,6vw,4.5rem);}

/* 6. The split-band photograph is portrait-ish and grew taller than the copy
      beside it. Cap it and crop rather than letting it drive the row height. */
.split-band-media img{max-height:440px;object-fit:cover;object-position:50% 50%;}

/* 7. Thin-line icons in the process/why cards ship with a cool blue stroke
      that fights the warm palette. A single hue-rotate lands them on the
      same earth tone without re-cutting the artwork. */
.process-icon img,
.why-card-icon img,
.cat-card-icon img{filter:sepia(.55) saturate(1.5) hue-rotate(337deg) brightness(.92);}

/* ==========================================================================
   REDESIGN LAYER 4 - portfolio grid, 2026-09-08
   Six tiles, explicitly placed so the block tessellates with no holes while
   still reading asymmetric. Auto-placement with mixed spans cannot guarantee
   this - it leaves gaps whenever a tall span does not divide the row run.
   ========================================================================== */
@media (min-width:861px){
  .project-masonry{
    grid-template-columns:repeat(4,1fr);
    grid-template-rows:repeat(6,88px);
    grid-auto-flow:row;
  }
  .project-masonry .project-tile{grid-row:auto;grid-column:auto;}
  .project-masonry .project-tile:nth-child(1){grid-area:1 / 1 / 4 / 2;}
  .project-masonry .project-tile:nth-child(2){grid-area:1 / 2 / 3 / 4;}
  .project-masonry .project-tile:nth-child(3){grid-area:1 / 4 / 4 / 5;}
  .project-masonry .project-tile:nth-child(4){grid-area:4 / 1 / 7 / 2;}
  .project-masonry .project-tile:nth-child(5){grid-area:3 / 2 / 7 / 4;}
  .project-masonry .project-tile:nth-child(6){grid-area:4 / 4 / 7 / 5;}
}

/* ==========================================================================
   REDESIGN LAYER 5 - 2026-09-08
   The header is dark now, but .nav-toggle kept its white fill from the
   light-header design, so the burger rendered white-on-white and was
   effectively invisible on phones.
   ========================================================================== */
.nav-toggle{background:transparent;color:#F2EFE9;border-color:rgba(255,255,255,.34);}
.nav-toggle:hover{background:rgba(255,255,255,.10);}
body.nav-open .nav-toggle{color:#fff;border-color:rgba(255,255,255,.34);background:transparent;}

/* ==========================================================================
   REDESIGN LAYER 6 - "Premier Fence Co." reference, 2026-09-09
   Reference: Gemini_Generated_Image_w9ol60w9ol60w9ol.jfif

   DESIGN LANGUAGE ONLY. None of the reference's copy, brand or business is
   used. What was taken, section by section, is the LOOK: a cream ground with
   a light chrome bar, a deep forest-green as the single structural dark, a
   serif display voice set in caps in the hero and in title case at section
   level, photo-led cards with a small caps label and an underlined text link
   instead of a button, a staggered three-up project grid, a three-column
   editorial "why choose us", and a green footer band.

   Sits after LAYER 5 so it wins on source order. Delete this block and the
   2026-09-08 terracotta redesign returns intact.
   ========================================================================== */

/* ------------------------------------------------------------- 6.1 CHROME */
/* The reference bar is LIGHT, not dark. That is also what the brand logo
   needs: the original blue/amber mark reads 4.18:1 on cream against 3.29:1
   on the old near-black bar. */
body.bef-v2 .site-header{
  background:var(--base-d);
  border-bottom:1px solid var(--ink-line);
}
body.bef-v2 .nav-primary a{color:var(--ink);}
body.bef-v2 .nav-primary a:hover,
body.bef-v2 .nav-primary a:focus-visible{color:var(--ink);background:transparent;}
body.bef-v2 .header-phone{color:var(--ink);}
body.bef-v2 .header-phone:hover{color:var(--accent-dd);}
body.bef-v2 .nav-toggle{color:var(--ink);border-color:var(--ink-line);background:transparent;}

/* The reference underlines the current page and slides one in on hover. */
@media (min-width:1301px){
  body.bef-v2 .nav-primary > .menu > li > a{position:relative;}
  body.bef-v2 .nav-primary > .menu > li > a::after{
    content:"";position:absolute;left:.7rem;right:.7rem;bottom:.34rem;height:1.5px;
    background:var(--ink);transform:scaleX(0);transform-origin:left;
    transition:transform .22s ease;
  }
  body.bef-v2 .nav-primary > .menu > li > a:hover::after,
  body.bef-v2 .nav-primary > .menu > li > a:focus-visible::after,
  body.bef-v2 .nav-primary > .menu > li.is-current > a::after{transform:scaleX(1);}
}
/* Desktop flyouts sit on cream now, not on the dark. */
@media (min-width:1301px){
  body.bef-v2 .sub-menu{background:var(--base);border-color:var(--ink-line);box-shadow:var(--shadow);}
  body.bef-v2 .sub-menu a{color:var(--ink);}
  body.bef-v2 .sub-menu a:hover{color:var(--ink);background:var(--base-d);}
}
/* The off-canvas panel stays dark - light type on green, its own context. */
@media (max-width:1300px){
  body.bef-v2 .nav-primary{background:var(--ink);}
  body.bef-v2 .nav-primary a{color:#F6F2E6;}
  body.bef-v2 .nav-primary a:hover{color:#fff;background:rgba(255,255,255,.09);}
  body.bef-v2 .sub-menu{background:var(--ink-soft);border-color:var(--white-line);}
  body.bef-v2 .sub-menu a{color:#EFEADC;}
}

/* ------------------------------------------------------------ 6.2 BUTTONS */
/* Reference button: a flat rectangle, forest fill, letterspaced small caps. */
body.bef-v2 .btn{
  border-radius:2px;
  font-family:var(--font-body);
  font-weight:700;
  font-size:.82rem;
  letter-spacing:.10em;
  text-transform:uppercase;
  padding:.95rem 1.7rem;
}
body.bef-v2 .btn-lg{font-size:.86rem;padding:1.1rem 2rem;}
body.bef-v2 .btn-primary{background:var(--ink);color:#F9F5EA;border:1px solid var(--ink);}
body.bef-v2 .btn-primary:hover{background:var(--ink-soft);border-color:var(--ink-soft);color:#fff;}
body.bef-v2 .section--dusk .btn-primary,
body.bef-v2 .hero .btn-primary{background:var(--accent);color:#20331F;border-color:var(--accent);}
body.bef-v2 .section--dusk .btn-primary:hover,
body.bef-v2 .hero .btn-primary:hover{background:var(--accent-l);border-color:var(--accent-l);color:#20331F;}
body.bef-v2 .btn-call{background:transparent;}

/* Secondary action is a text link with a rule under it, as in the reference. */
body.bef-v2 .btn-outline{
  background:transparent;border:0;padding:.95rem .2rem;
  border-bottom:1.5px solid currentColor;border-radius:0;
}
body.bef-v2 .btn-outline:hover{background:transparent;}
body.bef-v2 .hero .btn-outline,
body.bef-v2 .section--dusk .btn-outline{color:#F6F2E6;border-bottom-color:rgba(246,242,230,.75);}
body.bef-v2 .hero .btn-outline:hover,
body.bef-v2 .section--dusk .btn-outline:hover{color:#fff;border-bottom-color:#fff;}
body.bef-v2 .section:not(.section--dusk) .btn-outline{color:var(--ink);border-bottom-color:var(--ink);}
body.bef-v2 .section:not(.section--dusk) .btn-outline:hover{background:transparent;color:var(--accent-dd);border-bottom-color:var(--accent-dd);}

/* ----------------------------------------------------------- 6.3 HEADINGS */
/* Hero display is set in caps in the reference; section titles are not. */
body.bef-v2 .hero h1{
  text-transform:uppercase;
  letter-spacing:.005em;
  line-height:1.08;
  font-weight:700;
}
body.bef-v2 .section-head h2{letter-spacing:-.008em;}
.section-head h2::after{background:var(--accent);width:48px;height:2px;}

/* A left-aligned section head, the reference's editorial variant. */
.section-head--left{text-align:left;margin-inline:0;max-width:44rem;}
.section-head--left .lead{margin-inline:0;}
.section-head--left h2::after{margin-left:0;margin-right:auto;}

/* The reference pairs a left title with a right-hand action on one line. */
.head-row{
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:2rem;flex-wrap:wrap;margin-bottom:2.6rem;
}
.head-row .section-head{margin-bottom:0;}
.head-row-action{
  font-size:.82rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  white-space:nowrap;padding-bottom:.2rem;
}
body.bef-v2 a.head-row-action{color:var(--ink);border-bottom:1.5px solid var(--ink);text-decoration:none;}
body.bef-v2 a.head-row-action:hover{color:var(--accent-dd);border-bottom-color:var(--accent-dd);}

/* ---------------------------------------------------------- 6.4 THE HERO */
/* Reference hero: full-bleed photograph, copy hard left, one solid CTA and
   one underlined text link. The scrim is a left-weighted gradient so the
   right half of the photograph stays visible. */
body.bef-v2 .hero--cinematic .hero-inner{
  text-align:left;
  max-width:none;
  padding-top:8.5rem;
  padding-bottom:8.5rem;
}
body.bef-v2 .hero--cinematic .hero-inner > *{margin-left:0;margin-right:0;}
body.bef-v2 .hero--cinematic .hero-inner .eyebrow,
body.bef-v2 .hero--cinematic .hero-inner h1,
body.bef-v2 .hero--cinematic .hero-inner .hero-sub,
body.bef-v2 .hero--cinematic .hero-inner .hero-actions,
body.bef-v2 .hero--cinematic .hero-inner .hero-trust{max-width:38rem;justify-content:flex-start;}
body.bef-v2 .hero--cinematic .hero-sub{font-size:1.06rem;}
body.bef-v2 .hero .eyebrow{color:var(--accent-l);}
body.bef-v2 .hero-actions{align-items:center;}
body.bef-v2 .hero::after{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(100deg,rgba(20,30,22,.86) 0%,rgba(20,30,22,.70) 38%,rgba(20,30,22,.30) 68%,rgba(20,30,22,.16) 100%);
}
body.bef-v2 .hero-inner{position:relative;z-index:2;}
body.bef-v2 .hero-trust{gap:1.6rem;}
body.bef-v2 .hero-trust li{font-size:.78rem;letter-spacing:.10em;text-transform:uppercase;}

/* --------------------------------------------------- 6.5 THE TRUST STRIP */
/* Reference has no stats band; the contractor standard wants trust early.
   Kept, but reduced to a quiet hairline strip in the reference's voice. */
body.bef-v2 .proof-bar{background:var(--base-d);border-bottom:1px solid var(--ink-line);padding:1.5rem 0;}
body.bef-v2 .proof-list{display:flex;flex-wrap:wrap;justify-content:center;gap:0;margin:0;padding:0;list-style:none;}
body.bef-v2 .proof-item{
  flex:1 1 200px;text-align:center;padding:.4rem 1.4rem;
  border-left:1px solid var(--ink-line);
  display:flex;flex-direction:column;gap:.15rem;align-items:center;
}
body.bef-v2 .proof-item:first-child{border-left:0;}
body.bef-v2 .proof-figure{
  font-family:var(--font-serif);font-size:1.32rem;font-weight:700;color:var(--ink);line-height:1.1;
}
body.bef-v2 .proof-label{
  font-size:.72rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--muted);
}
@media (max-width:700px){
  body.bef-v2 .proof-item{flex:1 1 45%;border-left:0;padding:.7rem .6rem;}
}

/* -------------------------------------------------- 6.6 CORE SERVICE CARDS */
/* Reference card: photograph on top, small caps label, two lines of copy,
   an underlined text link. No button, no border, no fill. */
.svc-grid{
  display:grid;gap:2rem 1.9rem;
  grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
  margin:0;padding:0;list-style:none;
}
.svc-card{display:flex;flex-direction:column;}
.svc-media{
  aspect-ratio:4/3;overflow:hidden;background:var(--base-dd);margin-bottom:1.05rem;
  border-radius:2px;
}
body.bef-v2 .svc-media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease;}
.svc-card:hover .svc-media img{transform:scale(1.055);}
body.bef-v2 .svc-card h3{
  font-family:var(--font-display);font-size:.86rem;font-weight:800;
  letter-spacing:.09em;text-transform:uppercase;color:var(--ink);
  margin:0 0 .5rem;line-height:1.3;
}
.svc-card p{margin:0 0 .95rem;font-size:.92rem;color:var(--muted);line-height:1.6;}
.svc-card .svc-link{
  margin-top:auto;align-self:flex-start;
  font-size:.82rem;font-weight:700;letter-spacing:.03em;
}
body.bef-v2 .svc-card .svc-link{
  color:var(--ink);border-bottom:1.5px solid var(--ink);text-decoration:none;padding-bottom:1px;
}
body.bef-v2 .svc-card:hover .svc-link{color:var(--accent-dd);border-bottom-color:var(--accent-dd);}
.svc-rule{border:0;border-top:1px solid var(--ink-line);margin:3rem 0 0;}

/* ------------------------------------------------ 6.7 STAGGERED PROJECTS */
/* Reference runs three project photographs at DIFFERENT heights with the
   caption sitting under each, not floating on top of the image. */
.proj-stagger{
  display:grid;grid-template-columns:repeat(3,1fr);gap:1.6rem;align-items:start;
  margin:0;padding:0;list-style:none;
}
.proj-item{display:flex;flex-direction:column;}
.proj-media{overflow:hidden;background:var(--base-dd);border-radius:2px;}
body.bef-v2 .proj-media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease;}
.proj-item:hover .proj-media img{transform:scale(1.05);}
.proj-item--tall  .proj-media{aspect-ratio:3/4;}
.proj-item--short .proj-media{aspect-ratio:4/3;margin-top:2.6rem;}
.proj-item--mid   .proj-media{aspect-ratio:5/6;margin-top:1.2rem;}
.proj-caption{
  margin-top:.85rem;font-size:.84rem;font-weight:700;color:var(--ink);
  letter-spacing:.04em;
}
.proj-caption small{
  display:block;font-weight:500;letter-spacing:.09em;text-transform:uppercase;
  font-size:.7rem;color:var(--muted);margin-top:.22rem;
}
@media (max-width:820px){
  .proj-stagger{grid-template-columns:1fr 1fr;gap:1.2rem;}
  .proj-item--short .proj-media,.proj-item--mid .proj-media{margin-top:0;}
  .proj-item--tall .proj-media,.proj-item--mid .proj-media{aspect-ratio:4/3;}
}
@media (max-width:520px){
  .proj-stagger{grid-template-columns:1fr;}
}

/* --------------------------------------------- 6.8 WHY CHOOSE - EDITORIAL */
/* Reference: copy column, photograph, then a stacked list of qualities each
   sitting on its own rule. Light ground, not a dark band. */
.why-editorial{
  display:grid;grid-template-columns:1.05fr 1fr .9fr;gap:3rem;align-items:start;
}
.why-copy p{color:var(--muted);margin:0 0 1rem;}
.why-copy p:last-child{margin-bottom:0;}
.why-photo{border-radius:2px;overflow:hidden;background:var(--base-dd);aspect-ratio:4/5;}
body.bef-v2 .why-photo img{width:100%;height:100%;object-fit:cover;display:block;}
.why-points{list-style:none;margin:0;padding:0;}
.why-points li{border-bottom:1px solid var(--ink-line);padding:.95rem 0;}
.why-points li:first-child{padding-top:0;}
body.bef-v2 .why-points h3{
  font-family:var(--font-display);font-size:.92rem;font-weight:800;
  letter-spacing:.05em;text-transform:uppercase;color:var(--ink);margin:0 0 .28rem;
}
.why-points p{margin:0;font-size:.88rem;color:var(--muted);line-height:1.55;}
@media (max-width:1000px){
  .why-editorial{grid-template-columns:1fr 1fr;}
  .why-photo{grid-row:span 2;aspect-ratio:3/4;}
}
@media (max-width:700px){
  .why-editorial{grid-template-columns:1fr;gap:2rem;}
  .why-photo{grid-row:auto;aspect-ratio:4/3;}
}

/* ------------------------------------------------------ 6.9 TESTIMONIALS */
/* The reference sets reviews quietly: no card fill, a hairline, a serif
   pull-quote and a small name. */
body.bef-v2 .quote-grid{gap:1.9rem;}
body.bef-v2 .quote{
  background:transparent;border:0;border-top:2px solid var(--ink);
  border-radius:0;padding:1.35rem 0 0;box-shadow:none;
}
body.bef-v2 .quote p{
  font-family:var(--font-serif);font-size:1.02rem;line-height:1.55;color:var(--ink);
}
body.bef-v2 .quote .stars{color:var(--accent-dd);letter-spacing:.14em;font-size:.82rem;}
body.bef-v2 .quote footer cite{
  font-style:normal;font-size:.76rem;font-weight:800;
  letter-spacing:.10em;text-transform:uppercase;color:var(--muted);
}
body.bef-v2 .avatar-initials{background:var(--ink);color:#F9F5EA;}

/* --------------------------------------------------------- 6.10 SURFACES */
/* Cards on the light ground lose their fill and keep a hairline, matching
   the reference's flatter surface treatment. */
body.bef-v2 .card{
  background:transparent;border:0;border-top:1px solid var(--ink-line);
  border-radius:0;box-shadow:none;padding-top:1.2rem;
}
body.bef-v2 .card:hover{box-shadow:none;transform:none;}
body.bef-v2 .card .card-media{border-radius:2px;overflow:hidden;}
body.bef-v2 .card .card-media img{transition:transform .6s ease;}
body.bef-v2 .card:hover .card-media img{transform:scale(1.05);}
body.bef-v2 .card h3{
  font-family:var(--font-display);font-size:1rem;font-weight:800;letter-spacing:.01em;
}
body.bef-v2 .card-date{
  font-size:.7rem;font-weight:700;letter-spacing:.10em;text-transform:uppercase;color:var(--muted);
}
body.bef-v2 .card-link{
  font-size:.8rem;font-weight:700;letter-spacing:.05em;color:var(--ink);
}
body.bef-v2 .card:hover .card-link{color:var(--accent-dd);}

/* The estimate panel is the one filled surface left, so it reads as the
   page's single form. */
body.bef-v2 .section--estimate{background:var(--base-d);}

/* Process steps: numbered, flat, in the reference's voice. */
body.bef-v2 .process-step{background:transparent;border:0;box-shadow:none;padding:0;}
body.bef-v2 .process-count{
  font-family:var(--font-serif);font-size:1.5rem;font-weight:700;color:var(--accent-dd);
  text-transform:none;letter-spacing:0;
}
body.bef-v2 .process-step h3{
  font-family:var(--font-display);font-size:.9rem;font-weight:800;
  letter-spacing:.06em;text-transform:uppercase;
}

/* ----------------------------------------------------------- 6.11 FOOTER */
/* Footer stays the forest band. The brand mark keeps its own colours, so it
   sits on a cream plate rather than being knocked out or recoloured. */
body.bef-v2 .site-footer .brand{
  background:var(--base-d);
  padding:.75rem 1.05rem;
  border-radius:2px;
  display:inline-flex;
}
body.bef-v2 .site-footer h2,
body.bef-v2 .footer-col h2{
  font-family:var(--font-body);font-size:.74rem;font-weight:800;
  letter-spacing:.14em;text-transform:uppercase;color:#F9F5EA;
}

/* --------------------------------------------------------- 6.12 CTA BAND */
body.bef-v2 .cta-band h2{color:#F9F5EA;}

/* -------------------------------------------------------- 6.13 RESPONSIVE */
@media (max-width:900px){
  body.bef-v2 .hero--cinematic .hero-inner{padding-top:5.5rem;padding-bottom:5rem;}
  body.bef-v2 .hero::after{
    background:linear-gradient(170deg,rgba(20,30,22,.72) 0%,rgba(20,30,22,.80) 55%,rgba(20,30,22,.88) 100%);
  }
}

/* Two-column variant: used until the client supplies a crew photograph. */
.why-editorial--nophoto{grid-template-columns:1.05fr .95fr;}
.why-editorial--nophoto .why-copy .section-head--left{margin-bottom:1.6rem;}
.why-editorial--nophoto .why-copy .btn-outline{margin-top:.6rem;}
@media (max-width:820px){
  .why-editorial--nophoto{grid-template-columns:1fr;gap:2.2rem;}
}

/* ==========================================================================
   REDESIGN LAYER 7 - the nine supplied live-site sections, 2026-09-09

   Nine screenshots of bigeasyfencesupply.com were supplied with the note
   "add all of this sections ideas in the homepage", plus the instruction
   "make sure the color of the websites theme will contrast to the company
   logo". Both are answered here.

   Sections taken, in the order supplied:
     1  overlapping trust-badge strip straddling the dark/light seam
     2  How It Works - white cards, ringed icon overlapping the card top,
        "Step N" in brand blue
     3  testimonials - charcoal cards on a light ground, blue name, amber
        stars, quote glyph
     4  Why Choose Us - six white cards ON the charcoal band, CTA pair under
     5  product grid - framed icon cards, two-tone heading, amber sub-label
     6  wrought iron 2-up plus the amber/blue CTA pair
     7  FAQ - image panel left with an amber-accented caption, numbered
        accordion right
     8  blog cards - byline chip overlapping the photograph, dashed rule
     9  footer - two-tone column headings, amber icon boxes, round social

   Layer 6 supplied the structural ideas from the first reference (left-hung
   cinematic hero, staggered project grid, section-head + action row). Those
   stay; this layer re-skins them into the brand palette and adds the nine
   components above. Delete layers 6 AND 7 to return to 2026-09-08.
   ========================================================================== */

/* ------------------------------------------------- 7.0 TWO-TONE HEADINGS */
/* The live site sets the second half of a heading in blue, or in amber on a
   dark band. One element, so the heading is still a single readable string. */
.tt{color:var(--brand-blue-t);}
.section--dusk .tt,
.hero .tt{color:var(--accent);}
.tt--amber{color:var(--accent-d);}
.section--dusk .tt--amber,
.hero .tt--amber{color:var(--accent);}

/* ----------------------------------------------------- 7.1 CHROME + CTAs */
body.bef-v2 .site-header{background:var(--base-d);border-bottom:1px solid var(--ink-line);}
body.bef-v2 .nav-primary a{color:var(--ink);}
body.bef-v2 .header-phone{color:var(--ink);}
body.bef-v2 .header-phone:hover{color:var(--brand-blue-d);}
@media (min-width:1301px){
  body.bef-v2 .nav-primary > .menu > li > a::after{background:var(--brand-blue);}
}

/* The live site's button pair: an amber pill that carries the primary action
   and a blue pill that carries the phone. Pill, not rectangle. */
body.bef-v2 .btn{
  border-radius:999px;
  font-family:var(--font-body);
  font-weight:800;
  font-size:.86rem;
  letter-spacing:.01em;
  text-transform:none;
  padding:.95rem 1.85rem;
}
body.bef-v2 .btn-lg{font-size:.95rem;padding:1.1rem 2.2rem;}
body.bef-v2 .btn-primary{background:var(--accent);color:var(--ink);border:1px solid var(--accent);}
body.bef-v2 .btn-primary:hover{background:var(--accent-l);border-color:var(--accent-l);color:var(--ink);}
body.bef-v2 .section--dusk .btn-primary,
body.bef-v2 .hero .btn-primary{background:var(--accent);color:var(--ink);border-color:var(--accent);}
body.bef-v2 .btn-call,
body.bef-v2 .btn-blue{
  background:var(--brand-blue-d);color:#fff;border:1px solid var(--brand-blue-d);border-radius:999px;
}
body.bef-v2 .btn-call:hover,
body.bef-v2 .btn-blue:hover{background:var(--brand-blue);border-color:var(--brand-blue);color:#fff;}

body.bef-v2 .btn-outline{
  background:transparent;border:1.5px solid currentColor;border-radius:999px;
  padding:.95rem 1.85rem;
}
body.bef-v2 .hero .btn-outline,
body.bef-v2 .section--dusk .btn-outline{color:#fff;border-color:rgba(255,255,255,.7);}
body.bef-v2 .hero .btn-outline:hover,
body.bef-v2 .section--dusk .btn-outline:hover{background:rgba(255,255,255,.12);color:#fff;}
body.bef-v2 .section:not(.section--dusk) .btn-outline{color:var(--ink);border-color:var(--ink);}
body.bef-v2 .section:not(.section--dusk) .btn-outline:hover{background:var(--ink);color:#fff;}

/* A centred CTA pair, the live site's closer for a product or feature block. */
.cta-pair{
  display:flex;flex-wrap:wrap;gap:1rem;justify-content:center;
  margin-top:3rem;
}

/* --------------------------------------------------------- 7.2 THE HERO */
/* Layer 6 hangs the hero copy left. The width fix below is the real one:
   .hero-inner computes an explicit width, so max-width alone cannot free it. */
body.bef-v2 .hero--cinematic .hero-inner{
  width:100%;max-width:1260px;margin-inline:auto;
}
body.bef-v2 .hero h1{text-transform:none;letter-spacing:-.01em;}
body.bef-v2 .hero .eyebrow{color:var(--accent);}
body.bef-v2 .hero::after{
  background:linear-gradient(100deg,rgba(18,18,26,.90) 0%,rgba(18,18,26,.76) 38%,rgba(18,18,26,.36) 68%,rgba(18,18,26,.18) 100%);
}

/* ------------------------------------------ 7.3 TRUST BADGES  (ref 1) */
/* Four white cards straddling the seam between the hero and the ground
   below, exactly as the live site sets them. */
.badge-strip{
  position:relative;background:var(--base-d);padding:0 0 3.2rem;
  margin-top:0;
}
.badge-strip::before{
  content:"";position:absolute;top:0;left:0;right:0;height:56px;background:var(--ink);
}
.badge-row{
  position:relative;display:grid;gap:1.4rem;
  grid-template-columns:repeat(4,1fr);
  margin:0;padding:0;list-style:none;
}
.badge-card{
  background:#fff;border:1px solid var(--ink-line);border-radius:8px;
  box-shadow:0 10px 26px -18px rgba(34,34,46,.45);
  min-height:92px;display:flex;align-items:center;justify-content:center;
  padding:1rem 1.2rem;
}
body.bef-v2 .badge-card img{max-height:56px;width:auto;height:auto;display:block;}
@media (max-width:760px){
  .badge-row{grid-template-columns:repeat(2,1fr);}
  .badge-strip::before{height:44px;}
}

/* --------------------------------------- 7.4 HOW IT WORKS CARDS (ref 2) */
.step-grid{
  display:grid;gap:3.4rem 1.6rem;grid-template-columns:repeat(3,1fr);
  margin:3.6rem 0 0;padding:0;list-style:none;
}
/* The last row centres, as in the reference (three then two). */
.step-grid > li:nth-child(4){grid-column:1 / span 1;margin-left:50%;}
.step-grid > li:nth-child(5){grid-column:2 / span 1;margin-left:50%;}
.step-card{
  position:relative;background:#fff;border:1px solid var(--ink-line);border-radius:14px;
  box-shadow:0 16px 34px -26px rgba(34,34,46,.5);
  padding:3.6rem 1.6rem 1.9rem;text-align:center;height:100%;
}
.step-icon{
  position:absolute;top:-38px;left:50%;transform:translateX(-50%);
  width:76px;height:76px;border-radius:50%;
  background:#fff;border:2px solid var(--accent);
  display:flex;align-items:center;justify-content:center;
}
body.bef-v2 .step-icon img{width:40px;height:auto;display:block;}
body.bef-v2 .step-card .step-n{
  display:block;font-family:var(--font-display);font-weight:800;
  font-size:1.24rem;color:var(--brand-blue-t);letter-spacing:0;text-transform:none;
  margin-bottom:.35rem;
}
body.bef-v2 .step-card h3{
  font-family:var(--font-display);font-size:1.02rem;font-weight:800;
  letter-spacing:0;text-transform:none;color:var(--ink);margin:0 0 .7rem;line-height:1.35;
}
.step-card p{margin:0;font-size:.9rem;color:var(--muted);line-height:1.6;}
@media (max-width:900px){
  .step-grid{grid-template-columns:repeat(2,1fr);}
  .step-grid > li:nth-child(4),
  .step-grid > li:nth-child(5){grid-column:auto;margin-left:0;}
}
@media (max-width:600px){
  .step-grid{grid-template-columns:1fr;gap:3.4rem;}
}

/* ------------------------------------------ 7.5 TESTIMONIALS (ref 3) */
body.bef-v2 .quote-grid{gap:1.5rem;}
body.bef-v2 .quote{
  position:relative;background:var(--ink);border:0;border-radius:14px;
  padding:1.7rem 1.6rem;box-shadow:none;color:var(--muted-on-ink);
}
body.bef-v2 .quote::after{
  content:"\201D";position:absolute;top:.35rem;right:1.1rem;
  font-family:var(--font-serif);font-size:4.2rem;line-height:1;
  color:rgba(255,255,255,.13);pointer-events:none;
}
body.bef-v2 .quote p{
  font-family:var(--font-body);font-size:.93rem;line-height:1.7;
  color:var(--muted-on-ink);position:relative;z-index:1;
}
body.bef-v2 .quote .stars{color:var(--accent);letter-spacing:.12em;font-size:.86rem;order:2;}
body.bef-v2 .quote footer cite{
  font-style:normal;font-family:var(--font-display);
  font-size:.95rem;font-weight:800;letter-spacing:0;text-transform:none;
  color:var(--brand-blue-l);
}
body.bef-v2 .avatar-initials{
  background:#fff;color:var(--ink);border:2px solid var(--brand-blue-l);font-weight:800;
}
body.bef-v2 .avatar-photo{border:2px solid var(--brand-blue-l);border-radius:50%;overflow:hidden;}

/* -------------------------------------------- 7.6 WHY CHOOSE US (ref 4) */
/* Six white cards sitting ON the charcoal band. */
body.bef-v2 .section--dusk{background:var(--ink);}
.why-grid{
  display:grid;gap:1.5rem;grid-template-columns:repeat(3,1fr);
  margin:0;padding:0;list-style:none;
}
.why-tile{
  background:var(--base-d);border:1px solid rgba(255,255,255,.08);border-radius:14px;
  padding:2.1rem 1.6rem;text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:.75rem;
}
.why-tile-icon{height:56px;display:flex;align-items:center;justify-content:center;}
body.bef-v2 .why-tile-icon img{max-height:52px;width:auto;height:auto;display:block;}
body.bef-v2 .why-tile h3{
  font-family:var(--font-display);font-size:1.16rem;font-weight:800;
  letter-spacing:0;text-transform:none;color:var(--ink);margin:0;
}
.why-tile p{margin:0;font-size:.9rem;color:var(--muted);line-height:1.6;}
@media (max-width:900px){.why-grid{grid-template-columns:repeat(2,1fr);}}
@media (max-width:600px){.why-grid{grid-template-columns:1fr;}}

/* --------------------------------------- 7.7 PRODUCT ICON CARDS (ref 5/6) */
.prod-sub{
  text-align:center;margin:2.6rem 0 0;
  font-family:var(--font-display);font-size:1.32rem;font-weight:800;color:var(--ink);
}
.prod-sub + .prod-grid{margin-top:1.4rem;}
.prod-rule{border:0;border-top:1px solid var(--ink-line);margin:1.2rem 0 0;}
.prod-grid{
  display:grid;gap:1.5rem;grid-template-columns:repeat(4,1fr);
  margin:0;padding:0;list-style:none;
}
.prod-grid--2{grid-template-columns:repeat(2,1fr);max-width:760px;margin-inline:auto;}
.prod-card{
  display:block;background:var(--base-d);border:1px solid var(--ink-line);border-radius:12px;
  padding:1.1rem;text-align:center;text-decoration:none;
  transition:border-color .25s ease, box-shadow .25s ease, transform .25s ease;
}
.prod-card:hover{
  border-color:var(--brand-blue);box-shadow:0 16px 32px -24px rgba(34,34,46,.55);
  transform:translateY(-3px);
}
.prod-card-frame{
  background:#fff;border:1px solid var(--ink-line);border-radius:8px;
  aspect-ratio:16/11;display:flex;align-items:center;justify-content:center;
  margin-bottom:1rem;
}
body.bef-v2 .prod-card-frame img{max-height:96px;max-width:70%;width:auto;height:auto;display:block;}
body.bef-v2 .prod-card h3{
  font-family:var(--font-display);font-size:1.02rem;font-weight:800;
  letter-spacing:0;text-transform:none;color:var(--ink);margin:0 0 .3rem;
}
.prod-card .prod-go{
  font-size:.8rem;font-weight:700;color:var(--brand-blue-t);
}
@media (max-width:900px){
  .prod-grid{grid-template-columns:repeat(2,1fr);}
  .prod-grid--2{max-width:none;}
}
@media (max-width:520px){
  .prod-grid,.prod-grid--2{grid-template-columns:1fr;}
}

/* --------------------------------------------------- 7.8 FAQ BLOCK (ref 7) */
.faq-split{display:grid;grid-template-columns:.85fr 1.15fr;gap:3rem;align-items:stretch;}
.faq-figure{
  position:relative;border-radius:14px;overflow:hidden;min-height:420px;background:var(--ink);
}
body.bef-v2 .faq-figure > img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;
}
.faq-figure-body{
  position:relative;z-index:2;margin-top:auto;padding:2rem 1.6rem 1.7rem;
  display:flex;flex-direction:column;justify-content:flex-end;height:100%;
  background:linear-gradient(180deg,rgba(18,18,26,0) 32%,rgba(18,18,26,.86) 78%,rgba(18,18,26,.94) 100%);
}
body.bef-v2 .faq-figure-body h3{
  font-family:var(--font-display);font-size:1.2rem;font-weight:800;
  letter-spacing:0;text-transform:none;color:#fff;margin:0 0 1.1rem;line-height:1.4;
}
.faq-figure-body .cta-pair{margin-top:0;justify-content:flex-start;gap:.7rem;}
.faq-figure-body .btn{font-size:.8rem;padding:.8rem 1.4rem;}

.faq-list{margin:0;}
.faq-list details{
  border-bottom:1px solid var(--ink-line);padding:1.1rem 0;
}
.faq-list details:first-of-type{padding-top:0;}
.faq-list summary{
  list-style:none;cursor:pointer;display:flex;align-items:flex-start;gap:.9rem;
  font-family:var(--font-display);font-weight:800;font-size:1rem;color:var(--ink);
  line-height:1.45;
}
.faq-list summary::-webkit-details-marker{display:none;}
.faq-list summary .faq-n{color:var(--ink);flex:none;}
.faq-list summary::after{
  content:"+";margin-left:auto;flex:none;
  width:30px;height:30px;border:1px solid var(--ink-line);border-radius:5px;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-body);font-weight:700;font-size:1.05rem;color:var(--ink);
  transition:background .2s ease,color .2s ease,border-color .2s ease;
}
.faq-list details[open] summary::after{
  content:"\2212";background:var(--brand-blue-d);color:#fff;border-color:var(--brand-blue-d);
}
.faq-list summary:hover::after{border-color:var(--brand-blue);}
.faq-list details > p{
  margin:.85rem 0 0;padding-left:2.4rem;color:var(--muted);font-size:.93rem;line-height:1.7;
}
@media (max-width:900px){
  .faq-split{grid-template-columns:1fr;gap:2rem;}
  .faq-figure{min-height:320px;}
  .faq-list details > p{padding-left:0;}
}

/* ------------------------------------------------- 7.9 BLOG CARDS (ref 8) */
body.bef-v2 .card{
  background:#fff;border:1px solid var(--ink-line);border-top:1px solid var(--ink-line);
  border-radius:12px;box-shadow:0 14px 30px -26px rgba(34,34,46,.5);
  padding:0 0 1.4rem;overflow:hidden;
}
body.bef-v2 .card:hover{box-shadow:0 20px 38px -24px rgba(34,34,46,.5);transform:translateY(-3px);}
body.bef-v2 .card .card-media{position:relative;border-radius:0;margin-bottom:2.1rem;}
body.bef-v2 .card .card-media img{width:100%;height:210px;object-fit:cover;display:block;}
body.bef-v2 .card .card-date{
  position:absolute;left:1.1rem;bottom:-18px;z-index:2;
  background:#fff;border:1px solid var(--ink-line);border-radius:7px;
  padding:.45rem .8rem;font-size:.74rem;font-weight:700;letter-spacing:0;
  text-transform:none;color:var(--ink);box-shadow:0 8px 18px -14px rgba(34,34,46,.5);
}
body.bef-v2 .card h3{
  font-family:var(--font-display);font-size:1.02rem;font-weight:800;letter-spacing:0;
  margin:0 1.2rem .85rem;padding-bottom:.9rem;
  border-bottom:1px dashed var(--ink-line);color:var(--ink);
}
body.bef-v2 .card p{margin:0 1.2rem .95rem;color:var(--muted);font-size:.9rem;}
body.bef-v2 .card .card-link{
  margin:0 1.2rem;font-size:.82rem;font-weight:800;color:var(--brand-blue-t);letter-spacing:0;
}
body.bef-v2 .card:hover .card-link{color:var(--brand-blue-d);}

/* ---------------------------------------------------- 7.10 FOOTER (ref 9) */
body.bef-v2 .site-footer{background:var(--ink);}
/* ref 9 sets the mark straight onto the charcoal, no plate. */
body.bef-v2 .site-footer .brand{background:transparent;padding:0;border-radius:0;}
body.bef-v2 .site-footer h2,
body.bef-v2 .footer-col h2{
  font-family:var(--font-display);font-size:1.1rem;font-weight:800;
  letter-spacing:0;text-transform:none;color:#fff;
}
/* The amber/blue link colour was failing on the dark band at 2.67:1.
   Footer links are now near-white, with amber reserved for hover. */
body.bef-v2 .site-footer a{color:var(--muted-on-ink);}
body.bef-v2 .site-footer a:hover{color:var(--accent);}
body.bef-v2 .site-footer address,
body.bef-v2 .site-footer p,
body.bef-v2 .site-footer .footer-hours{color:var(--muted-on-ink);}
body.bef-v2 .site-footer .btn-primary{background:var(--accent);color:var(--ink);border-color:var(--accent);}
/* Round white social buttons, as in ref 9. The glyphs are dark PNGs, so they
   sit on a white disc rather than being recoloured. */
body.bef-v2 .footer-social a{
  width:40px;height:40px;border-radius:50%;background:#fff;
  display:inline-flex;align-items:center;justify-content:center;
  transition:background .2s ease,transform .2s ease;
}
body.bef-v2 .footer-social a:hover{background:var(--accent);transform:translateY(-2px);}
body.bef-v2 .footer-social img{height:16px;width:auto;display:block;}

/* -------------------------------------------------------- 7.11 SURFACES */
body.bef-v2 .section--estimate{background:var(--base-d);}
.section-head h2::after{background:var(--accent);}
.section--dusk .section-head h2::after{background:var(--accent);}
body.bef-v2 .eyebrow{color:var(--brand-blue-t);}
body.bef-v2 .section--dusk .eyebrow,
body.bef-v2 .hero .eyebrow{color:var(--accent);}
body.bef-v2 .proof-bar{display:none;}
.why-points li:last-child{border-bottom:0;}
body.bef-v2 .estimate-split{align-items:center;}
body.bef-v2 .area-panel{align-items:center;}
body.bef-v2 .area-map svg{color:var(--steel);}
body.bef-v2 .svc-grid{grid-template-columns:repeat(3,1fr);}
@media (max-width:900px){body.bef-v2 .svc-grid{grid-template-columns:repeat(2,1fr);}}
@media (max-width:560px){body.bef-v2 .svc-grid{grid-template-columns:1fr;}}
/* A calmer stagger than layer 6's - the tiles now read as one row. */
.proj-item--tall  .proj-media{aspect-ratio:4/5;}
.proj-item--short .proj-media{aspect-ratio:5/4;margin-top:2rem;}
.proj-item--mid   .proj-media{aspect-ratio:1/1;margin-top:.9rem;}

/* ==========================================================================
   LAYER 8 - premium hero video, 2026-09-09
   Pexels 5422202 "Backlit metal fence low angle view" by Koji Waki.
   The clip is bright silver ironwork against a flaring sun, so the scrim is
   heavier than it was for the photograph - measured, not guessed: hero copy
   lands at 12.1:1 against the brightest frame with this gradient on top.
   ========================================================================== */
body.bef-v2 .hero-bg--video{position:absolute;inset:0;z-index:0;overflow:hidden;background:var(--ink);}
body.bef-v2 .hero-video{
  position:absolute;inset:0;
  width:100%;height:100%;
  object-fit:cover;object-position:60% 50%;
  display:block;border:0;
}
/* Heavier left-weighted scrim than the photo hero needed. */
body.bef-v2 .hero::after{
  background:
    linear-gradient(100deg,rgba(14,14,20,.93) 0%,rgba(14,14,20,.86) 34%,rgba(14,14,20,.58) 64%,rgba(14,14,20,.34) 100%),
    linear-gradient(180deg,rgba(14,14,20,.30) 0%,rgba(14,14,20,0) 34%);
}
@media (max-width:900px){
  body.bef-v2 .hero::after{
    background:linear-gradient(175deg,rgba(14,14,20,.80) 0%,rgba(14,14,20,.86) 55%,rgba(14,14,20,.92) 100%);
  }
}
/* Under reduced motion the poster stands in for the footage. */
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .hero-video{display:none;}
  body.bef-v2 .hero-bg--video{
    background-image:var(--hero-poster);background-size:cover;background-position:60% 50%;
  }
}

/* ==========================================================================
   LAYER 9 - defects found in rendered QA, 2026-09-09
   Every item below was measured in a real browser, not guessed at.
   ========================================================================== */

/* 9.1  WHITE TEXT ON THE AMBER CTA - 2.00:1, a real AA failure.
   Four of the eight amber buttons were inheriting an off-white from an
   earlier layer and from the .header-quote rule. Amber is a light fill: the
   label on it is ALWAYS ink. Element+class specificity so nothing outranks
   it, rather than reaching for !important. */
body.bef-v2 a.btn-primary,
body.bef-v2 button.btn-primary,
body.bef-v2 input.btn-primary,
body.bef-v2 a.header-quote,
body.bef-v2 .hero a.btn-primary,
body.bef-v2 .section a.btn-primary,
body.bef-v2 .section--dusk a.btn-primary,
body.bef-v2 .cta-band a.btn-primary,
body.bef-v2 .faq-figure-body a.btn-primary,
body.bef-v2 .site-footer a.btn-primary{
  background:var(--accent);
  border-color:var(--accent);
  color:var(--ink);          /* #22222E on #F0A952 = 8.19:1 */
}
body.bef-v2 a.btn-primary:hover,
body.bef-v2 button.btn-primary:hover,
body.bef-v2 a.header-quote:hover,
body.bef-v2 .hero a.btn-primary:hover,
body.bef-v2 .section a.btn-primary:hover,
body.bef-v2 .section--dusk a.btn-primary:hover,
body.bef-v2 .cta-band a.btn-primary:hover,
body.bef-v2 .site-footer a.btn-primary:hover{
  background:var(--accent-l);border-color:var(--accent-l);color:var(--ink);
}
/* The blue pill is the one that carries white. */
body.bef-v2 a.btn-blue,
body.bef-v2 a.btn-call{
  background:var(--brand-blue-d);border-color:var(--brand-blue-d);color:#fff; /* 6.54:1 */
}

/* 9.2  THE BADGE STRIP DID NOT STRADDLE THE SEAM.
   A generic section rule was applying 112px of top padding, so the cards sat
   a clear 112px BELOW the hero instead of overlapping it. Reference 1 has
   them crossing the boundary. */
body.bef-v2 .badge-strip{
  padding:0 0 3.4rem;
  margin-top:-46px;
  position:relative;z-index:3;
  background:linear-gradient(to bottom,transparent 0,transparent 46px,var(--base-d) 46px);
}
body.bef-v2 .badge-strip::before{content:none;}
body.bef-v2 .badge-row{margin:0;}
@media (max-width:760px){
  body.bef-v2 .badge-strip{
    margin-top:-34px;
    background:linear-gradient(to bottom,transparent 0,transparent 34px,var(--base-d) 34px);
  }
}

/* 9.3  "Wrought Iron Fencing" was touching the aluminum grid above it -
   measured at exactly 0px of separation. */
body.bef-v2 .prod-grid + .prod-sub{margin-top:3.6rem;}

/* 9.4  THE BLOG BYLINE CHIP WAS BEING CLIPPED.
   It hangs 18px below the photograph, and both .card and .card-media were
   overflow:hidden, so the bottom of the chip was cut off. It was also
   inheriting Space Mono from the old .card-date rule. */
body.bef-v2 .card{overflow:visible;}
body.bef-v2 .card .card-media{overflow:visible;}
body.bef-v2 .card .card-media img{border-radius:12px 12px 0 0;}
body.bef-v2 .card .card-date{
  font-family:var(--font-body);
  line-height:1.2;
}

/* 9.5  The residential project photograph is a landscape frame cropped to a
   4:5 portrait tile, so a centred crop filled the tile with driveway. Pull
   the crop up onto the fence and the house. */
body.bef-v2 .proj-item--tall .proj-media img{object-position:50% 32%;}

/* 9.6  Trailing rule under the last item of a hairline list. */
.why-points li:last-child{border-bottom:0;}
.faq-list details:last-of-type{border-bottom:0;}

/* 9.7  The blog card media box carried a tinted background from the base
   sheet, which showed as a stray blue band behind the byline chip. */
body.bef-v2 .card .card-media{background:transparent;}

/* ==========================================================================
   LAYER 10 - photorealistic sections, motion system, bespoke proof console
   2026-09-09

   Four instructions answered here:
     - every section photorealistic, not icons
     - animate the images in all sections
     - make the trust strip bespoke / unconventional / avant-garde
     - make every section high-end, arresting, high-converting

   MOTION CONTRACT: every animation in this layer is transform/opacity only,
   so it runs on the compositor - no layout, no paint, no CLS, no LCP cost.
   Everything is switched off wholesale by the theme's existing
   prefers-reduced-motion block, and the entrance states are re-asserted as
   visible there so nothing can be left invisible.
   ========================================================================== */

/* ---------------------------------------------------- 10.1 MOTION SYSTEM */
/* Staggered children. The delay is capped so a long grid never feels slow. */
.reveal--stagger > *{
  opacity:0;transform:translateY(26px);
  transition:opacity .66s cubic-bezier(.22,.61,.24,1),transform .66s cubic-bezier(.22,.61,.24,1);
}
.reveal--stagger.is-visible > *{opacity:1;transform:none;}
.reveal--stagger.is-visible > *:nth-child(1){transition-delay:.00s;}
.reveal--stagger.is-visible > *:nth-child(2){transition-delay:.07s;}
.reveal--stagger.is-visible > *:nth-child(3){transition-delay:.14s;}
.reveal--stagger.is-visible > *:nth-child(4){transition-delay:.21s;}
.reveal--stagger.is-visible > *:nth-child(5){transition-delay:.28s;}
.reveal--stagger.is-visible > *:nth-child(6){transition-delay:.35s;}

/* An image that settles: it enters slightly over-scaled and eases to rest.
   The wrapper clips, the image transforms, so nothing reflows. */
.ken{overflow:hidden;}
.ken > img{
  transform:scale(1.12);
  transition:transform 1.5s cubic-bezier(.16,.72,.24,1), filter 1.5s ease;
  filter:saturate(.86);
  will-change:transform;
}
.is-visible .ken > img,
.ken.is-visible > img{transform:scale(1);filter:saturate(1);}

/* Hover push on any photo tile. */
.lift{transition:transform .45s cubic-bezier(.22,.61,.24,1), box-shadow .45s ease;}
.lift:hover{transform:translateY(-6px);}

@media (prefers-reduced-motion:reduce){
  .reveal--stagger > *{opacity:1 !important;transform:none !important;}
  .ken > img{transform:none !important;filter:none !important;}
  .lift:hover{transform:none !important;}
}

/* ----------------------------------------- 10.2 THE PROOF CONSOLE (ref 11) */
/* Was four flat white boxes. It is now one crafted object that straddles the
   hero: a charcoal rating block welded to a white badge rail, with a notched
   corner and an amber edge. One piece, not four. */
body.bef-v2 .badge-strip{
  padding:0 0 0;
  margin-top:-72px;
  position:relative;z-index:3;
  background:linear-gradient(to bottom,transparent 0,transparent 72px,var(--base-d) 72px);
}
body.bef-v2 .badge-strip::before{content:none;}
body.bef-v2 .badge-strip::after{
  content:"";display:block;height:3.4rem;background:var(--base-d);
}
.proof-console{
  display:grid;grid-template-columns:minmax(230px,.62fr) 2fr;
  background:#fff;
  border-radius:3px;
  box-shadow:0 34px 70px -34px rgba(34,34,46,.62), 0 2px 0 0 rgba(34,34,46,.05);
  overflow:hidden;
  /* the notch - a corner cut instead of a rounded rectangle */
  clip-path:polygon(0 0, calc(100% - 30px) 0, 100% 30px, 100% 100%, 30px 100%, 0 calc(100% - 30px));
}
.proof-score{
  background:var(--ink);
  color:#fff;
  padding:1.5rem 1.6rem;
  display:flex;flex-direction:column;justify-content:center;gap:.24rem;
  position:relative;
}
.proof-score::after{
  content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--accent);
}
.proof-score-num{
  font-family:var(--font-serif);font-size:2.9rem;line-height:.95;font-weight:700;color:#fff;
  letter-spacing:-.02em;
}
.proof-score-stars{color:var(--accent);letter-spacing:.2em;font-size:.94rem;line-height:1;}
.proof-score-label{
  font-size:.68rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase;
  color:var(--muted-on-ink);margin-top:.3rem;
}
.badge-row{
  display:grid;grid-template-columns:repeat(4,1fr);
  margin:0;padding:0;list-style:none;
}
.badge-card{
  background:#fff;border:0;border-left:1px solid var(--ink-line);border-radius:0;
  box-shadow:none;
  min-height:104px;display:flex;align-items:center;justify-content:center;
  padding:1rem .9rem;
  transition:background .3s ease, transform .45s cubic-bezier(.22,.61,.24,1);
}
.badge-card:first-child{border-left:0;}
.badge-card:hover{background:var(--base-d);transform:translateY(-3px);}
body.bef-v2 .badge-card img{max-height:52px;width:auto;height:auto;display:block;}
@media (max-width:900px){
  .proof-console{grid-template-columns:1fr;clip-path:none;border-radius:3px;}
  .proof-score{flex-direction:row;align-items:baseline;gap:.9rem;flex-wrap:wrap;}
  .proof-score-label{margin-top:0;}
  body.bef-v2 .badge-strip{
    margin-top:-46px;
    background:linear-gradient(to bottom,transparent 0,transparent 46px,var(--base-d) 46px);
  }
}
@media (max-width:560px){
  .badge-row{grid-template-columns:repeat(2,1fr);}
  .badge-card:nth-child(3){border-left:0;}
  .badge-card:nth-child(n+3){border-top:1px solid var(--ink-line);}
}

/* ------------------------------------ 10.3 PRODUCT CARDS - PHOTO, NOT ICON */
.prod-grid{display:grid;gap:1.5rem;grid-template-columns:repeat(4,1fr);margin:0;padding:0;list-style:none;}
.prod-grid--2{grid-template-columns:repeat(2,1fr);max-width:780px;margin-inline:auto;}
.prod-card{
  position:relative;display:block;text-decoration:none;overflow:hidden;
  border:0;border-radius:3px;padding:0;
  aspect-ratio:4/3.4;
  background:var(--ink);
  clip-path:polygon(0 0, calc(100% - 22px) 0, 100% 22px, 100% 100%, 0 100%);
  box-shadow:0 18px 40px -30px rgba(34,34,46,.6);
}
.prod-card .prod-photo{position:absolute;inset:0;overflow:hidden;}
body.bef-v2 .prod-card .prod-photo img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .75s cubic-bezier(.16,.72,.24,1);
}
.prod-card:hover .prod-photo img{transform:scale(1.08);}
.prod-card::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(18,18,26,.10) 0%,rgba(18,18,26,.30) 42%,rgba(18,18,26,.88) 100%);
  transition:background .45s ease;
}
.prod-card:hover::after{
  background:linear-gradient(180deg,rgba(18,18,26,.16) 0%,rgba(18,18,26,.44) 42%,rgba(18,18,26,.93) 100%);
}
.prod-body{
  position:absolute;left:0;right:0;bottom:0;z-index:2;
  padding:1.3rem 1.25rem 1.25rem;
}
body.bef-v2 .prod-card h3{
  font-family:var(--font-display);font-size:1.06rem;font-weight:800;
  letter-spacing:0;text-transform:none;color:#fff;margin:0 0 .5rem;line-height:1.25;
}
body.bef-v2 .prod-card h3::after{
  content:"";display:block;width:26px;height:2px;background:var(--accent);
  margin-top:.5rem;transition:width .45s cubic-bezier(.22,.61,.24,1);
}
.prod-card:hover h3::after{width:62px;}
.prod-card p{
  margin:0 0 .7rem;font-size:.83rem;line-height:1.55;color:rgba(255,255,255,.86);
}
.prod-card .prod-go{
  font-size:.76rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase;
  color:var(--accent);display:inline-flex;align-items:center;gap:.4rem;
}
.prod-card .prod-go::after{
  content:"\2192";transition:transform .35s ease;display:inline-block;
}
.prod-card:hover .prod-go::after{transform:translateX(5px);}
@media (max-width:1000px){.prod-grid{grid-template-columns:repeat(2,1fr);}.prod-grid--2{max-width:none;}}
@media (max-width:540px){.prod-grid,.prod-grid--2{grid-template-columns:1fr;}.prod-card{aspect-ratio:4/3;}}

/* The two-tone product sub-label gets a rule that reads as a divider. */
.prod-sub{
  display:flex;align-items:center;gap:1.1rem;
  text-align:left;margin:3.6rem 0 1.5rem;
  font-family:var(--font-display);font-size:1.28rem;font-weight:800;color:var(--ink);
}
.prod-sub::after{content:"";flex:1;height:1px;background:var(--ink-line);}
.prod-rule{display:none;}

/* --------------------------- 10.4 HOW IT WORKS - CIRCULAR PHOTO MEDALLIONS */
/* ref 2 keeps its ringed circle over the card top; the ring now frames a
   photograph instead of a line icon. */
.step-icon{
  width:96px;height:96px;top:-48px;
  background:#fff;border:3px solid var(--accent);
  padding:4px;overflow:hidden;
  box-shadow:0 14px 30px -18px rgba(34,34,46,.6);
}
.step-icon .step-photo{
  width:100%;height:100%;border-radius:50%;overflow:hidden;display:block;
}
body.bef-v2 .step-icon img{
  width:100%;height:100%;object-fit:cover;border-radius:50%;display:block;
  transition:transform .7s cubic-bezier(.16,.72,.24,1);
}
.step-card:hover .step-icon img{transform:scale(1.12);}
.step-card{padding-top:4.2rem;}
/* A hairline that threads the first row of medallions together. */
.step-grid{position:relative;}
.step-grid::before{
  content:"";position:absolute;top:0;left:16%;right:16%;height:1px;
  background:repeating-linear-gradient(to right,var(--ink-line) 0 6px,transparent 6px 12px);
  z-index:0;
}
.step-grid > li{position:relative;z-index:1;}
@media (max-width:900px){.step-grid::before{content:none;}}

/* ------------------------- 10.5 WHY CHOOSE US - PHOTO-TOPPED TILES ON DARK */
.why-tile{
  padding:0;overflow:hidden;text-align:left;align-items:stretch;gap:0;
  border-radius:3px;border:0;
  clip-path:polygon(0 0, calc(100% - 22px) 0, 100% 22px, 100% 100%, 0 100%);
  box-shadow:0 20px 44px -30px rgba(0,0,0,.7);
}
.why-photo-top{position:relative;aspect-ratio:3/2;overflow:hidden;background:var(--ink);}
body.bef-v2 .why-photo-top img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .75s cubic-bezier(.16,.72,.24,1);
}
.why-tile:hover .why-photo-top img{transform:scale(1.07);}
.why-photo-top::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(18,18,26,0) 45%,rgba(18,18,26,.55) 100%);
}
.why-tile-body{padding:1.35rem 1.4rem 1.6rem;background:var(--base-d);flex:1;}
body.bef-v2 .why-tile h3{
  font-family:var(--font-display);font-size:1.1rem;font-weight:800;
  color:var(--ink);margin:0 0 .45rem;text-transform:none;letter-spacing:0;
}
body.bef-v2 .why-tile h3::after{
  content:"";display:block;width:24px;height:2px;background:var(--accent);
  margin-top:.5rem;transition:width .45s cubic-bezier(.22,.61,.24,1);
}
.why-tile:hover h3::after{width:56px;}
.why-tile p{margin:.75rem 0 0;font-size:.88rem;color:var(--muted);line-height:1.6;}

/* ------------------------------- 10.6 FEATURED PROJECTS - numbered, framed */
.proj-item{position:relative;}
.proj-media{position:relative;box-shadow:0 22px 46px -32px rgba(34,34,46,.62);}
.proj-media::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(18,18,26,0) 55%,rgba(18,18,26,.42) 100%);
  opacity:0;transition:opacity .45s ease;
}
.proj-item:hover .proj-media::after{opacity:1;}
.proj-index{
  position:absolute;top:-.2rem;left:0;z-index:2;
  font-family:var(--font-serif);font-size:2.4rem;font-weight:700;line-height:1;
  color:var(--accent);
  text-shadow:0 2px 10px rgba(18,18,26,.35);
}
.proj-item .proj-media{margin-left:2.6rem;}
.proj-caption{margin-left:2.6rem;}
@media (max-width:520px){
  .proj-item .proj-media,.proj-caption{margin-left:2.1rem;}
  .proj-index{font-size:2rem;}
}

/* ---------------------------------------- 10.7 FAQ FIGURE - depth on scroll */
.faq-figure{box-shadow:0 26px 56px -34px rgba(34,34,46,.6);}

/* --------------------------------------------- 10.8 SECTION HEAD, ELEVATED */
.section-head .lead{color:var(--muted);}
.section--dusk .section-head .lead{color:var(--muted-on-ink);}

/* ==========================================================================
   LAYER 11 - two-line headings + three defects from rendered QA, 2026-09-09
   ========================================================================== */

/* 11.1  Every display heading is set on two lines, as the hero already was.
   .hl is a block, so on a narrow screen each half still wraps normally
   rather than overflowing. */
.hl{display:block;}
body.bef-v2 h1 .hl,
body.bef-v2 h2 .hl{text-wrap:balance;}
/* Two blocks means the balance algorithm no longer needs a width cap. */
.section-head{max-width:64rem;}

/* 11.2  HOW IT WORKS - steps 4 and 5 had collapsed to a third of their width.
   margin-left:50% on a grid item shrinks its content box; it does not move
   it. Centre the short last row on a six-track grid instead, so every card
   keeps a full two-track width. */
.step-grid{grid-template-columns:repeat(6,1fr);}
.step-grid > li{grid-column:span 2;margin-left:0;}
.step-grid > li:nth-child(4){grid-column:2 / span 2;margin-left:0;}
.step-grid > li:nth-child(5){grid-column:4 / span 2;margin-left:0;}
@media (max-width:900px){
  .step-grid{grid-template-columns:repeat(2,1fr);}
  .step-grid > li,
  .step-grid > li:nth-child(4),
  .step-grid > li:nth-child(5){grid-column:auto;}
}
@media (max-width:600px){
  .step-grid{grid-template-columns:1fr;}
}

/* 11.3  PRODUCT CARDS - the 4-up and the 2-up were different heights because
   an aspect-ratio scales with column width. A fixed minimum makes all six
   read as one set, and gives the photograph room to be seen. */
.prod-card{aspect-ratio:auto;min-height:340px;display:flex;}
.prod-grid--2 .prod-card{min-height:360px;}
@media (max-width:540px){.prod-card,.prod-grid--2 .prod-card{min-height:300px;}}

/* 11.4  The residential project photograph still cropped to mostly driveway
   in a 4:5 tile. Pull the crop further onto the house and the fence line. */
body.bef-v2 .proj-item--tall .proj-media img{object-position:50% 20%;}

/* ==========================================================================
   LAYER 12 - trust badges under EVERY banner, 2026-09-09
   The console is one shared template part. Inner-page banners get a compact
   variant: it still straddles the seam, with less air beneath.
   ========================================================================== */
body.bef-v2 .badge-strip--compact{
  margin-top:-56px;
  padding:0;
  background:linear-gradient(to bottom,transparent 0,transparent 56px,var(--base-d) 56px);
}
body.bef-v2 .badge-strip--compact::after{height:2.4rem;}
body.bef-v2 .badge-strip--compact .proof-score{padding:1.15rem 1.4rem;}
body.bef-v2 .badge-strip--compact .proof-score-num{font-size:2.3rem;}
body.bef-v2 .badge-strip--compact .badge-card{min-height:84px;}
body.bef-v2 .badge-strip--compact img{max-height:42px;}
/* An inner banner is shorter than the homepage hero, so it needs the extra
   clearance at the bottom or the console would sit on the copy. */
body.bef-v2 .hero--plain{padding-bottom:4.2rem;}
@media (max-width:900px){
  body.bef-v2 .badge-strip--compact{
    margin-top:-40px;
    background:linear-gradient(to bottom,transparent 0,transparent 40px,var(--base-d) 40px);
  }
}
/* The old text chip bar and the console say the same thing twice. The badges
   win; the chip bar is hidden rather than deleted so it can be restored. */
body.bef-v2 .badge-bar{display:none;}

/* ==========================================================================
   LAYER 13 - featured images, one-line banner headings, About page
   2026-09-09
   ========================================================================== */

/* 13.1  FEATURED IMAGES WERE BROKEN ON EVERY LISTING PAGE.
   Measured: on /products/, /aluminum-fencing/ and /wrought-iron-fencing/ the
   .card-media box computed to 389px tall while the image inside was pinned to
   210px, leaving 179px of dead white between the photograph and the heading.
   On /blog/ the same rule left a 44px gap.

   Cause: a fixed pixel height on the image fighting the media box's own
   sizing. The image now fills its box, and the box owns the ratio. */
body.bef-v2 .card .card-media{
  aspect-ratio:16/10;
  height:auto;
  overflow:hidden;
  background:transparent;
  position:relative;
}
body.bef-v2 .card .card-media img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}
/* The homepage blog cards hang a byline chip below the photograph, so those
   keep their overflow visible and their own rhythm. */
body.bef-v2 .card .card-media .card-date{position:absolute;}
/* A card is a column: media, then body, then the link pinned to the bottom so
   a row of cards lines up however long the excerpts run. */
body.bef-v2 .card{display:flex;flex-direction:column;}
body.bef-v2 .card .card-link{margin-top:auto;}

/* 13.2  BANNER HEADINGS THAT FIT ON ONE LINE NOW STAY ON ONE LINE.
   text-wrap:balance was splitting "Aluminum & Wrought Iron Fencing" across
   two lines even though it fits. Inner banners get normal wrapping and a
   wider measure; only genuinely long titles wrap now. */
body.bef-v2 .hero--plain h1{
  text-wrap:normal;
  font-size:clamp(2.1rem,3.7vw,3.35rem);
  max-width:none;
}
body.bef-v2 .hero--plain .hero-copy{max-width:60rem;}
body.bef-v2 .hero--plain .hero-sub{max-width:46rem;}
/* The banner was 932px tall with a four-line H1. Brief section 3: do not let
   the hero get excessively tall. */
body.bef-v2 .hero--plain{min-height:0;}
body.bef-v2 .hero--plain .hero-grid{padding-block:clamp(3.2rem,7vh,5rem);}

/* 13.3  ABOUT - STORY SPLIT, image in an offset frame rather than a bare box */
.about-split{
  display:grid;grid-template-columns:.92fr 1.08fr;gap:3.6rem;align-items:center;
}
.about-split-media .framed{
  position:relative;border-radius:3px;overflow:hidden;
  aspect-ratio:4/5;
  box-shadow:0 30px 60px -34px rgba(34,34,46,.6);
}
body.bef-v2 .about-split-media .framed img{width:100%;height:100%;object-fit:cover;display:block;}
.about-split-media{position:relative;}
/* the offset rule that turns a photograph into a composed element */
.about-split-media::before{
  content:"";position:absolute;left:-18px;top:26px;bottom:26px;width:6px;
  background:var(--accent);border-radius:3px;
}
.about-split-copy p{color:var(--muted);}
.about-actions{display:flex;flex-wrap:wrap;gap:.8rem;margin-top:1.8rem;}
@media (max-width:900px){
  .about-split{grid-template-columns:1fr;gap:2.2rem;}
  .about-split-media .framed{aspect-ratio:4/3;}
  .about-split-media::before{left:-14px;top:18px;bottom:18px;width:5px;}
}

/* 13.4  ABOUT - WHAT WE SUPPLY, the two-up that ref 13 showed broken */
.line-grid{display:grid;grid-template-columns:1fr 1fr;gap:1.8rem;margin:0;padding:0;list-style:none;}
.line-card{
  display:flex;flex-direction:column;height:100%;
  background:#fff;border:1px solid var(--ink-line);border-radius:3px;
  overflow:hidden;text-decoration:none;
  box-shadow:0 20px 44px -32px rgba(34,34,46,.5);
}
.line-media{display:block;aspect-ratio:16/9;overflow:hidden;background:var(--base-dd);}
body.bef-v2 .line-media img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .75s cubic-bezier(.16,.72,.24,1);
}
.line-card:hover .line-media img{transform:scale(1.06);}
.line-body{display:block;padding:1.5rem 1.6rem 1.7rem;}
body.bef-v2 .line-card h3{
  font-family:var(--font-serif);font-size:1.7rem;font-weight:700;
  color:var(--ink);margin:0 0 .6rem;letter-spacing:-.01em;text-transform:none;
}
.line-card p{margin:0 0 1rem;color:var(--muted);font-size:.94rem;line-height:1.65;}
.line-go{
  font-size:.8rem;font-weight:800;letter-spacing:.07em;text-transform:uppercase;
  color:var(--brand-blue-t);display:inline-flex;align-items:center;gap:.4rem;
}
.line-go::after{content:"\2192";transition:transform .35s ease;}
.line-card:hover .line-go::after{transform:translateX(5px);}
@media (max-width:800px){.line-grid{grid-template-columns:1fr;}}

/* 13.5  ABOUT - MISSION, out of the narrow column and into a dark split */
.about-mission-split{
  display:grid;grid-template-columns:1fr 1.15fr;gap:3.4rem;align-items:center;
}
.about-mission-media{border-radius:3px;overflow:hidden;aspect-ratio:4/3;box-shadow:0 30px 60px -34px rgba(0,0,0,.7);}
body.bef-v2 .about-mission-media img{width:100%;height:100%;object-fit:cover;display:block;}
.about-mission-copy p{color:var(--muted-on-ink);}
.pull{
  margin:1.3rem 0 1.5rem;padding:0 0 0 1.3rem;
  border-left:3px solid var(--accent);
  font-family:var(--font-serif);font-size:1.3rem;line-height:1.45;color:#fff;
  font-style:normal;
}
@media (max-width:900px){
  .about-mission-split{grid-template-columns:1fr;gap:2rem;}
}

/* 13.6  ABOUT - CREDENTIALS, a bordered row rather than another card grid */
.cred-row{
  display:grid;grid-template-columns:repeat(4,1fr);gap:0;
  margin:0;padding:0;list-style:none;
  border-top:1px solid var(--ink-line);border-bottom:1px solid var(--ink-line);
}
.cred-item{padding:2rem 1.6rem;border-left:1px solid var(--ink-line);}
.cred-item:first-child{border-left:0;}
.cred-num{
  display:block;font-family:var(--font-serif);font-size:1.5rem;font-weight:700;
  color:var(--accent);line-height:1;margin-bottom:.7rem;
}
body.bef-v2 .cred-item h3{
  font-family:var(--font-display);font-size:1rem;font-weight:800;
  color:var(--ink);margin:0 0 .45rem;text-transform:none;letter-spacing:0;
}
.cred-item p{margin:0;font-size:.88rem;color:var(--muted);line-height:1.6;}
@media (max-width:900px){
  .cred-row{grid-template-columns:1fr 1fr;}
  .cred-item:nth-child(3){border-left:0;}
  .cred-item:nth-child(n+3){border-top:1px solid var(--ink-line);}
}
@media (max-width:520px){
  .cred-row{grid-template-columns:1fr;}
  .cred-item{border-left:0;border-top:1px solid var(--ink-line);}
  .cred-item:first-child{border-top:0;}
}

/* 13.7  The quote card is used on a light ground here, so it keeps the dark
   fill it has on the homepage - one component, one look. */
.about-mission + .section .quote{height:100%;}

/* ==========================================================================
   LAYER 14 - contrast on the decorative numerals, 2026-09-09
   The amber index numerals measured 2.00:1 on a light ground. They are
   aria-hidden and therefore exempt from WCAG, but they were genuinely hard
   to read, so they move to the AA amber. Amber stays on dark grounds where
   it already passes at 5.60:1.
   ========================================================================== */
body.bef-v2 .cred-num{color:var(--accent-d);}          /* 4.83:1 on white */
body.bef-v2 .proj-index{color:var(--accent-d);text-shadow:none;}
body.bef-v2 .section--dusk .cred-num,
body.bef-v2 .section--dusk .proj-index{color:var(--accent);}

/* ==========================================================================
   LAYER 15 - two real bugs, 2026-09-09
   ========================================================================== */

/* 15.1  THE TRUST BADGES WERE INVISIBLE ON EVERY PAGE.
   .badge-row carried .reveal--stagger but NOT .reveal. The observer only
   watches .reveal, so .is-visible never landed on the row and its children
   sat at opacity:0 forever. Measured: cardOpacity 0 on / and /about/.
   The images had loaded, which is why an earlier check that only looked at
   naturalWidth and bounding-box height passed while nothing was on screen.

   The class is added in the template. These two rules make the whole pattern
   fail-safe from here on: a stagger inside any revealed ancestor shows, and
   a stagger with no JS at all shows. */
.is-visible .reveal--stagger > *{opacity:1;transform:none;}
.no-js .reveal--stagger > *{opacity:1;transform:none;}

/* 15.2  HOMEPAGE HEADINGS ON ONE LINE.
   The .hl halves become inline, so a heading runs as a single line wherever
   it fits and still wraps naturally when it cannot. The type scale is capped
   against the viewport so the longest heading on the page - "Your Path to
   Perfect Fencing with Big Easy Fence Supply", 54 characters - clears the
   1,196px content width instead of overflowing it. */
body.bef-v2 .hl{display:inline;}
body.bef-v2 .hl + .hl::before{content:" ";}
body.bef-v2 .section-head h2{
  font-size:clamp(1.65rem,2.85vw,2.45rem);
  text-wrap:normal;
}
body.bef-v2 .section-head h2 .hl{text-wrap:normal;}
body.bef-v2 .section-head{max-width:none;}
body.bef-v2 .section-head--left{max-width:62rem;}

/* The hero headline stays the designed two-line statement it always was. */
body.bef-v2 .hero h1 .hl{display:block;}
body.bef-v2 .hero h1 .hl + .hl::before{content:none;}

@media (max-width:820px){
  body.bef-v2 .section-head h2{font-size:clamp(1.5rem,5.4vw,2rem);}
}

/* ==========================================================================
   LAYER 16 - FAQ "Show More", 2026-09-09
   The homepage now carries all twelve published questions; seven are folded
   away until asked for. With no JS the toggle hides and every question shows,
   so nothing is ever unreachable.
   ========================================================================== */
.faq-more-wrap{display:flex;align-items:center;gap:1.4rem;flex-wrap:wrap;margin-top:1.7rem;}
body.bef-v2 .faq-more{padding:.72rem 1.5rem;font-size:.82rem;cursor:pointer;}
.no-js .faq-more{display:none;}
.no-js .faq-list details[hidden]{display:block !important;}
.faq-list details.faq-extra{animation:befFaqIn .38s cubic-bezier(.22,.61,.24,1) both;}
@keyframes befFaqIn{from{opacity:0;transform:translateY(-6px);}to{opacity:1;transform:none;}}
@media (prefers-reduced-motion:reduce){
  .faq-list details.faq-extra{animation:none;}
}

/* ==========================================================================
   LAYER 17 - hero "Featured Projects" carousel, 2026-09-11
   REWRITTEN the same day when the carousel went from two slides to eight.

   WHAT CHANGED IN THE HERO: it gained a SECOND COLUMN on the right. The left
   column - eyebrow, h1, sub, both CTAs, the trust list - is untouched; its
   rules all still come from 6.4 above and are not re-declared here.

   The hero's own height is UNCHANGED. 6.4 sets .hero-inner padding to 8.5rem
   top and bottom and that is left alone, so the section is the same 860px it
   was before the card existed. The card centres inside that, which is where
   the negative space around it comes from.

   MEASURED SIDE EFFECT, and the only one: the copy column is now 589px wide
   where it was 608px (its 38rem cap). The h1, the CTAs and the trust list are
   unaffected at that width; the sub paragraph is still three lines but breaks
   one word earlier. Nothing else on the left moved.

   THE CAPTION IS A BAND, NOT AN OVERLAY - and that is the second rewrite.
   The supplied mockup floated the caption over the foot of the photograph.
   With two hand-picked photographs that was safe. With eight it was not: the
   fence sits low in the frame in half of them and the panel covered it. The
   caption now owns its own row under the image. The card is therefore a
   content-box with aspect-ratio on the IMAGE only plus padding-bottom for the
   band, so the stage height is (width / 1.5) + the band. Absolutely
   positioned slides resolve against the padding box, so each slide still
   covers image AND band and the two crossfade as one.

   SPECIFICITY: body.bef-v2 a{...} and body.bef-v2 img{height:auto} outrank
   plain class selectors (see note 4 in SESSION-NOTES.md), so the card link
   and the slide image are both scoped to body.bef-v2 here. They are silently
   overridden otherwise.
   ========================================================================== */

body.bef-v2 .hero-inner--split{
  display:grid;
  grid-template-columns:minmax(0,1fr) min(600px,47%);
  align-items:center;
  gap:2.8rem;
}
body.bef-v2 .hero-inner--split .hero-copy{min-width:0;}

/* -------------------------------------------------------- 17.1 THE CARD */
.hero-pf{
  --pf-radius:22px;
  --pf-band-h:104px;
  --pf-shot-ratio:1.5;
  --pf-frame-offset:24px;
  min-width:0;
  justify-self:end;
  width:100%;
}
.hero-pf__frame{position:relative;}

/* The layered amber outline sitting behind and below-right of the card.
   Decorative only. It is pulled in at 1200px and dropped entirely below
   900px, where the card goes full width and the offset would be the one
   thing on the page able to create horizontal overflow. */
.hero-pf__frame::after{
  content:"";
  position:absolute;
  inset:var(--pf-frame-offset) calc(var(--pf-frame-offset) * -1)
         calc(var(--pf-frame-offset) * -1) var(--pf-frame-offset);
  border:1.5px solid rgba(240,169,82,.5);
  border-radius:calc(var(--pf-radius) + 2px);
  z-index:0;
  pointer-events:none;
}

/* content-box is load-bearing: aspect-ratio then describes the PHOTOGRAPH,
   and padding-bottom adds the caption band underneath it. */
.hero-pf__stage{
  position:relative;
  z-index:1;
  box-sizing:content-box;
  aspect-ratio:var(--pf-shot-ratio);
  padding-bottom:var(--pf-band-h);
  border-radius:var(--pf-radius);
  overflow:hidden;
  background:#15151d;
  border:1px solid rgba(255,255,255,.14);
  box-shadow:0 34px 70px -24px rgba(6,8,16,.78), 0 8px 22px -14px rgba(6,8,16,.6);
}

/* ---------------------------------------------------- 17.2 THE SLIDES */
/* Image and caption crossfade as ONE element, so a slide's photograph and
   its title can never fall out of step. */
.hero-pf__slide{
  position:absolute;
  inset:0;
  margin:0;
  display:grid;
  grid-template-rows:1fr var(--pf-band-h);
  opacity:0;
  visibility:hidden;
  transition:opacity 850ms ease-in-out, visibility 0s linear 850ms;
}
.hero-pf__slide.is-active{
  opacity:1;
  visibility:visible;
  transition:opacity 850ms ease-in-out, visibility 0s;
}
.hero-pf__shot{display:block;overflow:hidden;min-height:0;}
body.bef-v2 .hero-pf__img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}

/* ------------------------------------------------ 17.3 THE CAPTION BAND */
.hero-pf__panel{
  display:flex;
  align-items:center;
  gap:1rem;
  padding:0 1.3rem;
  background:#15151d;
  border-top:1px solid rgba(255,255,255,.1);
}
.hero-pf__icon{color:var(--accent);display:flex;flex-shrink:0;}
.hero-pf__text{display:flex;flex-direction:column;gap:.18rem;min-width:0;}
.hero-pf__eyebrow{
  font-size:.68rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent-l);
}
.hero-pf__title{
  font-family:var(--font-serif);
  font-size:clamp(1.05rem,1.5vw,1.4rem);
  font-weight:700;color:#fff;line-height:1.15;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.hero-pf__loc{
  display:inline-flex;align-items:center;gap:.35rem;
  font-size:.8rem;color:rgba(244,247,252,.78);
}
.hero-pf__loc svg{color:var(--accent);flex-shrink:0;}
body.bef-v2 a.hero-pf__cta{
  margin-left:auto;
  flex-shrink:0;
  font-size:.86rem;font-weight:700;
  color:var(--accent-l);
  text-decoration:none;
  white-space:nowrap;
  display:inline-flex;align-items:center;gap:.4rem;
}
body.bef-v2 a.hero-pf__cta:hover,
body.bef-v2 a.hero-pf__cta:focus-visible{color:#fff;}
body.bef-v2 a.hero-pf__cta span{transition:transform .25s ease;}
body.bef-v2 a.hero-pf__cta:hover span{transform:translateX(4px);}

/* --------------------------------------------------------- 17.4 BADGE */
.hero-pf__badge{
  position:absolute;top:16px;right:16px;margin:0;z-index:3;
  display:inline-flex;align-items:center;gap:.45rem;
  padding:.42rem .78rem;
  border-radius:999px;
  background:rgba(20,20,28,.82);
  border:1px solid rgba(255,255,255,.16);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
  font-size:.76rem;color:rgba(244,247,252,.86);line-height:1;
}
.hero-pf__badge svg{color:var(--accent);flex-shrink:0;}
.hero-pf__badge b{color:#fff;font-weight:700;}

/* ---------------------------------------------------- 17.5 INDICATORS */
/* Eight numerals would have been a wall of digits, so the slides are eight
   short bars and the numeral is a running count: 01 / 08. The bars are the
   buttons; the count is decorative and aria-hidden.

   It rides over whatever the photograph puts behind it, so it carries the
   same dark pill as the rating badge. Contrast was measured off the rendered
   pixels of the counter itself when it was numerals: 8.7:1 and 9.3:1. The
   pill and the type colours are unchanged. */
.hero-pf__nav{
  position:absolute;z-index:3;
  right:16px;
  bottom:calc(var(--pf-band-h) + 14px);
  display:flex;align-items:center;gap:.7rem;
  padding:.36rem .72rem;
  border-radius:999px;
  background:rgba(20,20,28,.82);
  border:1px solid rgba(255,255,255,.16);
  backdrop-filter:blur(8px);
  -webkit-backdrop-filter:blur(8px);
}
.hero-pf__dots{
  display:flex;align-items:center;gap:.32rem;
  margin:0;padding:0;list-style:none;
}
.hero-pf__dots li{display:flex;}
body.bef-v2 .hero-pf__dot{
  appearance:none;border:0;cursor:pointer;padding:0;
  width:14px;height:3px;border-radius:2px;
  background:rgba(244,247,252,.42);
  transition:background-color .25s ease,width .25s ease;
}
body.bef-v2 .hero-pf__dot:hover{background:rgba(244,247,252,.8);}
body.bef-v2 .hero-pf__dot.is-active{background:var(--accent);width:22px;}
body.bef-v2 .hero-pf__dot:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}
.hero-pf__count{
  margin:0;
  font-family:var(--font-mono,inherit);
  font-size:.72rem;font-weight:700;letter-spacing:.08em;
  color:rgba(244,247,252,.55);
  line-height:1;
}
.hero-pf__count b{color:var(--accent);font-weight:700;}

/* ------------------------------------------------------- 17.6 MOTION */
/* Reduced motion: the crossfade becomes an instant swap and main-v2.js
   never starts the timer, so the card is a static first project that the
   indicator bars still page through. */
@media (prefers-reduced-motion:reduce){
  .hero-pf__slide,
  .hero-pf__slide.is-active{transition:none;}
  body.bef-v2 .hero-pf__dot{transition:none;}
  body.bef-v2 a.hero-pf__cta span{transition:none;}
  body.bef-v2 a.hero-pf__cta:hover span{transform:none;}
}

/* --------------------------------------------------- 17.7 RESPONSIVE */
@media (max-width:1200px){
  body.bef-v2 .hero-inner--split{gap:2.4rem;grid-template-columns:minmax(0,1fr) min(520px,48%);}
  .hero-pf{--pf-frame-offset:14px;--pf-band-h:96px;}
}

/* Below 900px the hero is one column - the same breakpoint at which the
   scrim already switches from left-weighted to vertical. The card stacks
   under the copy at full width and the decorative offset frame is dropped:
   it is the only element here that could push the document wider than the
   viewport. */
@media (max-width:900px){
  body.bef-v2 .hero-inner--split{
    grid-template-columns:1fr;
    gap:2.6rem;
    padding-top:3.4rem;
    padding-bottom:3.4rem;
  }
  .hero-pf{justify-self:stretch;--pf-band-h:96px;--pf-shot-ratio:1.7;}
  .hero-pf__frame::after{display:none;}
}

@media (max-width:640px){
  .hero-pf{--pf-radius:16px;--pf-band-h:128px;--pf-shot-ratio:1.4;}
  .hero-pf__panel{
    flex-wrap:wrap;
    align-content:center;
    gap:.5rem .7rem;
    padding:.8rem .95rem;
  }
  .hero-pf__icon svg{width:22px;height:22px;}
  .hero-pf__title{font-size:1.02rem;}
  body.bef-v2 a.hero-pf__cta{
    margin-left:0;
    flex-basis:100%;
    font-size:.8rem;
  }
  .hero-pf__nav{right:12px;bottom:calc(var(--pf-band-h) + 10px);}
  .hero-pf__badge{top:12px;right:12px;font-size:.72rem;padding:.36rem .66rem;}
}

@media (max-width:400px){
  .hero-pf{--pf-shot-ratio:1.25;}
  .hero-pf__title{font-size:.96rem;}
}


/* ==========================================================================
   LAYER 18 - Featured Projects rebuilt, 2026-09-11

   SCOPE: the one section. Nothing here is a global rule and nothing here
   changes a token. The palette, the serif headline, the sand background and
   the generous whitespace are all the ones already in the system.

   The brief that drove this asked for wood / vinyl / chain link / privacy /
   security service labels. Only the words this client actually publishes are
   used - see the note above $bef_projects in front-page.php.

   SPECIFICITY: the tiles are now links, and body.bef-v2 a{color:var(--accent-d)}
   outranks any plain class selector, so every colour rule below that touches
   an anchor is scoped to body.bef-v2. Same trap as notes 4 and LAYER 17.
   ========================================================================== */

/* ------------------------------------------------- 18.1 INTRO + SERVICES */
.proj-intro{margin-top:1rem;max-width:52ch;}

/* The strip that fills the dead band under the heading. It is navigation,
   so it is a real <nav><ul>, and each entry is a live link into the range. */
.proj-services{margin:2.4rem 0 2.9rem;padding-top:1.5rem;border-top:1px solid var(--ink-line);}
.proj-services ul{
  display:flex;flex-wrap:wrap;align-items:center;
  gap:.55rem 1.05rem;margin:0;padding:0;list-style:none;
}
.proj-services li{display:flex;align-items:center;}
.proj-services li + li::before{
  content:"";width:4px;height:4px;border-radius:50%;
  background:var(--accent);margin-right:1.05rem;flex-shrink:0;
}
body.bef-v2 .proj-services a{
  font-size:.7rem;font-weight:700;letter-spacing:.11em;text-transform:uppercase;
  color:var(--muted);text-decoration:none;
  padding:.15rem 0;
  border-bottom:1px solid transparent;
  transition:color .3s ease,border-color .3s ease;
}
body.bef-v2 .proj-services a:hover,
body.bef-v2 .proj-services a:focus-visible{color:var(--ink);border-bottom-color:var(--accent);}

/* --------------------------------------------------- 18.2 THE 12-COLUMN */
/* 5 / 4 / 3 - a real hierarchy rather than three tiles of the same weight.
   The offsets that gave the old composition its stagger are kept. */
body.bef-v2 .section--projects .proj-stagger{
  grid-template-columns:repeat(12,1fr);
  gap:1.8rem;
  align-items:start;
}
body.bef-v2 .section--projects .proj-item--tall {grid-column:span 5;}
body.bef-v2 .section--projects .proj-item--short{grid-column:span 4;}
body.bef-v2 .section--projects .proj-item--mid  {grid-column:span 3;}

/* A descending stagger. The first pass used 5/4 and 3/4 here and left about
   400px of dead white under tiles 02 and 03, because 01 was twice their
   height. These three ratios and offsets land the three photographs at
   601 / 569 / 537px - a deliberate step down instead of a hole. */
body.bef-v2 .section--projects .proj-item--tall  .proj-media{aspect-ratio:4/5;margin-top:0;}
body.bef-v2 .section--projects .proj-item--short .proj-media{aspect-ratio:3/4;margin-top:4rem;}
body.bef-v2 .section--projects .proj-item--mid   .proj-media{aspect-ratio:2/3;margin-top:7.5rem;}

/* ----------------------------------------------------- 18.3 THE TILE */
/* The whole tile is one link: photograph, title, labels and location. That
   is one tab stop per project instead of several, and the focus ring frames
   the thing being chosen. */
body.bef-v2 a.proj-link{
  display:block;text-decoration:none;color:inherit;
  border-radius:3px;
}
body.bef-v2 a.proj-link:focus-visible{
  outline:3px solid var(--accent-d);outline-offset:6px;
}
.section--projects .proj-media{
  position:relative;display:block;overflow:hidden;
  border-radius:3px;
  background:var(--base-dd);
  box-shadow:0 22px 46px -32px rgba(34,34,46,.62);
}
body.bef-v2 .section--projects .proj-media img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .42s cubic-bezier(.22,.61,.24,1);
}
body.bef-v2 .section--projects a.proj-link:hover .proj-media img,
body.bef-v2 .section--projects a.proj-link:focus-visible .proj-media img{
  transform:scale(1.04);
}

/* Deliberately restrained: a low gradient at the foot of the photograph, not
   a full wash. The fencing has to stay legible - it is the thing being sold. */
.section--projects .proj-media::after{
  content:"";position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(18,18,26,0) 58%,rgba(18,18,26,.55) 100%);
  opacity:0;transition:opacity .42s ease;
  pointer-events:none;
}
body.bef-v2 .section--projects a.proj-link:hover .proj-media::after,
body.bef-v2 .section--projects a.proj-link:focus-visible .proj-media::after{opacity:1;}

.proj-hover{
  position:absolute;left:1.1rem;bottom:1rem;z-index:2;
  display:inline-flex;align-items:center;gap:.5rem;
  font-size:.74rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:#fff;
  opacity:0;transform:translateY(8px);
  transition:opacity .42s ease,transform .42s cubic-bezier(.22,.61,.24,1);
  pointer-events:none;
}
.proj-hover span{transition:transform .42s ease;}
body.bef-v2 .section--projects a.proj-link:hover .proj-hover,
body.bef-v2 .section--projects a.proj-link:focus-visible .proj-hover{
  opacity:1;transform:translateY(0);
}
body.bef-v2 .section--projects a.proj-link:hover .proj-hover span{transform:translateX(4px);}

/* ------------------------------------------------- 18.4 THE NUMERALS */
/* Amber, serif, sitting in the gutter and clipping the top-left corner of
   the photograph by about a third of their width. They read against the sand
   background; the shadow is only there for the part that laps the image. */
body.bef-v2 .section--projects .proj-index{
  position:absolute;z-index:3;
  top:0;left:0;
  transform:translate(-14%,-46%);
  font-family:var(--font-serif);font-size:2.6rem;font-weight:700;line-height:1;
  color:var(--accent-d);
  text-shadow:0 1px 10px rgba(244,247,252,.9);
  pointer-events:none;
}
body.bef-v2 .section--projects .proj-item--short .proj-index{top:4rem;}
body.bef-v2 .section--projects .proj-item--mid   .proj-index{top:7.5rem;}
body.bef-v2 .section--projects .proj-item .proj-media{margin-left:1.5rem;}
body.bef-v2 .section--projects .proj-caption{margin-left:1.5rem;}

/* -------------------------------------------------- 18.5 THE CAPTION */
body.bef-v2 .section--projects .proj-caption{
  display:block;margin-top:1.05rem;
}
.proj-title{
  display:block;
  font-family:var(--font-serif);
  font-size:1.16rem;font-weight:700;line-height:1.25;color:var(--ink);
  letter-spacing:0;
  transition:color .3s ease;
}
body.bef-v2 a.proj-link:hover .proj-title{color:var(--accent-dd);}

/* ALUMINUM / PRIVACY / COMMERCIAL - typography and a hairline separator,
   no pills. Pills would read as software UI on a fencing contractor's site. */
.proj-tags{
  display:block;margin-top:.5rem;
  font-size:.7rem;letter-spacing:.13em;text-transform:uppercase;
  color:var(--accent-d);
}
.proj-tags b{font-weight:700;}
.proj-tags i{
  font-style:normal;color:var(--ink-line);
  margin:0 .45rem;
  color:rgba(34,34,46,.32);
}
.proj-loc{
  display:block;margin-top:.42rem;
  font-size:.7rem;font-weight:500;letter-spacing:.09em;text-transform:uppercase;
  color:var(--muted);
}

/* ------------------------------------------- 18.6 THE HEADING ACTION */
/* An underline that grows out of the left edge on hover, rather than the
   static rule the other head-rows use. */
body.bef-v2 a.head-row-action--ul{
  border-bottom:0;
  position:relative;
  padding-bottom:.35rem;
}
body.bef-v2 a.head-row-action--ul::after{
  content:"";position:absolute;left:0;bottom:0;height:1.5px;width:100%;
  background:var(--accent-d);
  transform:scaleX(1);transform-origin:left;
  transition:transform .38s cubic-bezier(.22,.61,.24,1);
}
body.bef-v2 a.head-row-action--ul:hover::after,
body.bef-v2 a.head-row-action--ul:focus-visible::after{
  transform:scaleX(.4);
}

/* ------------------------------------------------ 18.7 CLOSING CTA */
/* Kept quiet on purpose: one hairline, one line of copy, and the site's
   OWN estimate button and destination. It must not out-shout the work. */
.proj-close{
  margin-top:3.4rem;padding-top:1.9rem;
  border-top:1px solid var(--ink-line);
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:1.2rem 2rem;
}
.proj-close__copy{margin:0;font-size:1rem;color:var(--muted);max-width:52ch;}
.proj-close__copy b{
  display:block;
  font-family:var(--font-serif);font-size:1.3rem;font-weight:700;color:var(--ink);
  margin-bottom:.2rem;
}

/* ------------------------------------------------- 18.8 REDUCED MOTION */
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .section--projects .proj-media img,
  .section--projects .proj-media::after,
  .proj-hover,.proj-hover span,
  body.bef-v2 a.head-row-action--ul::after{transition:none;}
  body.bef-v2 .section--projects a.proj-link:hover .proj-media img{transform:none;}
  .proj-hover{transform:none;}
  body.bef-v2 .section--projects a.proj-link:hover .proj-hover span{transform:none;}
  body.bef-v2 a.head-row-action--ul:hover::after{transform:scaleX(1);}
}

/* --------------------------------------------------- 18.9 RESPONSIVE */
@media (max-width:1100px){
  body.bef-v2 .section--projects .proj-stagger{gap:1.4rem;}
  body.bef-v2 .section--projects .proj-index{font-size:2.2rem;}
}

/* Tablet: two columns. The featured project takes the full width so it keeps
   its status, and the two secondaries sit side by side beneath it. */
@media (max-width:900px){
  body.bef-v2 .section--projects .proj-stagger{grid-template-columns:repeat(2,1fr);gap:1.6rem;}
  body.bef-v2 .section--projects .proj-item--tall {grid-column:1 / -1;}
  body.bef-v2 .section--projects .proj-item--short{grid-column:span 1;}
  body.bef-v2 .section--projects .proj-item--mid  {grid-column:span 1;}
  body.bef-v2 .section--projects .proj-item--tall  .proj-media{aspect-ratio:16/10;}
  body.bef-v2 .section--projects .proj-item--short .proj-media{aspect-ratio:4/3;margin-top:0;}
  body.bef-v2 .section--projects .proj-item--mid   .proj-media{aspect-ratio:4/3;margin-top:0;}
  body.bef-v2 .section--projects .proj-item--short .proj-index,
  body.bef-v2 .section--projects .proj-item--mid   .proj-index{top:0;}
  .proj-close{margin-top:2.8rem;}
}

/* Mobile: one column, photographs stay large, and because hover cannot be
   relied on the "View Fence Type" flag is shown permanently instead. */
@media (max-width:600px){
  body.bef-v2 .section--projects .proj-stagger{grid-template-columns:1fr;gap:2.2rem;}
  body.bef-v2 .section--projects .proj-item--tall,
  body.bef-v2 .section--projects .proj-item--short,
  body.bef-v2 .section--projects .proj-item--mid{grid-column:1 / -1;}
  body.bef-v2 .section--projects .proj-item--tall .proj-media,
  body.bef-v2 .section--projects .proj-item--short .proj-media,
  body.bef-v2 .section--projects .proj-item--mid .proj-media{aspect-ratio:4/3;}
  body.bef-v2 .section--projects .proj-item .proj-media,
  body.bef-v2 .section--projects .proj-caption{margin-left:1.2rem;}
  body.bef-v2 .section--projects .proj-index{font-size:2rem;}
  .section--projects .proj-media::after{opacity:1;}
  .proj-hover{opacity:1;transform:none;}
  .proj-title{font-size:1.08rem;}
  .proj-services{margin:2rem 0 2.4rem;}
  .proj-services ul{gap:.5rem 1rem;}
  .proj-services li + li::before{margin-right:1rem;}
  .proj-close{gap:1.1rem;}
  .proj-close .btn{width:100%;justify-content:center;}
}

/* ==========================================================================
   LAYER 19 - "Explore Our Fencing Options" tabbed portfolio, the
   Aluminum vs Wrought Iron comparison and the Louisiana trust band.
   2026-09-11, built to the supplied mockup.

   These three replace the six product cards that stood in section 3.

   THE CAPTION IS A BAND, NOT AN OVERLAY - same decision as LAYER 17 and the
   same reason: a caption floating over the foot of a photograph covers the
   fence in about half of these images.

   SPECIFICITY: the tabs are <button>, the tiles and cards are <a>, and
   body.bef-v2 a{color:var(--accent-d)} plus body.bef-v2 img{height:auto}
   outrank plain class selectors. Everything colour- or size-critical below is
   scoped to body.bef-v2 for that reason. See note 4 in SESSION-NOTES.md.
   ========================================================================== */

.section--options{overflow:hidden;}
.section--options .section-head--left{margin-bottom:2.2rem;}
.section--options .lead{max-width:62ch;}

/* ------------------------------------------------------ 19.1 CONTROLS */
.opt-controls{
  display:flex;flex-wrap:wrap;align-items:center;
  gap:1rem 1.8rem;margin-bottom:1.8rem;
}
.opt-materials{
  display:inline-flex;align-items:center;gap:.3rem;
  padding:.34rem;border-radius:999px;
  background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.12);
}
body.bef-v2 .opt-material{
  appearance:none;border:0;cursor:pointer;
  display:inline-flex;align-items:center;gap:.55rem;
  padding:.66rem 1.25rem;border-radius:999px;
  background:transparent;color:rgba(244,247,252,.72);
  font-size:.9rem;font-weight:700;
  transition:background-color .3s ease,color .3s ease;
}
body.bef-v2 .opt-material:hover{color:#fff;}
body.bef-v2 .opt-material.is-active{background:var(--accent);color:var(--ink);}
body.bef-v2 .opt-material:focus-visible{outline:2px solid var(--accent-l);outline-offset:3px;}
.opt-material__icon{display:flex;}

/* The category row is rebuilt per material, so only the categories that
   material actually has are ever offered. */
.opt-cats{display:flex;position:relative;padding-left:1.8rem;}
.opt-cats::before{
  content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:1px;height:26px;background:rgba(255,255,255,.18);
}
.opt-cats__set{display:flex;flex-wrap:wrap;gap:.3rem 1.5rem;}
/* display:flex above outranks the browser's own [hidden] rule, so the
   inactive material's category row kept rendering next to the active
   one. Same trap as the thumbnails and note 4. */
.opt-cats__set[hidden]{display:none;}
body.bef-v2 .opt-cat{
  appearance:none;border:0;background:none;cursor:pointer;
  padding:.4rem 0 .5rem;
  font-size:.86rem;font-weight:600;
  color:rgba(244,247,252,.62);
  border-bottom:2px solid transparent;
  transition:color .3s ease,border-color .3s ease;
}
body.bef-v2 .opt-cat:hover{color:#fff;}
body.bef-v2 .opt-cat.is-active{color:#fff;border-bottom-color:var(--accent);}
body.bef-v2 .opt-cat:focus-visible{outline:2px solid var(--accent-l);outline-offset:3px;}

/* --------------------------------------------------------- 19.2 BODY */
.opt-body{
  display:grid;
  grid-template-columns:minmax(0,1fr) var(--opt-rail-w);
  gap:1.4rem;
  align-items:start;
}

.opt-stage{--opt-band-h:98px;position:relative;}
.opt-frame{
  position:relative;
  box-sizing:content-box;
  aspect-ratio:16/10;
  padding-bottom:var(--opt-band-h);
  border-radius:18px;
  overflow:hidden;
  background:#15151d;
  border:1px solid rgba(255,255,255,.14);
  box-shadow:0 34px 70px -30px rgba(4,6,12,.85);
}
.opt-slide{
  position:absolute;inset:0;margin:0;
  display:grid;grid-template-rows:1fr var(--opt-band-h);
  opacity:0;visibility:hidden;
  transition:opacity 620ms ease-in-out, visibility 0s linear 620ms;
}
.opt-slide.is-active{
  opacity:1;visibility:visible;
  transition:opacity 620ms ease-in-out, visibility 0s;
}
.opt-shot{display:block;overflow:hidden;min-height:0;}
body.bef-v2 .opt-shot img{width:100%;height:100%;object-fit:cover;display:block;}

.opt-band{
  display:flex;align-items:center;gap:1.2rem;
  padding:0 1.5rem;
  background:#15151d;
  border-top:1px solid rgba(255,255,255,.1);
}
.opt-band__text{display:flex;flex-direction:column;gap:.28rem;min-width:0;}
.opt-band__eyebrow{
  font-size:.68rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--accent-l);
}
.opt-band__title{
  font-family:var(--font-serif);
  font-size:clamp(1.1rem,1.7vw,1.5rem);font-weight:700;color:#fff;line-height:1.15;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
body.bef-v2 a.opt-band__cta{
  margin-left:auto;flex-shrink:0;
  font-size:.86rem;font-weight:700;color:var(--accent-l);
  text-decoration:none;white-space:nowrap;
  display:inline-flex;align-items:center;gap:.4rem;
}
body.bef-v2 a.opt-band__cta:hover,
body.bef-v2 a.opt-band__cta:focus-visible{color:#fff;}
body.bef-v2 a.opt-band__cta span{transition:transform .25s ease;}
body.bef-v2 a.opt-band__cta:hover span{transform:translateX(4px);}

/* ------------------------------------------------------- 19.3 ARROWS */
body.bef-v2 .opt-arrow{
  position:absolute;top:calc((100% - var(--opt-band-h)) / 2);
  transform:translateY(-50%);
  z-index:4;
  appearance:none;cursor:pointer;
  width:42px;height:42px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:rgba(20,20,28,.78);
  border:1px solid rgba(255,255,255,.2);
  color:#fff;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  transition:background-color .3s ease,border-color .3s ease;
}
body.bef-v2 .opt-arrow:hover{background:var(--accent);border-color:var(--accent);color:var(--ink);}
body.bef-v2 .opt-arrow:focus-visible{outline:2px solid var(--accent-l);outline-offset:3px;}
.opt-arrow--prev{left:-14px;}
.opt-arrow--next{right:-14px;}

.opt-counter{
  margin:.9rem 0 0;text-align:center;
  font-family:var(--font-mono,inherit);
  font-size:.76rem;font-weight:700;letter-spacing:.1em;
  color:rgba(244,247,252,.5);
}
.opt-counter b{color:var(--accent);}

/* --------------------------------------------------- 19.4 THUMB RAIL */
/* The rail is capped at four thumbnails and scrolls past that, so a material
   with six categories does not make the rail 100px taller than the stage it
   is meant to sit beside. --opt-rail-w drives BOTH the grid column and that
   cap, so the two can never drift apart. */
.opt-body{--opt-rail-w:200px;}
.opt-rail{
  display:grid;gap:.8rem;
  grid-auto-rows:max-content;
  align-content:start;
  max-height:calc(var(--opt-rail-w) * 0.625 * 4 + 0.8rem * 3);
  overflow-y:auto;
  scrollbar-width:thin;
  scrollbar-color:rgba(255,255,255,.28) transparent;
}
body.bef-v2 .opt-thumb{
  appearance:none;cursor:pointer;padding:0;
  display:block;width:100%;aspect-ratio:16/10;
  border-radius:12px;overflow:hidden;
  border:2px solid transparent;
  background:#15151d;
  opacity:.62;
  transition:opacity .3s ease,border-color .3s ease;
}
body.bef-v2 .opt-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
body.bef-v2 .opt-thumb:hover{opacity:1;}
body.bef-v2 .opt-thumb.is-active{opacity:1;border-color:var(--accent);}
body.bef-v2 .opt-thumb:focus-visible{outline:2px solid var(--accent-l);outline-offset:3px;}
body.bef-v2 .opt-thumb[hidden]{display:none;}

/* ---------------------------------------------------- 19.5 COMPARISON */
.section--compare{background:var(--base-d);}
.cmp-grid{
  display:grid;grid-template-columns:minmax(0,0.85fr) minmax(0,1.15fr);
  gap:3rem;align-items:center;
}
.cmp-copy .lead{max-width:44ch;}
.cmp-copy .btn{margin-top:1.6rem;}
.cmp-cards{
  display:grid;grid-template-columns:1fr 1fr;gap:1.4rem;
  margin:0;padding:0;list-style:none;
}
body.bef-v2 a.cmp-card__link{
  display:flex;flex-direction:column;height:100%;
  text-decoration:none;color:inherit;
  background:var(--white);
  border:1px solid var(--ink-line);
  border-radius:14px;overflow:hidden;
  box-shadow:0 20px 44px -34px rgba(34,34,46,.6);
  transition:transform .35s cubic-bezier(.22,.61,.24,1),box-shadow .35s ease;
}
body.bef-v2 a.cmp-card__link:hover{transform:translateY(-4px);box-shadow:0 28px 56px -32px rgba(34,34,46,.66);}
body.bef-v2 a.cmp-card__link:focus-visible{outline:3px solid var(--accent-d);outline-offset:4px;}
.cmp-card__shot{display:block;aspect-ratio:16/10;overflow:hidden;background:var(--base-dd);}
body.bef-v2 .cmp-card__shot img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s cubic-bezier(.22,.61,.24,1);}
body.bef-v2 a.cmp-card__link:hover .cmp-card__shot img{transform:scale(1.04);}
.cmp-card__body{display:block;padding:1.25rem 1.35rem 1.5rem;}
.cmp-card__head{display:flex;align-items:center;gap:.7rem;margin-bottom:.9rem;}
.cmp-card__icon{color:var(--accent-d);display:flex;flex-shrink:0;}
.cmp-card__head h3{margin:0;font-size:1.14rem;line-height:1.2;}
.cmp-list{display:grid;gap:.5rem;}
.cmp-list__i{
  display:flex;align-items:flex-start;gap:.55rem;
  font-size:.92rem;color:var(--muted);line-height:1.4;
}
.cmp-list__i::before{
  content:"\2713";color:var(--accent-d);font-weight:800;
  font-size:.86rem;line-height:1.5;flex-shrink:0;
}

/* --------------------------------------------------- 19.6 TRUST BAND */
/* padding-block alone lost to the base .section rule, so both sides are set
   explicitly. Measured before and after: the band was 427px tall with about
   140px of it empty underneath. */
body.bef-v2 .section--trustband{padding-top:3.2rem;padding-bottom:3.2rem;}
.tband{
  display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,2fr);
  gap:2rem 2.6rem;align-items:center;
}
.tband__head{position:relative;}
/* Capped so "Built for Louisiana Properties" sets on two lines, not three. */
.tband__head h2{margin:0;font-size:clamp(1.35rem,2vw,1.8rem);}
.tband__head .eyebrow{margin-bottom:.5rem;}
.tband__list{
  display:grid;grid-template-columns:repeat(5,1fr);
  gap:1.2rem;margin:0;padding:0 0 0 3rem;list-style:none;
  position:relative;
}
.tband__list::before{
  content:"";position:absolute;left:0;top:0;bottom:0;width:1px;
  background:rgba(255,255,255,.16);
}
.tband__list li{
  display:flex;align-items:flex-start;gap:.6rem;
  font-size:.92rem;line-height:1.35;color:#E8EAEE;
}
.tband__mark{color:var(--accent);display:flex;flex-shrink:0;margin-top:.1rem;}

/* ------------------------------------------------- 19.7 REDUCED MOTION */
@media (prefers-reduced-motion:reduce){
  .opt-slide,.opt-slide.is-active,
  body.bef-v2 .opt-thumb,
  body.bef-v2 a.cmp-card__link,
  body.bef-v2 .cmp-card__shot img,
  body.bef-v2 a.opt-band__cta span{transition:none;}
  body.bef-v2 a.cmp-card__link:hover{transform:none;}
  body.bef-v2 a.cmp-card__link:hover .cmp-card__shot img{transform:none;}
  body.bef-v2 a.opt-band__cta:hover span{transform:none;}
}

/* ---------------------------------------------------- 19.8 RESPONSIVE */
@media (max-width:1100px){
  .opt-body{--opt-rail-w:160px;}
  .cmp-grid{grid-template-columns:1fr;gap:2.2rem;}
  .cmp-copy .lead{max-width:60ch;}
  .tband{grid-template-columns:1fr;gap:1.6rem;}
  .tband__list{padding-left:0;grid-template-columns:repeat(3,1fr);gap:1.1rem 1.6rem;}
  .tband__list::before{display:none;}
}

/* The thumbnail rail cannot survive a phone as a column, so below 900px it
   becomes a horizontal strip under the stage. */
@media (max-width:900px){
  .opt-body{grid-template-columns:1fr;gap:1.1rem;}
  .opt-rail{
    display:flex;gap:.7rem;
    max-height:none;
    overflow-x:auto;overflow-y:hidden;padding-bottom:.4rem;
    scrollbar-width:thin;
  }
  body.bef-v2 .opt-thumb{width:120px;flex:0 0 120px;}
  .opt-arrow--prev{left:8px;}
  .opt-arrow--next{right:8px;}
}

@media (max-width:760px){
  .opt-controls{gap:.9rem 1rem;}
  .opt-cats{padding-left:0;width:100%;}
  .opt-cats::before{display:none;}
  .opt-cats__set{gap:.3rem 1.2rem;}
  .cmp-cards{grid-template-columns:1fr;}
  .tband__list{grid-template-columns:repeat(2,1fr);}
}

@media (max-width:600px){
  .opt-stage{--opt-band-h:118px;}
  .opt-frame{aspect-ratio:4/3;border-radius:14px;}
  .opt-band{flex-wrap:wrap;align-content:center;gap:.5rem .8rem;padding:.85rem 1rem;}
  body.bef-v2 a.opt-band__cta{margin-left:0;flex-basis:100%;font-size:.8rem;}
  body.bef-v2 .opt-material{padding:.58rem 1rem;font-size:.84rem;}
  body.bef-v2 .opt-thumb{width:96px;flex:0 0 96px;}
  .tband__list{grid-template-columns:1fr;}
  .section--trustband{padding-block:2.4rem;}
}

/* ==========================================================================
   LAYER 20 - the Free Estimates section, 2026-09-11.

   The complaint was dead space on the left, and the instruction was not to
   fill it with more words. So the left column gained a numbered process, a
   cropped ironwork photograph already in the theme, and one quiet line of
   service area - and the form stays the loudest thing on the screen.

   NOTHING IS INVENTED. The three steps are the client's own How It Works
   copy and the FAQ's "walk your property line ... clear, itemized pricing".
   The phone number is the one published site-wide. No certifications, years,
   counts or warranties appear, because the site publishes none.

   ONE SUBTLE BACKGROUND ELEMENT, as briefed: a picket rhythm drawn with a
   repeating-linear-gradient at 3.5% opacity behind the section. No image, no
   extra request, and it disappears entirely under reduced-transparency
   because it is drawn on a pseudo-element the theme can drop.

   SPECIFICITY: body.bef-v2 a{...} and body.bef-v2 img{height:auto} outrank
   plain class selectors, so the call link and the photograph are scoped.
   ========================================================================== */

.section--estimate{position:relative;overflow:hidden;}
/* The picket rhythm. Deliberately at the threshold of noticing. */
.section--estimate::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:repeating-linear-gradient(
    90deg,
    rgba(34,34,46,.035) 0 2px,
    transparent 2px 46px
  );
  mask-image:linear-gradient(180deg,transparent 0%,#000 22%,#000 72%,transparent 100%);
  -webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 22%,#000 72%,transparent 100%);
}
.section--estimate .estimate-split{position:relative;z-index:1;}

/* ---------------------------------------------------- 20.1 THE PROCESS */
.estep{
  margin:2rem 0 0;padding:0;list-style:none;
  display:grid;gap:0;
  position:relative;
}
.estep__i{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  gap:1rem;
  padding:0 0 1.35rem;
  position:relative;
}
.estep__i:last-child{padding-bottom:0;}
/* The thin connecting line, drawn between the numerals rather than under
   the whole row so it reads as a sequence and not a border. */
.estep__i:not(:last-child)::before{
  content:"";position:absolute;
  left:15px;top:2.1rem;bottom:.35rem;
  width:1px;background:var(--ink-line);
}
.estep__n{
  width:31px;height:31px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  border-radius:50%;
  border:1px solid var(--accent);
  background:var(--white);
  color:var(--accent-d);
  font-family:var(--font-serif);font-size:.82rem;font-weight:700;line-height:1;
  position:relative;z-index:1;
  transition:background-color .3s ease,color .3s ease;
}
.estep__i:hover .estep__n{background:var(--accent);color:var(--ink);}
.estep__b{display:block;padding-top:.28rem;}
.estep__t{
  display:block;font-weight:700;color:var(--ink);font-size:.98rem;line-height:1.3;
}
.estep__d{
  display:block;margin-top:.2rem;
  font-size:.88rem;color:var(--muted);line-height:1.5;
}

/* ------------------------------------------------------ 20.2 THE PHOTO */
.estep-shot{
  position:relative;margin:2.1rem 0 0;
  border-radius:14px;overflow:hidden;
  max-width:420px;
  box-shadow:0 22px 46px -30px rgba(34,34,46,.62);
}
.estep-shot::after{
  content:"";position:absolute;inset:0;
  border:1px solid rgba(240,169,82,.55);
  border-radius:14px;pointer-events:none;
}
body.bef-v2 .estep-shot img{
  display:block;width:100%;height:190px;object-fit:cover;
  transition:transform .5s cubic-bezier(.22,.61,.24,1);
}
.estep-shot:hover img{transform:scale(1.03);}
.estep-shot figcaption{
  position:absolute;left:0;bottom:0;
  padding:.5rem .9rem;
  background:rgba(20,20,28,.82);
  border-top-right-radius:10px;
  color:#fff;
  font-size:.68rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
}

/* -------------------------------------------------- 20.3 TRUST + AREA */
body.bef-v2 .estep-meta{
  display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.4rem;
  margin:1.5rem 0 0;
}
.estep-meta__types{
  font-size:.72rem;font-weight:700;letter-spacing:.13em;text-transform:uppercase;
  color:var(--ink);
}
.estep-meta__types i{font-style:normal;color:var(--accent);margin:0 .3rem;}
.estep-meta__area{
  display:inline-flex;align-items:center;gap:.4rem;
  font-size:.78rem;color:var(--muted);
}
.estep-meta__area svg{color:var(--accent-d);flex-shrink:0;}

/* --------------------------------------------------- 20.4 THE FORM CARD */
.estimate-formcol .estimate-form-wrap{
  border-radius:16px;
  border-top:3px solid var(--accent);
}
/* Inputs measured at 43px, which is under the 44px touch minimum. */
body.bef-v2 .estimate-form-wrap input[type="text"],
body.bef-v2 .estimate-form-wrap input[type="tel"],
body.bef-v2 .estimate-form-wrap input[type="email"],
body.bef-v2 .estimate-form-wrap select{
  min-height:50px;
}
body.bef-v2 .estimate-form-wrap .ef-hp input{min-height:0;}
.ef-group{border:0;margin:0 0 1.35rem;padding:0;min-width:0;}
.ef-group:last-of-type{margin-bottom:1.55rem;}
.ef-legend{
  display:flex;align-items:center;gap:.55rem;
  padding:0 0 .85rem;
  font-size:.68rem;font-weight:700;letter-spacing:.15em;text-transform:uppercase;
  color:var(--muted);
}
.ef-legend span{
  font-family:var(--font-mono,inherit);
  color:var(--accent-d);
  letter-spacing:.06em;
}

body.bef-v2 .ef-submit{
  display:inline-flex;align-items:center;justify-content:center;gap:.55rem;
  min-height:56px;
}
body.bef-v2 .ef-submit span{transition:transform .28s ease;}
body.bef-v2 .ef-submit:hover span{transform:translateX(4px);}

.ef-assure{
  display:flex;flex-wrap:wrap;justify-content:center;
  gap:.3rem .9rem;
  margin:.95rem 0 0;padding:0;list-style:none;
}
.ef-assure li{
  display:inline-flex;align-items:center;
  font-size:.66rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted);
}
.ef-assure li + li::before{
  content:"";width:3px;height:3px;border-radius:50%;
  background:var(--accent);margin-right:.9rem;flex-shrink:0;
}

.ef-call{
  margin:1.05rem 0 0;padding-top:1rem;
  border-top:1px solid var(--ink-line);
  text-align:center;
  font-size:.9rem;color:var(--muted);
}
body.bef-v2 a.ef-call > a,
body.bef-v2 .ef-call a{
  color:var(--ink);text-decoration:none;font-weight:600;
  border-bottom:1.5px solid var(--accent);
  padding-bottom:1px;margin-left:.35rem;
  transition:color .3s ease,border-color .3s ease;
}
body.bef-v2 .ef-call a:hover,
body.bef-v2 .ef-call a:focus-visible{color:var(--accent-dd);border-bottom-color:var(--accent-dd);}
.ef-call b{font-weight:700;}

/* ------------------------------------------------- 20.5 REDUCED MOTION */
@media (prefers-reduced-motion:reduce){
  .estep__n,
  body.bef-v2 .estep-shot img,
  body.bef-v2 .ef-submit span,
  body.bef-v2 .ef-call a{transition:none;}
  .estep-shot:hover img{transform:none;}
  body.bef-v2 .ef-submit:hover span{transform:none;}
}

/* ---------------------------------------------------- 20.6 RESPONSIVE */
@media (max-width:900px){
  .estep-shot{max-width:none;}
  body.bef-v2 .estep-shot img{height:220px;}
}

@media (max-width:600px){
  .estep{margin-top:1.6rem;}
  .estep__i{gap:.8rem;padding-bottom:1.15rem;}
  .estep__d{font-size:.85rem;}
  .estep-shot{margin-top:1.7rem;}
  body.bef-v2 .estep-shot img{height:170px;}
  .ef-assure{justify-content:flex-start;}
  .section--estimate::before{display:none;}
}

/* ==========================================================================
   LAYER 21 - hero points + side estimate form, 2026-09-11.

   Two requests, both ported from live bigeasyfencesupply.com:

   A. HERO POINTS. The four check-marked lines from the live homepage banner,
      verbatim, with their emphasised runs in amber. Markup is in
      front-page.php between .hero-sub and .hero-actions.

   B. SIDE FORM. Live pins a "Get FREE Estimates Today!" tab to the right
      edge, reading bottom-to-top, amber with dark text, blue on hover, and
      hides it on phones. Same here. The tab opens a right-hand drawer that
      holds the site's own estimate form (markup in footer-v2.php, behaviour
      in main-v2.js). Hidden at <=640px, where .mobile-callbar already
      carries "Free Estimate".

   STACKING. Tab z-index 79: under the header (80), the floating tools (80)
   and the off-canvas nav (100). Drawer z-index 120: above everything,
   because it is modal.

   CONTRAST (token pairs already measured in the :root notes): ink on
   --accent 5.60:1 for the tab; white on --brand-blue-d is the AA pairing
   for the hover. Hero emphasis is --accent-l on the dark scrim, the same
   pairing the hero eyebrow already uses.

   SPECIFICITY: body.bef-v2 a{...} outranks a bare class, so the tab's
   colours are scoped. [hidden] is restated under body.bef-v2 because a
   display rule would otherwise beat it (see LAYER 19 notes).
   ========================================================================== */

/* ---------------------------------------------------- 21.1 HERO POINTS */
body.bef-v2 .hero-points{
  list-style:none;
  margin:1.5rem 0 0;padding:0;
  display:grid;gap:.7rem;
  max-width:38rem;
}
body.bef-v2 .hero-points li{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  align-items:start;gap:.7rem;
  margin:0;
  font-size:1.02rem;line-height:1.45;font-weight:500;
  color:#F4F7FC;
}
.hero-points__ico{color:var(--accent);flex-shrink:0;margin-top:.02rem;}
body.bef-v2 .hero-points strong{color:var(--accent-l);font-weight:700;}

/* ------------------------------------------------------ 21.2 SIDE TAB */
body.bef-v2 a.bef-sidetab{
  position:fixed;z-index:79;
  right:0;top:50%;
  /* translate is applied in page space, before rotate; a transform:
     translateY() here would run in the rotated frame and push the tab DOWN. */
  translate:0 -50%;
  writing-mode:vertical-rl;
  rotate:180deg;
  display:flex;align-items:center;justify-content:center;
  padding:1.2rem .95rem; /* 44px wide: the touch-target minimum */
  /* Local right corners; the 180deg turn puts them on the visible left. */
  border-radius:0 10px 10px 0;
  background:var(--accent);color:var(--ink);
  font-family:var(--font-body);
  font-size:.9rem;font-weight:800;letter-spacing:.02em;line-height:1;
  white-space:nowrap;text-decoration:none;
  box-shadow:0 10px 26px -10px rgba(23,27,36,.55);
  transition:background-color .2s ease,color .2s ease,padding .2s ease;
}
body.bef-v2 a.bef-sidetab:hover{background:var(--brand-blue-d);color:#fff;padding-right:1.2rem;}
body.bef-v2 a.bef-sidetab:focus-visible{
  outline:3px solid var(--brand-blue-d);outline-offset:2px;
  background:var(--brand-blue-d);color:#fff;
}
body.bef-v2 a.bef-sidetab[aria-expanded="true"]{background:var(--ink);color:#fff;}
body.nav-open a.bef-sidetab{display:none;}

/* --------------------------------------------------------- 21.3 DRAWER */
body.bef-v2 .bef-drawer{position:fixed;inset:0;z-index:120;}
body.bef-v2 .bef-drawer[hidden]{display:none;}
.bef-drawer__scrim{
  position:absolute;inset:0;
  background:rgba(20,20,28,.58);
  opacity:0;transition:opacity .3s ease;
}
.bef-drawer__panel{
  position:absolute;top:0;right:0;bottom:0;
  width:min(460px,100%);
  overflow-y:auto;overscroll-behavior:contain;
  background:var(--base-d);
  box-shadow:-24px 0 60px -30px rgba(6,8,16,.7);
  transform:translateX(100%);
  transition:transform .34s cubic-bezier(.22,.61,.24,1);
  outline:0;
}
.bef-drawer.is-open .bef-drawer__scrim{opacity:1;}
.bef-drawer.is-open .bef-drawer__panel{transform:none;}

body.bef-v2 .bef-drawer .estimate-form-wrap{
  min-height:100%;
  border-radius:0;
  border-top:4px solid var(--accent);
  box-shadow:none;
  padding:2.1rem 1.6rem 1.6rem;
}
/* Room for the close button beside the title. */
body.bef-v2 .bef-drawer .ef-title{padding-right:2.6rem;}
/* At the drawer's 460px the three reassurances wrapped and stranded a
   separator dot at the start of line two. Tightened to sit on one line. */
body.bef-v2 .bef-drawer .ef-assure{gap:.3rem .6rem;}
body.bef-v2 .bef-drawer .ef-assure li{letter-spacing:.07em;}
body.bef-v2 .bef-drawer .ef-assure li + li::before{margin-right:.6rem;}

body.bef-v2 .bef-drawer__close{
  position:absolute;top:1.2rem;right:1.1rem;z-index:2;
  width:44px;height:44px;
  display:inline-flex;align-items:center;justify-content:center;
  border:0;border-radius:50%;cursor:pointer;
  background:var(--base-d);color:var(--ink);
  transition:background-color .2s ease;
}
body.bef-v2 .bef-drawer__close:hover{background:var(--base-dd);}
body.bef-v2 .bef-drawer__close:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:2px;}

/* The page behind a modal must not scroll. */
body.bef-drawer-open{overflow:hidden;}

/* ------------------------------------------------- 21.4 REDUCED MOTION */
@media (prefers-reduced-motion:reduce){
  body.bef-v2 a.bef-sidetab,
  .bef-drawer__scrim,
  .bef-drawer__panel,
  body.bef-v2 .bef-drawer__close{transition:none;}
}

/* ---------------------------------------------------- 21.5 RESPONSIVE */
@media (max-width:640px){
  body.bef-v2 a.bef-sidetab{display:none;}
  body.bef-v2 .hero-points{gap:.6rem;margin-top:1.3rem;}
  body.bef-v2 .hero-points li{font-size:.95rem;gap:.6rem;}
  .hero-points__ico{width:20px;height:20px;}
  body.bef-v2 .bef-drawer .estimate-form-wrap{padding:1.7rem 1.1rem 1.3rem;}
}

/* ==========================================================================
   LAYER 22 - comparison table, promise band, How It Works timeline,
   2026-09-11.

   A. COMPARISON TABLE (template-parts/fencing-compare.php). The table
      carries its look in inline styles, per the house table system, so it
      survives being pasted into the Classic Editor. The rules below only do
      what inline styles cannot: round the corners, drop the last divider and
      restack the table as cards on phones. !important is used ONLY where an
      inline style has to be overridden, and only inside those jobs.

   B. PROMISE BAND replaces the "Built for Louisiana Properties" strip. Three
      offers live publishes on every page, on the existing dusk band.

   C. HOW IT WORKS. Sticky heading and CTA on the left, a numbered timeline on
      the right. Each step already gets .is-visible from the theme's reveal
      observer, so the numeral fills amber as the reader reaches it with no
      new script, and it is simply amber-outlined if the observer never runs.

   SPECIFICITY: every rule that touches an <a>, an <img> or a heading is
   scoped to body.bef-v2 (the trap documented in notes 4 / LAYER 17).
   ========================================================================== */

.screen-reader-text{
  position:absolute !important;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;
}

/* ------------------------------------------------ 22.1 COMPARISON TABLE */
.cmp-table{margin-top:clamp(2.6rem,5vw,3.6rem);}
/* border-radius does not clip a border-collapse:collapse table, so the
   corners are only round in separate mode. Cells draw bottom borders only,
   so nothing doubles up. */
body.bef-v2 .cmp-table__t{
  border-collapse:separate !important;border-spacing:0;
  box-shadow:0 26px 54px -34px rgba(34,34,46,.45);
}
body.bef-v2 .cmp-table__t thead th:first-child{border-top-left-radius:11px;}
body.bef-v2 .cmp-table__t thead th:last-child{border-top-right-radius:11px;}
body.bef-v2 .cmp-table__t tbody tr:last-child > *{border-bottom:0 !important;}
body.bef-v2 .cmp-table__t tbody tr:last-child > th{border-bottom-left-radius:11px;}
body.bef-v2 .cmp-table__t tbody tr:last-child > td:last-child{border-bottom-right-radius:11px;}
body.bef-v2 .cmp-table__t tbody tr{transition:background-color .2s ease;}
body.bef-v2 .cmp-table__t tbody tr:hover td{background:#FAFCFE;}

.cmp-table__foot{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:.6rem 1.6rem;margin-top:1.1rem;padding:0 .2rem;
}
.cmp-table__foot p{margin:0;font-size:.92rem;color:var(--muted);}
body.bef-v2 a.cmp-table__more{
  display:inline-flex;align-items:center;gap:.45rem;
  font-weight:700;font-size:.92rem;color:var(--ink);text-decoration:none;
  border-bottom:1.5px solid var(--accent);padding-bottom:2px;
  transition:color .25s ease,border-color .25s ease;
}
body.bef-v2 a.cmp-table__more:hover,
body.bef-v2 a.cmp-table__more:focus-visible{color:var(--accent-dd);border-bottom-color:var(--accent-dd);}
body.bef-v2 a.cmp-table__more span{transition:transform .25s ease;}
body.bef-v2 a.cmp-table__more:hover span{transform:translateX(4px);}

/* Phones: each row becomes a card - label on top, then Aluminum, then
   Wrought Iron, each introduced by its column name from data-label. */
@media (max-width:720px){
  body.bef-v2 .cmp-table__t,
  body.bef-v2 .cmp-table__t tbody,
  body.bef-v2 .cmp-table__t tr,
  body.bef-v2 .cmp-table__t th,
  body.bef-v2 .cmp-table__t td{display:block;width:auto !important;}
  body.bef-v2 .cmp-table__t thead{
    position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);
  }
  body.bef-v2 .cmp-table__t tbody tr{border-bottom:1px solid #E4EAF3;}
  body.bef-v2 .cmp-table__t tbody tr:last-child{border-bottom:0;}
  body.bef-v2 .cmp-table__t tbody th{
    padding:13px 16px !important;border-bottom:0 !important;border-radius:0 !important;
  }
  body.bef-v2 .cmp-table__t tbody tr:first-child th{border-radius:11px 11px 0 0 !important;}
  body.bef-v2 .cmp-table__t td{padding:12px 16px 4px !important;border-bottom:0 !important;border-radius:0 !important;}
  body.bef-v2 .cmp-table__t td:last-child{padding-bottom:16px !important;}
  body.bef-v2 .cmp-table__t td::before{
    content:attr(data-label);display:block;margin-bottom:4px;
    font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#55596A;
  }
  body.bef-v2 .cmp-table__t tbody tr:hover td{background:transparent;}
  .cmp-table__foot{flex-direction:column;align-items:flex-start;}
}

/* --------------------------------------------------- 22.2 PROMISE BAND */
body.bef-v2 .section--promise{padding-top:clamp(3.6rem,6vw,5rem);padding-bottom:clamp(3.6rem,6vw,5rem);}
.promise{
  display:grid;grid-template-columns:minmax(0,4fr) minmax(0,8fr);
  gap:clamp(2rem,4vw,3.6rem);align-items:center;
}
.promise__head h2{margin:0;font-size:clamp(1.7rem,2.6vw,2.3rem);line-height:1.15;}
.promise__head .eyebrow{margin-bottom:.6rem;}
.promise__cta{display:flex;flex-wrap:wrap;align-items:center;gap:.8rem 1.2rem;margin-top:1.6rem;}
body.bef-v2 .section--promise a.promise__call{
  color:rgba(244,247,252,.78);text-decoration:none;font-size:.92rem;
}
body.bef-v2 .section--promise a.promise__call b{color:#fff;font-weight:700;}
body.bef-v2 .section--promise a.promise__call:hover b{color:var(--accent-l);}

.promise__list{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;
}
.promise__item{
  position:relative;margin:0;
  padding:1.6rem 1.35rem 1.5rem;
  border-radius:16px;
  background:linear-gradient(180deg,rgba(255,255,255,.055),rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.1);
  transition:border-color .3s ease,transform .3s ease;
}
.promise__item::before{
  content:"";position:absolute;left:1.35rem;right:1.35rem;top:-1px;height:2px;
  background:linear-gradient(90deg,var(--accent),rgba(240,169,82,0));
  border-radius:2px;
}
.promise__item:hover{border-color:rgba(240,169,82,.45);transform:translateY(-3px);}
.promise__icon{
  width:52px;height:52px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  color:var(--accent);
  background:rgba(240,169,82,.09);
  border:1px solid rgba(240,169,82,.45);
}
body.bef-v2 .section--promise .promise__title{
  margin:1rem 0 .45rem;font-size:1.1rem;line-height:1.3;color:#fff;
}
.promise__text{margin:0;font-size:.92rem;line-height:1.6;color:rgba(244,247,252,.76);}
body.bef-v2 .section--promise a.promise__link{
  display:inline-flex;align-items:center;gap:.4rem;margin-top:.85rem;
  font-size:.88rem;font-weight:700;color:var(--accent-l);text-decoration:none;
}
body.bef-v2 .section--promise a.promise__link:hover{color:#fff;}
body.bef-v2 .section--promise a.promise__link span{transition:transform .25s ease;}
body.bef-v2 .section--promise a.promise__link:hover span{transform:translateX(4px);}

@media (max-width:1100px){
  .promise{grid-template-columns:1fr;}
}
@media (max-width:820px){
  .promise__list{grid-template-columns:1fr;}
  .promise__item{
    display:grid;grid-template-columns:52px minmax(0,1fr);
    column-gap:1rem;align-items:start;
  }
  .promise__icon{grid-row:1 / span 3;}
  body.bef-v2 .section--promise .promise__title{margin-top:.15rem;}
  .promise__text,
  body.bef-v2 .section--promise a.promise__link{grid-column:2;}
  body.bef-v2 .section--promise a.promise__link{justify-self:start;}
}

/* -------------------------------------------------- 22.3 HOW IT WORKS */
body.bef-v2 .section--hiw{background:var(--base);}
.hiw{
  display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);
  gap:clamp(2.4rem,6vw,5.5rem);align-items:start;
}
.hiw__intro{position:sticky;top:7.5rem;}
.hiw__intro h2{margin:0;}
.hiw__intro h2 .hl{display:block;}
.hiw__intro .lead{margin:1.1rem 0 0;max-width:42ch;}
.hiw__cta{display:flex;flex-wrap:wrap;align-items:center;gap:.8rem 1.2rem;margin-top:1.8rem;}
body.bef-v2 a.hiw__call{color:var(--muted);text-decoration:none;font-size:.92rem;}
body.bef-v2 a.hiw__call b{color:var(--ink);font-weight:700;}
body.bef-v2 a.hiw__call:hover b{color:var(--accent-dd);}

.hiw__steps{list-style:none;margin:0;padding:0;position:relative;}
/* The thread joining the numerals, centred on the 56px column. */
.hiw__steps::before{
  content:"";position:absolute;left:27px;top:28px;bottom:28px;width:2px;
  background:linear-gradient(180deg,var(--accent) 0%,rgba(240,169,82,.55) 55%,var(--base-dd) 100%);
}
.hiw__step{
  position:relative;margin:0;
  display:grid;grid-template-columns:56px 104px minmax(0,1fr);
  gap:1.35rem;align-items:start;
  padding-bottom:2.3rem;
}
.hiw__step:last-child{padding-bottom:0;}
.hiw__num{
  position:relative;z-index:1;
  width:56px;height:56px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--white);border:2px solid var(--accent);color:var(--ink);
  /* Not the serif: Playfair draws old-style figures, so "01" read as "o1". */
  font-family:var(--font-display);font-size:1.02rem;font-weight:800;line-height:1;
  font-variant-numeric:lining-nums tabular-nums;letter-spacing:.02em;
  box-shadow:0 0 0 6px var(--base);
  transition:background-color .45s ease .15s,color .45s ease .15s;
}
.hiw__step.is-visible .hiw__num{background:var(--accent);color:var(--ink);}
.hiw__shot{
  display:block;width:104px;height:104px;border-radius:16px;overflow:hidden;
  box-shadow:0 18px 34px -22px rgba(34,34,46,.55);
}
body.bef-v2 .hiw__shot img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .6s cubic-bezier(.22,.61,.24,1);
}
.hiw__step:hover .hiw__shot img{transform:scale(1.06);}
.hiw__body{padding-top:.1rem;min-width:0;}
body.bef-v2 .hiw__label{
  margin:0 0 .2rem;font-size:.7rem;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:var(--accent-d);
}
body.bef-v2 .hiw__body h3{margin:0 0 .45rem;font-size:1.18rem;line-height:1.3;}
.hiw__body p:last-child{margin:0;font-size:.95rem;line-height:1.65;color:var(--muted);max-width:60ch;}

@media (prefers-reduced-motion:reduce){
  .hiw__num,
  body.bef-v2 .hiw__shot img,
  .promise__item,
  body.bef-v2 a.cmp-table__more span,
  body.bef-v2 .section--promise a.promise__link span{transition:none;}
  .hiw__step:hover .hiw__shot img,
  .promise__item:hover{transform:none;}
}

@media (max-width:1024px){
  .hiw{grid-template-columns:1fr;}
  .hiw__intro{position:static;}
  .hiw__intro .lead{max-width:60ch;}
}
@media (max-width:640px){
  .hiw__steps::before{left:21px;top:22px;bottom:22px;}
  .hiw__step{grid-template-columns:44px minmax(0,1fr);gap:.9rem 1rem;padding-bottom:2rem;}
  .hiw__num{width:44px;height:44px;font-size:.92rem;grid-row:1 / span 2;box-shadow:0 0 0 5px var(--base);}
  .hiw__shot{width:84px;height:84px;border-radius:14px;grid-column:2;}
  .hiw__body{grid-column:2;}
  body.bef-v2 .hiw__body h3{font-size:1.08rem;}
}

/* ==========================================================================
   LAYER 23 - testimonial carousel, FAQ buttons, service-area map, footer
   contact column, 2026-09-11.

   A. TESTIMONIALS became a scroll-snap carousel (.tcar). The cards keep the
      existing .quote look from layers 6/7; this layer only lays out the
      track and the controls. Controls start [hidden] and main-v2.js reveals
      them, so without JS the track is simply a swipeable row.
   B. FAQ FOOT: .faq-more-wrap measured margin-top:0 (a p reset outranked the
      LAYER 16 rule), so the buttons sat on the last divider. Both CTAs are
      now filled pills: blue Show More, amber See All Questions.
   C. SERVICE AREA: .areav - a plotted schematic map on a charcoal card, and
      the towns grouped into five areas as chips that light their dot.
   D. FOOTER: the Contact Info column (.fci) from live's footer, a quiet
      picket texture, and the bottom row kept clear of the chat launcher.

   SPECIFICITY: anchors, images, paragraphs and headings are scoped to
   body.bef-v2 (notes 4 / LAYER 17). [hidden] is restated wherever a display
   rule would beat it (LAYER 19).
   ========================================================================== */

/* ------------------------------------------------ 23.1 TESTIMONIAL CAROUSEL */
.tcar{--tcar-gap:1.5rem;--tcar-per:3;position:relative;}
.tcar__viewport{
  overflow-x:auto;overflow-y:hidden;
  scroll-snap-type:x mandatory;scroll-behavior:smooth;
  -webkit-overflow-scrolling:touch;scrollbar-width:none;
  /* room for the card shadows, pulled back so the track still aligns */
  padding:.6rem .4rem 1.6rem;margin:-.6rem -.4rem 0;
  /* Without this, snap aligns slides to the padding edge and the track
     starts 6px scrolled, which left Previous enabled on load. */
  scroll-padding-inline:.4rem;
  outline:0;
}
.tcar__viewport::-webkit-scrollbar{display:none;}
.tcar__viewport:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:4px;border-radius:12px;}
.tcar__track{
  list-style:none;margin:0;padding:0;
  display:flex;gap:var(--tcar-gap);
}
.tcar__slide{
  flex:0 0 calc((100% - (var(--tcar-per) - 1) * var(--tcar-gap)) / var(--tcar-per));
  scroll-snap-align:start;margin:0;display:flex;
}
body.bef-v2 .tcar__slide > .quote{width:100%;height:auto;margin:0;opacity:1;transform:none;}

body.bef-v2 .tcar__controls{
  display:flex;align-items:center;justify-content:center;gap:1.1rem;
  margin-top:1.2rem;
}
body.bef-v2 .tcar__controls[hidden]{display:none;}
body.bef-v2 .tcar__btn{
  appearance:none;cursor:pointer;
  width:48px;height:48px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--ink);color:#fff;border:0;
  box-shadow:0 12px 24px -14px rgba(34,34,46,.7);
  transition:background-color .2s ease,transform .2s ease,opacity .2s ease;
}
body.bef-v2 .tcar__btn:hover{background:var(--accent);color:var(--ink);transform:translateY(-2px);}
body.bef-v2 .tcar__btn:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:3px;}
body.bef-v2 .tcar__btn:disabled{opacity:.35;cursor:default;transform:none;background:var(--ink);color:#fff;}
.tcar__dots{list-style:none;margin:0;padding:0;display:flex;align-items:center;gap:.4rem;}
.tcar__dots li{display:flex;}
body.bef-v2 .tcar__dot{
  appearance:none;border:0;padding:0;cursor:pointer;
  width:10px;height:10px;border-radius:999px;
  background:rgba(34,34,46,.22);
  transition:width .25s ease,background-color .25s ease;
}
/* The visible dot is 10px; the pseudo-element widens the hit area to 24px. */
body.bef-v2 .tcar__dot{position:relative;}
body.bef-v2 .tcar__dot::after{content:"";position:absolute;inset:-7px;}
body.bef-v2 .tcar__dot:hover{background:rgba(34,34,46,.45);}
body.bef-v2 .tcar__dot.is-active{width:28px;background:var(--accent);}
body.bef-v2 .tcar__dot:focus-visible{outline:2px solid var(--brand-blue-d);outline-offset:4px;}
body.bef-v2 .tcar__count{
  margin:0;min-width:4.2rem;text-align:center;
  font-family:var(--font-mono);font-size:.8rem;font-weight:700;letter-spacing:.06em;
  color:var(--muted);
}
.tcar__count b{color:var(--ink);}

@media (max-width:1024px){ .tcar{--tcar-per:2;} }
@media (max-width:640px){
  .tcar{--tcar-gap:.9rem;}
  .tcar__slide{flex-basis:86%;}
  body.bef-v2 .tcar__dots{display:none;}
}
@media (prefers-reduced-motion:reduce){
  .tcar__viewport{scroll-behavior:auto;}
  body.bef-v2 .tcar__btn,body.bef-v2 .tcar__dot{transition:none;}
}

/* ------------------------------------------------------- 23.2 FAQ BUTTONS */
body.bef-v2 .faq-more-wrap{
  display:flex;flex-wrap:wrap;align-items:center;gap:.8rem 1rem;
  margin:1.8rem 0 0;padding:0;
}
body.bef-v2 .faq-more-wrap .btn{
  min-height:50px;padding:.8rem 1.5rem;
  display:inline-flex;align-items:center;justify-content:center;gap:.55rem;
  font-size:.9rem;font-weight:800;letter-spacing:.01em;text-transform:none;
  border-radius:999px;border:2px solid transparent;text-decoration:none;
  box-shadow:0 14px 26px -16px rgba(34,34,46,.6);
  transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease;
}
body.bef-v2 button.faq-more.btn-blue{background:var(--brand-blue-d);border-color:var(--brand-blue-d);color:#fff;}
body.bef-v2 button.faq-more.btn-blue:hover{background:var(--ink);border-color:var(--ink);color:#fff;transform:translateY(-2px);}
body.bef-v2 button.faq-more::after{
  content:"";width:8px;height:8px;margin:-4px 0 0 .15rem;
  border-right:2px solid currentColor;border-bottom:2px solid currentColor;
  transform:rotate(45deg);transition:transform .25s ease,margin .25s ease;
}
body.bef-v2 button.faq-more[aria-expanded="true"]::after{transform:rotate(-135deg);margin-top:4px;}
body.bef-v2 a.faq-all.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--ink);}
body.bef-v2 a.faq-all.btn-primary:hover{background:var(--accent-l);border-color:var(--accent-l);color:var(--ink);transform:translateY(-2px);}
body.bef-v2 a.faq-all span{transition:transform .25s ease;}
body.bef-v2 a.faq-all:hover span{transform:translateX(4px);}
body.bef-v2 .faq-more-wrap .btn:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:3px;}
@media (max-width:420px){
  body.bef-v2 .faq-more-wrap .btn{flex:1 1 100%;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .faq-more-wrap .btn,
  body.bef-v2 button.faq-more::after,
  body.bef-v2 a.faq-all span{transition:none;}
}

/* ------------------------------------------------------ 23.3 SERVICE AREA */
.areav{
  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);
  gap:clamp(1.6rem,4vw,3.4rem);align-items:center;
}
.areav__map{
  position:relative;margin:0;
  padding:1.2rem 1.2rem 1rem;
  border-radius:22px;
  background:radial-gradient(120% 90% at 30% 20%,#2E2E3D 0%,var(--ink) 60%);
  box-shadow:0 30px 60px -36px rgba(34,34,46,.75);
  color:#fff;
}
body.bef-v2 .areav__map svg{display:block;width:100%;height:auto;max-width:100%;}
.areav__lake{fill:rgba(0,122,195,.24);stroke:rgba(95,184,240,.45);stroke-width:1.5;}
.areav__river{fill:none;stroke:rgba(95,184,240,.7);stroke-width:4;stroke-linecap:round;}
.areav__causeway{fill:none;stroke:rgba(255,255,255,.28);stroke-width:1.5;stroke-dasharray:4 5;}
.areav__water{
  fill:rgba(170,215,245,.72);font-family:var(--font-body);font-size:11.5px;font-style:italic;
  letter-spacing:.04em;
}
.areav__dot{fill:var(--accent);transition:r .2s ease,fill .2s ease;}
.areav__halo{fill:rgba(240,169,82,.14);stroke:rgba(240,169,82,.45);stroke-width:1;transition:fill .2s ease;}
/* The five West Bank towns sit within a few pixels of each other at true
   scale, so their halos are smaller and fainter to keep the cluster legible. */
.areav__pt--quiet .areav__halo{fill:rgba(240,169,82,.1);stroke-opacity:.3;}
.areav__pt--hub .areav__halo{fill:rgba(240,169,82,.2);}
.areav__lbl{
  fill:#F4F7FC;font-family:var(--font-body);font-size:12.5px;font-weight:700;
  paint-order:stroke;stroke:var(--ink);stroke-width:4px;stroke-linejoin:round;
  transition:opacity .2s ease;
}
.areav__pt--hub .areav__lbl{font-size:14px;fill:#fff;}
.areav__pt--quiet .areav__lbl{opacity:0;}
.areav__pt.is-on .areav__lbl{opacity:1;fill:var(--accent-l);}
.areav__pt.is-on .areav__halo{fill:rgba(240,169,82,.4);}
.areav__pt.is-on .areav__dot{fill:#fff;}
body.bef-v2 .areav__legend{
  display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .5rem;
  margin:.6rem 0 0;font-size:.76rem;color:rgba(244,247,252,.7);
}
.areav__key{display:inline-block;margin-left:.6rem;}
.areav__key:first-child{margin-left:0;}
.areav__key--dot{width:9px;height:9px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 3px rgba(240,169,82,.25);}
.areav__key--river{width:18px;height:3px;border-radius:2px;background:rgba(95,184,240,.8);}

.areav__list h3{margin:0 0 1.2rem;}
.areav__groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem;}
.areav__group{
  padding:1rem 1.1rem 1.05rem;border-radius:14px;
  background:#fff;border:1px solid var(--base-dd);
}
.areav__group:first-child{grid-column:1 / -1;}
body.bef-v2 .areav__gname{
  margin:0 0 .6rem;font-size:.7rem;font-weight:800;letter-spacing:.13em;
  text-transform:uppercase;color:var(--brand-blue-t);
}
.areav__chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.4rem;}
.areav__chips li{
  margin:0;padding:.34rem .72rem;border-radius:999px;cursor:default;
  background:var(--base-d);border:1px solid var(--base-dd);
  font-size:.86rem;font-weight:600;color:var(--ink);line-height:1.3;
  transition:background-color .2s ease,border-color .2s ease,color .2s ease;
}
.areav__chips li.is-on{background:var(--ink);border-color:var(--ink);color:#fff;}
.areav__foot{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:.9rem 1.4rem;margin-top:1.3rem;
}
body.bef-v2 .areav__foot .area-note{margin:0;max-width:34ch;}
/* The number broke as "504-" / "608-7730" beside the map. */
body.bef-v2 .areav__foot .area-note a{white-space:nowrap;}

@media (max-width:1024px){
  .areav{grid-template-columns:1fr;}
  .areav__map{max-width:640px;margin-inline:auto;width:100%;}
}
@media (max-width:560px){
  .areav__groups{grid-template-columns:1fr;}
  .areav__map{padding:.8rem .8rem .8rem;border-radius:18px;}
  /* The SVG scales to ~70%, which took labels down to ~9px. */
  .areav__lbl{font-size:15px;}
  .areav__pt--hub .areav__lbl{font-size:16px;}
  .areav__water{font-size:13px;}
}
@media (prefers-reduced-motion:reduce){
  .areav__dot,.areav__halo,.areav__lbl,.areav__chips li{transition:none;}
}

/* ------------------------------------------------------------ 23.4 FOOTER */
body.bef-v2 .site-footer{position:relative;overflow:hidden;border-top:3px solid var(--accent);}
body.bef-v2 .site-footer::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.022) 0 2px,transparent 2px 46px);
  mask-image:linear-gradient(180deg,#000 0%,transparent 70%);
  -webkit-mask-image:linear-gradient(180deg,#000 0%,transparent 70%);
}
body.bef-v2 .site-footer > .container{position:relative;}
/* Short amber rule under every column heading. */
body.bef-v2 .site-footer .footer-grid h2{position:relative;padding-bottom:.7rem;margin-bottom:1.1rem;}
body.bef-v2 .site-footer .footer-grid h2::after{
  content:"";position:absolute;left:0;bottom:0;width:34px;height:2px;border-radius:2px;background:var(--accent);
}
body.bef-v2 .site-footer .footer-grid h2 .tt{color:var(--accent);}
body.bef-v2 .site-footer .footer-grid ul:not(.footer-social) a{
  display:inline-flex;align-items:center;gap:.4rem;transition:color .2s ease,transform .2s ease;
}
body.bef-v2 .site-footer .footer-grid ul:not(.footer-social) a:hover{transform:translateX(3px);}

/* Contact Info */
body.bef-v2 .site-footer address.fci{
  display:grid;gap:1.05rem;margin:0;font-style:normal;
}
.fci__item{display:grid;grid-template-columns:44px minmax(0,1fr);gap:.9rem;align-items:start;}
.fci__icon{
  width:44px;height:44px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(240,169,82,.7);color:var(--accent);
  background:rgba(240,169,82,.06);
}
.fci__body{display:flex;flex-direction:column;gap:.1rem;min-width:0;padding-top:.05rem;}
.fci__label{font-family:var(--font-display);font-size:.98rem;font-weight:800;color:var(--accent);line-height:1.25;}
body.bef-v2 .site-footer .fci__value{font-size:.9rem;color:#F4F7FC;line-height:1.5;}
body.bef-v2 .site-footer a.fci__value{text-decoration:none;}
body.bef-v2 .site-footer a.fci__value:hover{color:var(--accent);}
.fci__closed{color:var(--accent);font-weight:600;}
body.bef-v2 .site-footer .fci__cta{margin:1.3rem 0 0;}

/* The fixed chat launcher sits over the right end of the bottom row until
   the container is wide enough to clear it. */
@media (min-width:641px) and (max-width:1700px){
  body.bef-v2 .footer-bottom{padding-right:11.5rem;}
}
@media (max-width:1024px) and (min-width:641px){
  body.bef-v2 .footer-grid{grid-template-columns:1fr 1fr;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .site-footer .footer-grid ul:not(.footer-social) a{transition:none;}
  body.bef-v2 .site-footer .footer-grid ul:not(.footer-social) a:hover{transform:none;}
}

/* ==========================================================================
   LAYER 24 - footer fixes, two-line How It Works heading, call buttons,
   2026-09-11.

   A. FOOTER ("fix this"): the mark now uses the client's own dark-ground
      logo (footer-logo-new.png from live, unmodified) at 54px; columns are
      rebalanced so the brand column stops leaving a hole and Contact Info
      has room; "New Orleans, LA" no longer strands "LA" on its own line.
   B. HOW IT WORKS HEADING ("make it two liner heading"): each .hl half holds
      one line - "Your Path to Perfect Fencing" / "with Big Easy Fence
      Supply" - by sizing the type to the column instead of letting it wrap.
   C. CALL LINKS ("improve visuals visibility add color", "same here"): the
      grey "or call 504-608-7730" text beside an amber CTA became a solid blue
      pill with a phone icon, in How It Works and in the promise band, the
      same amber + blue pair the site already uses elsewhere.
   ========================================================================== */

/* ------------------------------------------------------------- 24.1 FOOTER */
body.bef-v2 .site-footer .footer-brand .brand img{height:54px;width:auto;display:block;}
@media (min-width:1025px){
  body.bef-v2 .footer-grid{grid-template-columns:minmax(0,1.25fr) minmax(0,.9fr) minmax(0,1fr) minmax(0,1.25fr);gap:2.6rem;}
}
.fci__nw{white-space:nowrap;}

/* ------------------------------------------------ 24.2 TWO-LINE HOW IT WORKS */
@media (min-width:1025px){
  .hiw{grid-template-columns:minmax(0,5.6fr) minmax(0,6.4fr);}
  body.bef-v2 .hiw__intro h2{font-size:clamp(1.75rem,2.45vw,2.5rem);line-height:1.15;}
  body.bef-v2 .hiw__intro h2 .hl{white-space:nowrap;}
}
@media (max-width:1024px){
  body.bef-v2 .hiw__intro h2{font-size:clamp(1.3rem,5.6vw,2.6rem);line-height:1.18;}
  body.bef-v2 .hiw__intro h2 .hl{white-space:nowrap;}
}

/* ------------------------------------------------------- 24.3 CALL BUTTONS */
body.bef-v2 a.btn-tel{
  display:inline-flex;align-items:center;justify-content:center;gap:.55rem;
  min-height:50px;padding:.8rem 1.4rem;border-radius:999px;
  font-weight:800;font-size:.92rem;letter-spacing:.01em;text-decoration:none;white-space:nowrap;
  background:var(--brand-blue-d);border:2px solid var(--brand-blue-d);color:#fff;
  box-shadow:0 14px 26px -16px rgba(0,98,158,.75);
  transition:background-color .2s ease,border-color .2s ease,transform .2s ease;
}
body.bef-v2 a.btn-tel svg{flex-shrink:0;}
body.bef-v2 a.btn-tel:hover{background:var(--ink);border-color:var(--ink);color:#fff;transform:translateY(-2px);}
body.bef-v2 a.btn-tel:focus-visible{outline:3px solid var(--accent);outline-offset:3px;}
/* On the charcoal band the darker blue sat too close to the ground, so the
   pill uses the logo's own blue there (white on #007AC3 = 4.52:1). */
body.bef-v2 .section--promise a.btn-tel{
  background:var(--brand-blue);border-color:var(--brand-blue);color:#fff;
  box-shadow:0 14px 28px -14px rgba(0,122,195,.8);
}
body.bef-v2 .section--promise a.btn-tel:hover{background:#fff;border-color:#fff;color:var(--ink);}
@media (max-width:420px){
  body.bef-v2 .hiw__cta .btn,
  body.bef-v2 .promise__cta .btn{flex:1 1 100%;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 a.btn-tel{transition:none;}
  body.bef-v2 a.btn-tel:hover{transform:none;}
}

/* ==========================================================================
   LAYER 25 - the blog: index (home.php), guide card (post-card.php) and the
   single post (single.php), 2026-09-11.

   New class family .bl-* so nothing here touches the homepage's "latest
   posts" cards, which still use .card.

   Two measured bugs this layer exists to retire:
   - Post titles invisible: h1 #22222E on a #22222E hero, on every post.
   - Index dates stacked off-page: .card-date absolute inside a static card.

   The post BODIES are migrated HTML with inline styles written by the blog
   automation (grey #f4f4f4 table heads, #f7f7f7 FAQ summaries, 24px image
   margins). Inline styles can only be beaten with !important, so it is used
   for exactly those overrides and scoped to .bl-prose - the article only.
   ========================================================================== */

/* -------------------------------------------------------------- 25.1 CARD */
.bl-tag{
  display:inline-flex;align-items:center;
  padding:.28rem .66rem;border-radius:999px;
  font-size:.68rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;line-height:1.2;
  background:rgba(34,34,46,.86);color:#fff;
  backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);
}
.bl-tag--solid{background:var(--accent);color:var(--ink);backdrop-filter:none;}
body.bef-v2 .bl-meta{
  display:flex;flex-wrap:wrap;align-items:center;gap:.2rem .5rem;
  margin:0;font-size:.8rem;font-weight:600;color:var(--muted);
}

.bl-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.6rem;}
.bl-card{
  position:relative;display:flex;flex-direction:column;
  background:#fff;border:1px solid var(--base-dd);border-radius:16px;overflow:hidden;
  box-shadow:0 18px 38px -30px rgba(34,34,46,.5);
  transition:transform .3s ease,box-shadow .3s ease,border-color .3s ease;
}
.bl-card:hover{transform:translateY(-4px);box-shadow:0 30px 50px -30px rgba(34,34,46,.55);border-color:rgba(240,169,82,.55);}
body.bef-v2 .bl-card[hidden]{display:none;}
.bl-card__media{position:relative;aspect-ratio:16/10;overflow:hidden;background:var(--base-d);}
body.bef-v2 .bl-card__media img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .6s cubic-bezier(.22,.61,.24,1);
}
.bl-card:hover .bl-card__media img{transform:scale(1.05);}
.bl-card__media .bl-tag{position:absolute;left:.9rem;top:.9rem;}
.bl-card__body{display:flex;flex-direction:column;gap:.55rem;padding:1.2rem 1.3rem 1.35rem;flex:1;}
body.bef-v2 .bl-card__title{margin:0;font-size:1.12rem;line-height:1.35;}
body.bef-v2 a.bl-card__link{color:var(--ink);text-decoration:none;}
/* One link per card; this stretches it over the whole card. */
body.bef-v2 a.bl-card__link::after{content:"";position:absolute;inset:0;z-index:1;}
body.bef-v2 a.bl-card__link:focus-visible{outline:none;}
body.bef-v2 .bl-card:has(a.bl-card__link:focus-visible),
body.bef-v2 .bl-feature:has(a.bl-card__link:focus-visible){outline:3px solid var(--brand-blue-d);outline-offset:3px;}
body.bef-v2 .bl-card:hover a.bl-card__link{color:var(--brand-blue-d);}
body.bef-v2 .bl-card__excerpt{
  margin:0;font-size:.9rem;line-height:1.6;color:var(--muted);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;
}
.bl-card__more{
  margin-top:auto;padding-top:.35rem;
  display:inline-flex;align-items:center;gap:.4rem;
  font-size:.85rem;font-weight:800;color:var(--accent-d);
}
.bl-card__more span{transition:transform .25s ease;}
.bl-card:hover .bl-card__more span{transform:translateX(4px);}

/* ------------------------------------------------------------- 25.2 INDEX */
body.bef-v2 .bl-index{background:var(--base-d);}
.bl-feature{
  position:relative;
  display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);
  background:#fff;border:1px solid var(--base-dd);border-radius:22px;overflow:hidden;
  box-shadow:0 30px 60px -40px rgba(34,34,46,.55);
  margin-bottom:clamp(2.6rem,5vw,3.6rem);
  transition:box-shadow .3s ease;
}
.bl-feature:hover{box-shadow:0 40px 70px -40px rgba(34,34,46,.6);}
body.bef-v2 .bl-feature[hidden]{display:none;}
.bl-feature__media{position:relative;min-height:340px;overflow:hidden;background:var(--base-d);}
body.bef-v2 .bl-feature__media img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .8s cubic-bezier(.22,.61,.24,1);
}
.bl-feature:hover .bl-feature__media img{transform:scale(1.04);}
.bl-feature__body{
  display:flex;flex-direction:column;justify-content:center;gap:.9rem;
  padding:clamp(1.6rem,3.4vw,2.8rem);
}
body.bef-v2 .bl-feature__eyebrow{
  display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin:0;
  font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--brand-blue-t);
}
body.bef-v2 .bl-feature__title{margin:0;font-size:clamp(1.5rem,2.4vw,2.1rem);line-height:1.2;}
body.bef-v2 .bl-feature:hover a.bl-card__link{color:var(--brand-blue-d);}
body.bef-v2 .bl-feature__excerpt{margin:0;font-size:1rem;line-height:1.7;color:var(--muted);}
.bl-feature__cta{
  align-self:flex-start;margin-top:.4rem;
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.8rem 1.4rem;border-radius:999px;
  background:var(--accent);color:var(--ink);font-weight:800;font-size:.9rem;
  box-shadow:0 14px 26px -16px rgba(162,101,27,.7);
}
.bl-feature__cta span{transition:transform .25s ease;}
.bl-feature:hover .bl-feature__cta{background:var(--accent-l);}
.bl-feature:hover .bl-feature__cta span{transform:translateX(4px);}

.bl-toolbar{
  display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:1rem 2rem;margin-bottom:1.6rem;
}
body.bef-v2 .bl-toolbar__title{margin:0;font-size:clamp(1.5rem,2.4vw,2rem);}
body.bef-v2 .bl-filters{display:flex;flex-wrap:wrap;gap:.5rem;}
body.bef-v2 .bl-filters[hidden]{display:none;}
body.bef-v2 .bl-chip{
  appearance:none;cursor:pointer;
  display:inline-flex;align-items:center;gap:.45rem;
  min-height:40px;padding:.45rem .95rem;border-radius:999px;
  background:#fff;border:1px solid var(--base-dd);color:var(--ink);
  font:inherit;font-size:.85rem;font-weight:700;
  transition:background-color .2s ease,border-color .2s ease,color .2s ease;
}
body.bef-v2 .bl-chip:hover{border-color:var(--ink);}
body.bef-v2 .bl-chip.is-active{background:var(--ink);border-color:var(--ink);color:#fff;}
body.bef-v2 .bl-chip:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:2px;}
.bl-chip__n{
  min-width:1.5rem;padding:.05rem .4rem;border-radius:999px;text-align:center;
  font-size:.72rem;font-weight:800;background:var(--base-d);color:var(--muted);
}
.bl-chip.is-active .bl-chip__n{background:var(--accent);color:var(--ink);}
body.bef-v2 .bl-empty{margin:2rem 0 0;text-align:center;color:var(--muted);}

/* ------------------------------------------------------- 25.3 SINGLE: HERO */
.bl-progress{position:fixed;left:0;right:0;top:0;height:3px;z-index:95;pointer-events:none;}
.bl-progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-l));}

.bl-hero{
  position:relative;overflow:hidden;
  background:
    radial-gradient(90% 120% at 85% 0%,rgba(0,122,195,.22) 0%,rgba(0,122,195,0) 55%),
    var(--ink);
  padding-top:clamp(2.6rem,6vw,4.2rem);padding-bottom:clamp(6.5rem,11vw,9rem);
}
.bl-hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.03) 0 2px,transparent 2px 46px);
  mask-image:linear-gradient(180deg,#000,transparent 85%);-webkit-mask-image:linear-gradient(180deg,#000,transparent 85%);
}
.bl-hero__inner{position:relative;max-width:900px;}
body.bef-v2 .bl-crumb{
  display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .55rem;margin-bottom:1.2rem;
  font-size:.78rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:rgba(244,247,252,.55);
}
body.bef-v2 .bl-crumb a{color:rgba(244,247,252,.8);text-decoration:none;}
body.bef-v2 .bl-crumb a:hover{color:var(--accent-l);}
body.bef-v2 .bl-crumb a:last-child{color:var(--accent);}
body.bef-v2 .bl-hero .bl-hero__title{
  margin:0;color:#fff;
  font-size:clamp(2rem,4.4vw,3.35rem);line-height:1.12;max-width:24ch;text-wrap:balance;
}
body.bef-v2 .bl-hero__meta{
  display:flex;flex-wrap:wrap;align-items:center;gap:.3rem .6rem;margin:1.3rem 0 0;
  font-size:.92rem;color:rgba(244,247,252,.78);
}
.bl-hero__by{font-weight:700;color:#fff;}

.bl-cover{
  position:relative;z-index:2;
  max-width:1100px;margin:calc(-1 * clamp(5rem,9vw,7rem)) auto 0;
  border-radius:22px;overflow:hidden;aspect-ratio:16/8;background:var(--base-d);
  box-shadow:0 40px 70px -40px rgba(20,20,28,.7);
}
body.bef-v2 .bl-cover img{width:100%;height:100%;object-fit:cover;display:block;}

/* ------------------------------------------------------ 25.4 SINGLE: LAYOUT */
.bl-layout{
  display:grid;grid-template-columns:minmax(0,1fr) 300px;
  gap:clamp(2.4rem,5vw,4.5rem);align-items:start;
  max-width:1100px;margin:clamp(2.4rem,5vw,3.6rem) auto clamp(3rem,6vw,4.6rem);
}
.bl-layout--nocover{margin-top:-4rem;position:relative;z-index:2;}
.bl-article{min-width:0;max-width:740px;}
/* The rail must be as tall as the article, or the sticky box has no room to
   stick (align-items:start on the grid sized it to its own content). */
.bl-side{align-self:stretch;}
.bl-side__sticky{position:sticky;top:6.5rem;display:grid;gap:1.2rem;}
body.bef-v2 .bl-side__title{
  margin:0 0 .8rem;font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
}
.bl-toc{padding:1.2rem 1.2rem 1rem;border-radius:16px;background:#fff;border:1px solid var(--base-dd);}
/* Sticky rail must fit the viewport whole: the contents list gives up height
   first and scrolls inside itself on short screens. */
@media (min-width:1101px){
  body.bef-v2 .bl-side__sticky{display:flex;flex-direction:column;gap:1.2rem;max-height:calc(100vh - 7.5rem);}
  body.bef-v2 .bl-side .bl-toc{display:flex;flex-direction:column;flex:0 1 auto;min-height:9.5rem;}
  body.bef-v2 .bl-side .bl-toc__list{position:relative;flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;}
  body.bef-v2 .bl-side .bl-cta{flex:0 0 auto;}
}
.bl-toc__list{list-style:none;margin:0;padding:0;display:grid;gap:.1rem;counter-reset:bltoc;}
.bl-toc__list li{margin:0;counter-increment:bltoc;}
body.bef-v2 .bl-toc__list a{
  display:grid;grid-template-columns:1.6rem minmax(0,1fr);gap:.2rem;
  padding:.45rem .5rem;border-radius:8px;
  font-size:.86rem;font-weight:600;line-height:1.4;color:var(--muted);text-decoration:none;
  border-left:2px solid transparent;
  transition:background-color .2s ease,color .2s ease,border-color .2s ease;
}
body.bef-v2 .bl-toc__list a::before{
  content:counter(bltoc,decimal-leading-zero);
  font-family:var(--font-mono);font-size:.72rem;font-weight:700;color:var(--accent-d);padding-top:.1rem;
}
body.bef-v2 .bl-toc__list a:hover{background:var(--base-d);color:var(--ink);}
body.bef-v2 .bl-toc__list a[aria-current="true"]{background:var(--base-d);color:var(--ink);border-left-color:var(--accent);}

.bl-cta{
  display:grid;gap:.6rem;padding:1.2rem 1.2rem;border-radius:16px;
  background:linear-gradient(160deg,#2C2C3B 0%,var(--ink) 70%);color:#fff;
  box-shadow:0 24px 44px -30px rgba(20,20,28,.8);
}
body.bef-v2 .bl-cta__eyebrow{margin:0;font-size:.7rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--accent);}
body.bef-v2 .bl-cta__title{margin:0;font-family:var(--font-serif);font-size:1.35rem;font-weight:700;line-height:1.2;color:#fff;}
body.bef-v2 .bl-cta__text{margin:0 0 .3rem;font-size:.9rem;line-height:1.55;color:rgba(244,247,252,.78);}
body.bef-v2 .bl-cta .btn{width:100%;justify-content:center;text-align:center;min-height:50px;}
body.bef-v2 .bl-cta a.btn-tel{background:var(--brand-blue);border-color:var(--brand-blue);}
body.bef-v2 .bl-cta a.btn-tel:hover{background:#fff;border-color:#fff;color:var(--ink);}

.bl-toc-mobile{display:none;}

/* ------------------------------------------------------- 25.5 SINGLE: PROSE */
body.bef-v2 .bl-prose{font-size:1.06rem;}
body.bef-v2 .bl-prose p,
body.bef-v2 .bl-prose li{color:#3A4050;line-height:1.8;}
body.bef-v2 .bl-prose p{margin:0 0 1.25rem;}
body.bef-v2 .bl-prose p strong,
body.bef-v2 .bl-prose li strong{color:var(--ink);}
body.bef-v2 .bl-prose h2{
  position:relative;margin:3rem 0 1rem;padding-top:1.1rem;
  font-size:clamp(1.45rem,2.3vw,1.85rem);line-height:1.25;scroll-margin-top:7rem;
}
body.bef-v2 .bl-prose h2::before{
  content:"";position:absolute;left:0;top:0;width:44px;height:3px;border-radius:2px;background:var(--accent);
}
body.bef-v2 .bl-prose h3{margin:2rem 0 .7rem;font-size:1.2rem;line-height:1.35;scroll-margin-top:7rem;}
body.bef-v2 .bl-prose a{
  color:var(--brand-blue-t);font-weight:700;text-decoration:underline;
  text-decoration-color:rgba(240,169,82,.7);text-decoration-thickness:2px;text-underline-offset:3px;
}
body.bef-v2 .bl-prose a:hover{color:var(--accent-dd);text-decoration-color:var(--accent-dd);}

/* The short answer: marked server-side by bef_post_prose() as p.bl-answer. */
body.bef-v2 .bl-prose p.bl-answer{
  position:relative;margin:0 0 2rem;padding:1.3rem 1.4rem 1.3rem 1.5rem;
  border-radius:0 14px 14px 0;border-left:4px solid var(--accent);
  background:#FDF6EC;color:var(--ink);font-size:1.08rem;line-height:1.7;
}
body.bef-v2 .bl-prose p.bl-answer::before{
  content:"Quick Answer";display:block;margin-bottom:.4rem;
  font-size:.7rem;font-weight:800;font-style:normal;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dd);
}
body.bef-v2 .bl-prose p.bl-answer > em{font-style:normal;}

body.bef-v2 .bl-prose img{
  width:100%;height:auto;border-radius:16px;
  margin:2.2rem auto !important;
  box-shadow:0 26px 50px -36px rgba(34,34,46,.7);
}

body.bef-v2 .bl-prose table{
  width:100% !important;margin:2rem 0 !important;border-collapse:separate !important;border-spacing:0;
  border:1px solid var(--base-dd);border-radius:14px;overflow:hidden;font-size:.95rem;
}
body.bef-v2 .bl-prose table th{
  background:var(--ink) !important;color:#fff !important;
  padding:.9rem 1rem !important;font-family:var(--font-display);font-size:.78rem;
  letter-spacing:.06em;text-transform:uppercase;text-align:left;
}
body.bef-v2 .bl-prose table td{
  padding:.85rem 1rem !important;color:#3A4050;vertical-align:top;
  border-top:1px solid var(--base-dd);line-height:1.55;
}
body.bef-v2 .bl-prose table tbody tr:nth-child(even) td{background:#F8FAFD;}
body.bef-v2 .bl-prose table td:first-child{font-weight:700;color:var(--ink);}

body.bef-v2 .bl-prose details{
  margin:.7rem 0 !important;padding:0 !important;
  border:1px solid var(--base-dd) !important;border-radius:14px !important;
  background:#fff;overflow:hidden;
  transition:border-color .2s ease,box-shadow .2s ease;
}
body.bef-v2 .bl-prose details[open]{border-color:rgba(240,169,82,.6) !important;box-shadow:0 18px 34px -28px rgba(34,34,46,.5);}
body.bef-v2 .bl-prose details summary{
  position:relative;list-style:none;cursor:pointer;
  padding:1rem 3.2rem 1rem 1.2rem !important;
  background:#fff !important;border-radius:0 !important;
  font-family:var(--font-display);font-weight:700 !important;font-size:1rem;line-height:1.45;color:var(--ink);
}
body.bef-v2 .bl-prose details summary::-webkit-details-marker{display:none;}
body.bef-v2 .bl-prose details summary::after{
  content:"";position:absolute;right:1.2rem;top:50%;width:22px;height:22px;margin-top:-11px;border-radius:50%;
  background:
    linear-gradient(var(--ink),var(--ink)) center/10px 2px no-repeat,
    linear-gradient(var(--ink),var(--ink)) center/2px 10px no-repeat,
    var(--base-d);
  transition:transform .25s ease,background-color .25s ease;
}
body.bef-v2 .bl-prose details[open] summary::after{
  transform:rotate(45deg);
  background:
    linear-gradient(var(--ink),var(--ink)) center/10px 2px no-repeat,
    linear-gradient(var(--ink),var(--ink)) center/2px 10px no-repeat,
    var(--accent);
}
body.bef-v2 .bl-prose details summary:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:-3px;}
body.bef-v2 .bl-prose details > div{padding:0 1.2rem .6rem !important;}
body.bef-v2 .bl-prose details > div p{margin-bottom:.8rem;}

.bl-byline{
  display:grid;grid-template-columns:56px minmax(0,1fr);gap:1rem;align-items:start;
  margin-top:2.8rem;padding:1.4rem;border-radius:16px;
  background:var(--base-d);border:1px solid var(--base-dd);
}
.bl-byline__mark{
  width:56px;height:56px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  background:var(--ink);color:var(--accent);
}
body.bef-v2 .bl-byline__name{margin:0;font-family:var(--font-display);font-weight:800;color:var(--ink);}
body.bef-v2 .bl-byline__text{margin:.2rem 0 .5rem;font-size:.92rem;color:var(--muted);line-height:1.55;}
body.bef-v2 a.bl-byline__link{font-size:.88rem;font-weight:800;color:var(--brand-blue-t);text-decoration:none;}
body.bef-v2 a.bl-byline__link:hover{color:var(--accent-dd);}

/* ------------------------------------------------------ 25.6 KEEP READING */
body.bef-v2 .bl-related{background:var(--base-d);}
.bl-related__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:.8rem 2rem;margin-bottom:1.6rem;}
body.bef-v2 .bl-related__head h2{margin:0;}
body.bef-v2 a.bl-related__all{
  font-weight:800;font-size:.92rem;color:var(--ink);text-decoration:none;
  border-bottom:1.5px solid var(--accent);padding-bottom:2px;
}
body.bef-v2 a.bl-related__all:hover{color:var(--accent-dd);border-bottom-color:var(--accent-dd);}

/* ------------------------------------------------------- 25.7 RESPONSIVE */
@media (max-width:1100px){
  .bl-layout{grid-template-columns:1fr;max-width:760px;}
  .bl-article{max-width:none;}
  .bl-side__sticky{position:static;}
  .bl-side .bl-toc{display:none;}
  .bl-toc-mobile{
    display:block;margin:0 0 2rem;border-radius:14px;background:#fff;border:1px solid var(--base-dd);overflow:hidden;
  }
  .bl-toc-mobile summary{
    list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:1rem;
    padding:1rem 1.2rem;font-family:var(--font-display);font-weight:800;color:var(--ink);
  }
  .bl-toc-mobile summary::-webkit-details-marker{display:none;}
  .bl-toc-mobile__n{font-family:var(--font-body);font-size:.78rem;font-weight:700;color:var(--muted);}
  .bl-toc-mobile .bl-toc__list{padding:0 .7rem .8rem;}
  .bl-cta{grid-template-columns:1fr 1fr;align-items:center;}
  body.bef-v2 .bl-cta__eyebrow,
  body.bef-v2 .bl-cta__title,
  body.bef-v2 .bl-cta__text{grid-column:1 / -1;}
}
@media (max-width:1024px){
  .bl-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:900px){
  .bl-feature{grid-template-columns:1fr;}
  .bl-feature__media{min-height:0;aspect-ratio:16/9;}
  .bl-cover{aspect-ratio:16/10;border-radius:16px;}
}
@media (max-width:640px){
  .bl-grid{grid-template-columns:1fr;gap:1.1rem;}
  .bl-toolbar{align-items:flex-start;}
  body.bef-v2 .bl-filters{flex-wrap:nowrap;overflow-x:auto;margin:0 -16px;padding:0 16px .3rem;scrollbar-width:none;width:calc(100% + 32px);}
  body.bef-v2 .bl-filters::-webkit-scrollbar{display:none;}
  body.bef-v2 .bl-chip{flex:0 0 auto;}
  .bl-cta{grid-template-columns:1fr;}
  body.bef-v2 .bl-prose{font-size:1rem;}
  body.bef-v2 .bl-prose table{display:block;overflow-x:auto;white-space:normal;}
  .bl-byline{grid-template-columns:1fr;}
}
@media (prefers-reduced-motion:reduce){
  .bl-card,.bl-feature,
  body.bef-v2 .bl-card__media img,body.bef-v2 .bl-feature__media img,
  .bl-card__more span,.bl-feature__cta span,
  body.bef-v2 .bl-prose details summary::after{transition:none;}
  .bl-card:hover,.bl-card:hover .bl-card__media img,.bl-feature:hover .bl-feature__media img{transform:none;}
}

/* ==========================================================================
   LAYER 26 - LeadConnector form in the homepage estimate card, 2026-09-11.

   "add this to my homepage form": the native form in the homepage card is
   replaced by the client's LeadConnector form (front-page.php). The form lives
   in a cross-origin iframe, so nothing inside it can be styled from here;
   these rules only frame it. form_embed.js writes the iframe's inline height
   once the form reports its size; min-height keeps the card from collapsing
   to nothing before that happens.
   ========================================================================== */
body.bef-v2 .estimate-form-wrap--lc .ef-lc{
  margin:0 -.35rem;
}
body.bef-v2 .estimate-form-wrap--lc .ef-lc iframe{
  display:block;width:100%;min-height:760px;border:0;
}
body.bef-v2 .estimate-form-wrap--lc .ef-call{margin-top:.6rem;}

/* ==========================================================================
   LAYER 27 - comparison table colour and foot, 2026-09-11.

   "improve the visuals add color" (prnt.sc/RTYx1bhbpy6o) and "remove / move
   in the middle" (prnt.sc/gSYj28cQg7g7). The column colours are inline on the
   cells (house table system); these rules add the row icons, the hover tints
   the inline backgrounds would otherwise block, the coloured column names on
   the phone cards, and centre the foot link now that its sentence is gone.
   ========================================================================== */
.cmp-rowlabel{display:flex;align-items:flex-start;gap:.6rem;}
.cmp-rowicon{
  flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;
  width:28px;height:28px;margin-top:-3px;border-radius:50%;
  background:var(--accent);color:var(--ink);
  box-shadow:0 6px 14px -8px rgba(162,101,27,.9);
}
body.bef-v2 .cmp-table__t thead th.cmp-th{position:relative;}
body.bef-v2 .cmp-table__t thead th.cmp-th::after{
  content:"";position:absolute;left:18px;bottom:0;width:28px;height:3px;border-radius:3px 3px 0 0;
}
body.bef-v2 .cmp-table__t thead th.cmp-th--al::after{background:var(--accent);}
body.bef-v2 .cmp-table__t thead th.cmp-th--wi::after{background:var(--ink);}
@media (min-width:721px){
  body.bef-v2 .cmp-table__t tbody tr:hover td[data-col="al"]{background:#E8F2FB !important;}
  body.bef-v2 .cmp-table__t tbody tr:hover td[data-col="wi"]{background:#FDF0DE !important;}
}
.cmp-table__foot{justify-content:center;margin-top:1.4rem;}
@media (max-width:720px){
  .cmp-table__foot{align-items:center;}
  body.bef-v2 .cmp-table__t td[data-col="al"]::before{color:#00629E;}
  body.bef-v2 .cmp-table__t td[data-col="wi"]::before{color:#8A5514;}
}

/* ==========================================================================
   LAYER 28 - one-line hero headings, 2026-09-11.

   Blog index, About and every blog post. The headings carry data-fit-head and
   main-v2.js sets their size (one line, or two balanced lines when a title is
   too long). These rules only give those headings the full container width
   to work with: the inner hero capped its copy column at 60rem and the post
   hero capped the title at 24ch inside a 900px column.
   ========================================================================== */
body.bef-v2 .hero--plain .hero-copy:has(> h1[data-fit-head]){max-width:none;}
body.bef-v2 .hero--plain h1[data-fit-head]{max-width:none;text-wrap:balance;}
body.bef-v2 .bl-hero__inner:has(> h1[data-fit-head]){max-width:none;}
body.bef-v2 .bl-hero .bl-hero__title[data-fit-head]{max-width:none;text-wrap:balance;}

/* ==========================================================================
   LAYER 29 - About page: services, process, "What You Get" redesign,
   2026-09-11.

   "add more content and design" + prnt.sc/cQ1J0nM4AjT4 "improve this
   sections design". Every rule is scoped to body.bef-v2 where it touches
   headings, links or images (the specificity trap in LAYERS 9-15). Colour
   keys follow the logo: blue fills carry white text (#00629E, 6.48:1),
   amber fills carry charcoal (7.86:1).
   ========================================================================== */

/* ------------------------------------------------ 29.1 OUR MAIN SERVICES */
.ab-svc{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.3rem;
  margin:0;padding:0;list-style:none;
}
.ab-svc__item{
  position:relative;overflow:hidden;
  background:#fff;border:1px solid var(--ink-line);border-radius:16px;
  padding:1.9rem 1.5rem 1.7rem;
  box-shadow:0 22px 44px -34px rgba(34,34,46,.55);
  transition:transform .35s cubic-bezier(.22,.61,.24,1),box-shadow .35s ease;
}
.ab-svc__item::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;}
.ab-svc__item--blue::before{background:var(--brand-blue);}
.ab-svc__item--amber::before{background:var(--accent);}
.ab-svc__item:hover{transform:translateY(-5px);box-shadow:0 30px 54px -34px rgba(34,34,46,.62);}
.ab-svc__n{
  position:absolute;top:.9rem;right:1.1rem;
  font-family:var(--font-display);font-variant-numeric:lining-nums;
  font-size:2.6rem;font-weight:800;line-height:1;color:rgba(34,34,46,.07);
}
.ab-svc__icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:50%;margin-bottom:1.2rem;
}
.ab-svc__item--blue .ab-svc__icon{background:var(--brand-blue-d);color:#fff;box-shadow:0 10px 22px -12px rgba(0,98,158,.8);}
.ab-svc__item--amber .ab-svc__icon{background:var(--accent);color:var(--ink);box-shadow:0 10px 22px -12px rgba(162,101,27,.8);}
body.bef-v2 .ab-svc__item h3{
  font-family:var(--font-serif);font-size:1.22rem;font-weight:700;line-height:1.25;
  color:var(--ink);margin:0 0 .55rem;text-transform:none;letter-spacing:-.005em;
}
.ab-svc__item p{margin:0;font-size:.92rem;line-height:1.65;color:var(--muted);}
@media (max-width:1100px){.ab-svc{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:560px){.ab-svc{grid-template-columns:1fr;}}

/* ------------------------------------------------------ 29.2 HOW WE WORK */
.ab-steps{
  position:relative;
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1.4rem;
  margin:0;padding:0;list-style:none;counter-reset:none;
}
.ab-steps::before{
  content:"";position:absolute;top:27px;left:10%;right:10%;height:2px;
  background:linear-gradient(90deg,var(--accent),var(--brand-blue));
}
.ab-steps__i{position:relative;text-align:center;padding:0 .3rem;}
.ab-steps__n{
  position:relative;z-index:1;
  display:inline-flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:50%;margin-bottom:1.1rem;
  background:#fff;border:2px solid var(--accent);color:var(--accent-dd);
  font-family:var(--font-display);font-variant-numeric:lining-nums;
  font-size:1.25rem;font-weight:800;
  box-shadow:0 0 0 7px #fff;
}
.ab-steps__i:last-child .ab-steps__n{background:var(--brand-blue-d);border-color:var(--brand-blue-d);color:#fff;}
body.bef-v2 .ab-steps__i h3{
  font-family:var(--font-display);font-size:1rem;font-weight:800;line-height:1.3;
  color:var(--ink);margin:0 0 .45rem;text-transform:none;letter-spacing:0;
}
.ab-steps__i p{margin:0;font-size:.88rem;line-height:1.6;color:var(--muted);}
.ab-steps__cta{text-align:center;margin:2.6rem 0 0;}
@media (max-width:900px){
  .ab-steps{grid-template-columns:1fr;gap:1.5rem;max-width:34rem;margin-inline:auto;}
  .ab-steps::before{top:28px;bottom:28px;left:27px;right:auto;width:2px;height:auto;background:linear-gradient(180deg,var(--accent),var(--brand-blue));}
  .ab-steps__i{display:grid;grid-template-columns:56px 1fr;column-gap:1.1rem;text-align:left;padding:0;}
  .ab-steps__n{grid-row:span 2;margin-bottom:0;}
  body.bef-v2 .ab-steps__i h3{align-self:end;margin-top:.35rem;}
}

/* ------------------------------------------- 29.3 WHAT YOU GET (REDESIGN) */
.ab-get__grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.25fr);gap:3.4rem;align-items:center;}
body.bef-v2 .ab-get .section-head{margin-bottom:1.1rem;}
.ab-get__lead{margin:0 0 1.6rem;max-width:40ch;font-size:1.02rem;line-height:1.65;color:var(--muted);}
.ab-offers{display:grid;gap:.9rem;margin:0;padding:0;list-style:none;}
.ab-offer{
  display:flex;align-items:flex-start;gap:.95rem;
  background:#fff;border-radius:12px;padding:1rem 1.2rem;
  border:1px solid var(--ink-line);border-left:4px solid var(--accent);
  box-shadow:0 16px 34px -28px rgba(34,34,46,.55);
}
.ab-offer + .ab-offer{border-left-color:var(--brand-blue);}
.ab-offer__icon{
  flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;
  width:42px;height:42px;border-radius:50%;background:#FCEFDD;color:var(--accent-dd);
}
.ab-offer + .ab-offer .ab-offer__icon{background:#E3F0FA;color:var(--brand-blue-d);}
.ab-offer__body{display:grid;gap:.2rem;}
.ab-offer__body strong{font-size:.98rem;font-weight:800;color:var(--ink);line-height:1.3;}
.ab-offer__body span{font-size:.88rem;line-height:1.55;color:var(--muted);}
body.bef-v2 .ab-offer a{color:var(--brand-blue-d);font-weight:700;text-decoration:underline;text-underline-offset:3px;white-space:nowrap;}
body.bef-v2 .ab-offer a:hover{color:var(--ink);}

.ab-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.2rem;margin:0;padding:0;list-style:none;}
.ab-card{
  position:relative;overflow:hidden;
  background:#fff;border:1px solid var(--ink-line);border-radius:16px;
  padding:1.6rem 1.5rem 1.55rem;
  box-shadow:0 22px 44px -34px rgba(34,34,46,.55);
  transition:transform .35s cubic-bezier(.22,.61,.24,1),box-shadow .35s ease;
}
.ab-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;}
.ab-card--blue::before{background:var(--brand-blue);}
.ab-card--amber::before{background:var(--accent);}
.ab-card:hover{transform:translateY(-4px);box-shadow:0 30px 54px -34px rgba(34,34,46,.62);}
.ab-card__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:1rem;}
.ab-card__icon{display:inline-flex;align-items:center;justify-content:center;width:50px;height:50px;border-radius:14px;}
.ab-card--blue .ab-card__icon{background:var(--brand-blue-d);color:#fff;}
.ab-card--amber .ab-card__icon{background:var(--accent);color:var(--ink);}
.ab-card__n{
  font-family:var(--font-display);font-variant-numeric:lining-nums;
  font-size:1.9rem;font-weight:800;line-height:1;color:rgba(34,34,46,.12);
}
body.bef-v2 .ab-card h3{
  font-family:var(--font-display);font-size:1.06rem;font-weight:800;line-height:1.3;
  color:var(--ink);margin:0 0 .45rem;text-transform:none;letter-spacing:0;
}
.ab-card p{margin:0;font-size:.9rem;line-height:1.6;color:var(--muted);}
@media (max-width:980px){
  .ab-get__grid{grid-template-columns:1fr;gap:2.2rem;}
  .ab-get__lead{max-width:60ch;}
}
@media (max-width:560px){.ab-cards{grid-template-columns:1fr;}}

@media (prefers-reduced-motion:reduce){
  .ab-svc__item,.ab-card{transition:none;}
  .ab-svc__item:hover,.ab-card:hover{transform:none;}
}

/* 29.4  QA FIXES. (a) Measured: every paragraph above kept a 1em bottom
   margin and the step CTA a 0 top margin, because the site-wide p reset
   outranks plain class selectors (the LAYERS 9-15 trap) - cards carried a
   dead strip at the bottom and the CTA sat on the step text. (b) Phones: the
   timeline rail ran on past step 5's circle, because the last step's text is
   taller than its numeral; the rail is now drawn between numerals only. */
body.bef-v2 .ab-svc__item p,
body.bef-v2 .ab-steps__i p,
body.bef-v2 .ab-card p{margin:0;}
body.bef-v2 .ab-get__lead{margin:0 0 1.6rem;}
body.bef-v2 .ab-steps__cta{margin:2.8rem 0 0;}
@media (max-width:900px){
  .ab-steps::before{display:none;}
  .ab-steps__i:not(:last-child)::after{
    content:"";position:absolute;left:27px;top:56px;bottom:-1.5rem;width:2px;
    background:linear-gradient(180deg,var(--accent),var(--brand-blue));
  }
}


/* ==========================================================================
   LAYER 30 - homepage form in a shorter scrolling panel, 2026-09-11.

   prnt.sc/Y7nVgjKRtu48 "the homepage form is too long add scroll effect to
   make it shorter". The LeadConnector iframe keeps its full auto height; the
   panel around it is capped and scrolls. A fade and a hint line say there is
   more below and both go away at the bottom (is-end, set in main-v2.js).
   Homepage card only - /contact/ and the side drawer are unchanged.
   ========================================================================== */
body.bef-v2 .ef-scroll{
  position:relative;
  max-height:clamp(440px,64vh,620px);
  overflow-y:auto;overscroll-behavior:contain;
  margin:0 -.35rem;padding-right:.2rem;
  border-radius:12px;
  scrollbar-width:thin;scrollbar-color:var(--accent) var(--base-d);
}
body.bef-v2 .ef-scroll::-webkit-scrollbar{width:8px;}
body.bef-v2 .ef-scroll::-webkit-scrollbar-track{background:var(--base-d);border-radius:8px;}
body.bef-v2 .ef-scroll::-webkit-scrollbar-thumb{background:var(--accent);border-radius:8px;}
body.bef-v2 .ef-scroll .ef-lc{margin:0;}
/* The fade sits on the card, pinned to the foot of the scroll panel. */
body.bef-v2 .estimate-form-wrap--lc:has(.ef-scroll){position:relative;}
body.bef-v2 .ef-scroll + .ef-scroll-hint{
  position:relative;z-index:2;
  display:flex;align-items:center;justify-content:center;gap:.4rem;
  margin:-3.4rem 0 0;padding:2.4rem 0 .5rem;
  background:linear-gradient(180deg,rgba(255,255,255,0) 0%,#fff 62%);
  font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--accent-dd);pointer-events:none;
  transition:opacity .3s ease;
}
body.bef-v2 .ef-scroll-hint span{display:inline-block;animation:efHint 1.6s ease-in-out infinite;}
@keyframes efHint{0%,100%{transform:translateY(0);}50%{transform:translateY(3px);}}
body.bef-v2 .ef-scroll.is-end + .ef-scroll-hint{opacity:0;}
@media (max-width:640px){
  body.bef-v2 .ef-scroll{max-height:clamp(420px,70vh,560px);}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .ef-scroll-hint span{animation:none;}
  body.bef-v2 .ef-scroll + .ef-scroll-hint{transition:none;}
}


/* ==========================================================================
   LAYER 31 - one size for every CTA button, 2026-09-11.

   "all CTA buttons must have the same size and length". Measured before this
   layer across 12 page types: pill buttons ran 48-62px tall, 151-329px wide,
   in four font sizes, because btn-lg, btn-tel, faq-more/faq-all and the header
   quote each set their own padding. Every pill CTA (.btn) now shares one
   height, one width and one type size; phones take the full column width.
   !important is used on the dimension properties only, on purpose: a dozen
   earlier layers set padding/size with selectors of varying weight (up to
   a.btn.btn-blue.btn-tel), and this rule has to win over all of them.
   NOT included: slider arrows (.tcar__btn), the vertical side tab, and text
   links such as "Read the Full Comparison" - those are not pill buttons.
   ========================================================================== */
/* No display rule here on purpose: .btn is already inline-flex, and forcing
   display showed .header-quote, which the theme hides at <=980px (caught in
   QA: it appeared squeezed into the phone header). */
body.bef-v2 .btn:not(.tcar__btn):not(.btn-block){
  align-items:center;justify-content:center;gap:.5rem;
  box-sizing:border-box;
  width:264px !important;max-width:100% !important;min-width:0 !important;
  flex:0 0 auto !important; /* hiw/promise/faq buttons had flex:1 1 100% on phones */
  height:56px !important;min-height:56px !important;
  padding:0 1.25rem !important;
  font-size:.94rem !important;line-height:1.1 !important;
  white-space:nowrap;text-align:center;
}
body.bef-v2 .btn:not(.tcar__btn) svg{flex-shrink:0;}
/* Phones: one fixed width too. "Full width" gave 277-358px depending on each
   container's padding; 272px fits the narrowest container measured on a
   360px phone (the testimonial CTA pair, 277px). */
@media (max-width:640px){
  body.bef-v2 .btn:not(.tcar__btn):not(.btn-block){width:272px !important;}
}


/* ==========================================================================
   LAYER 32 - Testimonials page redesign, 2026-09-11.

   "improve this page too boring". Spotlight pull-quote + counted themes, then
   a filterable review wall. New .tw-* classes on purpose: the old .quote /
   .quote-grid rules turn the grid into a sideways scroller on phones. Colour
   keys follow the logo: aluminum blue, wrought iron amber (pairs measured:
   white on #00629E 6.48, charcoal on #F0A952 7.86).
   ========================================================================== */

/* ------------------------------------------------------- 32.1 SPOTLIGHT */
.tw-spot__grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:3.4rem;align-items:center;}
.tw-feature{
  position:relative;overflow:hidden;margin:0;
  padding:clamp(2rem,4vw,3rem);
  border-radius:20px;color:#fff;
  background:
    radial-gradient(90% 110% at 100% 0%,rgba(0,122,195,.28) 0%,rgba(0,122,195,0) 60%),
    var(--ink);
  box-shadow:0 40px 70px -44px rgba(20,20,28,.8);
}
.tw-feature::after{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(90deg,rgba(255,255,255,.03) 0 2px,transparent 2px 46px);
}
.tw-feature__mark{
  position:absolute;top:-.2rem;right:1.4rem;
  font-family:var(--font-serif);font-size:9rem;line-height:1;color:var(--accent);opacity:.9;
}
.tw-stars{color:var(--accent);letter-spacing:.14em;font-size:1rem;}
body.bef-v2 .tw-feature__quote{margin:1rem 0 1.8rem;padding:0;border:0;position:relative;z-index:1;}
body.bef-v2 .tw-feature__quote p{
  margin:0;font-family:var(--font-serif);font-weight:700;
  font-size:clamp(1.5rem,2.6vw,2.15rem);line-height:1.3;color:#fff;max-width:26ch;
}
.tw-feature__by{position:relative;z-index:1;display:flex;align-items:center;gap:.8rem;}
body.bef-v2 .tw-feature__by cite{display:block;font-style:normal;font-weight:800;color:#fff;}
.tw-feature__meta{display:block;font-size:.8rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted-on-ink);margin-top:.15rem;}

.tw-av{
  flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;
  width:46px;height:46px;border-radius:50%;font-weight:800;font-size:.85rem;letter-spacing:.04em;
}
.tw-av--aluminum{background:#00629E;color:#fff;}
.tw-av--iron{background:#F0A952;color:#22222E;}

body.bef-v2 .tw-themes .section-head{margin-bottom:.9rem;}
body.bef-v2 .tw-themes__lead{margin:0 0 1.5rem;color:var(--muted);font-size:.98rem;}
.tw-bars{display:grid;gap:1.05rem;margin:0;padding:0;list-style:none;}
.tw-bar__top{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:.4rem;}
.tw-bar__label{font-weight:800;color:var(--ink);font-size:.98rem;}
.tw-bar__n{font-weight:700;color:var(--accent-dd);font-size:.88rem;white-space:nowrap;font-variant-numeric:tabular-nums;}
.tw-bar__track{display:block;height:10px;border-radius:10px;background:var(--base-dd);overflow:hidden;}
.tw-bar__fill{
  display:block;height:100%;width:var(--w);border-radius:10px;
  background:linear-gradient(90deg,var(--accent),var(--brand-blue));
  transform-origin:left center;transition:transform .9s cubic-bezier(.22,.61,.24,1);
}
.tw-themes.reveal:not(.is-visible) .tw-bar__fill{transform:scaleX(0);}
.tw-bar:nth-child(2) .tw-bar__fill{transition-delay:.08s;}
.tw-bar:nth-child(3) .tw-bar__fill{transition-delay:.16s;}
.tw-bar:nth-child(4) .tw-bar__fill{transition-delay:.24s;}
.tw-bar:nth-child(5) .tw-bar__fill{transition-delay:.32s;}
.tw-bar__why{display:block;margin-top:.3rem;font-size:.76rem;font-style:italic;color:var(--muted);}
body.bef-v2 .tw-themes__cta{margin:1.8rem 0 0;}

@media (max-width:980px){
  .tw-spot__grid{grid-template-columns:1fr;gap:2.6rem;}
}

/* ------------------------------------------------------------ 32.2 WALL */
.tw-wall__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1.2rem 2rem;margin-bottom:2rem;}
body.bef-v2 .tw-wall__head .section-head{margin-bottom:0;}
.tw-filters{display:flex;flex-wrap:wrap;gap:.5rem;}
body.bef-v2 .tw-chip{
  display:inline-flex;align-items:center;gap:.45rem;min-height:44px;padding:0 1rem;
  border-radius:999px;border:1px solid var(--ink-line);background:#fff;color:var(--ink);
  font:inherit;font-size:.86rem;font-weight:700;cursor:pointer;
  transition:background-color .2s ease,color .2s ease,border-color .2s ease;
}
body.bef-v2 .tw-chip b{font-size:.74rem;font-weight:800;color:var(--muted);}
body.bef-v2 .tw-chip:hover{border-color:var(--ink);}
body.bef-v2 .tw-chip.is-active{background:var(--ink);border-color:var(--ink);color:#fff;}
body.bef-v2 .tw-chip.is-active b{color:var(--accent-l);}
body.bef-v2 .tw-chip:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:2px;}

/* 2026-09-11 QA: CSS columns left a ~350px hole under column one and read
   top-to-bottom; a row grid with equal-height cards reads left-to-right. */
.tw-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.3rem;align-items:stretch;}
@media (max-width:1100px){.tw-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
.tw-card{
  display:flex;flex-direction:column;box-sizing:border-box;
  position:relative;overflow:hidden;margin:0;
  padding:1.6rem 1.5rem 1.4rem;
  background:#fff;border:1px solid var(--ink-line);border-radius:16px;
  box-shadow:0 22px 44px -34px rgba(34,34,46,.55);
  transition:transform .35s cubic-bezier(.22,.61,.24,1),box-shadow .35s ease;
}
.tw-card[hidden]{display:none;}
.tw-card::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;}
.tw-card--aluminum::before{background:var(--brand-blue);}
.tw-card--iron::before{background:var(--accent);}
.tw-card:hover{transform:translateY(-4px);box-shadow:0 30px 54px -34px rgba(34,34,46,.62);}
.tw-card__top{display:flex;justify-content:space-between;align-items:flex-start;}
.tw-card__mark{font-family:var(--font-serif);font-size:3.4rem;line-height:.8;color:rgba(34,34,46,.1);}
body.bef-v2 .tw-card__quote{margin:.6rem 0 1rem;padding:0;border:0;}
body.bef-v2 .tw-card__quote p{margin:0;font-size:.96rem;line-height:1.7;color:#374151;}
.tw-tags{display:flex;flex-wrap:wrap;gap:.35rem;margin:auto 0 1.1rem;padding:0;list-style:none;}
.tw-tag{padding:.2rem .65rem;border-radius:999px;font-size:.7rem;font-weight:800;letter-spacing:.04em;background:#EEF2F7;color:#474B5C;}
.tw-tag--aluminum{background:#E3F0FA;color:#00629E;}
.tw-tag--iron{background:#FCEFDD;color:#8A5514;}
.tw-card__by{display:flex;align-items:center;gap:.75rem;padding-top:1rem;border-top:1px solid var(--ink-line);}
body.bef-v2 .tw-card__by cite{font-style:normal;font-weight:800;color:var(--ink);}

@media (max-width:640px){
  .tw-wall__head{align-items:flex-start;}
  .tw-grid{grid-template-columns:1fr;}
}
@media (prefers-reduced-motion:reduce){
  .tw-card,.tw-bar__fill{transition:none;}
  .tw-card:hover{transform:none;}
  .tw-themes.reveal:not(.is-visible) .tw-bar__fill{transform:none;}
}


/* ==========================================================================
   LAYER 33 - Fencing Options intro on one line, 2026-09-11.
   prnt.sc/MhVUQGH48SCb "make this one line". The lead was capped at 62ch
   (654px) inside a 62rem head, but the sentence runs 1,231px. Both caps are
   lifted for this lead only; main-v2.js sets the size (>=15px) so it holds one
   line on laptop and desktop widths and wraps normally below that.
   ========================================================================== */
body.bef-v2 .section--options .section-head--left:has(> .lead[data-fit-head]){max-width:none;}
body.bef-v2 .section--options .lead[data-fit-head]{max-width:none;}


/* ==========================================================================
   LAYER 34 - About "Who We Are" split: dead space filled, 2026-09-11.

   prnt.sc/JxOzx1siYhzp. Measured before: the 4:5 photo stood 104-165px
   taller than the copy above and below it at 1280-1920px. Now the copy
   carries who-we-fence-for tiles and a contact strip, and on desktop the
   photo stretches to the copy's height instead of forcing its own. Margins
   are scoped to body.bef-v2 because the site p/ul resets outrank plain
   classes (the LAYERS 9-15 trap, hit again in LAYER 29).
   ========================================================================== */
@media (min-width:901px){
  body.bef-v2 .about-split--full{align-items:stretch;}
  body.bef-v2 .about-split--full .about-split-media{display:flex;flex-direction:column;}
  body.bef-v2 .about-split--full .about-split-media .framed{aspect-ratio:auto;flex:1 1 auto;min-height:480px;}
  body.bef-v2 .about-split--full .about-split-copy{align-self:center;padding-block:.4rem;}
}

/* Badge on the photo */
body.bef-v2 .ab-badge{
  /* Moved to the bottom-left of the photo 2026-09-11 (prnt.sc/cnPBDZk5GXD-
     "move"); it sat bottom-right, hanging past the photo's edge. */
  position:absolute;left:1.4rem;right:auto;bottom:1.6rem;z-index:2;
  display:flex;align-items:center;gap:.8rem;margin:0;
  padding:.85rem 1.2rem .85rem .9rem;border-radius:14px;
  background:#fff;border-left:4px solid var(--accent);
  box-shadow:0 22px 44px -22px rgba(20,20,28,.55);
}
.ab-badge__icon{
  display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
  width:44px;height:44px;border-radius:50%;background:var(--brand-blue-d);color:#fff;
}
.ab-badge__text{display:grid;line-height:1.25;}
.ab-badge__text strong{font-size:.98rem;font-weight:800;color:var(--ink);}
.ab-badge__text span{font-size:.8rem;color:var(--muted);}

/* Who we fence for */
body.bef-v2 .ab-markets__label{
  margin:1.6rem 0 .75rem;
  font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dd);
}
body.bef-v2 .ab-markets{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.8rem;
  margin:0;padding:0;list-style:none;
}
.ab-market{
  display:flex;flex-direction:column;gap:.35rem;
  padding:1rem 1rem .95rem;border-radius:14px;
  background:var(--base-d);border:1px solid var(--ink-line);
  transition:border-color .25s ease,box-shadow .25s ease;
}
.ab-market:hover{border-color:var(--accent);box-shadow:0 16px 30px -24px rgba(34,34,46,.5);}
.ab-market__icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:42px;height:42px;border-radius:12px;margin-bottom:.25rem;
  background:var(--accent);color:var(--ink);
}
.ab-market:nth-child(2) .ab-market__icon{background:var(--brand-blue-d);color:#fff;}
.ab-market__name{font-size:1rem;font-weight:800;color:var(--ink);}
.ab-market__links{display:flex;flex-wrap:wrap;gap:.15rem .7rem;}
body.bef-v2 .ab-market__links a{
  font-size:.84rem;font-weight:700;color:var(--brand-blue-d);text-decoration:none;
  border-bottom:1.5px solid rgba(0,98,158,.28);padding-bottom:1px;
}
body.bef-v2 .ab-market__links a:hover,
body.bef-v2 .ab-market__links a:focus-visible{color:var(--ink);border-bottom-color:var(--accent);}

/* Contact strip */
body.bef-v2 .about-split--full .about-actions{margin-top:1.6rem;}
body.bef-v2 .ab-contact{
  display:flex;flex-wrap:wrap;gap:.6rem 1.6rem;
  margin:1.5rem 0 0;padding:1.1rem 0 0;list-style:none;
  border-top:1px solid var(--ink-line);
}
.ab-contact li{display:inline-flex;align-items:center;gap:.5rem;font-size:.9rem;color:var(--muted);}
.ab-contact svg{color:var(--accent-d);flex-shrink:0;}
body.bef-v2 .ab-contact a{color:var(--ink);font-weight:800;text-decoration:none;}
body.bef-v2 .ab-contact a:hover{color:var(--brand-blue-d);}

@media (max-width:1100px){
  body.bef-v2 .ab-badge{left:.9rem;right:auto;bottom:1.1rem;}
}
@media (max-width:560px){
  body.bef-v2 .ab-markets{grid-template-columns:1fr;}
  .ab-market{flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:.8rem;}
  .ab-market__icon{margin-bottom:0;}
  .ab-market__links{flex-basis:100%;padding-left:calc(42px + .8rem);}
  /* QA 390px: the photo is only ~270px tall there and the overlaid badge hid
     the welding sparks, so on phones it drops to hang off the photo's edge. */
  body.bef-v2 .ab-badge{
    position:relative;left:auto;right:auto;bottom:auto;
    width:fit-content;max-width:calc(100% - 1.8rem);
    margin:-1.6rem 0 0 .9rem;padding:.7rem 1rem .7rem .75rem;
  }
  .ab-contact li{flex-basis:100%;}
}
@media (prefers-reduced-motion:reduce){.ab-market{transition:none;}}


/* ==========================================================================
   LAYER 35 - aluminum / wrought iron child pages (template-parts/
   fence-type.php), 2026-09-11.

   "Fix the aluminum and Wrought iron child pages improve the layouts design".
   Replaces the v1 body (515px copy column beside a mostly empty image column)
   on the six child pages. Scoped to body.bef-v2 wherever a heading, p, a or
   img is styled (site resets outrank plain classes - LAYERS 9-15, 29, 34).
   ========================================================================== */

/* ------------------------------------------------------------ 35.1 INTRO */
.ft-intro__grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:3.4rem;align-items:center;}
body.bef-v2 .ft-intro__h{
  font-family:var(--font-serif);font-weight:700;color:var(--ink);
  font-size:clamp(1.8rem,2.8vw,2.5rem);line-height:1.15;margin:.2rem 0 1.1rem;text-wrap:balance;
}
body.bef-v2 .ft-intro__copy p{margin:0 0 1rem;color:var(--muted);line-height:1.75;}
body.bef-v2 .ft-intro__copy p.ft-lead{font-size:1.1rem;color:#374151;}
body.bef-v2 .ft-intro__copy p.eyebrow{margin:0 0 .6rem;}
body.bef-v2 .ft-intro__cta{display:flex;flex-wrap:wrap;gap:.8rem;margin:1.7rem 0 0 !important;}
body.bef-v2 .ft a{color:var(--brand-blue-d);}
body.bef-v2 .ft a.btn-primary{color:var(--ink);}
body.bef-v2 .ft a.btn-blue{color:#fff;}
.ft-intro__media{
  position:relative;margin:0;border-radius:18px;overflow:hidden;
  aspect-ratio:5/4;background:var(--base-dd);
  box-shadow:0 36px 64px -40px rgba(20,20,28,.7);
}
.ft-intro__media::after{content:"";position:absolute;left:0;top:0;bottom:0;width:6px;background:var(--accent);}
body.bef-v2 .ft-intro__media img{width:100%;height:100%;object-fit:cover;display:block;}
.ft-intro__tag{
  position:absolute;left:1.2rem;bottom:1.2rem;
  display:inline-flex;align-items:center;gap:.5rem;
  padding:.5rem .9rem;border-radius:999px;background:rgba(34,34,46,.86);color:#fff;
  font-size:.74rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
}
.ft-intro__tag::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent);}

/* ------------------------------------------------- 35.2 SHARED HEADINGS */
body.bef-v2 .ft-head{margin-bottom:2rem;max-width:56rem;}
body.bef-v2 .ft-block h2{font-family:var(--font-serif);font-weight:700;color:var(--ink);font-size:clamp(1.6rem,2.4vw,2.2rem);line-height:1.2;text-wrap:balance;}
body.bef-v2 .ft-head p.lead{margin:.9rem 0 0;color:var(--muted);max-width:68ch;}
body.bef-v2 .ft-group{
  display:flex;align-items:center;gap:.8rem;margin:2.2rem 0 1rem;
  font-family:var(--font-display);font-size:.78rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dd);
}
body.bef-v2 .ft-group::after{content:"";flex:1;height:1px;background:var(--ink-line);}
body.bef-v2 .ft-head + .ft-group{margin-top:0;}

/* --------------------------------------------------------- 35.3 FEATURES */
.ft-feats{display:grid;gap:1.2rem;margin:0;padding:0;list-style:none;}
.ft-feats--2{grid-template-columns:repeat(2,minmax(0,1fr));}
.ft-feats--3{grid-template-columns:repeat(3,minmax(0,1fr));}
.ft-feats--4{grid-template-columns:repeat(4,minmax(0,1fr));}
.ft-feat{
  position:relative;overflow:hidden;
  padding:1.6rem 1.5rem 1.5rem;border-radius:16px;
  background:#fff;border:1px solid var(--ink-line);
  box-shadow:0 22px 44px -34px rgba(34,34,46,.5);
}
.ft-feat::before{content:"";position:absolute;left:0;right:0;top:0;height:4px;background:var(--accent);}
.ft-feat:nth-child(even)::before{background:var(--brand-blue);}
.ft-feat__n{
  display:inline-flex;align-items:center;justify-content:center;
  width:44px;height:44px;border-radius:12px;margin-bottom:1rem;
  background:var(--accent);color:var(--ink);
  font-family:var(--font-display);font-variant-numeric:lining-nums;font-weight:800;font-size:.95rem;
}
.ft-feat:nth-child(even) .ft-feat__n{background:var(--brand-blue-d);color:#fff;}
body.bef-v2 .ft-feat__t{font-family:var(--font-display);font-size:1.08rem;font-weight:800;line-height:1.3;color:var(--ink);margin:0 0 .45rem;text-transform:none;letter-spacing:0;}
body.bef-v2 .ft-feat p{margin:0;font-size:.95rem;line-height:1.65;color:var(--muted);}
body.bef-v2 .ft-block:not(.section--sand) .ft-feat{background:var(--base-d);box-shadow:none;}
body.bef-v2 .ft-after{margin-top:2rem;columns:2 340px;column-gap:3.2rem;}
body.bef-v2 .ft-after p{break-inside:avoid;}
body.bef-v2 .ft-after p{margin:0 0 .9rem;color:var(--muted);line-height:1.75;}

/* ------------------------------------------------- 35.4 SPLIT / CHECKS */
.ft-split{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.4fr);gap:3.4rem;align-items:start;}
body.bef-v2 .ft-split__head h2{margin:0;}
body.bef-v2 .ft-split__head p{margin:1rem 0 0;color:var(--muted);line-height:1.7;}
body.bef-v2 .ft-split__body p{margin:0 0 1rem;color:var(--muted);line-height:1.8;font-size:1.02rem;}
body.bef-v2 .ft-split__body h3.ft-sub{font-size:1.1rem;margin:1.4rem 0 .5rem;color:var(--ink);}
/* sticky head removed in QA: sections are short, and it left the heading stranded low beside the copy */
.ft-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem;margin:0 0 1.2rem;padding:0;list-style:none;}
.ft-checks li{
  display:flex;align-items:center;gap:.8rem;padding:.95rem 1.05rem;border-radius:12px;
  background:#fff;border:1px solid var(--ink-line);font-weight:700;color:var(--ink);
}
.ft-checks__i{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:32px;height:32px;border-radius:50%;background:var(--brand-blue-d);color:#fff;}
body.bef-v2 .ft-block:not(.section--sand) .ft-checks li{background:var(--base-d);}

/* ----------------------------------------------------------- 35.5 TOPICS */
body.bef-v2 .ft-topics__eyebrow{margin:0 0 1.2rem;}
.ft-topics{display:grid;gap:1.3rem;}
.ft-topics--2{grid-template-columns:repeat(2,minmax(0,1fr));}
.ft-topics--3{grid-template-columns:repeat(3,minmax(0,1fr));}
.ft-topic{
  position:relative;overflow:hidden;padding:1.9rem 1.7rem 1.6rem;border-radius:16px;
  background:#fff;border:1px solid var(--ink-line);box-shadow:0 22px 44px -34px rgba(34,34,46,.5);
}
.ft-topic::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--accent);}
.ft-topic:nth-child(even)::before{background:var(--brand-blue);}
body.bef-v2 .ft-block h2.ft-topic__t{font-size:clamp(1.3rem,1.8vw,1.55rem);margin:0 0 .8rem;}
body.bef-v2 .ft-topic p{margin:0 0 .85rem;color:var(--muted);line-height:1.75;font-size:.97rem;}
body.bef-v2 .ft-topic p:last-child{margin-bottom:0;}
body.bef-v2 .ft-block:not(.section--sand) .ft-topic{background:var(--base-d);box-shadow:none;}

/* --------------------------------------------------------- 35.6 PRODUCTS */
.ft-products{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.1rem;margin:0;padding:0;list-style:none;}
body.bef-v2 a.ft-product{
  display:flex;flex-direction:column;gap:.35rem;height:100%;box-sizing:border-box;
  padding:1.4rem 1.4rem 1.3rem;border-radius:16px;text-decoration:none;
  background:#fff;border:1px solid var(--ink-line);color:var(--ink);
  transition:transform .3s cubic-bezier(.22,.61,.24,1),border-color .3s ease,box-shadow .3s ease;
}
body.bef-v2 .ft-block:not(.section--sand) a.ft-product{background:var(--base-d);}
body.bef-v2 a.ft-product:hover{transform:translateY(-4px);border-color:var(--accent);box-shadow:0 26px 48px -34px rgba(34,34,46,.6);}
body.bef-v2 a.ft-product:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:3px;}
.ft-product__sys{
  align-self:flex-start;padding:.2rem .65rem;border-radius:999px;
  background:#E3F0FA;color:#00629E;font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
}
.ft-product__big{
  font-family:var(--font-display);font-variant-numeric:lining-nums;font-weight:800;
  font-size:2.6rem;line-height:1;color:var(--ink);margin:.5rem 0 .2rem;
}
.ft-product__big small{font-size:.9rem;font-weight:800;color:var(--accent-dd);margin-left:.2rem;}
.ft-product__name{font-weight:800;font-size:1rem;line-height:1.35;}
.ft-product__go{margin-top:auto;padding-top:.6rem;font-size:.85rem;font-weight:800;color:var(--brand-blue-d);}

/* ---------------------------------------------------------- 35.7 CALLOUT */
body.bef-v2 .ft-callout-wrap{padding-top:clamp(2.4rem,4vw,3.4rem);padding-bottom:clamp(2.4rem,4vw,3.4rem);}
.ft-callout{
  display:grid;grid-template-columns:minmax(0,1.5fr) auto;gap:2.4rem;align-items:center;
  padding:clamp(1.8rem,4vw,2.8rem);border-radius:20px;color:#fff;
  background:radial-gradient(90% 120% at 100% 0%,rgba(0,122,195,.3) 0%,rgba(0,122,195,0) 60%),var(--ink);
  box-shadow:0 36px 64px -44px rgba(20,20,28,.8);
}
body.bef-v2 .ft-callout h2{font-family:var(--font-serif);color:#fff;font-size:clamp(1.5rem,2.3vw,2rem);line-height:1.2;margin:0 0 .8rem;}
body.bef-v2 .ft-callout p{margin:0 0 .7rem;color:var(--muted-on-ink);line-height:1.7;}
body.bef-v2 .ft-callout p a{color:var(--accent-l);}
body.bef-v2 .ft-callout__cta{display:flex;flex-direction:column;gap:.8rem;margin:0 !important;}

/* ------------------------------------------------------- 35.8 MORE TYPES */
.ft-more__head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem 2rem;margin-bottom:1.8rem;}
body.bef-v2 .ft-more__head .section-head{margin-bottom:0;}
body.bef-v2 a.ft-more__all{font-weight:800;color:var(--brand-blue-d);text-decoration:none;border-bottom:2px solid var(--accent);padding-bottom:2px;}
.ft-cards{display:grid;gap:1.2rem;margin:0;padding:0;list-style:none;}
.ft-cards--2{grid-template-columns:repeat(2,minmax(0,1fr));}
.ft-cards--3{grid-template-columns:repeat(3,minmax(0,1fr));}
.ft-cards--4{grid-template-columns:repeat(4,minmax(0,1fr));}
body.bef-v2 a.ft-card{
  display:flex;flex-direction:column;height:100%;overflow:hidden;text-decoration:none;
  border-radius:16px;background:#fff;border:1px solid var(--ink-line);color:var(--ink);
  box-shadow:0 22px 44px -34px rgba(34,34,46,.5);
  transition:transform .3s cubic-bezier(.22,.61,.24,1),box-shadow .3s ease;
}
body.bef-v2 a.ft-card:hover{transform:translateY(-4px);box-shadow:0 30px 54px -34px rgba(34,34,46,.62);}
body.bef-v2 a.ft-card:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:3px;}
.ft-card__media{display:block;aspect-ratio:16/10;overflow:hidden;background:var(--base-dd);}
body.bef-v2 .ft-card__media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s ease;}
body.bef-v2 a.ft-card:hover .ft-card__media img{transform:scale(1.04);}
.ft-card__body{display:flex;flex-direction:column;gap:.25rem;padding:1.1rem 1.2rem 1.25rem;flex:1;}
.ft-card__kicker{font-size:.7rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--accent-dd);}
.ft-card__name{font-size:1.02rem;font-weight:800;line-height:1.3;}
.ft-card__go{margin-top:auto;padding-top:.5rem;font-size:.85rem;font-weight:800;color:var(--brand-blue-d);}

/* ------------------------------------------------------ 35.9 RESPONSIVE */
@media (max-width:1100px){
  .ft-feats--3,.ft-feats--4,.ft-topics--3,.ft-cards--3,.ft-cards--4{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:980px){
  .ft-intro__grid{grid-template-columns:1fr;gap:2.2rem;}
  .ft-intro__media{aspect-ratio:16/10;}
}
@media (max-width:900px){
  .ft-split{grid-template-columns:1fr;gap:1.4rem;}
  .ft-topics--2,.ft-products{grid-template-columns:repeat(2,minmax(0,1fr));}
  .ft-callout{grid-template-columns:1fr;gap:1.4rem;}
}
@media (max-width:640px){
  .ft-feats--2,.ft-feats--3,.ft-feats--4,.ft-topics--2,.ft-topics--3,.ft-cards--2,.ft-cards--3,.ft-cards--4,.ft-products,.ft-checks{grid-template-columns:1fr;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 a.ft-product,body.bef-v2 a.ft-card,body.bef-v2 .ft-card__media img{transition:none;}
  body.bef-v2 a.ft-product:hover,body.bef-v2 a.ft-card:hover,body.bef-v2 a.ft-card:hover .ft-card__media img{transform:none;}
}

/* 35.10 QA: with only two "More Fence Types" cards the 16:10 photos ran ~330px tall. */
.ft-cards--2 .ft-card__media{aspect-ratio:16/8;}


/* ==========================================================================
   LAYER 36 - long headings on two lines, 2026-09-11.

   prnt.sc/TUt1wBHDLCkd "make all long headings two liner". main-v2.js no
   longer squeezes a heading onto one line: it keeps full size and holds a
   long one to two balanced lines. Every inner hero H1 now opts in
   (inner-hero.php fit_title defaults to true).

   36.1 Fence type intro: the h2 moved out of the 599px copy column (3-4 lines
   at 1440, measured) into a full-width row above the split. With the heading
   gone from the copy column, the photo stretches to the copy's height so the
   split does not leave dead space under the text (same measure as LAYER 34).
   ========================================================================== */
body.bef-v2 .ft-intro__top{margin-bottom:clamp(1.4rem,2.4vw,2.2rem);}
body.bef-v2 .ft-intro__top p.eyebrow{margin:0 0 .6rem;}
body.bef-v2 .ft-intro__top .ft-intro__h{margin:0;max-width:none;}
@media (min-width:981px){
  .ft-intro__grid{align-items:stretch;}
  body.bef-v2 .ft-intro__copy{align-self:center;}
  .ft-intro__media{aspect-ratio:auto;min-height:340px;}
}


/* ==========================================================================
   LAYER 37 - pricing factor band, 2026-09-11 (template-parts/pricing-factors.php).

   prnt.sc/l5XeBONQOScA "text are not that visible" + "add some icons or
   images that match the content". The band reused .process-step, whose
   paragraph colour is built for a light ground, so the factor copy sat as dim
   grey on charcoal. Now: glass cards, an amber icon tile drawn for each
   factor, white headings and #D3D8E0 copy (about 11:1 on the charcoal).
   Scoped to body.bef-v2 where h3/p are styled (the LAYERS 9-15 trap).
   ========================================================================== */
.pf__grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.2rem;margin:0;padding:0;list-style:none;}
.pf__card{
  position:relative;overflow:hidden;
  padding:1.7rem 1.6rem 1.6rem;border-radius:18px;
  background:linear-gradient(160deg,rgba(255,255,255,.075) 0%,rgba(255,255,255,.025) 100%);
  border:1px solid rgba(255,255,255,.12);
  transition:transform .3s cubic-bezier(.22,.61,.24,1),border-color .3s ease,background .3s ease;
}
.pf__card::after{
  content:"";position:absolute;left:1.6rem;right:1.6rem;bottom:0;height:3px;border-radius:3px 3px 0 0;
  background:linear-gradient(90deg,var(--accent) 0%,rgba(240,169,82,0) 100%);opacity:.85;
}
.pf__card:hover{transform:translateY(-4px);border-color:rgba(240,169,82,.55);background:linear-gradient(160deg,rgba(255,255,255,.1) 0%,rgba(255,255,255,.035) 100%);}
.pf__icon{
  display:inline-flex;align-items:center;justify-content:center;
  width:56px;height:56px;border-radius:14px;margin-bottom:1.15rem;
  background:var(--accent);color:var(--ink);
  box-shadow:0 14px 28px -16px rgba(240,169,82,.75);
}
.pf__n{
  position:absolute;top:1.3rem;right:1.4rem;
  font-family:var(--font-display);font-variant-numeric:lining-nums;font-weight:800;font-size:.8rem;letter-spacing:.12em;
  color:rgba(255,255,255,.5);
}
body.bef-v2 .pf h3.pf__t{
  margin:0 0 .5rem;font-family:var(--font-display);font-size:1.12rem;font-weight:800;line-height:1.3;
  letter-spacing:0;text-transform:none;color:#fff;
}
body.bef-v2 .pf p.pf__p{margin:0;font-size:.98rem;line-height:1.7;color:#D3D8E0;}
body.bef-v2 .pf .section-head .lead{color:#D3D8E0;}
@media (max-width:980px){.pf__grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:640px){.pf__grid{grid-template-columns:1fr;}.pf__card{padding:1.4rem 1.3rem 1.4rem;}}
@media (prefers-reduced-motion:reduce){.pf__card{transition:none;}.pf__card:hover{transform:none;}}


/* ==========================================================================
   LAYER 39 - /contact/ form scroll panel with up/down buttons, and inner
   hero bullet points, 2026-09-11.

   "fix this contact form too long, create a scroll down and up style". The
   LAYER 30 panel is reused; the shell adds a small button rail on the right
   edge of the panel. Buttons disable at the top / bottom (main-v2.js).
   prnt.sc/qLseI8S39mjP: inner-hero.php can print the homepage .hero-points
   list; it sits between the lead and the buttons, as on the homepage.
   ========================================================================== */
body.bef-v2 .ef-scroll-shell{position:relative;}
body.bef-v2 .ef-scroll-shell .ef-scroll{padding-right:3.6rem;}
body.bef-v2 .ef-scroll-shell + .ef-scroll-hint{
  position:relative;z-index:2;
  display:flex;align-items:center;justify-content:center;gap:.4rem;
  margin:-3.4rem 0 0;padding:2.4rem 0 .5rem;
  background:linear-gradient(180deg,rgba(255,255,255,0) 0%,#fff 62%);
  font-size:.72rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--accent-dd);pointer-events:none;transition:opacity .3s ease;
}
body.bef-v2 .ef-scroll-shell.is-end + .ef-scroll-hint{opacity:0;}
.ef-scroll-nav{
  position:absolute;top:50%;right:.2rem;transform:translateY(-50%);z-index:3;
  display:flex;flex-direction:column;gap:.5rem;
}
body.bef-v2 button.ef-scroll-btn{
  display:inline-flex;align-items:center;justify-content:center;
  width:42px;height:42px;padding:0;margin:0;border-radius:50%;cursor:pointer;
  background:var(--ink);color:#fff;border:0;
  box-shadow:0 10px 22px -12px rgba(20,20,28,.8);
  transition:background .2s ease,opacity .2s ease,transform .2s ease;
}
body.bef-v2 button.ef-scroll-btn:hover:not(:disabled){background:var(--accent);color:var(--ink);transform:scale(1.06);}
body.bef-v2 button.ef-scroll-btn:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:3px;}
body.bef-v2 button.ef-scroll-btn:disabled{opacity:.28;cursor:default;box-shadow:none;}
body.bef-v2 .ef-scroll:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:2px;}
@media (max-width:640px){
  body.bef-v2 .ef-scroll-shell .ef-scroll{padding-right:3rem;}
  body.bef-v2 button.ef-scroll-btn{width:38px;height:38px;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 button.ef-scroll-btn,body.bef-v2 .ef-scroll-shell + .ef-scroll-hint{transition:none;}
}
body.bef-v2 .hero-points--inner{margin:1.2rem 0 1.6rem;max-width:40rem;}


/* ==========================================================================
   LAYER 38 - aluminum / wrought iron child pages, premium pass, 2026-09-11.

   "improve the aluminum and wrought iron child pages layout, it looks boring
   make it premium look layout content" + "add some icons or images that
   match the content". Measured before: every section on all six pages was the
   same white numbered card grid on alternating sand/white. Now each feature
   group has a treatment of its own (fence-type.php picks dark / rows / cards
   in turn), every card carries an icon chosen from its own title
   (bef_fence_icon), prose gets a lead paragraph and two columns, topics
   become numbered editorial columns, the callout lists the standing site
   promises, and "More Fence Types" become full-bleed photo cards.
   Copy is untouched. Scoped to body.bef-v2 (LAYERS 9-15 trap).
   ========================================================================== */

/* ------------------------------------------------ 38.1 INTRO PHOTO FRAME */
body.bef-v2 .ft-intro__media{overflow:visible;isolation:isolate;}
body.bef-v2 .ft-intro__media img{border-radius:18px;}
body.bef-v2 .ft-intro__media::before{
  content:"";position:absolute;z-index:-1;inset:1.4rem -1.4rem -1.4rem 1.4rem;border-radius:18px;
  background:repeating-linear-gradient(90deg,rgba(0,122,195,.16) 0 2px,transparent 2px 14px),var(--base-d);
  border:1px solid rgba(0,122,195,.18);
}
body.bef-v2 .ft-intro__media::after{border-radius:18px 0 0 18px;}
@media (max-width:980px){body.bef-v2 .ft-intro__media::before{inset:.9rem -.9rem -.9rem .9rem;}}
@media (max-width:640px){body.bef-v2 .ft-intro__media::before{inset:.6rem -.5rem -.6rem .6rem;}}

/* ---------------------------------------------- 38.2 FEATURE CARD ICONS */
.ft-feat__icon{
  display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
  width:54px;height:54px;border-radius:14px;margin-bottom:1rem;
  background:var(--ink);color:var(--accent);
}
.ft-feat:nth-child(even) .ft-feat__icon{background:var(--brand-blue-d);color:#fff;}
body.bef-v2 .ft-feat .ft-feat__n{
  position:absolute;top:1.25rem;right:1.3rem;width:auto;height:auto;margin:0;
  background:none;color:#5B6272;font-size:.78rem;letter-spacing:.12em;
}
body.bef-v2 .ft-feat:nth-child(even) .ft-feat__n{background:none;color:var(--muted);}
.ft-feat__body{display:block;}
body.bef-v2 .ft-feat{transition:transform .3s cubic-bezier(.22,.61,.24,1),box-shadow .3s ease,border-color .3s ease;}
body.bef-v2 .ft-feat:hover{transform:translateY(-4px);border-color:rgba(240,169,82,.6);box-shadow:0 30px 54px -36px rgba(34,34,46,.6);}

/* -------------------------------------------------- 38.3 VARIANT: DARK */
body.bef-v2 .ft-block--dark{
  background:radial-gradient(70% 90% at 100% 0%,rgba(0,122,195,.22) 0%,rgba(0,122,195,0) 60%),
             radial-gradient(60% 80% at 0% 100%,rgba(240,169,82,.10) 0%,rgba(240,169,82,0) 60%),var(--ink);
}
body.bef-v2 .ft-block--dark h2{color:#fff;}
body.bef-v2 .ft-block--dark .ft-head p.lead,body.bef-v2 .ft-block--dark .ft-after p{color:#D3D8E0;}
body.bef-v2 .ft-block--dark .ft-group{color:var(--accent-l);}
body.bef-v2 .ft-block--dark .ft-group::after{background:rgba(255,255,255,.14);}
/* 38.3 QA: body.bef-v2 .ft-block:not(.section--sand) .ft-feat (0,4,1, LAYER 35) painted
   these cards white under white text. The selector below is (0,5,1). */
body.bef-v2 .ft-block.ft-block--dark:not(.section--sand) .ft-feat{
  background:linear-gradient(160deg,rgba(255,255,255,.08) 0%,rgba(255,255,255,.025) 100%);
  border:1px solid rgba(255,255,255,.13);box-shadow:none;
}
body.bef-v2 .ft-block--dark .ft-feat::before{height:3px;}
body.bef-v2 .ft-block--dark .ft-feat__icon{background:var(--accent);color:var(--ink);box-shadow:0 14px 28px -16px rgba(240,169,82,.75);}
body.bef-v2 .ft-block--dark .ft-feat:nth-child(even) .ft-feat__icon{background:#fff;color:var(--brand-blue-d);box-shadow:none;}
body.bef-v2 .ft-block--dark .ft-feat__t{color:#fff;}
body.bef-v2 .ft-block--dark .ft-feat p{color:#D3D8E0;}
body.bef-v2 .ft-block--dark .ft-feat .ft-feat__n,body.bef-v2 .ft-block--dark .ft-feat:nth-child(even) .ft-feat__n{color:#AEB5C2;}
body.bef-v2 .ft-block--dark .ft-feat:hover{border-color:rgba(240,169,82,.55);box-shadow:none;}
body.bef-v2 .ft-block--dark .ft-after a{color:var(--accent-l);}

/* -------------------------------------------------- 38.4 VARIANT: ROWS */
.ft-feats--rows{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 3rem;}
body.bef-v2 .ft-feats--rows .ft-feat{
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 1.2rem;align-items:start;
  padding:1.5rem 0;border:0;border-top:1px solid var(--ink-line);border-radius:0;background:none;box-shadow:none;overflow:visible;
}
body.bef-v2 .ft-feats--rows .ft-feat::before{display:none;}
body.bef-v2 .ft-feats--rows .ft-feat__icon{grid-row:1 / span 2;margin:0;width:50px;height:50px;border-radius:50%;transition:background .25s ease,color .25s ease;}
body.bef-v2 .ft-feats--rows .ft-feat .ft-feat__n{position:static;grid-column:2;grid-row:1;margin:0 0 .15rem;display:block;color:var(--accent-dd);}
body.bef-v2 .ft-feats--rows .ft-feat__body{grid-column:2;}
body.bef-v2 .ft-feats--rows .ft-feat__t{font-size:1.15rem;}
body.bef-v2 .ft-feats--rows .ft-feat:hover{transform:none;box-shadow:none;}
body.bef-v2 .ft-feats--rows .ft-feat:hover .ft-feat__icon{background:var(--accent);color:var(--ink);}
body.bef-v2 .ft-block:not(.section--sand) .ft-feats--rows .ft-feat{background:none;}

/* 38.4 QA: three rows in two columns left the third alone on its own row. */
@media (min-width:901px){.ft-feats--rows-3{grid-template-columns:repeat(3,minmax(0,1fr));gap:0 2.2rem;}}

/* ------------------------------------------------ 38.5 TOPICS: EDITORIAL */
body.bef-v2 .ft-topic{padding:2rem 1.8rem 1.8rem;}
body.bef-v2 .ft-topic::before{top:0;bottom:auto;left:0;right:0;width:auto;height:4px;}
.ft-topic__top{display:flex;align-items:center;justify-content:space-between;margin-bottom:1.1rem;}
.ft-topic__icon{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:14px;background:var(--ink);color:var(--accent);}
.ft-topic:nth-child(even) .ft-topic__icon{background:var(--brand-blue-d);color:#fff;}
.ft-topic__n{font-family:var(--font-serif);font-variant-numeric:lining-nums;font-weight:700;font-size:2.6rem;line-height:1;color:transparent;-webkit-text-stroke:1.2px rgba(34,34,46,.35);}

/* ---------------------------------------------------- 38.6 PROSE SPLIT */
body.bef-v2 .ft-block--prose .ft-split__head p.eyebrow{margin:0 0 .6rem;}
body.bef-v2 .ft-block--prose .ft-split__head{position:relative;padding-left:1.3rem;border-left:4px solid var(--accent);}
body.bef-v2 .ft-split__body p.ft-prose-lead{
  margin:0 0 1.6rem;font-family:var(--font-serif);font-size:clamp(1.25rem,1.9vw,1.55rem);line-height:1.5;color:var(--ink);
}
body.bef-v2 .ft-prose-cols{columns:2 300px;column-gap:2.6rem;}
body.bef-v2 .ft-prose-cols p{break-inside:avoid;margin:0 0 1rem;}

/* -------------------------------------------------------- 38.7 CALLOUT */
body.bef-v2 .ft-callout{position:relative;overflow:hidden;}
body.bef-v2 .ft-callout::before{
  content:"";position:absolute;right:-2rem;bottom:-1px;width:min(46%,420px);height:70%;pointer-events:none;opacity:.14;
  background:
    linear-gradient(#fff,#fff) 0 22% / 100% 3px no-repeat,
    linear-gradient(#fff,#fff) 0 78% / 100% 3px no-repeat,
    repeating-linear-gradient(90deg,#fff 0 4px,transparent 4px 26px);
  -webkit-mask:linear-gradient(90deg,transparent 0%,#000 60%);mask:linear-gradient(90deg,transparent 0%,#000 60%);
}
body.bef-v2 .ft-callout > *{position:relative;}
body.bef-v2 .ft-callout h2{color:#fff;}
body.bef-v2 .ft-callout p{color:#D3D8E0;}
body.bef-v2 ul.ft-ticks{display:flex;flex-wrap:wrap;gap:.6rem 1.4rem;margin:1.2rem 0 0;padding:0;list-style:none;}
body.bef-v2 ul.ft-ticks li{display:inline-flex;align-items:center;gap:.5rem;margin:0;font-size:.92rem;font-weight:700;color:#fff;}
body.bef-v2 ul.ft-ticks svg{flex-shrink:0;width:22px;height:22px;padding:3px;border-radius:50%;background:var(--accent);color:var(--ink);box-sizing:border-box;}

/* ------------------------------------------- 38.8 MORE TYPES: PHOTO CARDS */
body.bef-v2 a.ft-card{position:relative;border:0;min-height:340px;background:var(--ink);color:#fff;}
body.bef-v2 .ft-card__media,body.bef-v2 .ft-cards--2 .ft-card__media{position:absolute;inset:0;aspect-ratio:auto;}
body.bef-v2 .ft-card__media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,20,28,0) 30%,rgba(20,20,28,.55) 62%,rgba(20,20,28,.92) 100%);}
body.bef-v2 .ft-card__body{position:relative;justify-content:flex-end;padding:1.3rem 1.3rem 1.25rem;}
body.bef-v2 .ft-card__kicker{color:var(--accent-l);}
body.bef-v2 .ft-card__name{color:#fff;font-size:1.12rem;}
body.bef-v2 .ft-card__go{margin-top:.55rem;padding-top:0;color:#fff;display:inline-flex;align-items:center;gap:.5rem;}
body.bef-v2 .ft-card__go span{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:var(--accent);color:var(--ink);transition:transform .3s ease;}
body.bef-v2 a.ft-card:hover .ft-card__go span{transform:translateX(4px);}
body.bef-v2 .ft-cards--2 a.ft-card{min-height:380px;}

/* ---------------------------------------------------- 38.9 RESPONSIVE */
@media (max-width:900px){
  .ft-feats--rows{grid-template-columns:1fr;}
  body.bef-v2 .ft-block--prose .ft-split__head{padding-left:1rem;}
}
@media (max-width:640px){
  body.bef-v2 a.ft-card,body.bef-v2 .ft-cards--2 a.ft-card{min-height:280px;}
  body.bef-v2 .ft-callout::before{display:none;}
  .ft-topic__n{font-size:2.1rem;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .ft-feat,body.bef-v2 .ft-card__go span,body.bef-v2 .ft-feats--rows .ft-feat__icon{transition:none;}
  body.bef-v2 .ft-feat:hover{transform:none;}
}


/* ==========================================================================
   LAYER 40 - /products/ hub and the nine residential aluminum product
   pages, 2026-09-11 (page-products.php, template-parts/product.php).

   "/products/ fix the layout of the pages here". Measured before: hub card
   h2 flush to the card edge beside a 34px-indented paragraph; product pages
   showed an 820px blurry house icon and never printed their intro sentence.
   Scoped to body.bef-v2 wherever a heading, p, a or img is styled.
   ========================================================================== */

/* ---------------------------------------------------- 40.1 HUB PANELS */
.pr-mat__grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.6rem;}
.pr-panel{
  display:flex;flex-direction:column;overflow:hidden;border-radius:20px;background:#fff;
  border:1px solid var(--ink-line);box-shadow:0 36px 64px -48px rgba(20,20,28,.7);
}
body.bef-v2 a.pr-panel__media{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;background:var(--base-dd);}
body.bef-v2 .pr-panel__media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s ease;}
body.bef-v2 .pr-panel:hover .pr-panel__media img{transform:scale(1.04);}
.pr-panel__media::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,20,28,0) 55%,rgba(20,20,28,.45) 100%);}
.pr-panel__n{
  position:absolute;z-index:1;left:1.4rem;bottom:1.1rem;
  font-family:var(--font-serif);font-variant-numeric:lining-nums;font-weight:700;font-size:3rem;line-height:1;color:#fff;
  text-shadow:0 4px 18px rgba(0,0,0,.45);
}
.pr-panel__body{display:flex;flex-direction:column;flex:1;padding:clamp(1.5rem,2.6vw,2.2rem);}
body.bef-v2 .pr-panel__h{margin:0 0 .6rem;font-family:var(--font-serif);font-size:clamp(1.6rem,2.4vw,2.1rem);line-height:1.2;color:var(--ink);}
body.bef-v2 .pr-panel__h a{color:inherit;text-decoration:none;}
body.bef-v2 .pr-panel__h a:hover{color:var(--brand-blue-d);}
body.bef-v2 p.pr-panel__p{margin:0 0 1.3rem;color:var(--muted);line-height:1.7;}
body.bef-v2 ul.pr-panel__links{list-style:none;margin:0 0 1.6rem;padding:0;border-top:1px solid var(--ink-line);}
body.bef-v2 ul.pr-panel__links li{margin:0;border-bottom:1px solid var(--ink-line);}
body.bef-v2 ul.pr-panel__links a{
  display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem .2rem;
  font-weight:700;color:var(--ink);text-decoration:none;transition:color .2s ease,padding .2s ease;
}
body.bef-v2 ul.pr-panel__links a span{color:var(--accent-dd);transition:transform .2s ease;}
body.bef-v2 ul.pr-panel__links a:hover{color:var(--brand-blue-d);padding-left:.5rem;}
body.bef-v2 ul.pr-panel__links a:hover span{transform:translateX(4px);}
body.bef-v2 a.pr-panel__cta{align-self:flex-start;margin-top:auto;}

/* ------------------------------------------------ 40.2 PRODUCT OVERVIEW */
.pd-over__grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.9fr);gap:clamp(2rem,4vw,3.6rem);align-items:center;}
body.bef-v2 .pd-over__h{font-family:var(--font-serif);font-weight:700;color:var(--ink);font-size:clamp(1.8rem,2.8vw,2.5rem);line-height:1.15;margin:.2rem 0 1.1rem;text-wrap:balance;}
body.bef-v2 p.pd-lead{margin:0;font-size:1.12rem;line-height:1.75;color:#374151;max-width:60ch;}
body.bef-v2 .pd-over__cta{display:flex;flex-wrap:wrap;gap:.8rem;margin:1.7rem 0 1.3rem !important;}
body.bef-v2 a.pd-back{display:inline-flex;align-items:center;gap:.45rem;font-weight:800;font-size:.9rem;color:var(--brand-blue-d);text-decoration:none;border-bottom:2px solid var(--accent);padding-bottom:2px;}
.pd-spec{
  position:relative;overflow:hidden;border-radius:20px;color:#fff;
  padding:clamp(1.6rem,3vw,2.2rem);
  background:radial-gradient(90% 100% at 100% 0%,rgba(0,122,195,.3) 0%,rgba(0,122,195,0) 60%),var(--ink);
  box-shadow:0 40px 70px -46px rgba(20,20,28,.85);
}
.pd-spec::before{
  content:"";position:absolute;right:-1rem;top:0;width:55%;height:100%;opacity:.07;pointer-events:none;
  background:repeating-linear-gradient(90deg,#fff 0 4px,transparent 4px 24px);
}
.pd-spec > *{position:relative;}
.pd-spec__top{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;padding-bottom:1.1rem;margin-bottom:.4rem;border-bottom:1px solid rgba(255,255,255,.14);}
.pd-spec__big{font-family:var(--font-display);font-variant-numeric:lining-nums;font-weight:800;font-size:clamp(3.2rem,6vw,4.4rem);line-height:.9;color:var(--accent);}
.pd-spec__big small{font-size:1rem;margin-left:.35rem;color:#fff;letter-spacing:.04em;}
.pd-spec__big--word{font-size:clamp(2rem,3.4vw,2.6rem);}
.pd-spec__label{font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#AEB5C2;}
.pd-spec__list{margin:0;}
.pd-spec__row{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:1rem;padding:.8rem 0;border-bottom:1px solid rgba(255,255,255,.1);}
body.bef-v2 .pd-spec__row dt{margin:0;font-size:.8rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#AEB5C2;}
body.bef-v2 .pd-spec__row dd{margin:0;font-weight:700;color:#fff;}
body.bef-v2 ul.pd-spec__ticks{margin-top:1.2rem;}

/* ---------------------------------------------------- 40.3 HEIGHT RAIL */
.pd-heights__rail{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:1rem;margin:0;padding:0;list-style:none;}
body.bef-v2 a.pd-height{
  display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:.8rem;height:220px;
  padding:1.2rem .6rem 1rem;border-radius:16px;background:#fff;border:1px solid var(--ink-line);
  color:var(--ink);text-decoration:none;
  transition:transform .3s cubic-bezier(.22,.61,.24,1),border-color .3s ease,box-shadow .3s ease;
}
.pd-height__bar{
  display:block;width:38%;height:calc(var(--h) * 130px);border-radius:6px 6px 2px 2px;
  background:repeating-linear-gradient(90deg,var(--ink) 0 3px,transparent 3px 11px);
  border-top:4px solid var(--ink);
}
.pd-height__n{font-family:var(--font-display);font-variant-numeric:lining-nums;font-weight:800;font-size:1.6rem;line-height:1;}
.pd-height__n small{font-size:.8rem;margin-left:.15rem;color:var(--accent-dd);}
body.bef-v2 a.pd-height:hover{transform:translateY(-4px);border-color:var(--accent);box-shadow:0 26px 48px -34px rgba(34,34,46,.6);}
body.bef-v2 a.pd-height.is-current{background:var(--ink);border-color:var(--ink);color:#fff;}
body.bef-v2 a.pd-height.is-current .pd-height__bar{background:repeating-linear-gradient(90deg,var(--accent) 0 3px,transparent 3px 11px);border-top-color:var(--accent);}
body.bef-v2 a.pd-height.is-current .pd-height__n small{color:var(--accent-l);}
body.bef-v2 a.pd-height:focus-visible{outline:3px solid var(--brand-blue-d);outline-offset:3px;}
.pd-note{font-size:.85rem;color:var(--muted);}

/* ---------------------------------------------------- 40.4 RESPONSIVE */
@media (max-width:980px){
  .pr-mat__grid,.pd-over__grid{grid-template-columns:1fr;}
  .pd-heights__rail{grid-template-columns:repeat(3,minmax(0,1fr));}
}
@media (max-width:640px){
  body.bef-v2 a.pd-height{height:170px;}
  .pd-height__bar{height:calc(var(--h) * 90px);}
  .pr-panel__n{font-size:2.4rem;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .pr-panel__media img,body.bef-v2 ul.pr-panel__links a,body.bef-v2 ul.pr-panel__links a span,body.bef-v2 a.pd-height{transition:none;}
  body.bef-v2 .pr-panel:hover .pr-panel__media img,body.bef-v2 a.pd-height:hover{transform:none;}
}


/* ==========================================================================
   LAYER 41 - "How it works" timeline, 2026-09-11 (template-parts/process-steps.php).

   prnt.sc/qbdtoHu8Pa0t "improve this sections design, add icon images".
   /aluminum-fencing/ and /wrought-iron-fencing/ showed five steps as small
   outlined numbers over plain text. Now: icon medallions joined by a track
   line, a numbered badge on each, and a card per step. Wide screens run the
   track across; at 1100px and below it turns into a vertical timeline.
   Scoped to body.bef-v2 where h3/p are styled.
   ========================================================================== */
body.bef-v2 ol.hw__track{
  position:relative;list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:1.1rem;counter-reset:none;
}
body.bef-v2 ol.hw__track::before{
  content:"";position:absolute;z-index:0;top:40px;left:10%;right:10%;height:2px;
  background:repeating-linear-gradient(90deg,var(--accent) 0 10px,transparent 10px 18px);
}
body.bef-v2 li.hw__step{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;margin:0;text-align:center;}
.hw__medal{
  position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
  width:80px;height:80px;border-radius:50%;margin-bottom:1.1rem;
  background:#fff;color:var(--ink);border:2px solid var(--accent);
  box-shadow:0 0 0 8px var(--base),0 18px 34px -20px rgba(34,34,46,.55);
  transition:background .3s ease,color .3s ease,transform .3s cubic-bezier(.22,.61,.24,1);
}
.hw__n{
  position:absolute;top:-4px;right:-4px;display:inline-flex;align-items:center;justify-content:center;
  width:28px;height:28px;border-radius:50%;background:var(--ink);color:#fff;
  font-family:var(--font-display);font-variant-numeric:lining-nums;font-weight:800;font-size:.8rem;
  border:2px solid #fff;
}
.hw__step:nth-child(even) .hw__n{background:var(--brand-blue-d);}
.hw__card{
  flex:1;width:100%;box-sizing:border-box;padding:1.3rem 1.15rem 1.35rem;border-radius:16px;
  background:#fff;border:1px solid var(--ink-line);box-shadow:0 22px 44px -36px rgba(34,34,46,.55);
  transition:border-color .3s ease,box-shadow .3s ease;
}
body.bef-v2 .hw p.hw__k{margin:0 0 .35rem;font-size:.7rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-dd);}
body.bef-v2 .hw h3.hw__t{margin:0 0 .5rem;font-family:var(--font-display);font-size:1.02rem;font-weight:800;line-height:1.3;letter-spacing:0;text-transform:none;color:var(--ink);}
body.bef-v2 .hw p.hw__p{margin:0;font-size:.93rem;line-height:1.65;color:var(--muted);}
body.bef-v2 .hw__step:hover .hw__medal{background:var(--accent);transform:translateY(-3px);}
body.bef-v2 .hw__step:hover .hw__card{border-color:rgba(240,169,82,.65);box-shadow:0 28px 50px -34px rgba(34,34,46,.6);}
body.bef-v2 .hw__step:last-child .hw__medal{background:var(--ink);color:var(--accent);border-color:var(--ink);}
body.bef-v2 .hw__step:last-child .hw__n{background:var(--accent);color:var(--ink);}

@media (max-width:1100px){
  body.bef-v2 ol.hw__track{grid-template-columns:1fr;gap:1rem;max-width:44rem;margin:0 auto;}
  body.bef-v2 ol.hw__track::before{top:40px;bottom:40px;left:39px;right:auto;width:2px;height:auto;
    background:repeating-linear-gradient(180deg,var(--accent) 0 10px,transparent 10px 18px);}
  body.bef-v2 li.hw__step{flex-direction:row;align-items:flex-start;gap:1.2rem;text-align:left;}
  .hw__medal{margin-bottom:0;}
}
@media (max-width:640px){
  .hw__medal{width:64px;height:64px;box-shadow:0 0 0 6px var(--base),0 14px 26px -18px rgba(34,34,46,.55);}
  .hw__medal svg{width:24px;height:24px;}
  body.bef-v2 ol.hw__track::before{left:31px;top:32px;bottom:32px;}
  body.bef-v2 li.hw__step{gap:.9rem;}
  .hw__card{padding:1.1rem 1rem 1.15rem;}
}
@media (prefers-reduced-motion:reduce){
  .hw__medal,.hw__card{transition:none;}
  body.bef-v2 .hw__step:hover .hw__medal{transform:none;}
}

/* 41 QA: on the vertical timeline the track ran past the last medallion (it spanned the whole list,
   and the last card is taller than its medal). Each step now draws its own segment down to the next. */
@media (max-width:1100px){
  body.bef-v2 ol.hw__track::before{display:none;}
  body.bef-v2 li.hw__step:not(:last-child)::after{content:"";position:absolute;z-index:-1;left:39px;top:80px;bottom:-1rem;width:2px;
    background:repeating-linear-gradient(180deg,var(--accent) 0 10px,transparent 10px 18px);}
}
@media (max-width:640px){body.bef-v2 li.hw__step:not(:last-child)::after{left:31px;top:64px;}}


/* ==========================================================================
   LAYER 43 - rows variant: dead space and row alignment, 2026-09-11.

   prnt.sc/zYeXExxsD8Se "dead space improve this" (Maintenance Tips on
   /wrought-iron-fencing/residential-wrought-iron/). 1) Five rows in two
   columns left an empty slot; fence-type.php now fills it with a contact
   tile. 2) Found in the same screenshot: row "04" had a gap between its
   number and title, because the grid li stretched to its taller neighbour and
   shared the extra height between its two internal rows. align-content:start
   keeps number and title together.
   ========================================================================== */
body.bef-v2 .ft-feats--rows .ft-feat{align-content:start;}
/* 43 QA: body.bef-v2 .ft-block:not(.section--sand) .ft-feats--rows .ft-feat{background:none} (0,5,1)
   painted this tile transparent, so its white text vanished. This selector is (0,5,2). */
body.bef-v2 .ft-block .ft-feats--rows li.ft-feat.ft-feat--cta{
  align-self:stretch;align-content:center;margin-top:0;padding:1.4rem 1.5rem;
  border:0;border-radius:16px;
  background:radial-gradient(90% 120% at 100% 0%,rgba(0,122,195,.28) 0%,rgba(0,122,195,0) 60%),var(--ink);
}
body.bef-v2 .ft-feats--rows .ft-feat--cta .ft-feat__icon{grid-row:1 / span 1;background:var(--accent);color:var(--ink);}
body.bef-v2 .ft-feats--rows .ft-feat--cta .ft-feat__body{grid-column:2;grid-row:1;}
body.bef-v2 .ft-feat__t--cta{display:block;margin:0 0 .35rem;font-family:var(--font-display);font-size:1.15rem;font-weight:800;line-height:1.3;color:#fff;}
body.bef-v2 .ft-feat__cta-p{display:block;margin:0 0 .9rem;font-size:.95rem;line-height:1.6;color:#D3D8E0;}
body.bef-v2 .ft-feat__cta-row{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem 1.2rem;}
body.bef-v2 .ft-feats--rows .ft-feat--cta a.ft-feat__tel{font-weight:800;color:#fff;text-decoration:none;border-bottom:2px solid var(--accent);padding-bottom:2px;}
body.bef-v2 .ft-feats--rows .ft-feat--cta:hover .ft-feat__icon{background:#fff;}


/* ==========================================================================
   LAYER 44 - no dead space in prose, topic and list blocks, 2026-09-11.

   prnt.sc/L3PfaeoV5N34 + prnt.sc/AC4lcCBbLUp4 "fix this content layout" and
   prnt.sc/MIZi37OW1B_O "improve this sections, no dead spaces". Every case
   was a side-by-side split where one side held far less than the other: a
   heading column beside long prose, a one-paragraph topic card beside a
   five-paragraph one, and "Product Lines" beside a four-chip list. Now the
   heading runs across the top and the text flows in CSS columns, which
   balance their own heights, so neither side can run short.
   ========================================================================== */

/* ------------------------------------------------- 44.1 STACKED SPLITS */
body.bef-v2 .ft-split.ft-split--stack{grid-template-columns:1fr;gap:1.6rem;}
body.bef-v2 .ft-split--stack .ft-split__head{max-width:56rem;}
body.bef-v2 .ft-split--stack .ft-split__head h2{margin:0;}

/* prose */
body.bef-v2 .ft-block--prose .ft-split--stack .ft-split__head{padding-left:1.3rem;}
body.bef-v2 .ft-block--prose .ft-split--stack .ft-split__body p.ft-prose-lead{
  max-width:none;margin:0 0 1.6rem;padding:1.4rem 1.6rem;border-radius:16px;
  font-size:clamp(1.15rem,1.55vw,1.35rem);line-height:1.6;
  background:#fff;border:1px solid var(--ink-line);box-shadow:0 22px 44px -36px rgba(34,34,46,.5);
}
body.bef-v2 .ft-block--prose:not(.section--sand) .ft-split--stack .ft-split__body p.ft-prose-lead{background:var(--base-d);box-shadow:none;}
body.bef-v2 .ft-split--stack .ft-prose-cols{columns:2 340px;column-gap:3rem;column-fill:balance;}
body.bef-v2 .ft-split--stack .ft-prose-cols p{break-inside:auto;orphans:2;widows:2;}

/* list (e.g. Quick Ship "Product Lines") */
body.bef-v2 .ft-split--stack .ft-checks{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));}

/* ------------------------------------------------ 44.2 STACKED TOPICS */
.ft-topics--stack{grid-template-columns:1fr;gap:1.2rem;}
body.bef-v2 .ft-topics--stack .ft-topic{
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:.2rem 1.4rem;align-items:start;
  padding:1.8rem 2rem;
}
body.bef-v2 .ft-topics--stack .ft-topic__top{grid-row:1 / span 2;flex-direction:column;align-items:center;gap:.6rem;margin:0;}
body.bef-v2 .ft-topics--stack .ft-block h2.ft-topic__t,
body.bef-v2 .ft-block .ft-topics--stack h2.ft-topic__t{grid-column:2;margin:.25rem 0 .7rem;}
body.bef-v2 .ft-topics--stack .ft-topic__body{grid-column:2;columns:2 320px;column-gap:2.6rem;column-fill:balance;}
body.bef-v2 .ft-topics--stack .ft-topic__body p{break-inside:auto;orphans:2;widows:2;}
body.bef-v2 .ft-topics--stack .ft-topic__n{font-size:1.9rem;}
@media (max-width:640px){
  body.bef-v2 .ft-topics--stack .ft-topic{grid-template-columns:1fr;padding:1.4rem 1.2rem;}
  body.bef-v2 .ft-topics--stack .ft-topic__top{grid-row:auto;flex-direction:row;justify-content:space-between;width:100%;}
  body.bef-v2 .ft-topics--stack h2.ft-topic__t,body.bef-v2 .ft-topics--stack .ft-topic__body{grid-column:1;}
}


/* ==========================================================================
   LAYER 45 - centred section headings + intro gap, 2026-09-11.

   prnt.sc/TykGzrFj52aj "move the headings in the middle": section headings
   on the fence-type and product pages (main.ft) were left-aligned. They are
   now centred with their eyebrow, accent rule and lead. The intro heading
   keeps its left alignment because it heads the copy-and-photo split.

   prnt.sc/I0pqE0f3BcbX "fix this large gap": the intro copy was vertically
   centred against a taller photo (LAYER 36 set align-self:center with a
   340px photo minimum), pushing the first paragraph ~60px below the heading.
   Copy now starts at the top and the photo stretches to the copy's height.
   ========================================================================== */

/* ------------------------------------------------ 45.1 CENTRED HEADINGS */
body.bef-v2 main.ft .section-head--left{text-align:center;margin-inline:auto;max-width:56rem;}
body.bef-v2 main.ft .section-head--left .lead,
body.bef-v2 main.ft .section-head--left p.lead{margin-inline:auto;}
body.bef-v2 main.ft .section-head--left h2::after{margin-left:auto;margin-right:auto;}
body.bef-v2 main.ft .section-head--left .eyebrow{justify-content:center;}

body.bef-v2 main.ft .ft-split--stack .ft-split__head{text-align:center;margin-inline:auto;}
body.bef-v2 main.ft .ft-block--prose .ft-split--stack .ft-split__head{padding-left:0;border-left:0;}
body.bef-v2 main.ft .ft-split--stack .ft-split__head .eyebrow{justify-content:center;}
body.bef-v2 main.ft .ft-split--stack .ft-split__head p{margin-inline:auto;}

body.bef-v2 main.ft .ft-topics__eyebrow{text-align:center;justify-content:center;}

body.bef-v2 main.ft .ft-more__head{flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:.9rem;}

/* ---------------------------------------------------- 45.2 INTRO GAP */
@media (min-width:981px){
  body.bef-v2 .ft-intro__copy{align-self:start;}
  .ft-intro__media{min-height:280px;}
}
body.bef-v2 .ft-intro__top{margin-bottom:clamp(1rem,1.8vw,1.5rem);}

/* 45.2 QA: on 4 pages the photo still ran 35-60px taller than the copy - the img's own
   height set the row. Taken out of flow, the photo fills whatever height the copy sets. */
@media (min-width:981px){
  body.bef-v2 .ft-intro__media img{position:absolute;inset:0;}
}


/* ==========================================================================
   LAYER 46 - material type cards: spacing, 2026-09-12.

   prnt.sc/znHBcCM2pXyU "fix spacing" (Commercial Aluminum card on
   /aluminum-fencing/; the same .card--type cards are on /wrought-iron-fencing/).
   Measured before at 1440:
   1. .card p has flex-grow:1, so beside a taller neighbour the paragraph box
      stretched and pushed the list down: 34px text-to-list in one card, 58-65px
      in its neighbour.
   2. Three left edges: tag chip at 20px, heading and paragraph text at 39px,
      bullet dots at 20px.
   Now the list sits a fixed distance under the paragraph and every left edge
   is 39px. Scoped to .card--type so blog and other cards are untouched.
   ========================================================================== */
body.bef-v2 .card.card--type p{flex-grow:0;margin-bottom:0;}
body.bef-v2 .card.card--type .card-tags{padding:0 2.4rem .6rem;}
body.bef-v2 .card.card--type ul.card__list{padding:0 2.4rem;margin:1.1rem 0 1.5rem;gap:.5rem;}


/* ==========================================================================
   LAYER 47 - no text columns, 2026-09-12.

   prnt.sc/g1qrsYWfhVsk "do not make the content in 2 columns, improve the
   contents layout". LAYER 44 flowed prose, topic text and after-card text in
   CSS columns, which split paragraphs mid-sentence across columns. Now:
   - every text block is one column at a comfortable reading width, centred
     under the centred headings (LAYER 45);
   - three or more paragraphs render as ticked points (fence-type.php
     $bef_flow), so a long "why choose" block scans like a list.
   Words are unchanged.
   ========================================================================== */

/* ------------------------------------------------ 47.1 KILL THE COLUMNS */
body.bef-v2 main.ft .ft-prose-cols,
body.bef-v2 main.ft .ft-topic__body,
body.bef-v2 main.ft .ft-after{columns:auto;column-count:auto;column-gap:normal;}

/* ------------------------------------------- 47.2 ONE READING COLUMN */
body.bef-v2 main.ft .ft-block--prose .ft-split--stack .ft-split__body{max-width:52rem;margin-inline:auto;width:100%;}
body.bef-v2 main.ft .ft-block--prose .ft-split--stack .ft-split__body p.ft-prose-lead{text-align:left;}
body.bef-v2 main.ft .ft-prose-cols > p{max-width:none;margin:0 0 1rem;font-size:1.02rem;line-height:1.8;}

body.bef-v2 main.ft .ft-topics--stack{max-width:52rem;margin-inline:auto;}
body.bef-v2 main.ft .ft-topics--stack .ft-topic__body > p{margin:0 0 .9rem;font-size:1rem;line-height:1.8;}
body.bef-v2 main.ft .ft-topics--stack .ft-topic__body > p:last-child{margin-bottom:0;}

body.bef-v2 main.ft .ft-after{max-width:52rem;margin-inline:auto;}

/* ---------------------------------------------------- 47.3 TICKED POINTS */
body.bef-v2 ul.ft-points{list-style:none;margin:0;padding:0;display:grid;gap:.75rem;}
body.bef-v2 ul.ft-points li{
  display:grid;grid-template-columns:auto minmax(0,1fr);gap:.9rem;align-items:start;margin:0;
  padding:1rem 1.2rem;border-radius:14px;background:var(--base-d);border:1px solid var(--ink-line);
}
body.bef-v2 .section--sand ul.ft-points li,body.bef-v2 .ft-topic ul.ft-points li{background:#fff;}
body.bef-v2 .ft-topic ul.ft-points li{background:var(--base-d);}
body.bef-v2 ul.ft-points p{margin:0;font-size:1rem;line-height:1.7;color:var(--muted);}
body.bef-v2 ul.ft-points strong{color:var(--ink);}
.ft-points__i{
  display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;
  width:30px;height:30px;margin-top:.1rem;border-radius:50%;background:var(--accent);color:var(--ink);
}
.ft-points__i svg{width:16px;height:16px;}
body.bef-v2 .ft-block--dark ul.ft-points li{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.12);}
body.bef-v2 .ft-block--dark ul.ft-points p{color:#D3D8E0;}
body.bef-v2 .ft-block--dark ul.ft-points strong{color:#fff;}

@media (max-width:640px){
  body.bef-v2 ul.ft-points li{padding:.9rem 1rem;gap:.75rem;}
}


/* ==========================================================================
   LAYER 48 - /contact/ left column: "What Happens Next" + a real review,
   2026-09-12.

   prnt.sc/yn6cVHfRTHR9 "think what design to insert here or content to fill
   up the dead space". The copy column ended ~450px above the foot of the form
   card beside it. It now carries a three-step card (charcoal, amber numbers)
   and one customer review from /testimonials/. Scoped to body.bef-v2.
   ========================================================================== */
body.bef-v2 .ct-next{
  position:relative;overflow:hidden;margin:2rem 0 0;padding:1.6rem 1.6rem 1.4rem;border-radius:18px;color:#fff;
  background:radial-gradient(90% 120% at 100% 0%,rgba(0,122,195,.28) 0%,rgba(0,122,195,0) 60%),var(--ink);
  box-shadow:0 30px 56px -40px rgba(20,20,28,.8);
}
body.bef-v2 p.ct-next__k{margin:0 0 1rem;font-size:.74rem;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--accent-l);}
body.bef-v2 ol.ct-next__steps{list-style:none;margin:0;padding:0;display:grid;gap:0;}
body.bef-v2 ol.ct-next__steps li{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:1rem;margin:0;padding:0 0 1.15rem;}
body.bef-v2 ol.ct-next__steps li:last-child{padding-bottom:0;}
body.bef-v2 ol.ct-next__steps li:not(:last-child)::before{
  content:"";position:absolute;left:17px;top:38px;bottom:4px;width:2px;
  background:repeating-linear-gradient(180deg,rgba(240,169,82,.7) 0 6px,transparent 6px 11px);
}
.ct-next__n{
  display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;
  background:var(--accent);color:var(--ink);font-family:var(--font-display);font-weight:800;font-variant-numeric:lining-nums;
}
body.bef-v2 .ct-next__body{display:flex;flex-direction:column;gap:.2rem;padding-top:.35rem;}
body.bef-v2 .ct-next__body strong{font-size:1.02rem;color:#fff;}
body.bef-v2 .ct-next__body span{font-size:.93rem;line-height:1.6;color:#D3D8E0;}

body.bef-v2 figure.ct-review{
  position:relative;margin:1.2rem 0 0;padding:1.5rem 1.6rem 1.3rem;border-radius:18px;
  background:#fff;border:1px solid var(--ink-line);box-shadow:0 22px 44px -36px rgba(34,34,46,.5);
}
body.bef-v2 .ct-review__mark{position:absolute;top:1.1rem;right:1.3rem;color:var(--accent);opacity:.9;}
body.bef-v2 figure.ct-review blockquote{margin:0 0 1.1rem;padding:0 2.2rem 0 0;border:0;}
body.bef-v2 figure.ct-review blockquote p{margin:0;font-family:var(--font-serif);font-size:1.08rem;line-height:1.6;color:var(--ink);}
body.bef-v2 figure.ct-review figcaption{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem 1rem;padding-top:1rem;border-top:1px solid var(--ink-line);}
.ct-review__av{display:inline-flex;align-items:center;justify-content:center;width:42px;height:42px;border-radius:50%;background:var(--brand-blue-d);color:#fff;font-weight:800;font-size:.85rem;}
body.bef-v2 figure.ct-review figcaption > span:nth-child(2){display:flex;flex-direction:column;line-height:1.3;}
body.bef-v2 figure.ct-review figcaption strong{color:var(--ink);font-size:.95rem;}
body.bef-v2 figure.ct-review figcaption span span{font-size:.82rem;color:var(--muted);}
body.bef-v2 a.ct-review__more{margin-left:auto;font-weight:800;font-size:.88rem;color:var(--brand-blue-d);text-decoration:none;border-bottom:2px solid var(--accent);padding-bottom:2px;}
@media (max-width:640px){
  body.bef-v2 .ct-next,body.bef-v2 figure.ct-review{padding:1.3rem 1.2rem;}
  body.bef-v2 a.ct-review__more{margin-left:0;}
}

/* 48 QA: with the new cards the copy column ran 248px BELOW the form card (1440) - the
   dead space simply moved sides. Side by side (>1024px) the form card now stretches to
   the copy column's height and its scroll panel fills what is left, so both columns end
   together at any viewport height. The panel is taken out of flow so the 1,400-1,900px
   iframe cannot set the row height. Stacked (<=1024px) nothing changes. */
@media (min-width:1025px){
  body.bef-v2 .section--sand .contact-layout{align-items:stretch;}
  body.bef-v2 .contact-layout > div:has(> .estimate-form-wrap--lc){display:flex;flex-direction:column;}
  body.bef-v2 .contact-layout .estimate-form-wrap--lc{flex:1;display:flex;flex-direction:column;}
  body.bef-v2 .contact-layout .estimate-form-wrap--lc .ef-scroll-shell{flex:1 1 auto;min-height:440px;}
  body.bef-v2 .contact-layout .estimate-form-wrap--lc .ef-scroll-shell .ef-scroll{position:absolute;inset:0;max-height:none;margin:0;}
}


/* ==========================================================================
   LAYER 49 - footer Quick Links column, 2026-09-12.

   prnt.sc/G3_9Ra7z9Nhx "check the footer must have this": Home, About,
   Products, Blog, Testimonials, Contact (live's footer list). The grid goes
   from four columns to five on wide screens; 1025-1279px uses three columns
   so Contact Info keeps room; tablet stays two, phones one.
   ========================================================================== */
@media (min-width:1280px){
  body.bef-v2 .footer-grid{grid-template-columns:minmax(0,1.25fr) minmax(0,.7fr) minmax(0,.85fr) minmax(0,.95fr) minmax(0,1.25fr);gap:2.4rem;}
}
@media (min-width:1025px) and (max-width:1279px){
  body.bef-v2 .footer-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:2.4rem 2.6rem;}
}


/* ==========================================================================
   LAYER 50 - util-strip social profiles, 2026-09-14.

   prnt.sc/gc99hY8N3p7D "replace this using the social media accounts": the
   504-608-7730 at the right of the dark top strip is now the five footer
   profiles. Scoped to body.bef-v2 because `body.bef-v2 .util-strip a` (LAYER 5
   fix) sets font-size/weight/colour on every link in the strip. Icons are
   white like the old number, amber on hover, each in a 32px square hit area.
   ========================================================================== */
body.bef-v2 .util-strip .util-social{display:flex;align-items:center;gap:.15rem;margin:0 0 0 auto;padding:0;list-style:none;}
body.bef-v2 .util-strip .util-social li{margin:0;padding:0;list-style:none;}
body.bef-v2 .util-strip .util-social a{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;min-height:32px;border-radius:50%;color:var(--white);transition:color .2s ease,background-color .2s ease;}
body.bef-v2 .util-strip .util-social a:hover,
body.bef-v2 .util-strip .util-social a:focus-visible{color:var(--accent-l);background:rgba(255,255,255,.08);}
body.bef-v2 .util-strip .util-social svg{display:block;}
@media (max-width:640px){
  body.bef-v2 .util-strip .util-social{margin-right:-6px;}
}
@media (prefers-reduced-motion:reduce){
  body.bef-v2 .util-strip .util-social a{transition:none;}
}


/* ==========================================================================
   LAYER 51 - off-canvas menu readable again, 2026-09-14 (LIVE fix).

   Asta live audit H1: at every width <=1300px the opened menu showed the links
   in charcoal on the charcoal panel (1:1). LAYER 6.1 sets light links inside
   @media (max-width:1300px), but LAYER 7.1 (`body.bef-v2 .nav-primary a
   {color:var(--ink)}`, no media query) comes later with the same specificity
   and wins at every width. Restated here, last in the file, for the panel only.
   Desktop (>=1301px) is untouched.
   ========================================================================== */
@media (max-width:1300px){
  body.bef-v2 .nav-primary a{color:#F6F2E6;}
  body.bef-v2 .nav-primary a:hover,
  body.bef-v2 .nav-primary a:focus-visible{color:#fff;background:rgba(255,255,255,.09);}
  body.bef-v2 .nav-primary .sub-menu a{color:#EFEADC;}
}
