/* ============================================================
   Galvan MBS - site stylesheet
   Design source: Figma (see SITE.md). Artboards are 1920px wide.
   Scale rule: 1vw at 1920 = 19.2px, so a design value of
   Dpx becomes clamp(<sensible min>, D / 19.2 vw, Dpx).
   --s below is "one design pixel" (1/19.2 vw) for spacing:
   a design gap of 120px is calc(120 * var(--s)).
   ============================================================ */

/* ---------- 1. design tokens: from the Figma file ---------- */
:root {
  --brand: #ee3a37;        /* Galvan red: bars, buttons, cards */
  --brand-2: #39322f;      /* dark brown: footer, dark sections */
  --accent: #ee3a37;
  --ink: #000000;          /* body copy */
  --ink-2: #39322f;        /* headings */
  --ink-3: #453b37;        /* headings on beige, FAQ questions, icon strokes */
  --nav: #4c4040;          /* nav links, dark buttons */
  --muted: #666666;
  --line: #000000;
  --surface: #dcdad3;      /* beige cards and sections */
  --white: #ffffff;
  --fine: #d6d6d6;

  --font-head: "Work Sans", system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
  --font-body: "Work Sans", system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
  --font-nav: "Rubik", "Work Sans", system-ui, Arial, sans-serif;
  --font-fine: "Open Sans", "Work Sans", system-ui, Arial, sans-serif;

  --s: 0.0520833vw;                       /* one design pixel */
  --gutter: clamp(20px, 3.75vw, 72px);     /* 72px at 1920 */
  --max: 1920px;
  --header-h: clamp(72px, 9.53vw, 183px);  /* 183px at 1920 */
  --roof-h: 11.7vw;                        /* rise of the roof-peak sections */
  --radius: 0;
  --ease: cubic-bezier(.22, .61, .36, 1);

  /* type scale (design px at 1920, never below 16px for copy) */
  --t-100: clamp(34px, 5.2083vw, 100px);
  --t-80: clamp(34px, 4.1667vw, 80px);
  --t-60: clamp(28px, 3.125vw, 60px);
  --t-55: clamp(24px, 2.8646vw, 55px);
  --t-50: clamp(24px, 2.6042vw, 50px);
  --t-45: clamp(22px, 2.3438vw, 45px);
  --t-40: clamp(20px, 2.0833vw, 40px);
  --t-36: clamp(18px, 1.875vw, 36px);
  --t-32: clamp(16px, 1.6667vw, 32px);
  --t-30: clamp(16px, 1.5625vw, 30px);
  --t-22: clamp(16px, 1.1458vw, 22px);
  --t-20: clamp(16px, 1.0417vw, 20px);
}

/* ---------- 2. load-bearing base. Do not remove any rule in this block. ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--t-30);
  line-height: 1.62;
  color: var(--ink);
  background: var(--white);
  /* clip, not hidden: overflow-x:hidden turns <body> into a scroll container,
     which knocks the sticky header off the compositor fast path and makes it
     stutter and lurch while scrolling. */
  overflow-x: clip;
}
img, svg, video { max-width: 100%; height: auto; display: block; }
main { display: flow-root; } /* keeps a last child's margin from collapsing into the footer's roof */
a { color: inherit; text-decoration: none; }
p { margin: 0 0 1em; }
ul { margin: 0; padding: 0; list-style: none; }
button { font: inherit; cursor: pointer; }
:focus-visible { outline: 3px solid var(--accent); outline-offset: 3px; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* The hidden attribute must beat every component display rule below it
   (.btn is inline-flex, fieldsets are grid). Without this, every step of a
   multi-step form renders at once. */
[hidden] { display: none !important; }

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

/* ---------- 3. layout helpers ---------- */
.container { width: 100%; max-width: var(--max); margin-inline: auto; padding-inline: var(--gutter); }
.container--wide { padding-inline: 0; }
.section { padding-block: clamp(48px, 5.2vw, 100px); position: relative; }
.section--tight { padding-block: clamp(32px, 3.5vw, 64px); }
.two-col { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(28px, 4vw, 80px); align-items: center; }
.two-col--top { align-items: start; }
.text-center { text-align: center; }
@media (max-width: 900px) { .two-col { grid-template-columns: 1fr; } }

h1, h2, h3, h4 { font-family: var(--font-head); font-weight: 900; text-transform: uppercase; color: var(--ink-2); margin: 0; line-height: .91; overflow-wrap: anywhere; }
.h-section { font-size: var(--t-60); }
.red { color: var(--brand); }

/* ---------- 4. header + nav ----------
   The header never changes size. Only its shadow/colour reacts to .is-stuck. */
.site-header {
  position: sticky; top: 0; z-index: 50;
  height: var(--header-h);
  background: var(--white);
  transition: box-shadow .25s var(--ease);
}
.site-header.is-stuck { box-shadow: 0 2px 18px rgba(0, 0, 0, .10); }
.site-header__inner { height: 100%; max-width: var(--max); margin-inline: auto; padding: 0 clamp(20px, 4.27vw, 82px) 0 var(--gutter); display: flex; align-items: center; justify-content: space-between; gap: var(--gutter); }
.brand img { height: calc(var(--header-h) * .47); width: auto; }
.nav { display: flex; gap: clamp(16px, 1.56vw, 30px); align-items: center; }
.nav a { font-family: var(--font-nav); font-weight: 900; font-size: var(--t-30); letter-spacing: .12em; text-transform: uppercase; color: var(--nav); padding: 6px 0; border-bottom: 3px solid transparent; transition: border-color .2s var(--ease), color .2s var(--ease); }
.nav a:hover { border-bottom-color: var(--brand); }
.nav a[aria-current="page"] { color: var(--brand); }
.nav-toggle { display: none; width: 44px; height: 44px; border: 0; background: none; flex-direction: column; justify-content: center; gap: 6px; }
.nav-toggle span { display: block; height: 3px; background: var(--nav); border-radius: 2px; transition: transform .25s var(--ease), opacity .2s; }
@media (max-width: 900px) {
  .brand img { height: 46px; }
  .nav-toggle { display: flex; }
  .nav {
    position: fixed; inset: var(--header-h) 0 0 0; z-index: 40;
    flex-direction: column; align-items: flex-start; gap: 0;
    padding: var(--gutter); background: var(--white);
    transform: translateX(100%); transition: transform .3s var(--ease);
  }
  .nav.is-open { transform: none; }
  .nav a { font-size: 1.25rem; width: 100%; padding: 14px 0; border-bottom: 1px solid #dddddd; }
  .nav-toggle[aria-expanded="true"] span:nth-child(1) { transform: translateY(9px) rotate(45deg); }
  .nav-toggle[aria-expanded="true"] span:nth-child(2) { opacity: 0; }
  .nav-toggle[aria-expanded="true"] span:nth-child(3) { transform: translateY(-9px) rotate(-45deg); }
  body.nav-open { overflow: hidden; }
}

/* ---------- 5. buttons ----------
   .btn        dark 308x64 "START A QUOTE" (Rubik 900 32px)
   .btn--red   same shape in red
   .btn--quote red 346x82 "GET A QUOTE" (Work Sans 700 36px, tracked)
   .btn--big   red 553x105 "GET STARTED" (Work Sans 700 58px, tracked)
   .arrow-btn  red bar with an arrowhead, 448x112 (Rubik 900 32px)
   .arrow-btn--lg 760x190 (Rubik 900 55px)  */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .6em;
  min-width: clamp(200px, 16.04vw, 308px); height: clamp(48px, 3.33vw, 64px); padding: 0 1.2em;
  border: 0; border-radius: var(--radius);
  background: var(--nav); color: var(--white);
  font-family: var(--font-nav); font-weight: 900; font-size: var(--t-32); letter-spacing: 0; line-height: 1; text-transform: uppercase; white-space: nowrap;
  transition: background .2s var(--ease), color .2s var(--ease), transform .2s var(--ease);
}
.btn:hover { background: var(--brand); }
.btn:active { transform: translateY(1px); }
.btn--red { background: var(--brand); }
.btn--red:hover { background: var(--nav); }
.btn--quote { min-width: clamp(220px, 18.02vw, 346px); height: clamp(52px, 4.27vw, 82px); background: var(--brand); font-family: var(--font-head); font-weight: 700; font-size: var(--t-36); letter-spacing: .07em; }
.btn--quote:hover { background: var(--nav); }
.btn--big { min-width: clamp(240px, 28.8vw, 553px); height: clamp(60px, 5.47vw, 105px); background: var(--brand); font-family: var(--font-head); font-weight: 700; font-size: clamp(24px, 3vw, 57.5px); letter-spacing: .07em; }
.btn--big:hover { background: var(--nav); }
.btn--ghost { background: transparent; color: var(--accent); border: 2px solid var(--accent); }
.btn--ghost:hover { background: var(--accent); color: var(--white); }
.btn:disabled { opacity: .6; cursor: progress; }
/* phones: the standard button spans the column; the big/quote variants keep their own size */
@media (max-width: 900px) {
  .btn { width: 100%; }
  .btn--quote, .btn--big { width: auto; }
}

.arrow-btn {
  --ab: var(--brand);
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  font-family: var(--font-nav); font-weight: 900; font-size: var(--t-32); line-height: 1; text-transform: uppercase; color: var(--white); white-space: nowrap;
  background: var(--ab); height: 2em; padding: 0 1.1em 0 1.1em; min-width: 12.7em; margin-right: 1.15em; /* room for the arrowhead */
  transition: filter .2s var(--ease), transform .2s var(--ease);
}
.arrow-btn::after {
  content: ""; position: absolute; top: 50%; right: -1.15em; width: 2.1em; height: 3.7em; transform: translateY(-50%); /* tall enough that the slope clears the bar's corners where they meet */
  background: var(--ab); clip-path: polygon(0 0, 100% 50%, 0 100%);
}
.arrow-btn:hover { filter: brightness(.88); }
.arrow-btn:active { transform: translateY(1px); }
.arrow-btn--dark { --ab: var(--ink-3); }
.arrow-btn--lg { font-size: var(--t-55); min-width: 12.7em; }

/* ---------- 6. scroll reveal ---------- */
.js .reveal { opacity: 0; transform: translateY(24px); transition: opacity .7s var(--ease), transform .7s var(--ease); }
.js .reveal--left { transform: translateX(-32px); }
.js .reveal--right { transform: translateX(32px); }
.js .reveal.is-visible { opacity: 1; transform: none; }
.js .stagger > * { opacity: 0; transform: translateY(20px); transition: opacity .6s var(--ease), transform .6s var(--ease); }
.js .stagger.is-visible > * { opacity: 1; transform: none; }
.js .stagger.is-visible > :nth-child(2) { transition-delay: .08s; }
.js .stagger.is-visible > :nth-child(3) { transition-delay: .16s; }
.js .stagger.is-visible > :nth-child(4) { transition-delay: .24s; }
.js .stagger.is-visible > :nth-child(5) { transition-delay: .32s; }
.js .stagger.is-visible > :nth-child(6) { transition-delay: .40s; }

/* ---------- 7. forms ---------- */
.form { display: grid; gap: 18px; }
.form fieldset { display: grid; gap: 18px; margin: 0; padding: 0; border: 0; min-width: 0; }
.form legend { font-family: var(--font-head); font-weight: 900; text-transform: uppercase; font-size: var(--t-32); letter-spacing: .08em; margin-bottom: .5em; color: var(--ink-2); }
.field { display: grid; gap: 6px; }
.field label { font-weight: 700; font-size: .8em; text-transform: uppercase; letter-spacing: .06em; color: var(--ink-2); }
.field input, .field select, .field textarea {
  font: inherit; width: 100%; padding: .6em .8em;
  border: 2px solid var(--ink-3); border-radius: var(--radius); background: var(--white); color: var(--ink);
}
.field textarea { min-height: 6em; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--accent); outline: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 25%, transparent); }
.field--row { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
@media (max-width: 640px) { .field--row { grid-template-columns: 1fr; } }
.form-actions { display: flex; gap: 12px; flex-wrap: wrap; align-items: center; }
.form-steps { display: flex; gap: 8px; }
.form-steps span { width: 12px; height: 12px; border-radius: 50%; background: #dddddd; }
.form-steps span.is-done { background: var(--accent); }
.form-error { padding: 12px 16px; border-radius: var(--radius); background: #fdecea; color: #8a1c14; font-weight: 700; }
.form-success { padding: 24px; border-radius: var(--radius); background: var(--surface); }
/* honeypot: real people never see it */
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

/* ---------- 8. footer ---------- */
.site-footer { position: relative; background: var(--brand-2); color: var(--white); padding: calc(70 * var(--s)) 0 0; }
/* The arrow is centred on the footer's top edge (about, services): the bar is
   2em of --t-55 = 110 design px tall, so pull it up by the footer's 70px top
   padding plus half the bar. A red CTA band before the footer moves it just
   inside the dark instead. */
.site-footer__cta { display: flex; justify-content: center; margin: calc(-125 * var(--s)) 0 calc(130 * var(--s)); position: relative; z-index: 1; }
.cta-band + .site-footer .site-footer__cta { margin-top: calc(-10 * var(--s)); }
.site-footer__inner { max-width: var(--max); margin-inline: auto; padding: 0 clamp(20px, 4.27vw, 82px) 0 calc(85 * var(--s)); display: flex; align-items: flex-end; justify-content: space-between; gap: var(--gutter); }
.site-footer__brand img { width: clamp(240px, 35.5vw, 681px); }
.site-footer__right { display: flex; flex-direction: column; align-items: center; gap: 0; }
.site-footer__phone { font-family: var(--font-head); font-weight: 900; font-size: var(--t-80); line-height: 1; letter-spacing: 0; }
.site-footer__nav { display: flex; gap: clamp(16px, 1.56vw, 30px); font-family: var(--font-nav); font-weight: 900; font-size: var(--t-30); letter-spacing: .12em; text-transform: uppercase; line-height: 2; }
.site-footer__nav a:hover, .site-footer__fine a:hover { text-decoration: underline; }
.site-footer__fine { margin: calc(84 * var(--s)) 0 0; padding: 0 var(--gutter) calc(6 * var(--s)); text-align: center; font-family: var(--font-fine); font-weight: 800; font-size: var(--t-20); letter-spacing: .11em; line-height: 4.5; color: var(--fine); }
@media (max-width: 900px) {
  .site-footer { padding-top: 40px; }
  .site-footer__cta { margin: -64px 0 40px; } /* 40px padding + half the 48px bar */
  .cta-band + .site-footer .site-footer__cta { margin-top: 0; }
  .site-footer__inner { flex-direction: column; align-items: center; padding-inline: var(--gutter); gap: 28px; }
  .site-footer__right { align-items: center; }
  .site-footer__nav { flex-wrap: wrap; justify-content: center; gap: 8px 20px; }
  .site-footer__fine { line-height: 1.6; margin-top: 32px; padding-bottom: 24px; }
}

.to-top { position: fixed; right: 20px; bottom: 20px; z-index: 45; width: 48px; height: 48px; border: 0; border-radius: 50%; background: var(--accent); color: var(--white); font-size: 20px; opacity: 0; pointer-events: none; transition: opacity .25s var(--ease); }
.to-top.is-visible { opacity: 1; pointer-events: auto; }

/* ============================================================
   9. Design-specific styles for this site go below this line.
   Keep them grouped by page or component, in source order.
   ============================================================ */

/* ---------- roof sections: a peaked top edge (the Galvan gable) ----------
   .roof gets a triangle above its box in its own background colour.
   Set --roof-color on the element; the peak rises --roof-h above the box. */
.roof { --roof-color: var(--brand-2); position: relative; background: var(--roof-color); margin-top: var(--roof-h); }
.roof::before { content: ""; position: absolute; left: 0; right: 0; top: calc(-1 * var(--roof-h) + 1px); height: var(--roof-h); background: var(--roof-color); clip-path: polygon(0 100%, 50% 0, 100% 100%); }
.roof--red { --roof-color: var(--brand); }
.roof--beige { --roof-color: var(--surface); }
.roof__mark { position: absolute; left: 50%; transform: translateX(-50%); width: calc(292 * var(--s)); min-width: 120px; z-index: 1; }


/* ---------- trust badges (home intro, about credentials) ---------- */
.badges { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; margin-top: calc(120 * var(--s)); text-align: center; }
.badges li { display: flex; flex-direction: column; align-items: center; justify-content: flex-start; gap: calc(18 * var(--s)); }
.badges img { height: calc(120 * var(--s)); width: auto; min-height: 56px; }
.badges span { font-family: var(--font-head); font-weight: 900; font-size: var(--t-32); letter-spacing: .08em; text-transform: uppercase; color: var(--ink-2); line-height: .85; }
@media (max-width: 900px) {
  .badges { grid-template-columns: repeat(2, 1fr); gap: 28px 12px; margin-top: 48px; }
  .badges span { line-height: 1.05; }
}
/* phones: one badge per row, icon on the left, so every icon sits in the same
   column and every label starts on the same left edge */
@media (max-width: 640px) {
  .badges { grid-template-columns: 1fr; gap: 22px; text-align: left; }
  .badges li { flex-direction: row; align-items: center; gap: 18px; }
  .badges img { flex: none; }
}

/* ---------- photo collage with the red house outline (home, about) ----------
   Geometry from the design: 790x441 box; photo A at (0,70) 432 wide,
   photo B at (386,153) 404 wide, outline at (220,0) 283 wide. */
.collage { position: relative; width: 100%; aspect-ratio: 790 / 441; }
.collage img { position: absolute; }
.collage__a { left: 0; top: 15.9%; width: 54.7%; height: auto; }
.collage__b { left: 48.9%; top: 34.7%; width: 51.1%; }
.collage__outline { left: 27.85%; top: 0; width: 35.8%; }

/* ---------- service strip (red bar listing what we build) ---------- */
.strip { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; margin: 0; background: var(--brand); color: var(--white); text-align: center; padding: .35em var(--gutter); font-family: var(--font-head); font-weight: 900; font-size: var(--t-22); letter-spacing: .08em; text-transform: uppercase; line-height: 1.5; }
.strip span { white-space: nowrap; }
.strip i { font-style: normal; padding: 0 .7em; }
/* on desktop the type scales with the viewport so the items stay on one line (was home-only, now the default on every page) */
@media (min-width: 901px) { .strip { font-size: 1.1vw; } }
@media (max-width: 900px) { .strip { padding: 10px var(--gutter); line-height: 1.7; } .strip i { padding: 0 .5em; } }

/* ---------- red title bar (WHAT WE BUILD, FAQ headings) ---------- */
.bar { background: var(--brand); color: var(--white); text-align: center; padding: calc(48 * var(--s)) var(--gutter); min-height: calc(152 * var(--s)); display: flex; align-items: center; justify-content: center; }
.bar h2 { color: var(--white); font-size: var(--t-80); line-height: 1.15; }

/* ---------- service cards (beige rows with photo, icon, title, copy, arrow) ---------- */
.svc-list { display: grid; gap: calc(53 * var(--s)); }
.svc { display: grid; grid-template-columns: calc(510 * var(--s)) 1fr; column-gap: calc(76 * var(--s)); align-items: start; background: var(--surface); width: calc(1772 * var(--s)); max-width: 100%; padding: calc(33 * var(--s)) calc(148 * var(--s)) calc(45 * var(--s)) calc(56 * var(--s)); min-height: calc(488 * var(--s)); }
.svc__img { aspect-ratio: 510 / 383; width: 100%; object-fit: cover; }
.svc__head { display: flex; align-items: center; gap: calc(18 * var(--s)); padding-top: calc(4 * var(--s)); }
.svc__head img { width: calc(108 * var(--s)); min-width: 52px; height: auto; }
.svc h3 { font-size: var(--t-50); letter-spacing: .08em; color: var(--ink-2); line-height: 1; }
.svc__rule { border: 0; border-top: 1px solid var(--line); margin: calc(22 * var(--s)) 0 calc(18 * var(--s)); }
.svc p { max-width: calc(946 * var(--s)); }
.svc .arrow-btn { position: absolute; right: calc(44 * var(--s)); bottom: calc(45 * var(--s)); }
.svc { position: relative; }
@media (max-width: 900px) {
  .svc { grid-template-columns: 1fr; width: 100%; padding: 20px 20px 24px; gap: 18px; }
  .svc__head img { width: 56px; }
  /* phones: the arrow button sits in flow, centred under the copy (its margin box includes the arrowhead, so justify-self centres the whole shape) */
  .svc .arrow-btn { position: relative; right: auto; bottom: auto; justify-self: center; margin-top: 12px; }
}

/* ---------- FAQ list (expandable question rows with red rules; one open at a time, see site.js) ---------- */
.faq { width: calc(1470 * var(--s)); max-width: 100%; margin: calc(67 * var(--s)) auto calc(134 * var(--s)); padding-inline: var(--gutter); list-style: none; }
.faq li { border-bottom: 3px solid var(--brand); }
.faq details { margin: 0; }
/* the question: equal space above and below so it sits centred between the rules */
.faq summary { display: flex; align-items: center; justify-content: space-between; gap: calc(40 * var(--s)); padding: calc(48 * var(--s)) 0; cursor: pointer; list-style: none; font-family: var(--font-head); font-weight: 900; font-size: var(--t-40); letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); line-height: 1; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: "+"; flex: none; font-weight: 700; font-size: 1.3em; line-height: 1; color: var(--brand); transition: transform .2s ease; }
.faq details[open] summary::after { content: "\2013"; }
.faq summary:hover { color: var(--brand); }
.faq summary:focus-visible { outline: 2px solid var(--brand); outline-offset: 4px; }
/* the answer */
.faq__a { padding: 0 calc(80 * var(--s)) calc(48 * var(--s)) 0; font-size: var(--t-22); line-height: 1.6; color: var(--ink); }
.faq__a p { margin: 0 0 .8em; max-width: 60em; }
.faq__a p:last-child { margin-bottom: 0; }
@media (max-width: 900px) {
  .faq { margin: 24px auto 60px; }
  .faq summary { padding: 20px 0; line-height: 1.15; gap: 16px; }
  .faq__a { padding: 0 0 20px; }
}

/* ---------- "serving" two-column block above the map ---------- */
.serving { display: grid; grid-template-columns: calc(838 * var(--s)) 1fr; gap: calc(80 * var(--s)); align-items: start; padding: calc(150 * var(--s)) calc(147 * var(--s)) calc(90 * var(--s)) calc(122 * var(--s)); }
.serving h2 { font-size: var(--t-60); }
.serving p { margin: 0; }
.map { display: block; width: 100%; aspect-ratio: 1920 / 708; object-fit: cover; }
/* phone: extra room at the top so the Start a Quote arrow hanging off the section above does not crowd the heading */
@media (max-width: 900px) { .serving { grid-template-columns: 1fr; gap: 20px; padding: 80px var(--gutter) 40px; } }

/* ---------- red gable CTA band before the footer ---------- */
.cta-band { color: var(--white); text-align: center; padding: 0 var(--gutter) calc(95 * var(--s)); }
.cta-band__inner { position: relative; margin-top: calc(-30 * var(--s)); }
.cta-band .cta-band__title { color: var(--white); font-size: var(--t-100); line-height: .8; max-width: calc(1261 * var(--s)); margin: 0 auto; }
.cta-band__text { margin: calc(24 * var(--s)) 0 0; }
.cta-band__phone { display: inline-block; font-family: var(--font-head); font-weight: 900; font-size: var(--t-80); line-height: 1; }
@media (max-width: 900px) { .cta-band { padding-bottom: 40px; } .cta-band__inner { margin-top: 0; } }

/* ---------- bullet list with the little red house-G ---------- */
.bullets { display: grid; gap: calc(39 * var(--s)); }
.bullets li { display: grid; grid-template-columns: calc(61 * var(--s)) 1fr; gap: calc(35 * var(--s)); align-items: center; font-family: var(--font-head); font-weight: 900; font-size: var(--t-32); letter-spacing: .08em; text-transform: uppercase; color: var(--ink-2); line-height: .85; }
.bullets li img { width: 100%; min-width: 32px; }
@media (max-width: 900px) { .bullets li { grid-template-columns: 36px 1fr; gap: 16px; line-height: 1.05; } }

/* ---------- feature card (red or dark, centred icon + title + copy) ---------- */
.fcard { background: var(--brand); color: var(--white); text-align: center; padding: calc(30 * var(--s)) calc(60 * var(--s)) calc(40 * var(--s)); display: flex; flex-direction: column; align-items: center; }
.fcard--dark { background: var(--ink-3); }
.fcard img { width: calc(108 * var(--s)); min-width: 52px; }
.fcard h3 { color: var(--white); font-size: var(--t-40); letter-spacing: .08em; line-height: 1; margin-top: calc(22 * var(--s)); }
.fcard p { margin: calc(26 * var(--s)) 0 0; text-align: left; line-height: 1.07; }
.fcard--center p { text-align: center; }

/* ---------- gable section with one feature card (service detail pages) ---------- */
.gable { padding: calc(36 * var(--s)) var(--gutter) 0; margin-top: calc(var(--roof-h) + 60 * var(--s)); text-align: center; } /* extra room above the peak so the mark sits clear of the section before it */
.gable .roof__mark { top: calc(-1 * var(--roof-h) - 16 * var(--s)); }
.gable h2 { font-size: var(--t-60); max-width: calc(840 * var(--s)); margin: 0 auto; }
.gable__cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: calc(67 * var(--s)); width: calc(1520 * var(--s)); max-width: 100%; margin: calc(90 * var(--s)) auto 0; }
.gable__cards--one { width: calc(1006 * var(--s)); }
.gable__cards--one .fcard { padding: calc(30 * var(--s)) calc(130 * var(--s)) calc(60 * var(--s)); }
/* the arrow sits half in the beige, half over whatever follows: the button is 2em tall,
   so a -1em bottom margin leaves the section edge exactly through its middle */
.gable__cta { display: flex; justify-content: center; margin-top: calc(100 * var(--s)); }
.gable__cta .arrow-btn { margin-bottom: -1em; }
@media (max-width: 900px) {
  .gable { padding-top: 60px; margin-top: calc(var(--roof-h) + 48px); } /* extra room above the peak so the arrow button before it does not sit on the mark */
  .gable .roof__mark { width: 140px; top: calc(-1 * var(--roof-h) - 10px); }
  .gable__cards { width: 100%; margin-top: 40px; gap: 20px; }
  .gable__cards--one .fcard { padding: 24px 24px 32px; }
  .gable__cta { margin-top: 40px; }
}

/* ---------- two-column intro (heading left, copy right) ---------- */
.intro2 { display: grid; grid-template-columns: calc(673 * var(--s)) 1fr; gap: calc(132 * var(--s)); align-items: start; padding: calc(81 * var(--s)) calc(168 * var(--s)) calc(48 * var(--s)) calc(121 * var(--s)); }
.intro2 h2 { font-size: var(--t-60); }
.intro2 p { margin: 0; line-height: 1.43; }
.intro2 h2 + p { margin-top: calc(30 * var(--s)); }
.intro2--bullets { grid-template-columns: calc(826 * var(--s)) 1fr; gap: calc(120 * var(--s)); padding-bottom: calc(74 * var(--s)); }
.intro2--bullets p { line-height: 1.43; }
.intro2 .btn { margin-top: calc(42 * var(--s)); }
.intro2--flip h2 { padding-top: calc(27 * var(--s)); }
/* commercial: centred heading over one bullet column, second column alongside */
.projects { display: grid; grid-template-columns: 1fr 1fr; gap: calc(120 * var(--s)); align-items: start; padding: calc(81 * var(--s)) calc(168 * var(--s)) 0 calc(121 * var(--s)); }
.projects h2 { font-size: var(--t-60); text-align: center; max-width: calc(739 * var(--s)); margin: 0 auto calc(58 * var(--s)); }
.projects .bullets--right { padding-top: calc(48 * var(--s)); }
@media (max-width: 900px) {
  .intro2, .intro2--bullets { grid-template-columns: 1fr; gap: 20px; padding: 48px var(--gutter) 36px; }
  .projects { grid-template-columns: 1fr; gap: 28px; padding: 48px var(--gutter) 0; }
  .projects h2 { text-align: left; margin: 0 0 20px; }
  .projects .bullets--right { padding-top: 0; }
}

/* ---------- service page hero (red panel + photo) ---------- */
.shero { display: grid; grid-template-columns: 50% 50%; min-height: calc(704 * var(--s)); }
.shero--wide { grid-template-columns: 55.1% 44.9%; }
.shero__panel { background: var(--brand); color: var(--white); padding: calc(59 * var(--s)) calc(60 * var(--s)) calc(50 * var(--s)) calc(94 * var(--s)); display: flex; flex-direction: column; justify-content: flex-start; }
.shero__panel h1 { color: var(--white); font-size: var(--t-80); line-height: .85; max-width: calc(773 * var(--s)); }
.shero--wide .shero__panel h1 { max-width: calc(930 * var(--s)); }
.shero__panel p { margin: calc(28 * var(--s)) 0 0; max-width: calc(750 * var(--s)); line-height: 1.1; }
.shero__img { width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 900px) {
  .shero, .shero--wide { grid-template-columns: 1fr; }
  .shero__panel { padding: 32px var(--gutter); }
  .shero__panel p { line-height: 1.4; }
  .shero__img { aspect-ratio: 4 / 3; }
}

/* ---------- centred section heading ---------- */
.center-head { text-align: center; padding: calc(100 * var(--s)) var(--gutter) calc(78 * var(--s)); }
.center-head h2 { font-size: var(--t-60); max-width: calc(860 * var(--s)); margin: 0 auto; }

/* ---------- phone widths: design measures (max-widths in design px) no longer apply ---------- */
@media (max-width: 900px) {
  .shero__panel h1, .shero--wide .shero__panel h1, .shero__panel p, .gable h2, .cta-band .cta-band__title, .center-head h2,
  .svc p, .fcard p, .projects h2, .serving h2, .intro2 h2, .intro2 p, .bullets li { max-width: none; }
  .svc h3 { line-height: 1.05; }
}
