/* ============================================================
   THE AUTOMATED PARKING COMPANY — shared design system
   Concept B, "Precision Engineering". Tokens per V2_Phase3-5 §14.
   Loaded by every page. In production these become the token layer
   plus the component library described in §21.
   ============================================================ */

:root{
  /* ---- Color — §14.1 ---- */
  --graphite-900:#14171A; --graphite-800:#22272B; --graphite-600:#3D454B;
  --steel-400:#8B959C; --steel-200:#D4DADE; --steel-100:#E9EDEF;
  --warm-white:#F7F6F4; --white:#FFFFFF;
  --accent-600:#0B5FD9; --accent-700:#0A4CAE; --accent-100:#E4EEFC;
  --accent-dark:#5FA3F5;              /* link on graphite — 7.2:1 */
  --safety-500:#E8590C;               /* RESERVED: safety + emergency only */
  --success-600:#1F7A4D; --danger-600:#B3261E;

  /* ---- Type — §14.2 ---- */
  --font-head:"Inter Tight","Inter",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-body:"Inter",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --font-mono:ui-monospace,"Cascadia Code",Consolas,monospace;

  --display:clamp(2.5rem,5vw,4rem);
  --h1:clamp(2rem,3.5vw,3rem);
  --h2:clamp(1.625rem,2.5vw,2.25rem);
  --h3:clamp(1.25rem,1.6vw,1.5rem);
  --body-lg:1.1875rem; --body:1.0625rem; --small:.9375rem; --label:.8125rem;
  --spec-xl:clamp(2.75rem,4.5vw,4rem);

  /* ---- Space / geometry — §14.3 ---- */
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;
  --s7:48px;--s8:64px;--s9:96px;--s10:128px;
  --maxw:1280px; --measure:68ch;
  --r-in:2px; --r-btn:4px; --r-modal:8px;
  --e1:0 1px 2px rgb(20 23 26 / .06);
  --e2:0 4px 12px rgb(20 23 26 / .10);
  --e3:0 12px 32px rgb(20 23 26 / .16);
  --ease:cubic-bezier(.2,0,.38,.9);
  --ease-out:cubic-bezier(.16,1,.3,1);
}

/* ============ BASE ============ */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--warm-white);color:var(--graphite-900);
  font-family:var(--font-body);font-size:var(--body);line-height:1.65;
  font-feature-settings:"kern" 1;-webkit-font-smoothing:antialiased}
h1,h2,h3,h4{font-family:var(--font-head);font-weight:600;margin:0;text-wrap:balance}
h1{font-size:var(--h1);line-height:1.1;letter-spacing:-.015em}
h2{font-size:var(--h2);line-height:1.15;letter-spacing:-.01em}
h3{font-size:var(--h3);line-height:1.25;letter-spacing:-.005em}
h4{font-size:var(--body-lg);line-height:1.3}
p{margin:0 0 var(--s4);max-width:var(--measure)}
ul{margin:0;padding:0;list-style:none}
a{color:var(--accent-600);text-decoration:underline;text-underline-offset:.15em;text-decoration-thickness:1px}
a:hover{color:var(--accent-700);text-decoration-thickness:2px}
:focus-visible{outline:2px solid var(--accent-600);outline-offset:2px;border-radius:var(--r-in)}
.on-dark :focus-visible{outline-color:var(--warm-white)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--accent-600);color:#fff;
  padding:var(--s3) var(--s5);text-decoration:none;font-weight:600}
.skip:focus{left:var(--s4);top:var(--s4)}

.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--s5)}
@media(min-width:1024px){.wrap{padding-inline:72px}}
section{padding-block:var(--s7)}
@media(min-width:768px){section{padding-block:var(--s8)}}
@media(min-width:1024px){section{padding-block:var(--s9)}}
.sec-tight{padding-block:var(--s7)!important}
.sec-fill{background:var(--white);border-block:1px solid var(--steel-200)}
.sec-steel{background:var(--steel-100);border-block:1px solid var(--steel-200)}

/* ============ DARK GROUNDS + DRAFTING GRID ============ */
.on-dark{background:var(--graphite-900);color:var(--warm-white)}
.on-dark h1,.on-dark h2,.on-dark h3,.on-dark h4{color:var(--white)}
.on-dark a{color:var(--accent-dark)}
.on-dark p{color:#C9D0D5}
.grid-bg{position:relative;overflow:hidden}
.grid-bg::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    linear-gradient(to right,rgba(139,149,156,.10) 1px,transparent 1px),
    linear-gradient(to bottom,rgba(139,149,156,.10) 1px,transparent 1px);
  background-size:48px 48px;
  -webkit-mask-image:radial-gradient(ellipse 90% 70% at 50% 40%,#000 30%,transparent 100%);
          mask-image:radial-gradient(ellipse 90% 70% at 50% 40%,#000 30%,transparent 100%)}
.on-dark.grid-bg::before{background-image:
  linear-gradient(to right,rgba(139,149,156,.14) 1px,transparent 1px),
  linear-gradient(to bottom,rgba(139,149,156,.14) 1px,transparent 1px)}
.grid-bg > *{position:relative;z-index:1}

.eyebrow{font-size:var(--label);letter-spacing:.06em;text-transform:uppercase;font-weight:600;
  color:var(--graphite-600);margin:0 0 var(--s3);display:flex;align-items:center;gap:var(--s3)}
.eyebrow::before{content:"";width:18px;height:1px;background:var(--accent-600);flex:none}
.on-dark .eyebrow{color:var(--steel-400)}
.on-dark .eyebrow::before{background:var(--accent-dark)}

/* ============ BUTTONS + LINKS ============ */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);
  min-height:48px;padding:0 var(--s5);border-radius:var(--r-btn);
  font-family:var(--font-body);font-size:var(--body);font-weight:600;
  text-decoration:none;border:1.5px solid transparent;cursor:pointer;
  transition:background-color 120ms var(--ease),border-color 120ms var(--ease),transform 120ms var(--ease)}
.btn-primary{background:var(--accent-600);color:#fff}
.btn-primary:hover{background:var(--accent-700);color:#fff;text-decoration:none;transform:translateY(-1px)}
.btn-primary:active{transform:translateY(0)}
.btn-ghost{background:transparent;color:var(--graphite-900);border-color:var(--graphite-600)}
.btn-ghost:hover{background:var(--graphite-900);color:var(--white);text-decoration:none}
.on-dark .btn-ghost{color:var(--warm-white);border-color:rgba(247,246,244,.5)}
.on-dark .btn-ghost:hover{background:var(--warm-white);color:var(--graphite-900)}
.on-dark .btn-primary{background:var(--warm-white);color:var(--graphite-900)}
.on-dark .btn-primary:hover{background:#fff;color:var(--graphite-900)}
.btn-emergency{background:var(--safety-500);color:#fff}
.btn-emergency:hover{background:#c94a09;color:#fff;text-decoration:none}
.btn-row{display:flex;flex-wrap:wrap;gap:var(--s3)}

/* Standalone action links get a real touch target (≥44px), not just the
   24px WCAG 2.2 SC 2.5.8 floor. Inline links inside prose are exempt. */
/* inline-block, not inline-flex: as a flex container the arrow becomes a
   separate item and strands itself on its own line when the label wraps.
   Kept in the text flow with a non-breaking space, it stays glued to the
   last word. Padding + min-height preserve the 44px touch target. */
.link-arrow{font-weight:600;text-decoration:none;display:inline-block;
  padding-block:10px;min-height:44px}
.link-arrow::after{content:"\00a0→";display:inline-block;transition:transform 120ms var(--ease)}
.link-arrow:hover{text-decoration:underline}
.link-arrow:hover::after{transform:translateX(3px)}

/* ============ UTILITY BAR ============ */
.utility{background:var(--graphite-900);color:#C9D0D5;font-size:var(--small)}
.utility .wrap{display:flex;align-items:center;gap:var(--s5);min-height:40px;flex-wrap:wrap}
.utility a{color:#C9D0D5;text-decoration:none;display:inline-flex;align-items:center;min-height:40px}
.utility a:hover{color:#fff;text-decoration:underline}
.utility .sep{margin-left:auto}
.utility .emerg{color:#FFB088;font-weight:600;gap:6px}
.utility .emerg::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--safety-500)}
.u-hide{display:none}
@media(min-width:768px){.u-hide{display:inline-flex}}

/* ============ HEADER ============ */
header{position:sticky;top:0;z-index:50;background:rgba(247,246,244,.92);
  backdrop-filter:blur(8px);border-bottom:1px solid var(--steel-200)}
.nav{display:flex;align-items:center;gap:var(--s5);min-height:72px}
.logo{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--graphite-900);flex:none}
.logo-mark{width:30px;height:30px;flex:none}
.logo-txt{font-family:var(--font-head);font-weight:600;font-size:.9375rem;line-height:1.15;letter-spacing:-.01em}
.logo-txt span{display:block;font-size:.6875rem;font-weight:500;color:var(--graphite-600);
  letter-spacing:.08em;text-transform:uppercase}
.nav-links{display:none;gap:var(--s5);margin-left:var(--s5)}
@media(min-width:1024px){.nav-links{display:flex}}
.nav-links a{color:var(--graphite-900);text-decoration:none;font-weight:500;font-size:var(--small);
  padding:var(--s2) 0;border-bottom:2px solid transparent}
.nav-links a:hover{border-bottom-color:var(--accent-600);color:var(--accent-700)}
.nav-links a[aria-current="page"]{border-bottom-color:var(--accent-600);font-weight:600}
.nav-cta{margin-left:auto;display:none}
@media(min-width:1024px){.nav-cta{display:inline-flex}}
.menu-btn{margin-left:auto;display:inline-flex;align-items:center;gap:var(--s2);min-height:44px;
  padding:0 var(--s3);background:none;border:1.5px solid var(--graphite-600);border-radius:var(--r-btn);
  font:600 var(--small) var(--font-body);color:var(--graphite-900);cursor:pointer}
@media(min-width:1024px){.menu-btn{display:none}}
#drawer{display:none;border-top:1px solid var(--steel-200);background:var(--warm-white);padding-block:var(--s4)}
#drawer.open{display:block}
#drawer a{display:flex;align-items:center;min-height:48px;color:var(--graphite-900);text-decoration:none;
  font-weight:500;border-bottom:1px solid var(--steel-200)}
#drawer .btn{margin-top:var(--s4);width:100%}

/* ============ BREADCRUMB ============ */
.crumb{font-size:var(--small);padding-block:var(--s4);border-bottom:1px solid var(--steel-200);
  background:var(--warm-white)}
.crumb ol{display:flex;flex-wrap:wrap;gap:var(--s2);list-style:none;margin:0;padding:0;align-items:center}
.crumb li{display:flex;align-items:center;gap:var(--s2);color:var(--graphite-600)}
.crumb li+li::before{content:"›";color:var(--steel-400)}
.crumb a{color:var(--graphite-600);display:inline-flex;align-items:center;min-height:36px}
.crumb [aria-current="page"]{color:var(--graphite-900);font-weight:600}

/* ============ PAGE HERO (inner templates) ============ */
.phero{padding-block:var(--s7) var(--s8)}
@media(min-width:1024px){.phero{padding-block:var(--s8) var(--s9)}}
.phero-grid{display:grid;gap:var(--s7);align-items:start}
@media(min-width:1000px){.phero-grid{grid-template-columns:1.05fr .95fr;gap:var(--s8)}}
.phero h1{margin-bottom:var(--s4)}
.phero .lede{font-size:var(--body-lg);color:#C9D0D5;margin-bottom:var(--s6)}
.headline-specs{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s4);
  padding-block:var(--s5);border-block:1px solid rgba(139,149,156,.35);margin-bottom:var(--s6)}
.headline-specs b{display:block;font-family:var(--font-head);font-size:clamp(1.6rem,3vw,2.25rem);
  font-weight:600;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:#fff}
.headline-specs span{display:block;font-size:var(--label);color:var(--steel-400);margin-top:6px;
  letter-spacing:.04em;text-transform:uppercase}
.fig-frame{border:1px solid rgba(139,149,156,.35);background:rgba(34,39,43,.6);padding:var(--s5);margin:0}
.fig-frame svg{width:100%;height:auto;display:block}
.fig-frame figcaption{font-size:var(--label);color:var(--steel-400);margin-top:var(--s3);
  display:flex;justify-content:space-between;gap:var(--s3)}

/* ============ PROSE + LISTS ============ */
.lead{font-size:var(--body-lg)}
.cols-2{display:grid;gap:var(--s6)}
@media(min-width:900px){.cols-2{grid-template-columns:1fr 1fr;gap:var(--s8)}}
.checklist li{position:relative;padding-left:28px;margin-bottom:var(--s3);font-size:var(--small)}
.checklist li::before{content:"";position:absolute;left:0;top:.55em;width:12px;height:2px;background:var(--accent-600)}
.numlist{counter-reset:n;border-top:1px solid var(--steel-200)}
.numlist li{counter-increment:n;display:grid;grid-template-columns:40px 1fr;gap:var(--s4);
  padding-block:var(--s4);border-bottom:1px solid var(--steel-200)}
.numlist li::before{content:counter(n,decimal-leading-zero);font-family:var(--font-mono);
  font-size:var(--small);color:var(--accent-600);font-variant-numeric:tabular-nums}
.numlist h3{font-size:var(--body-lg);margin-bottom:var(--s1)}
.numlist p{font-size:var(--small);color:var(--graphite-600);margin:0}

/* ============ CARDS + TILES ============ */
.cards{display:grid;gap:var(--s5);margin-top:var(--s6)}
@media(min-width:640px){.cards{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1100px){.cards{grid-template-columns:repeat(4,1fr)}}
.cards-3{display:grid;gap:var(--s5);margin-top:var(--s6)}
@media(min-width:768px){.cards-3{grid-template-columns:repeat(3,1fr)}}
.card{background:var(--white);border:1px solid var(--steel-200);display:flex;flex-direction:column;
  transition:box-shadow 120ms var(--ease),transform 120ms var(--ease)}
.card:hover{box-shadow:var(--e2);transform:translateY(-2px)}
.card-fig{aspect-ratio:16/10;background:var(--steel-100);border-bottom:1px solid var(--steel-200);
  display:grid;place-items:center;padding:var(--s4)}
.card-fig svg{width:100%;height:100%;max-height:130px}
.card-body{padding:var(--s5);display:flex;flex-direction:column;flex:1}
.card h3{font-size:var(--body-lg);margin-bottom:var(--s2)}
.card .why{font-size:var(--small);color:var(--graphite-600);margin-bottom:var(--s4)}
.card .link-arrow{margin-top:auto;font-size:var(--small)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:var(--s5)}
.chip{font-size:var(--label);font-weight:500;background:var(--accent-100);color:var(--accent-700);
  padding:3px 8px;border-radius:var(--r-in);font-variant-numeric:tabular-nums}
.tiles{display:grid;gap:var(--s5);margin-top:var(--s6)}
@media(min-width:640px){.tiles{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.tiles{grid-template-columns:repeat(4,1fr)}}
.tiles.res{grid-template-columns:1fr}
@media(min-width:768px){.tiles.res{grid-template-columns:repeat(3,1fr)}}
.tile{background:var(--white);border:1px solid var(--steel-200);padding:var(--s5);
  display:flex;flex-direction:column;transition:border-color 120ms var(--ease)}
.tile:hover{border-color:var(--accent-600)}
.tile h3{font-size:var(--body);margin-bottom:var(--s2)}
.tile p{font-size:var(--small);color:var(--graphite-600);margin-bottom:var(--s4)}
.tile .link-arrow{margin-top:auto;font-size:var(--small)}

/* ============ FILTER BAR + INDEX GRID ============ */
.filterbar{display:flex;flex-wrap:wrap;gap:var(--s5) var(--s7);align-items:flex-start;
  padding-bottom:var(--s5);border-bottom:1px solid var(--steel-200);margin-bottom:var(--s6)}
.filterbar fieldset{border:0;margin:0;padding:0}
.filterbar legend{font-size:var(--label);letter-spacing:.06em;text-transform:uppercase;
  font-weight:600;color:var(--graphite-600);padding:0;margin-bottom:var(--s3)}
.chipset{display:flex;flex-wrap:wrap;gap:var(--s2)}
.fchip{min-height:40px;padding:0 var(--s4);background:var(--white);cursor:pointer;
  border:1.5px solid var(--steel-200);border-radius:var(--r-btn);
  font:500 var(--small) var(--font-body);color:var(--graphite-600);
  transition:border-color 120ms var(--ease),background-color 120ms var(--ease),color 120ms var(--ease)}
.fchip:hover{border-color:var(--accent-600);color:var(--accent-700)}
/* Selection carries a border weight and a text-colour change, not colour alone */
.fchip.is-on{background:var(--accent-600);border-color:var(--accent-600);color:#fff;font-weight:600}
.filter-count{flex:1 1 100%;margin:0;font-size:var(--small);color:var(--graphite-600)}
.proj-grid{display:grid;gap:var(--s5);list-style:none;margin:0;padding:0}
@media(min-width:640px){.proj-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.proj-grid{grid-template-columns:repeat(3,1fr)}}
.proj h2{font-size:var(--body-lg);margin-bottom:var(--s2)}
.proj[hidden]{display:none}
.empty-state{margin-top:var(--s6);padding:var(--s6);text-align:center;
  border:1px dashed var(--steel-400);color:var(--graphite-600);font-size:var(--small);max-width:none}

/* ============ PLACEHOLDER SLOT ============ */
.slot{border:1.5px dashed var(--steel-400);background:repeating-linear-gradient(45deg,
  transparent,transparent 8px,rgba(139,149,156,.06) 8px,rgba(139,149,156,.06) 16px);
  padding:var(--s5);font-size:var(--small);color:var(--graphite-600)}
.slot b{display:block;font-family:var(--font-mono);font-size:var(--label);letter-spacing:.04em;
  text-transform:uppercase;color:var(--graphite-900);margin-bottom:var(--s2)}
.slot p{margin:0;max-width:none}
.slot p+p{margin-top:var(--s3)}
.on-dark .slot{border-color:rgba(139,149,156,.5);color:#C9D0D5}
.on-dark .slot b{color:#fff}

/* ============ CALLOUT ============ */
.callout{border-left:3px solid var(--accent-600);background:var(--accent-100);
  padding:var(--s4) var(--s5);font-size:var(--small);margin-block:var(--s5)}
.callout p{margin:0;max-width:none}
.callout.safety{border-left-color:var(--safety-500);background:#FDF0E8}
.callout strong{display:block;margin-bottom:4px}

/* ============ SPEC TABLE ============ */
.spec-wrap{margin-top:var(--s6);overflow-x:auto;border:1px solid var(--steel-200);background:var(--white)}
table{border-collapse:collapse;width:100%;min-width:520px;font-size:var(--small)}
caption{text-align:left;padding:var(--s4) var(--s5);font-size:var(--small);color:var(--graphite-600);
  border-bottom:1px solid var(--steel-200)}
th,td{padding:var(--s3) var(--s5);text-align:left;border-bottom:1px solid var(--steel-200)}
th{font-weight:600;background:var(--steel-100);font-size:var(--label);letter-spacing:.04em;text-transform:uppercase}
td:not(:first-child),th:not(:first-child){text-align:right}
td:not(:first-child){font-variant-numeric:tabular-nums}
tbody tr:nth-child(even){background:var(--warm-white)}
tbody tr:last-child td{border-bottom:0}

/* Spec tables transpose to stacked pairs below 768px — §15.
   A multi-column table that scrolls sideways on a phone is how an architect
   loses the pit-depth figure. Same data, nothing hidden off-screen. */
@media(max-width:767px){
  .spec-wrap{overflow-x:visible;border:0;background:none}
  .spec-wrap table{min-width:0;display:block}
  .spec-wrap caption{padding:0 0 var(--s4);border-bottom:0}
  .spec-wrap thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  .spec-wrap tbody,.spec-wrap tr,.spec-wrap th,.spec-wrap td{display:block}
  .spec-wrap tbody tr{background:var(--white);border:1px solid var(--steel-200);
    padding:var(--s4) var(--s5);margin-bottom:var(--s3)}
  .spec-wrap tbody tr:nth-child(even){background:var(--white)}
  .spec-wrap th[scope="row"]{font-family:var(--font-head);font-size:var(--body-lg);font-weight:600;
    background:none;text-transform:none;letter-spacing:-.005em;padding:0 0 var(--s3);border-bottom:0}
  .spec-wrap td{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s4);
    padding:var(--s2) 0;border-bottom:0;border-top:1px solid var(--steel-200);text-align:right}
  .spec-wrap td::before{content:attr(data-label);font-size:var(--label);letter-spacing:.04em;
    text-transform:uppercase;font-weight:600;color:var(--graphite-600);text-align:left;flex:none}
}

/* ============ ACCORDION (FAQ, process, cutaway list) ============ */
.acc{border-top:1px solid var(--steel-200);margin-top:var(--s6)}
.acc-item{border-bottom:1px solid var(--steel-200)}
.acc-btn{width:100%;display:flex;align-items:center;gap:var(--s4);padding:var(--s4) 0;background:none;
  border:0;font:600 var(--body-lg) var(--font-head);color:var(--graphite-900);text-align:left;cursor:pointer;
  line-height:1.3}
.acc-btn .n{flex:none;font-family:var(--font-mono);font-size:var(--small);color:var(--accent-600);
  font-variant-numeric:tabular-nums;min-width:28px}
.acc-btn .chev{margin-left:auto;flex:none;transition:transform 200ms var(--ease)}
.acc-btn[aria-expanded="true"] .chev{transform:rotate(180deg)}
.acc-panel{display:none;padding:0 0 var(--s5) 0}
.acc-panel.open{display:block}
.acc-panel p{font-size:var(--small);color:var(--graphite-600)}
.acc-panel p:last-child{margin-bottom:0}
.acc-indent .acc-panel{padding-left:44px}
.acc-panel .deliver{font-size:var(--small);color:var(--graphite-900);font-weight:500}
.acc-panel .deliver::before{content:"Deliverable — ";color:var(--accent-700);font-weight:600}
.on-dark .acc,.on-dark .acc-item{border-color:rgba(139,149,156,.3)}
.on-dark .acc-btn{color:var(--warm-white);font-size:var(--body)}
.on-dark .acc-panel p{color:#C9D0D5}

/* ============ DOWNLOADS ============ */
.dl-list{display:grid;gap:var(--s3);margin-top:var(--s5)}
.dl{display:flex;align-items:center;gap:var(--s4);padding:var(--s4) var(--s5);background:var(--white);
  border:1px solid var(--steel-200);text-decoration:none;color:var(--graphite-900);
  transition:border-color 120ms var(--ease)}
.dl:hover{border-color:var(--accent-600);color:var(--graphite-900);text-decoration:none}
.dl svg{flex:none;color:var(--accent-600)}
.dl b{display:block;font-weight:600;font-size:var(--body)}
.dl span{display:block;font-size:var(--label);color:var(--graphite-600)}
.dl .gate{margin-left:auto;font-size:var(--label);font-weight:600;text-transform:uppercase;
  letter-spacing:.04em;color:var(--graphite-600);flex:none}
.dl .gate.free{color:var(--success-600)}

/* ============ FINAL CTA + FORM ============ */
.cta-grid{display:grid;gap:var(--s7);margin-top:var(--s6)}
@media(min-width:900px){.cta-grid{grid-template-columns:1.15fr .85fr;gap:var(--s8)}}
form{background:rgba(34,39,43,.65);border:1px solid rgba(139,149,156,.35);padding:var(--s6)}
.f-progress{font-size:var(--label);letter-spacing:.06em;text-transform:uppercase;color:var(--steel-400);
  margin-bottom:var(--s5);display:flex;justify-content:space-between;gap:var(--s3);align-items:center}
.field{margin-bottom:var(--s5)}
.field label{display:block;font-size:var(--label);letter-spacing:.04em;text-transform:uppercase;
  font-weight:600;color:#C9D0D5;margin-bottom:6px}
.field .req{color:var(--accent-dark)}
.field input,.field select,.field textarea{width:100%;min-height:48px;padding:var(--s3) var(--s4);
  background:var(--graphite-900);color:#fff;border:1.5px solid rgba(139,149,156,.5);
  border-radius:var(--r-in);font:400 var(--body) var(--font-body)}
.field textarea{min-height:96px;resize:vertical}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent-dark);outline-offset:1px}
.field .hint{font-size:var(--label);color:var(--steel-400);margin-top:6px}
.field .err{display:none;font-size:var(--label);color:#FF9A93;margin-top:6px;align-items:center;gap:6px}
.field.invalid .err{display:flex}
.field.invalid input,.field.invalid select{border-color:#FF9A93}
.two{display:grid;gap:var(--s4)}
@media(min-width:560px){.two{grid-template-columns:1fr 1fr}}
.f-consent{font-size:var(--label);color:var(--steel-400);margin:var(--s4) 0 0;max-width:none}
.f-step2{display:none} .f-step2.on{display:block}
.f-step1.off{display:none}
.f-ok{display:none;padding:var(--s5);border:1.5px solid var(--success-600);background:rgba(31,122,77,.14)}
.f-ok.on{display:block}
.f-ok h2,.f-ok h3{color:#fff;font-size:var(--h3);margin-bottom:var(--s2)}
.f-ok p{color:#C9D0D5;font-size:var(--small);margin:0}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.linkbtn{background:none;border:0;color:var(--accent-dark);font:600 var(--label) var(--font-body);
  text-transform:uppercase;letter-spacing:.06em;cursor:pointer;text-decoration:underline;
  min-height:44px;padding:0}
.contact-alt dt{font-size:var(--label);letter-spacing:.06em;text-transform:uppercase;
  color:var(--steel-400);margin-bottom:6px}
.contact-alt dd{margin:0 0 var(--s5);font-size:var(--body-lg);font-weight:600;color:#fff}
.contact-alt dd a{color:#fff;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.35);
  display:inline-flex;align-items:center;min-height:44px}
.contact-alt dd a:hover{border-bottom-color:#fff}
.offices{font-size:var(--small);color:#C9D0D5;font-weight:400}

/* ============ FOOTER ============ */
footer{background:var(--graphite-900);color:#C9D0D5;padding-block:var(--s8) var(--s6);font-size:var(--small)}
.f-cols{display:grid;gap:var(--s6);margin-bottom:var(--s7)}
@media(min-width:640px){.f-cols{grid-template-columns:repeat(2,1fr)}}
@media(min-width:1024px){.f-cols{grid-template-columns:repeat(5,1fr)}}
.f-cols h4{font-size:var(--label);letter-spacing:.06em;text-transform:uppercase;color:#fff;
  margin-bottom:var(--s4);font-family:var(--font-body)}
.f-cols a{color:#C9D0D5;text-decoration:none;display:flex;align-items:center;min-height:44px;padding:2px 0}
.f-cols a:hover{color:#fff;text-decoration:underline}
.f-legal{border-top:1px solid rgba(139,149,156,.3);padding-top:var(--s5);
  display:flex;flex-wrap:wrap;gap:var(--s3) var(--s5);align-items:center}
.f-legal a{color:#C9D0D5}
.sister{border:1px solid rgba(139,149,156,.3);padding:var(--s4) var(--s5);margin-bottom:var(--s5);
  font-size:var(--small);color:#C9D0D5}
.sister strong{color:#fff}
.sister p{max-width:none;margin:0}

/* ============ PROTOTYPE BANNER ============ */
.proto{background:var(--accent-100);border-bottom:1px solid var(--accent-600);
  color:var(--accent-700);font-size:var(--small);padding:var(--s3) 0}
.proto .wrap{display:flex;gap:var(--s3);align-items:flex-start}
.proto b{flex:none}
.proto p{margin:0;max-width:none}

/* ============ HERO VIDEO BACKGROUND ============
   The video is decorative: it carries no information the copy does not, so it
   is aria-hidden and the page reads identically without it. The graphite ground
   sits underneath, so a failed or still-loading video degrades to the same
   colour the design already uses rather than to white. */
.hero-media{position:absolute;inset:0;overflow:hidden;background:var(--graphite-900);z-index:0}
.hero-media video,.hero-media img{
  position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
/* The single legibility layer. The video deliberately carries no scrim of its
   own — an earlier version baked one in AND had this on top, which left the
   schematic at 31/255 against a 22/255 ground: present, but invisible.
   Heavy under the headline on the left, nearly clear on the right where the
   artwork should read. Tunable here without re-encoding the video. */
.hero-media::after{content:"";position:absolute;inset:0;
  background:linear-gradient(100deg,
    rgba(20,23,26,.90) 0%,
    rgba(20,23,26,.74) 34%,
    rgba(20,23,26,.34) 68%,
    rgba(20,23,26,.12) 100%)}
.hero.has-video{position:relative;overflow:hidden}
.hero.has-video > .wrap{position:relative;z-index:1}
/* The static grid is redundant once the video provides it. */
.hero.has-video.grid-bg::before{display:none}

/* Reduced motion: the poster replaces the video entirely. Pausing is not
   enough — a paused video still downloads. */
.hero-media .hero-still{display:none}
@media(prefers-reduced-motion:reduce){
  .hero-media video{display:none}
  .hero-media .hero-still{display:block}
}

/* Below 768px the <source media> queries stop matching, so the video element
   renders nothing. Band the still to the top of the hero and fade it into the
   graphite ground: a 16:9 frame stretched down a ~0.27 aspect hero would show
   a meaningless sliver, and a hard edge would read as a broken image. */
@media(max-width:767px){
  .hero-media{bottom:auto;height:min(46vh,380px)}
  .hero-media .hero-still{display:block;object-position:50% 42%}
  .hero-media video{display:none}
  .hero-media::after{
    background:linear-gradient(180deg,rgba(20,23,26,.55) 0%,rgba(20,23,26,.80) 55%,var(--graphite-900) 100%)}
  /* The static grid earns its place again once the video is gone. */
  .hero.has-video.grid-bg::before{display:block}
}

/* ============ HOMEPAGE-SPECIFIC ============ */
.hero{padding-block:var(--s8) var(--s9)}
.hero-grid{display:grid;gap:var(--s7);align-items:center}
@media(min-width:1024px){.hero-grid{grid-template-columns:1.1fr .9fr;gap:var(--s8)}}
.hero h1{font-size:var(--display);line-height:1.05;letter-spacing:-.02em;margin-bottom:var(--s5)}
.hero .lede{font-size:var(--body-lg);color:#C9D0D5;margin-bottom:var(--s6)}
.hero-actions{display:flex;flex-wrap:wrap;gap:var(--s3);margin-bottom:var(--s7)}
.hero-actions .btn{flex:1 1 auto;min-width:220px}
@media(min-width:560px){.hero-actions .btn{flex:0 0 auto}}
.proof-row{display:flex;flex-wrap:wrap;gap:var(--s3) var(--s5);padding-top:var(--s5);
  border-top:1px solid rgba(139,149,156,.35);font-size:var(--small);color:#C9D0D5}
.proof-row li{display:flex;align-items:center;gap:var(--s2)}
.proof-row li::before{content:"";width:5px;height:5px;background:var(--accent-dark);transform:rotate(45deg);flex:none}
.hero-fig{border:1px solid rgba(139,149,156,.35);background:rgba(34,39,43,.6);padding:var(--s6);margin:0}
.hero-fig .cap{font-size:var(--label);letter-spacing:.06em;text-transform:uppercase;color:var(--steel-400);
  margin-bottom:var(--s5);display:flex;justify-content:space-between;gap:var(--s3)}
.hero-fig svg{width:100%;height:auto;display:block;margin-bottom:var(--s5)}
.hero-stat{display:flex;align-items:baseline;gap:var(--s3);flex-wrap:wrap}
.hero-stat b{font-family:var(--font-head);font-size:var(--spec-xl);font-weight:600;line-height:1;
  letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:#fff}
.hero-stat span{font-size:var(--small);color:#C9D0D5;max-width:22ch}

/* Over video the panel doubles as a scrim, so it is more opaque than the
   flat-background version and blurs what is behind it. */
.hero-fig-stat{background:rgba(20,23,26,.72);backdrop-filter:blur(10px) saturate(120%);
  -webkit-backdrop-filter:blur(10px) saturate(120%)}
.hero-fig-stat .hero-stat{padding-bottom:var(--s5);border-bottom:1px solid rgba(139,149,156,.3)}
.hero-fig-specs{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--s4);margin-top:var(--s5)}
.hero-fig-specs b{display:block;font-family:var(--font-head);font-size:1.375rem;font-weight:600;
  line-height:1;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:#fff}
.hero-fig-specs span{display:block;font-size:var(--label);letter-spacing:.04em;text-transform:uppercase;
  color:var(--steel-400);margin-top:6px}

.trust{background:var(--white);border-block:1px solid var(--steel-200);padding-block:var(--s7)}
.stats{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--s5) var(--s4)}
@media(min-width:768px){.stats{grid-template-columns:repeat(4,1fr);gap:var(--s6)}}
.stat b{display:block;font-family:var(--font-head);font-size:clamp(1.9rem,3.4vw,2.75rem);
  font-weight:600;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.stat span{display:block;font-size:var(--small);color:var(--graphite-600);margin-top:var(--s2);
  padding-top:var(--s2);border-top:1px solid var(--steel-200)}
.certs{display:flex;flex-wrap:wrap;gap:var(--s3);margin-top:var(--s6);padding-top:var(--s5);
  border-top:1px solid var(--steel-200);align-items:center}
.cert{display:inline-flex;align-items:center;gap:var(--s2);border:1px solid var(--steel-200);
  background:var(--warm-white);padding:6px var(--s3);font-size:var(--small);font-weight:500}
.cert svg{flex:none}
.certs .note{font-size:var(--small);color:var(--graphite-600);margin:0}

.problems{display:grid;gap:0;margin-top:var(--s6);border-top:1px solid var(--steel-200)}
@media(min-width:900px){.problems{grid-template-columns:1fr 1fr;column-gap:var(--s8)}}
.problem{padding-block:var(--s5);border-bottom:1px solid var(--steel-200)}
.problem h3{font-size:var(--body-lg);margin-bottom:var(--s2)}
.problem p{font-size:var(--small);color:var(--graphite-600);margin-bottom:var(--s3)}
.problem .link-arrow{font-size:var(--small)}

.cut{display:grid;gap:var(--s6);margin-top:var(--s6)}
@media(min-width:1000px){.cut{grid-template-columns:1.25fr .75fr;gap:var(--s8);align-items:start}}
.cut-fig{border:1px solid rgba(139,149,156,.35);background:rgba(34,39,43,.5);padding:var(--s5);margin:0}
.cut-fig svg{width:100%;height:auto;display:block}
.hot{cursor:pointer}
.hot circle{transition:fill 120ms var(--ease)}
.hot:hover circle.h-dot,.hot[aria-expanded="true"] circle.h-dot{fill:var(--safety-500)}
.hot:focus-visible{outline:2px solid var(--warm-white);outline-offset:3px;border-radius:50%}
.hot text{font:600 11px var(--font-body);fill:#fff;pointer-events:none}
.hot-list{display:flex;flex-direction:column;border-top:1px solid rgba(139,149,156,.3)}
.hot-item{border-bottom:1px solid rgba(139,149,156,.3)}
.hot-trigger{width:100%;display:flex;align-items:center;gap:var(--s3);padding:var(--s4) 0;
  background:none;border:0;color:var(--warm-white);font:600 var(--body) var(--font-body);
  text-align:left;cursor:pointer}
.hot-trigger .num{flex:none;width:26px;height:26px;border-radius:50%;border:1.5px solid var(--accent-dark);
  color:var(--accent-dark);display:grid;place-items:center;font-size:var(--label);
  font-variant-numeric:tabular-nums;transition:background-color 120ms var(--ease),color 120ms var(--ease)}
.hot-trigger[aria-expanded="true"] .num{background:var(--safety-500);border-color:var(--safety-500);color:#fff}
.hot-trigger .chev{margin-left:auto;transition:transform 200ms var(--ease);flex:none}
.hot-trigger[aria-expanded="true"] .chev{transform:rotate(180deg)}
.hot-panel{display:none;padding:0 0 var(--s5) 40px}
.hot-panel.open{display:block}
.hot-panel p{font-size:var(--small);color:#C9D0D5;margin-bottom:var(--s3)}
.hot-panel a{font-size:var(--small)}

.band{display:grid;gap:var(--s5);margin-top:var(--s6)}
@media(min-width:768px){.band{grid-template-columns:repeat(4,1fr);gap:var(--s6)}}
.band-item{padding-top:var(--s4);border-top:2px solid var(--accent-600)}
.band-item h3{font-size:var(--body-lg);margin-bottom:var(--s2)}
.band-item p{font-size:var(--small);color:var(--graphite-600);margin:0}

.steps{margin-top:var(--s6);border-top:1px solid var(--steel-200)}
.step{border-bottom:1px solid var(--steel-200)}
.step-btn{width:100%;display:flex;align-items:center;gap:var(--s4);padding:var(--s4) 0;background:none;
  border:0;font:600 var(--body-lg) var(--font-head);color:var(--graphite-900);text-align:left;cursor:pointer}
.step-btn .n{flex:none;font-family:var(--font-mono);font-size:var(--small);color:var(--accent-600);
  font-variant-numeric:tabular-nums;min-width:28px}
.step-btn .chev{margin-left:auto;transition:transform 200ms var(--ease)}
.step-btn[aria-expanded="true"] .chev{transform:rotate(180deg)}
.step-panel{display:none;padding:0 0 var(--s5) 44px}
.step-panel.open{display:block}
.step-panel p{font-size:var(--small);color:var(--graphite-600);margin-bottom:var(--s2)}
.step-panel .deliver{font-size:var(--small);color:var(--graphite-900);font-weight:500}
.step-panel .deliver::before{content:"Deliverable — ";color:var(--accent-700);font-weight:600}

/* ============ UTILITIES ============
   These exist because a strict Content-Security-Policy (`style-src 'self'`,
   no unsafe-inline) blocks every inline style="" attribute. The policy is
   the requirement; these classes are how the pages meet it. */
.mt-4{margin-top:var(--s4)} .mt-5{margin-top:var(--s5)} .mt-6{margin-top:var(--s6)}
.mb-3{margin-bottom:var(--s3)}
.mw-60{max-width:60ch} .mw-62{max-width:62ch} .mw-64{max-width:64ch} .mw-640{max-width:640px}
.w-full{width:100%}
.gap-5{gap:var(--s5)}
.one-col{grid-template-columns:1fr}
.one-col-flush{grid-template-columns:1fr;margin-top:0}
.mono{font-family:var(--font-mono)}
.t-dim{color:#C9D0D5} .t-white{color:#fff} .t-steel{color:var(--steel-400)}
.t-graphite{color:var(--graphite-600)} .t-accent{color:var(--accent-600)}
.t-link-dark{color:var(--accent-dark)}
.t-emerg{color:#FFB088;font-weight:600}
.tile-dark{background:rgba(34,39,43,.6);border-color:rgba(139,149,156,.35)}
.slot-photo{text-align:center;padding-block:var(--s9)}
.fig-note{font-size:var(--label);color:var(--steel-400);margin-top:var(--s3)}
.foot-note{margin:var(--s2) 0 0;color:var(--steel-400);font-size:var(--label)}
/* Left-align a table cell that the base rule right-aligns. Specificity is
   deliberate: it must beat `td:not(:first-child)` and the mobile override. */
.ta-l,td.ta-l{text-align:left}
.spec-wrap td.ta-l{text-align:left}

/* ============ REDUCED MOTION — §14.6, a first-class path ============ */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
  .card:hover,.btn-primary:hover{transform:none}
  .link-arrow:hover::after{transform:none}
}

/* ============ PRINT — architects print spec pages ============ */
@media print{
  .utility,header,.proto,form,.hero-actions,.btn-row,.crumb{display:none}
  body,.on-dark{background:#fff;color:#000}
  .on-dark h1,.on-dark h2,.on-dark h3,.on-dark h4{color:#000}
  .on-dark p,.headline-specs span{color:#333}
  .headline-specs b,.hero-stat b{color:#000}
  .fig-frame,.hero-fig,.cut-fig{border-color:#999;background:none}
  .acc-panel,.hot-panel,.step-panel{display:block!important}
  .spec-wrap{overflow:visible;page-break-inside:avoid}
  a{text-decoration:none;color:#000}
  section{padding-block:18pt}
}
