/* =========================================================================
   themes.css — per-brand block styling copied from the ECF / Muse / Habiko
   WordPress consultation themes. Loaded AFTER app.css on the public
   consultation pages (index, survey, map) only. Base layer = ECF; Muse &
   Habiko apply via html[data-brand=...] (set by chrome.js). Assembled from
   an extract+adversarial-verify agent pass over the theme SCSS sources.
   ========================================================================= */

/* Real theme typefaces (bundled from the WordPress themes). ECF = CentraBook,
   Muse = Citizen. Habiko's FTBureau/FTSystem are not in the repo, so Habiko keeps
   a Fraunces/Inter stand-in (see chrome.js). */
@font-face {
  font-family: 'CentraBook';
  src: url('../fonts/CentraNo1-Book.woff2') format('woff2'), url('../fonts/CentraNo1-Book.woff') format('woff');
  font-weight: 400 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'Citizen-Regular';
  src: url('../fonts/Citizen-Regular.woff2') format('woff2'), url('../fonts/Citizen-Regular.woff') format('woff');
  font-weight: 400 600; font-style: normal; font-display: swap;
}
@font-face {
  font-family: 'Citizen-Medium';
  src: url('../fonts/Citizen-Medium.woff2') format('woff2'), url('../fonts/Citizen-Medium.woff') format('woff');
  font-weight: 400 700; font-style: normal; font-display: swap;
}

/* Consultation pages are full-bleed like the real themes (their blocks are
   sized for container-fluid / full width). Scoped here so product/dashboard
   /builder are unaffected. */
.wrap { width: 100%; max-width: none; margin: 0 auto; padding: 0 64px; }
@media (max-width: 1200px){ .wrap { padding: 0 44px; } }
@media (max-width: 880px){ .wrap { padding: 0 22px; } }

/* ============================ BASE LAYER (ECF) ============================ */

/* ---------------- tokens-base ---------------- */
/* ===== Base tokens & typography — ECF (Stockport 8) =====
   Resolved from ecf-consultation _main.scss + _variables.scss.
   resp-max($bp) => @media screen and (max-width: $bp).
   Breakpoints: xl 1800px, lg 1200px, md 880px, sm 480px.
   Colour/font/radius flow through CSS custom properties set by chrome.js. */

/* --- body: $white bg, $black text, $fontRegular --- */
body {
  font-family: var(--font-body, Helvetica, Arial, sans-serif);
  color: var(--ink);
  background: var(--card);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  width: 100%;
  max-width: 100vw;
}
::selection { color: #fff; background: var(--ink-deep); }

/* --- heading scale (identical across all three themes) --- */
h1, h2, h3, h4 { font-family: var(--font-head, var(--font-body)); color: var(--ink); margin: 0; font-weight: 400; text-wrap: balance; }

h1 { font-size: 64px; line-height: 74px; letter-spacing: -2px; }
h2 { font-size: 94px; line-height: 100px; letter-spacing: -1px; }
h3 { font-size: 64px; line-height: 74px; letter-spacing: -0.1px; margin-bottom: 20px; }
h4 { font-size: 44px; line-height: 54px; letter-spacing: 0; margin-bottom: 10px; }

/* h5 == the small uppercase eyebrow/label role */
h5, .label, .eyebrow {
  display: block;
  font-family: var(--font-head, var(--font-body));
  font-size: 18px; line-height: 24px; letter-spacing: 3px;
  text-transform: uppercase; margin-bottom: 10px; font-weight: 400;
  color: var(--ink);
}
.label, .eyebrow { color: var(--muted); }

/* body paragraph + lead/bodycopy (theme <p>: 30px/42px) */
p { font-family: var(--font-body); font-size: 30px; line-height: 42px; margin: 0 0 1rem; }
.lead { font-family: var(--font-body); font-size: 30px; line-height: 42px; color: var(--ink); max-width: none; }
.bodycopy { font-family: var(--font-body); font-size: 30px; line-height: 42px; color: var(--ink); max-width: none; }
p.small, .lead.small, .bodycopy.small { font-size: 18px; line-height: 26px; }

/* display heading (mirrors h2 scale) */
.display { font-family: var(--font-head, var(--font-body)); font-size: 94px; line-height: 100px; letter-spacing: -1px; font-weight: 400; }

/* links: a{ color: inherit } */
a { color: inherit; text-decoration: none; }

/* .link — small uppercase, red ($red #F45446 -> --accent-3), underline offset 10px */
.link {
  display: inline-flex; align-items: center;
  font-family: var(--font-head, var(--font-body));
  font-size: 18px; line-height: 20px; letter-spacing: 2px;
  text-transform: uppercase; position: relative;
  color: var(--accent-3);
  text-decoration: underline; text-underline-offset: 10px;
  margin-right: 40px; cursor: pointer;
}

/* buttons — modelled on .gform_button: yellow ($yellow -> --accent),
   black text, radius 10px, uppercase, letter-spacing 3px, padding 24px 32px */
.btn {
  display: inline-flex; align-items: center; gap: 9px; cursor: pointer;
  background: var(--accent); color: var(--ink-deep); border: 0;
  padding: 24px 32px; border-radius: var(--radius-sm);
  font-family: var(--font-head, var(--font-body));
  font-weight: 400; font-size: 18px; letter-spacing: 3px; text-transform: uppercase;
  text-align: left; text-decoration: none;
  transition: filter .2s, transform .2s cubic-bezier(.33,1,.68,1), box-shadow .2s, background-color .25s linear, color .25s linear;
}
.btn:hover { background: var(--ink-deep); color: #fff; }
.btn.ghost { background: transparent; color: var(--brand-ink); border: 1.5px solid var(--line); }
.btn.ghost:hover { border-color: var(--brand); background: var(--brand-soft); color: var(--brand-ink); }
.btn.sm { padding: 14px 20px; font-size: 14px; letter-spacing: 2px; }
.btn.lg { padding: 28px 40px; font-size: 20px; }

/* nav CTA — yellow accent bar, uppercase 18px */
.btn-cta { font-family: var(--font-head, var(--font-body)); font-size: 18px; letter-spacing: 3px; text-transform: uppercase; }

/* section vertical rhythm — themes use .row margin-bottom 65px -> 50px (md) -> 30px (sm) */
section.block { padding: 65px 0; }
section.block.tight { padding: 44px 0; }
section.block.warm { background: var(--warm); }
section.block.ink { background: var(--ink-deep); color: #fff; }
section.block.ink h1, section.block.ink h2, section.block.ink h3, section.block.ink h4 { color: #fff; }
section.block.ink .lead, section.block.ink .bodycopy { color: rgba(255,255,255,.85); }
section.block.ink .label, section.block.ink .eyebrow { color: rgba(255,255,255,.6); }

/* ===== responsive (resp-max => max-width) ===== */
@media screen and (max-width: 1800px) {
  h2, .display { font-size: 76px; line-height: 80px; }
  h3 { font-size: 56px; line-height: 60px; }
  h4 { font-size: 28px; line-height: 30px; }
  h5, .label, .eyebrow { font-size: 16px; line-height: 20px; }
  p, .lead, .bodycopy { font-size: 28px; line-height: 30px; }
  p.small, .lead.small, .bodycopy.small { font-size: 18px; line-height: 26px; }
}
@media screen and (max-width: 1200px) {
  h1 { font-size: 56px; line-height: 60px; }
  h2, .display { font-size: 56px; line-height: 60px; }
  h3 { font-size: 40px; line-height: 42px; }
  h4 { font-size: 24px; line-height: 28px; }
  p, .lead, .bodycopy { font-size: 24px; line-height: 28px; }
  p.small, .lead.small, .bodycopy.small { font-size: 18px; line-height: 26px; }
}
@media screen and (max-width: 880px) {
  h1 { font-size: 38px; line-height: 40px; letter-spacing: -1px; }
  h2, .display { font-size: 38px; line-height: 40px; }
  h3 { font-size: 30px; line-height: 32px; }
  h4 { font-size: 18px; line-height: 24px; }
  h5, .label, .eyebrow { font-size: 12px; line-height: 14px; }
  p, .lead, .bodycopy { font-size: 18px; line-height: 24px; }
  p.small, .lead.small, .bodycopy.small { font-size: 18px; line-height: 26px; }
  .link { font-size: 14px; line-height: 16px; }
  section.block { padding: 50px 0; }
}
@media screen and (max-width: 480px) {
  section.block { padding: 30px 0; }
}

/* ---------------- header-nav ---------------- */
/* ---- Site header / nav — ECF base (resolved from nav{} in layout/_main.scss) ----
   resp-max($size) => @media screen and (max-width:$size) (exact, per config/_mixins.scss).
   Breakpoints xl 1800 / lg 1200 / md 880 / sm 480. nav: fixed dark bar, h64 (h44 <=880),
   bg #242039 = --ink-deep, accent CTA. Shared DOM single flex row approximated as .site-header. */
.site-header {
  background: var(--ink-deep);
  position: sticky; top: 38px; z-index: 50;
  box-shadow: 0 0 15px 0 rgba(0,0,0,.35);
}
.site-header .wrap {
  display: flex; align-items: stretch; gap: 20px;
  height: 64px; padding: 0 32px;
  max-width: none;
}
@media screen and (max-width: 1200px) {
  .site-header .wrap { padding: 0 44px; }
}
@media screen and (max-width: 880px) {
  .site-header .wrap { height: 44px; padding: 0 22px; }
}

/* logo (#menuLogo a h5: uppercase, fontMedium=--font-body, 18/24 ls 3px) */
.logo {
  display: flex; align-items: center; gap: 11px;
  color: #fff; text-decoration: none;
  font-family: var(--font-body);
  font-weight: 600; font-size: 18px; line-height: 24px;
  letter-spacing: 3px; text-transform: uppercase;
}
.logo .mark {
  width: 34px; height: 34px; border-radius: var(--radius-sm); flex: none;
  background: var(--accent); color: var(--ink-deep);
  display: grid; place-items: center;
  font-weight: 800; font-size: 13px; letter-spacing: 0; font-family: var(--font-head);
}
@media screen and (max-width: 1800px) {
  .logo { font-size: 16px; line-height: 20px; }
}
@media screen and (max-width: 880px) {
  .logo { font-size: 12px; line-height: 14px; }
}

/* main nav (.mainNav li a > h5): uppercase, fontMedium, 18/24 ls 3px, white.
   ECF reserves CTA space via padding-right:305px on .mainNav; on shared DOM the CTA is
   in-flow so margin-left:auto pushes the group right. li padding 0 25px (no md change). */
.site-nav {
  display: flex; align-items: stretch; gap: 0;
  margin-left: auto; flex-wrap: wrap;
}
.site-nav a {
  display: flex; align-items: center;
  color: #fff; text-decoration: none;
  padding: 0 25px;
  font-family: var(--font-body);
  font-weight: 600; font-size: 18px; line-height: 24px;
  letter-spacing: 3px; text-transform: uppercase;
}
@media screen and (max-width: 1800px) {
  .site-nav a { font-size: 16px; line-height: 20px; }
}
@media screen and (max-width: 880px) {
  .site-nav a { font-size: 12px; line-height: 14px; }
}
.site-nav a:hover { color: #fff; }
/* ECF gives the current link no distinct treatment — active stays plain white. */
.site-nav a.active { color: #fff; }
.site-nav a.active::after { content: none; display: none; }

/* CTA (.navCta): accent bg #FFC24D=--accent, text on accent ~ --ink-deep, uppercase fontMedium,
   full-height (source height:100% translateY-centered, padding 18px 32px) -> in-flow stretch + pad 0 32px. */
.btn-cta {
  display: inline-flex; align-items: center; gap: 32px;
  background: var(--accent); color: var(--ink-deep);
  text-decoration: none;
  font-family: var(--font-body); font-weight: 600;
  font-size: 18px; line-height: 24px; letter-spacing: 3px; text-transform: uppercase;
  padding: 0 32px; align-self: stretch;
  transition: all .3s cubic-bezier(.075,.82,.165,1);
}
@media screen and (max-width: 1800px) {
  .btn-cta { font-size: 16px; line-height: 20px; }
}
@media screen and (max-width: 880px) {
  .btn-cta { font-size: 12px; line-height: 14px; }
}
.site-nav .btn-cta { margin-left: 0; }
/* arrow icon (.arrowIcon): pre-rotated 180deg; wireframe-added slide on hover (not in ECF source) */
.btn-cta span {
  display: inline-flex; flex-shrink: 0;
  transition: transform .6s cubic-bezier(.33,1,.68,1);
}
.btn-cta:hover span { transform: translateX(-5px); }

/* ---------------- footer ---------------- */
/* ---- Footer (ECF base) -------------------------------------------------
   ECF footer.scss: footer{background:$blue->--ink-deep; color:#fff; display:flex;
   flex-wrap:wrap; padding:64px; mobile padding 22px 0}. .top block: h4 26/34 #fff
   margin-bottom:0; p 26/34 #fff opacity .5 margin-bottom:34px; a colour $yellow
   (--accent) text-underline-offset:10px. Register CTA mapped to .signup (bg
   $yellow/--accent, colour $black/--ink-deep, padding 24px 32px, ls 3px). Legal
   .row3/.logosRow: border-top rgba(255,255,255,.1), padding 64px, 20/26, a #fff.
   resp-max($breakpoint-md=880) = @media(max-width:880px) exactly. */
footer.site-footer {
  position: relative;
  background-color: var(--ink-deep);
  color: #fff;
  padding: 0;
}
.foot-top { border-bottom: 1px solid rgba(255,255,255,.1); border-top: 0; }
.foot-top .wrap {
  max-width: none;
  margin: 0;
  padding: 64px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 34px;
  flex-wrap: wrap;
}
.foot-top p {
  margin: 0;
  color: #fff;
  opacity: .5;
  font-size: 26px;
  line-height: 34px;
  max-width: none;
}
.foot-top p [data-brand-name] { opacity: 1; }
.foot-top .btn-cta {
  background: var(--accent);
  color: var(--ink-deep);
  padding: 24px 32px;
  letter-spacing: 3px;
  text-transform: uppercase;
  font-size: 12px;
  align-self: auto;
}
.foot-cols {
  max-width: none;
  margin: 0;
  padding: 64px;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
}
.foot-cols > div {
  padding: 0 34px;
  border-left: 1px solid rgba(255,255,255,.1);
}
.foot-cols > div:first-child { border-left: 0; padding-left: 0; }
.foot-cols h4 {
  color: #fff;
  font-size: 26px;
  line-height: 34px;
  letter-spacing: -.02em;
  text-transform: none;
  font-family: var(--font-head);
  font-weight: 600;
  opacity: 1;
  margin: 0;
}
/* body copy line (ECF .top p: 26/34 #fff opacity .5, margin-bottom 34px) */
.foot-cols a {
  color: #fff;
  opacity: .5;
  text-decoration: none;
  display: block;
  padding: 0;
  margin: 8px 0 34px;
  font-size: 26px;
  line-height: 34px;
}
/* ECF .top a accent action link ($yellow/--accent, underline offset 10px) */
.foot-cols a.link-sm {
  margin: 16px 0 0;
  color: var(--accent);
  opacity: 1;
  font-weight: 400;
  font-size: 26px;
  line-height: 34px;
  letter-spacing: normal;
  text-transform: none;
  text-decoration: underline;
  text-underline-offset: 10px;
}
.foot-legal { border-top: 1px solid rgba(255,255,255,.1); }
.foot-legal .wrap {
  max-width: none;
  margin: 0;
  padding: 64px;
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  font-size: 20px;
  line-height: 26px;
  color: rgba(255,255,255,.75);
}
.foot-legal .wrap span,
.foot-legal .wrap a { color: #fff; }

@media (max-width: 880px){
  .foot-top .wrap { padding: 22px; }
  /* ECF footer p resp-max(md): 15px/26px !important (NOT 18px) */
  .foot-top p { font-size: 15px; line-height: 26px; }
  .foot-cols {
    padding: 22px;
    grid-template-columns: 1fr;
  }
  .foot-cols > div { padding: 22px 0; border-left: 0; }
  .foot-cols > div:first-child { padding-top: 0; }
  /* footer h4 resp-max(md): 18px/26px margin-bottom 0 */
  .foot-cols h4 { font-size: 18px; line-height: 26px; margin-bottom: 0; }
  /* column body/links derive from footer p (15px/26px) */
  .foot-cols a { font-size: 15px; line-height: 26px; margin-bottom: 0; }
  .foot-cols a.link-sm { font-size: 15px; line-height: 26px; }
  .foot-legal .wrap { padding: 22px; font-size: 12px; line-height: 26px; }
}

/* ---------------- hero ---------------- */
/* ---- Full-bleed photographic hero (.imageBanner) -----------------------
   ECF base. Real theme centres the heading; the dark tint sits over the
   photo via a pseudo-element. Home height = calc(100vh - 160px) (160px is the
   fixed header offset in the real theme). Inner pages add 98px bottom margin. */
.hero-full {
  position: relative;
  width: 100%;
  height: calc(100vh - 160px);
  background: var(--ink-deep);
  background-size: cover;
  background-position: center;
  color: #fff;
  /* real theme centres content; was bottom-left flex */
  display: block;
}
/* tint overlay (.imageBg:after) — ECF opacity 0.1 black */
.hero-full::after {
  content: "";
  position: absolute;
  inset: 0;
  background: #000;
  opacity: 0.1;
  z-index: 1;
}
.hero-full .wrap {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  max-width: none;
  padding: 0 24px;
  text-align: center;
  z-index: 9;
}
.hero-full .label {
  color: rgba(255,255,255,.8);
  margin-bottom: 16px;
}
.hero-full h1 {
  margin: 0;
  width: 100%;
  max-width: none;
  text-align: center;
  font-family: var(--font-head);
  font-size: 92px;
  line-height: 92px;
  letter-spacing: -0.04em;
  color: #fff;
}
@media screen and (max-width: 1200px) {
  .hero-full h1 { font-size: 78px; line-height: 78px; }
}
@media screen and (max-width: 1000px) {
  .hero-full h1 { font-size: 66px; line-height: 66px; }
}
@media screen and (max-width: 880px) {
  .hero-full { height: 75vh; min-height: 500px; }
  .hero-full h1 { font-size: 46px; line-height: 46px; }
}
@media screen and (max-width: 525px) {
  .hero-full h1 { font-size: 32px; line-height: 32px; }
}

/* ---------------- intro ---------------- */
/* ---- Intro statement = themes' .headerBlock (label column + big heading
       with a left-border divider). ECF base.
   .headerBlock padding 128px 64px; flex-wrap.
   .headerLeft 25% (label) padding 0 64px 0 0; .projectDetail 24/32 #7f7f7f
      regular, margin-bottom 32px.
   .headerRight 75% padding 0 128px 0 64px, border-left 1px rgba(36,32,57,.1).
   headerBlock h1,h2,h3 margin-bottom 64px (md 44px).
   resp-max($s) = @media screen and (max-width:$s). lg=1200, md=880.
   At lg ONLY flex-basis->100% (divider+padding stay); at md padding->0 44px 0 22px.
   h2 element scale (_main.scss): 94/100 -1px; xl(1800) 76/80; lg(1200) 56/60;
   md(880) 38/40. ----------------------------------------------------------- */

section.block.intro { padding: 128px 64px; }

.intro .wrap {
  display: grid;
  grid-template-columns: 25% 1fr;
  gap: 0;
  align-items: start;
  max-width: none;
  padding: 0;
}

/* headerLeft — label column (projectDetail: 24/32 grey, regular) */
.intro .label {
  display: block;
  grid-column: 1;
  margin: 0 0 32px 0;
  padding: 0 64px 0 0;
  max-width: 25%;
  overflow: hidden;
  font-family: var(--font-body);
  font-weight: 400;
  font-size: 24px;
  line-height: 32px;
  letter-spacing: normal;
  text-transform: none;
  color: var(--muted);
}

/* headerRight — heading column with the left divider */
.intro h2 {
  grid-column: 2;
  margin: 0 0 64px 0;
  padding: 0 128px 0 64px;
  border-left: 1px solid color-mix(in srgb, var(--ink-deep) 10%, transparent);
  max-width: none;
  font-family: var(--font-head);
  font-weight: 600;
  font-size: 94px;
  line-height: 100px;
  letter-spacing: -1px;
  color: var(--ink);
}

@media screen and (max-width: 1800px) {
  .intro h2 { font-size: 76px; line-height: 80px; }
}
@media screen and (max-width: 1200px) {
  section.block.intro { padding: 64px 0; }
  /* lg: columns stack (flex-wrap), divider + heading padding RETAINED */
  .intro .wrap { grid-template-columns: 1fr; }
  .intro .label {
    grid-column: 1;
    max-width: 75%;
    padding: 0 64px 0 64px;
    margin: 0 0 32px 0;
  }
  .intro h2 {
    grid-column: 1;
    font-size: 56px;
    line-height: 60px;
    /* border-left + padding 0 128px 0 64px still apply here */
  }
}
@media screen and (max-width: 880px) {
  section.block.intro { padding: 44px 0; }
  .intro .label {
    max-width: 100%;
    font-size: 15px;
    line-height: 20px;
    padding: 0 44px 0 22px;
    margin: 0 0 32px 0;
  }
  .intro h2 {
    font-size: 38px;
    line-height: 40px;
    margin-bottom: 44px;
    padding: 0 44px 0 22px;
  }
}

/* ---------------- text-image-row ---------------- */
/* ===== Text + image row (ECF base) =====
   SCSS: ecf .textImageBlock. Non-reverse row == .image_left (image left, text right);
   .reverse == .image_right. ECF uses flex with 64px imageCol side margins; wireframe
   uses 1fr/1fr grid so the 64px channel is the grid gap. image min-height 614px,
   border-radius 12px == var(--radius). Large 256px text bottom padding drops .link low.
   resp-max($breakpoint-md)=880px -> @media (max-width:880px); stacks, image first. */
.row-split { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: stretch; margin-bottom: 96px; }
.row-split .rs-media { order: 1; }
.row-split .rs-text { order: 2; display: flex; flex-direction: column; position: relative; max-width: none; padding: 0 64px 256px 0; }
.row-split.reverse > .rs-media { order: 2; }
.row-split.reverse > .rs-text { order: 1; padding: 0 64px 256px 64px; }
.row-split .media { min-height: 614px; border-radius: var(--radius); background-position: center; background-repeat: no-repeat; background-size: cover; }
.row-split .rs-text h2, .row-split .rs-text h3 { width: 100%; margin-bottom: 64px; padding-right: 64px; }
.row-split .rs-text .bodycopy, .row-split .rs-text p { width: 100%; margin-bottom: 64px; padding-right: 64px; color: inherit; max-width: none; }
.row-split .rs-text .link { margin-top: auto; }
@media (max-width: 880px){
  .row-split { grid-template-columns: 1fr; gap: 0; margin-bottom: 96px; }
  .row-split .rs-media, .row-split.reverse > .rs-media { order: 1; }
  .row-split .rs-text, .row-split.reverse > .rs-text { order: 2; padding: 22px 64px 0 22px; }
  .row-split .media { min-height: 0; height: auto; padding-bottom: 66%; }
  .row-split .rs-text h2, .row-split .rs-text h3 { margin-bottom: 22px; padding-right: 0; }
  .row-split .rs-text .bodycopy, .row-split .rs-text p { padding-right: 44px; margin-bottom: 44px; }
}

/* ---------------- overlap-card ---------------- */
/* ---- "A unique vision": card overlapping a wide render =========================
   ECF base. .overlap -> .textImageBlock.style3, .ov-media/.media -> .imageCol
   (absolute, fills block), .ov-card -> .textCol(style3). resp-max($breakpoint-md)=@media (max-width:880px). */
.overlap {
  position: relative;
  display: flex;
  width: 100%;
  margin-bottom: 96px;
}
.overlap .ov-media {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  border-radius: 0;
}
.overlap .ov-media .media {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  min-height: 614px;
  margin: 0;
  border-radius: 0;
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
}
.overlap .ov-card {
  position: relative;
  z-index: 1;
  flex-basis: calc(50% - 128px);
  margin: 64px;
  padding: 64px;
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
  border-radius: var(--radius);
  background: var(--card);
  width: auto;
  min-width: 0;
  left: auto;
  top: auto;
  transform: none;
}
.overlap .ov-card .label { width: 100%; }
.overlap .ov-card h2 {
  width: 100%;
  margin-bottom: 64px;
  padding-right: 64px;
}
.overlap .ov-card p {
  width: 100%;
  margin-bottom: 64px;
  padding-right: 64px;
  color: inherit;
  opacity: .5;
}
@media (max-width: 880px){
  .overlap { flex-wrap: wrap; }
  .overlap .ov-card {
    flex-basis: 100%;
    margin: 22px;
    margin-top: 300px;
    padding: 22px;
  }
  .overlap .ov-card h2 {
    margin-bottom: 22px;
    padding-right: 0;
  }
  .overlap .ov-card p {
    padding-right: 44px;
    margin-bottom: 44px;
  }
  .overlap .ov-media .media { min-height: auto; }
}

/* ---------------- partners ---------------- */
/* Partners block — maps wireframe .grid.g2 (.partner logo tile + description)
   to ECF .partnersBlock .partnerLogos .swiper-slide.
   ECF logo tile bg = $yellow (#FFC24D) which is the brand accent role (chrome.js ecf --accent=#FFC24D), NOT $warm.
   resp-max($breakpoint-md) => @media screen and (max-width:880px). */

/* logo tile */
.partner {
  display: flex;
  justify-content: center;
  align-items: center;
  background: var(--accent);
  height: auto;
  padding: 128px 0;
  border-radius: 10px;
}
.partner .plogo {
  font-family: var(--font-head);
  font-weight: 800;
  font-size: 1.6rem;
  letter-spacing: .02em;
  color: var(--ink-deep);
  /* stand-in for theme <img>: width:100%;max-width:200px;max-height:100px;margin:auto;display:flex;mix-blend-mode:multiply;object-fit:contain */
  width: 100%;
  max-width: 200px;
  max-height: 100px;
  margin: auto;
  text-align: center;
  mix-blend-mode: multiply;
}

@media screen and (max-width: 880px) {
  .partner { padding: 23vw 0; }
}

/* ---------------- big-cta ---------------- */
/* ---- Have Your Say (big CTA) — ECF base -------------------------------
   SCSS map: .bigCta (white frame) > .inner (coloured/rounded panel) with
   .upper (text), .lower (arrow CTA) and .bgGraphic (illustration, absolute right).
   The wireframe .colorblock IS that coloured .inner panel on shared DOM.
   resp-max($size) => @media screen and (max-width:$size) (value used directly).
   Breakpoints: xl 1800, lg 1200, md 880, sm 480. */
.colorblock {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
  width: 100%;
  background: var(--accent);
  color: var(--ink-deep);
  /* .inner big-cta radius is a fixed 10px literal (NOT the --radius token, which is 2px for ECF) */
  border-radius: 10px;
  overflow: hidden;
  /* outer .bigCta padding 64px collapsed onto the panel */
  padding: 64px;
  gap: 0;
}
/* .upper — constrained text column */
.colorblock > div:first-child {
  flex-basis: 100%;
  max-width: 50%;
  display: flex;
  flex-wrap: wrap;
  margin-bottom: 100px;
}
.colorblock h2 {
  flex-basis: 100%;
  margin: 0 0 20px;
  color: inherit;
}
.colorblock p {
  flex-basis: 100%;
  margin: 0;
  max-width: 60%;
  color: inherit;
}
/* the arrow CTA = .lower h5.withArrow (ECF: display flex, NO align-items) */
.colorblock .btn-cta {
  display: inline-flex;
}
.colorblock .btn-cta span {
  margin-top: 2px;
  width: 16px;
  height: 16px;
  margin-left: 10px;
  transition: transform .6s cubic-bezier(0.33, 1, 0.68, 1);
  will-change: transform;
}
.colorblock .btn-cta:hover span { transform: translateX(-5px); }
/* .bgGraphic — illustration pinned right, clipped by panel overflow */
.colorblock .cb-art {
  position: absolute;
  top: 0;
  right: 0;
  height: 100%;
  width: auto;
  max-width: 45%;
  padding: 40px 40px 0;
}
.colorblock .cb-art svg { height: 100%; width: auto; }

/* xl 1800: text column widens to 75% */
@media screen and (max-width: 1800px) {
  .colorblock > div:first-child { max-width: 75%; }
}
/* md 880: panel padding shrinks, art flows below full-width */
@media screen and (max-width: 880px) {
  .colorblock { padding: 44px 22px; }
  .colorblock > div:first-child { max-width: 80%; }
  .colorblock .cb-art {
    position: relative;
    top: 0;
    right: 0;
    width: 100%;
    max-width: 100%;
    height: auto;
    padding: 40px 40px 0;
  }
  .colorblock .cb-art svg { width: 100%; height: auto; }
}
/* sm 480: text column full-width */
@media screen and (max-width: 480px) {
  .colorblock > div:first-child { max-width: 100%; }
}

/* ---------------- news-stories ---------------- */
/* ===== News / stories cards (ECF base) =====================================
   Source: ecf .storiesBlock / .titleBar / .storyCardsHolder .storyCards .storyCard.
   resp-max($breakpoint-md) => @media screen and (max-width:880px) (mixin uses max-width:$size verbatim).
   Real block is a horizontal carousel of 544px cards (image-top 320px / text-bottom 320px) with a
   320px backdrop band (.storyCardsHolder:before) and a separate .bottomLinkHolder nav/link row.
   Wireframe DOM is a fixed 3-col vertical-card grid; mapped the visual DNA onto it.
   NOT reproduced: carousel scroll, fixed px card widths, 320px backdrop band, .bottomLinkHolder. */

/* --- section shell (.storiesBlock: bg #F8F8F8, pad-top 0, pad-bottom 64px) - */
section.block#news { background: #F8F8F8; padding-top: 0; padding-bottom: 64px; }

/* --- header (.titleBar: flex space-between, baseline; pad 64px / top 96px) -- */
#news .carousel-head { display: flex; justify-content: space-between; align-items: baseline;
  padding: 96px 64px 64px; margin-bottom: 0; }
#news .carousel-head .label { margin: 0; }

/* --- arrows (.circleBtn: white round, hover bg $blue=var(--brand); storyPrev mr:0) */
#news .carousel-head .arrows { display: flex; gap: 0; flex-basis: fit-content; }
#news .carousel-head .arrows button { width: 40px; height: 40px; border: 1px solid var(--line);
  background: #fff; cursor: pointer; font-size: 16px; border-radius: 50%; }
#news .carousel-head .arrows button:hover { background: var(--brand); }

/* --- card grid (.storyCards: gutter 64px) ---------------------------------- */
#news .grid.g3 { padding: 0 64px; gap: 64px; }

/* --- card (.storyCard: transparent, vertical hairline divider between cards) - */
#news .card.news { position: relative; background: transparent; border-radius: 0; }
#news .card.news::after { content: ""; position: absolute; top: 0; right: -32px;
  width: 1px; height: 100%; background: rgba(0,0,0,.1); }
#news .grid.g3 > .card.news:last-child::after { display: none; }

/* --- media (.topHalf: 320px tall, radius 12px, cover) ----------------------- */
#news .card.news .media { min-height: 320px; margin-bottom: 0; border-radius: var(--radius);
  background-size: cover; background-position: center; }

/* --- body (.bottomHalf: pad 30px 30px 30px 0) ------------------------------ */
#news .card.news .card-body { position: relative; box-sizing: border-box;
  padding: 30px 30px 30px 0; }
#news .card.news .card-body .label { margin-bottom: 8px; }
/* h3 stands in for .bottomHalf p: padding-right:64px, max-height:168px, overflow:hidden, line-height:42px */
#news .card.news h3 { margin: 0; line-height: 42px; max-height: 168px; overflow: hidden;
  padding-right: 64px; }

/* read-more (.link: bottom:30px/left:0 in theme; flows under title on this light card) */
#news .card.news .link { margin-top: 18px; }

@media screen and (max-width: 880px){
  #news .carousel-head { padding: 44px 22px; }
  #news .grid.g3 { padding: 0 22px; grid-template-columns: 1fr; gap: 44px; }
  #news .card.news::after { display: none; }
  #news .card.news .media { min-height: 0; aspect-ratio: 3 / 2; }
  #news .card.news h3 { line-height: 24px; }
}


/* ---------------- downloads ---------------- */
/* ---- Coloured download tiles (downloads block) -------------------------
   Wireframe interpretation of the themes' .downloadsBlock. The real themes
   render a horizontal carousel of 544px story cards (topHalf preview cover +
   bottomHalf text). The wireframe collapses this to a .g4 grid of coloured
   tiles, each carrying a white "booklet" cover mock that maps to the theme
   .topHalf .preview (white card, 0 3px 6px shadow), plus a title (h4) and a
   Download .link that maps to .bottomHalf .link.
   ECF section bg = #F8F8F8; cover rounding (theme .topHalf border-radius) = 12px. */

/* section wrapper — themes set bg #F8F8F8 on .downloadsBlock; the wireframe
   section uses .warm. Keep the warm token surface (ECF warm = #FBF4EC per
   chrome but the real downloads bg is a neutral #F8F8F8 — see fidelityNotes). */

.dl { text-align: left; }

/* the coloured tile = theme .topHalf cover. Real cover is 544x320 (aspect
   ~1.7:1); wireframe keeps a calmer 4/3 box on the grid. ECF cover
   border-radius = 12px (hardcoded in theme, not $border-radius). */
.dl-tile {
  position: relative;
  aspect-ratio: 4 / 3;
  display: grid;
  place-items: center;
  margin-bottom: 14px;
  border-radius: 12px;
  background-position: center;
  background-size: cover;
}
.dl-tile.c1 { background: var(--accent); }
.dl-tile.c2 { background: var(--accent-2); }
.dl-tile.c3 { background: var(--accent-3); }
.dl-tile.c4 { background: var(--ink-deep); }

/* booklet = theme .preview: white card, contained, drop shadow 0 3px 6px rgba(0,0,0,.2). */
.dl-tile .booklet {
  width: 92px;
  background: #fff;
  padding: 8px;
  box-shadow: 0 3px 6px rgba(0, 0, 0, .2);
}
.dl-tile .booklet .bk-img { min-height: 70px; }
.dl-tile .booklet .bk-cap {
  font-weight: 800;
  font-size: 9px;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: var(--ink-deep);
  padding: 6px 2px 2px;
}

/* title = theme card heading; link = theme .bottomHalf .link.
   ECF link arrow icon is inverted to white (filter brightness(0) invert(1)). */
.dl h4 { font-size: 1rem; margin: 0 0 8px; }

/* responsive: themes collapse cards at max-width:880px (resp-max($breakpoint-md));
   the wireframe collapses .g4 to a single column at 920px (shared rule). */
@media (max-width: 880px) {
  .dl-tile { aspect-ratio: auto; padding-bottom: 66%; }
}

/* ---------------- newsletter ---------------- */
/* ---- Newsletter "Keep up to date" / register interest --------------------
   Source: ECF layout/_contact.scss .enquiryForm (resolved).
   Flex two-column block: .formTitle (50%) left, .formWrapper (50%) right.
   Wireframe maps .enquiryForm -> .newsletter .wrap, .formTitle -> first <div>,
   .formWrapper -> <form>. resp-max($s) = @media screen and (max-width:$s) (no -1).
   $breakpoint-lg 1200px, $breakpoint-md 880px. $yellow #FFC24D -> --accent. */
.newsletter .wrap {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  gap: 0;
  padding: 200px 65px;
  max-width: var(--maxw);
  margin: 0 auto;
}
.newsletter .wrap > div:first-child { flex-basis: 50%; }
.newsletter form {
  flex-basis: 50%;
  padding: 0 65px;
  display: flex;
  flex-wrap: wrap;
}

/* input[type=text],[type=email]: width:100%; padding:0; font-size:24px;
   line-height:32px; margin-top:20px; padding-bottom:20px; border-bottom:1px solid;
   margin-bottom:40px; transition:all .5s linear */
.nl-field {
  width: 100%;
  flex-basis: 100%;
  padding: 0;
  padding-bottom: 20px;
  font-size: 24px;
  line-height: 32px;
  font-family: inherit;
  border: 0;
  border-bottom: 1px solid var(--ink);
  background: transparent;
  margin-top: 20px;
  margin-bottom: 40px;
  transition: all 0.5s linear;
}
.nl-field::placeholder { color: #000; opacity: 0.25; }
.nl-field:focus { outline: none; border-bottom: 1px solid var(--accent); }

/* .gfield_checkbox label { margin-top:10px; font-size:24px; line-height:32px }
   .gfield-choice-input { margin-right:10px; width:23px; height:23px; margin-top:12px } */
.nl-check {
  flex-basis: 100%;
  display: flex;
  align-items: flex-start;
  gap: 0;
  margin-top: 10px;
  font-size: 24px;
  line-height: 32px;
  color: var(--ink);
}
.nl-check input {
  width: 23px;
  height: 23px;
  margin-top: 12px;
  margin-right: 10px;
  accent-color: var(--accent);
  flex: none;
}

/* #gform_submit_button_1 { width:100%; padding:24px 32px; color:$black(#000);
   background:$yellow; margin-top:64px; cursor:pointer; font-family:$fontMedium;
   letter-spacing:3px; text-align:left; text-transform:uppercase; border-radius:10px;
   position:relative }  (no font-size / font-weight in source -> inherited) */
.nl-submit {
  width: 100%;
  flex-basis: 100%;
  display: block;
  padding: 24px 32px;
  margin-top: 64px;
  color: #000;
  background-color: var(--accent);
  border: 0;
  cursor: pointer;
  position: relative;
  font-family: var(--font-head);
  letter-spacing: 3px;
  text-align: left;
  text-transform: uppercase;
  border-radius: 10px;
}

/* .smallprint: font-size:18px; line-height:24px; margin-top:10px */
.newsletter .smallprint {
  flex-basis: 100%;
  font-size: 18px;
  line-height: 24px;
  margin-top: 10px;
}

/* resp-max($breakpoint-lg) 1200: padding:100px 44px; columns stack */
@media (max-width: 1200px) {
  .newsletter .wrap { padding: 100px 44px; }
  .newsletter .wrap > div:first-child { flex-basis: 100%; padding: 0 0 44px; }
  .newsletter form { flex-basis: 100%; padding: 0; }
}

/* resp-max($breakpoint-md) 880: padding:65px 24px; submit margin-top:22px */
@media (max-width: 880px) {
  .newsletter .wrap { padding: 65px 24px; }
  .nl-submit { margin-top: 22px; }
}

/* ---------------- survey ---------------- */
/* =========================================================================
   SURVEY / QUESTIONNAIRE (ECF base) — corrected
   resp-max($bp) -> @media screen and (max-width:$bp). md=880, sm=480.
   ========================================================================= */
.survey-wrap { max-width: 760px; margin: 0 auto; padding: 80px 24px; }

.progress { height: 1px; background: var(--line); border-radius: 0; overflow: visible; margin: 18px 0 60px; }
.progress > i { display: block; height: 2px; background: var(--brand); width: 20%; transition: width .3s; }

.step { display: none; }
.step.on { display: block; animation: fade .25s ease; }
@keyframes fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

.q { background: transparent; border: 0; border-radius: 0; padding: 0; margin-bottom: 60px; box-shadow: none; }
.q > label.qlabel { font-family: var(--font-head); font-weight: 700; display: block; margin-bottom: 60px; }
.q > small { display: block; color: #B5B5B5; font-size: 24px; line-height: 32px; margin-top: 30px; }

.opt { display: flex; align-items: center; justify-content: space-between; gap: 0; padding: 6px; padding-left: 20px; min-height: 44px; border: 1px solid var(--line); border-radius: 12px; margin-bottom: 10px; cursor: pointer; transition: all .25s linear; font-size: 22px; }
.opt:has(input:checked) { border-color: var(--brand); }
.opt input { accent-color: var(--accent); width: 25px; height: 25px; margin-right: 20px; flex: none; order: -1; }

textarea, input[type=text], input[type=email] { width: 100%; border: 1px solid var(--line); border-radius: 12px; padding: 20px; font: inherit; font-size: 24px; line-height: 32px; resize: vertical; }
textarea { min-height: 300px; }
input[type=email] { padding: 24px; }

.rating { display: flex; gap: 10px; }
.rating button { width: 44px; height: 44px; border: 1px solid var(--line); background: #D3D3D3; border-radius: 2px; font-weight: 700; cursor: pointer; font-size: 15px; transition: all .25s linear; }
.rating button.on { background: var(--accent); color: var(--brand); border-color: var(--accent); }

.step-nav { display: flex; justify-content: flex-start; gap: 20px; margin-top: 20px; }
.step-nav .btn { position: relative; background: var(--accent); color: var(--brand); padding: 34px 100px 34px 44px; border: 0; border-radius: 12px; font-family: var(--font-head); font-weight: 700; cursor: pointer; transition: all .25s linear; text-decoration: none; }
.step-nav .btn::after { content: ''; position: absolute; top: 34px; right: 44px; width: 20px; height: 20px; background-image: url('../assets/images/arrow.svg'); background-size: contain; background-repeat: no-repeat; transform: rotate(180deg); transition: all .25s linear; }
.step-nav .btn:hover { background: var(--brand); color: #fff; }
.step-nav .btn:hover::after { filter: invert(1); }
/* ghost / back -> slideBackBtn: bg $grey #F2F4F4 (literal; no token holds $grey), left arrow */
.step-nav .btn.ghost { background: #F2F4F4; color: var(--brand); padding: 34px 44px 34px 100px; }
.step-nav .btn.ghost::after { display: none; }
.step-nav .btn.ghost::before { content: ''; position: absolute; top: 34px; left: 44px; width: 20px; height: 20px; background-image: url('../assets/images/arrow.svg'); background-size: contain; background-repeat: no-repeat; transition: all .25s linear; }
.step-nav .btn.ghost:hover { background: var(--brand); color: #fff; }
.step-nav .btn.ghost:hover::before { filter: invert(1); }

.step .q.center .btn { display: inline-block; position: relative; background: var(--accent); color: var(--brand); padding: 34px 100px 34px 44px; border-radius: 12px; text-decoration: none; }

@media screen and (max-width: 880px) {
  .survey-wrap { padding: 80px 22px; }
  .step-nav .btn { padding: 34px 80px 34px 44px; }
  .step-nav .btn.ghost { padding: 34px 44px 34px 80px; }
  .step-nav .btn::after { width: 12px; height: 12px; }
  .step-nav .btn.ghost::before { width: 12px; height: 12px; }
}

/* ---------------- map ---------------- */
/* =========================================================================
   MAP  (ECF base — NEW plan map: _new-map-block + _plan-map)
   ECF corner radius literal = 10px (chrome.js radius token=2 => --radius-sm=2px,
   so 10px is hardcoded, NOT --radius-sm). Dot fill = $blue #242039 = --ink-deep.
   ========================================================================= */
.map-shell { display: grid; grid-template-columns: 360px 1fr; gap: 0; height: calc(100vh - 106px); min-height: 560px; border-top: 1px solid var(--line); }

.map-side { background: #fff; border-right: 1px solid var(--line); overflow-y: auto; padding: 40px; }
.map-side h2 { font-size: 1.4rem; margin: 6px 0 14px; }
.map-side .eyebrow { margin-bottom: 6px; }

#layerList { margin-top: 8px; }
.layer { display: flex; align-items: center; gap: 12px; padding: 20px 0; border: 0; border-top: 1px solid rgba(0,0,0,.1); border-radius: 0; margin-bottom: 0; cursor: pointer; user-select: none; background: transparent; transition: all .4s cubic-bezier(.33,1,.68,1); }
.layer:last-of-type { border-bottom: 1px solid rgba(0,0,0,.1); }
.layer:hover { border-color: rgba(0,0,0,.1); }
.layer:hover .nm { color: var(--accent-3); }

/* swatch = .keyItem .icon: 47px tile, ECF radius literal 10px */
.layer .sw { width: 47px; height: 47px; border-radius: 10px; flex: none; border: 0; }
.layer .nm { font-weight: 650; font-size: 18px; line-height: 24px; flex: 1; transition: color .4s cubic-bezier(.33,1,.68,1); }
.layer input { accent-color: var(--brand); width: 18px; height: 18px; }
.layer.off { opacity: .5; }

/* stage = .planMap: grabbable, ECF radius 10px, neutral backdrop #ebe8e3 (page-map .mapHolder) */
.map-stage { position: relative; overflow: hidden; background: #ebe8e3; cursor: grab; border-radius: 10px; }
.map-stage.dragging { cursor: grabbing; }
.map-canvas { position: absolute; inset: 0; transition: transform .25s ease-out; }
.map-canvas svg { width: 100%; height: 100%; display: block; }
.map-overlay-toggle { transition: opacity .35s linear; }
.map-overlay-toggle.hidden { opacity: 0; pointer-events: none; }

/* markers = .planIcon: 22px round dot, fill $blue #242039 = --ink-deep, pulse, hover grows + recolours to $orange */
.poi, .cpin {
  position: absolute; transform: translate(-50%, -50%); cursor: pointer;
  display: grid; place-items: center; z-index: 5;
}
.poi .dot {
  width: 22px; height: 22px; border-radius: 34px;
  background: var(--ink-deep); border: 0; box-shadow: 0 0 0 rgba(36,32,57,.5);
  display: grid; place-items: center;
  transition: all .4s cubic-bezier(.33,1,.68,1);
  animation: poiPulse 2s infinite;
}
.poi .dot span { transform: none; color: #fff; font-weight: 800; font-size: 11px; }
.poi:hover { z-index: 9; }
.poi:hover .dot { background: var(--accent-3); width: 24px; height: 24px; animation: none; }
.cpin .dot { width: 22px; height: 22px; border-radius: 34px; background: var(--accent-3); border: 0; box-shadow: 0 0 0 rgba(36,32,57,.5); transition: all .4s cubic-bezier(.33,1,.68,1); animation: poiPulse 2s infinite; }
.cpin:hover .dot { width: 24px; height: 24px; animation: none; }
@keyframes poiPulse {
  0%   { box-shadow: 0 0 0 0 rgba(36,32,57,.5); }
  70%  { box-shadow: 0 0 0 20px rgba(36,32,57,0); }
  100% { box-shadow: 0 0 0 0 rgba(36,32,57,0); }
}

/* tools / hint = #mapControls analog; ECF radius 10px */
.map-tools { position: absolute; top: 16px; right: 16px; z-index: 20; display: flex; flex-direction: column; gap: 8px; align-items: flex-end; }
.map-tools .btn { box-shadow: var(--shadow); }
.tool-hint { background: var(--accent-3); color: #fff; font-size: 18px; line-height: 24px; padding: 10px 20px; border-radius: 10px; max-width: 230px; }

/* popover = .tooltip / .layerDetail card: ECF radius 10px */
.popover {
  position: absolute; z-index: 30; width: 280px; background: #fff;
  border: 0; border-radius: 10px; box-shadow: var(--shadow);
  padding: 0; overflow: hidden; transform: translate(-50%, calc(-100% - 20px));
}
.popover .ph { border-radius: 0; min-height: 120px; border: 0; border-bottom: 1px solid var(--line); }
.popover .pop-body { padding: 14px; }
.popover h4 { margin: 0 0 4px; }
.popover .close { position: absolute; top: 8px; right: 8px; background: var(--grey, #f2f4f4); color: var(--ink); border: 0; width: 47px; height: 47px; border-radius: 10px; cursor: pointer; transition: background-color .4s cubic-bezier(.33,1,.68,1); }
.popover .close:hover { background: var(--brand); color: #fff; }

.cbox { border-top: 1px solid rgba(0,0,0,.1); padding-top: 10px; margin-top: 6px; }
.comment { font-size: 13px; padding: 20px 0; border-top: 1px solid rgba(0,0,0,.1); }
.comment:first-child { border-top: 0; }
.comment .who { font-weight: 700; }

/* ---- responsive: WP stacks planKey under planMap below 940px ------------- */
@media (max-width: 940px) {
  .map-shell { grid-template-columns: 1fr; height: auto; }
  .map-side { order: 2; padding: 20px; }
  .map-stage { order: 1; min-height: 60vh; }
}
/* tooltip mobile collapse (ECF .tooltip @media max-width:900px) */
@media (max-width: 900px) {
  .popover { width: 100%; left: 0 !important; bottom: 0; top: auto !important; transform: none; border-radius: 0; z-index: 100; }
}
@media (max-width: 879px) {
  .map-stage { max-height: 600px; }
  .map-tools { top: 16px; right: 16px; }
}

/* ============================ MUSE OVERRIDES ============================ */

/* -- tokens-base (muse) -- */
/* ===== Muse (Muse Places) deltas vs ECF =====
   Heading scale, body sizes, section rhythm are IDENTICAL to ECF — handled by base.
   Only colour/font flow through tokens (see tokenCorrections).
   Structural deltas: .link is NOT red/underlined (it is $black + arrow, no underline);
   buttons are square (radius 0) — carried via --radius token (radius:0).  */

/* .link — Muse: color $black, no underline (uses arrow glyph instead) */
html[data-brand="muse"] .link {
  color: var(--ink);
  text-decoration: none;
  text-underline-offset: 0;
  width: fit-content;
}

/* Muse gform button has border-radius:0; ensure square even if --radius-sm > 0 */
html[data-brand="muse"] .btn { border-radius: 0; }
html[data-brand="muse"] .btn.sm, html[data-brand="muse"] .btn.lg { border-radius: 0; }

/* -- header-nav (muse) -- */
/* Muse nav deltas vs ECF (muse layout/_main.scss). bg #113234 = its --ink-deep (token differs,
   no bar-bg override needed). nav h5 shrinks to 14px <=1680 — covers logo, links AND the CTA text.
   li padding tighter (22 -> 14 @1680 -> 10 @1500). CTA on turquoise (accent-2), bled right -32px. */
@media screen and (max-width: 1680px) {
  html[data-brand="muse"] .site-nav a,
  html[data-brand="muse"] .logo,
  html[data-brand="muse"] .btn-cta { font-size: 14px; }
}
html[data-brand="muse"] .site-nav a { padding: 0 22px; }
@media screen and (max-width: 1680px) {
  html[data-brand="muse"] .site-nav a { padding: 0 14px; }
}
@media screen and (max-width: 1500px) {
  html[data-brand="muse"] .site-nav a { padding: 0 10px; }
}
/* Muse .navCta background is #91DAD1 (turquoise) = --accent-2, not --accent; margin-right:-32px. */
html[data-brand="muse"] .btn-cta {
  background: var(--accent-2);
  margin-right: -32px;
}

/* -- footer (muse) -- */
/* ---- Footer (Muse overrides) ------------------------------------------
   Muse row2 = 4 real columns (col1-col4) each padding:64px with right+bottom
   1px hairlines; reflow 4->2 @1800, 2->1 @1080. row2 a @extend p -> colour
   rgba(255,255,255,.75), 24/32, min-height:64px. Muse footer defines NO h4
   styling in row2 (heading inherits base), so DO NOT override h4 here. row3 a
   gets margin-left:10px. Colour via tokens (--ink-deep #113234, --accent #EC665C). */
html[data-brand="muse"] .foot-cols {
  grid-template-columns: repeat(4, 1fr);
  gap: 0;
}
html[data-brand="muse"] .foot-cols > div {
  padding: 64px;
  border-left: 0;
  border-right: 1px solid rgba(255,255,255,.1);
  border-bottom: 1px solid rgba(255,255,255,.1);
}
html[data-brand="muse"] .foot-cols > div:first-child { padding: 64px; }
html[data-brand="muse"] .foot-cols > div:last-child { border-right: 0; }
/* body copy & links: row2 a @extend p -> 24/32 muted white, min-height 64px */
html[data-brand="muse"] .foot-cols a {
  color: rgba(255,255,255,.75);
  opacity: 1;
  font-size: 24px;
  line-height: 32px;
  margin: 0;
  min-height: 64px;
}
html[data-brand="muse"] .foot-cols a.link-sm {
  color: rgba(255,255,255,.75);
  text-decoration: none;
  text-underline-offset: 0;
  font-size: 24px;
  line-height: 32px;
  margin-top: 0;
  min-height: 0;
}
html[data-brand="muse"] .foot-legal .wrap a { margin-left: 10px; }

@media (max-width: 1800px){
  html[data-brand="muse"] .foot-cols { grid-template-columns: 1fr 1fr; }
  html[data-brand="muse"] .foot-cols > div:nth-child(2n) { border-right: 0; }
}
@media (max-width: 1080px){
  html[data-brand="muse"] .foot-cols { grid-template-columns: 1fr; }
  html[data-brand="muse"] .foot-cols > div { border-right: 0; }
}
@media (max-width: 880px){
  html[data-brand="muse"] .foot-cols > div { padding: 22px; }
  /* body/links resp-max(md) footer p 15px/26px */
  html[data-brand="muse"] .foot-cols a { font-size: 15px; line-height: 26px; min-height: 0; }
  html[data-brand="muse"] .foot-cols a.link-sm { font-size: 15px; line-height: 26px; }
}

/* -- hero (muse) -- */
/* Muse: h1 font has no negative letter-spacing; tint is heavier (0.5).
   Font flows via --font-head (space-grotesk). */
html[data-brand="muse"] .hero-full h1 { letter-spacing: normal; }
html[data-brand="muse"] .hero-full::after { opacity: 0.5; }

/* -- intro (muse) -- */
/* Muse .headerBlock deltas vs ECF:
   - .headerRight padding 0 128px 0 0 and NO left divider (source L13, no border-left)
   - block lg padding 64px 40px (vs ECF 64px 0); md 44px 0 == ECF (omit) */
html[data-brand="muse"] .intro h2 {
  padding: 0 128px 0 0;
  border-left: 0;
}
@media screen and (max-width: 1200px) {
  html[data-brand="muse"] section.block.intro { padding: 64px 40px; }
  /* heading keeps padding 0 128px 0 0 here (no collapse) */
}
@media screen and (max-width: 880px) {
  /* source headerRight md padding 0 44px 0 22px; section padding 44px 0 == ECF */
  html[data-brand="muse"] .intro h2 { padding: 0 44px 0 22px; }
}

/* -- text-image-row (muse) -- */
/* ===== Muse overrides =====
   Muse: imageCol min-height 1000px, flush (no side margins -> gap:0), square (radius 0),
   no block margin-bottom. textCol padding 64 128 128 64 (image_left & image_right same).
   resp-max(lg)=1200px: padding 64 all round. resp-max(md)=880px: text min-height 400,
   padding 44 22; image min-height 400. Heading mobile margin-bottom 44 + padding-right
   stays 64 (Muse does NOT reset it, unlike base). */
html[data-brand="muse"] .row-split { margin-bottom: 0; gap: 0; }
html[data-brand="muse"] .row-split .rs-text { padding: 64px 128px 128px 64px; }
html[data-brand="muse"] .row-split.reverse > .rs-text { padding: 64px 128px 128px 64px; }
html[data-brand="muse"] .row-split .media { min-height: 1000px; border-radius: 0; }
@media (max-width: 1200px){
  html[data-brand="muse"] .row-split .rs-text,
  html[data-brand="muse"] .row-split.reverse > .rs-text { padding: 64px; }
}
@media (max-width: 880px){
  html[data-brand="muse"] .row-split .media { min-height: 400px; padding-bottom: 0; height: auto; }
  html[data-brand="muse"] .row-split .rs-text,
  html[data-brand="muse"] .row-split.reverse > .rs-text { min-height: 400px; padding: 44px 22px; }
  html[data-brand="muse"] .row-split .rs-text h2, html[data-brand="muse"] .row-split .rs-text h3 { margin-bottom: 44px; padding-right: 64px; }
}

/* -- overlap-card (muse) -- */
/* Muse has NO style3 (card-over-image) variant in _text-image-block.scss.
   Muse renders text-image as a non-overlapping 50/50 split with a tall image
   (min-height 1000px, 400px mobile) and a padded text column, no card bg/radius.
   Approximated on the shared overlap DOM by un-overlapping the card. */
html[data-brand="muse"] .overlap {
  flex-wrap: wrap;
  margin-bottom: 0;
}
html[data-brand="muse"] .overlap .ov-media {
  position: relative;
  inset: auto;
  flex-basis: 50%;
  width: auto;
  height: auto;
  min-height: 1000px;
}
html[data-brand="muse"] .overlap .ov-media .media {
  position: relative;
  inset: auto;
  width: 100%;
  height: 100%;
  min-height: 1000px;
}
html[data-brand="muse"] .overlap .ov-card {
  position: relative;
  z-index: auto;
  flex-basis: 50%;
  margin: 0;
  padding: 64px 128px 128px 64px;
  display: block;
  border-radius: 0;
  background: transparent;
}
html[data-brand="muse"] .overlap .ov-card p { opacity: 1; }
@media (max-width: 1200px){
  html[data-brand="muse"] .overlap .ov-card { padding: 64px; }
}
@media (max-width: 880px){
  html[data-brand="muse"] .overlap .ov-media,
  html[data-brand="muse"] .overlap .ov-media .media { flex-basis: 100%; min-height: 400px; }
  html[data-brand="muse"] .overlap .ov-card {
    flex-basis: 100%;
    min-height: 400px;
    margin: 0;
    margin-top: 0;
    padding: 44px 22px 44px 22px;
  }
  html[data-brand="muse"] .overlap .ov-card h2 { margin-bottom: 44px; }
}

/* -- partners (muse) -- */
/* Muse .partnersBlock .swiper-slide .logo: bg #EED8C2 ($cream), padding 200px 0,
   border-radius 0, margin-bottom 40px. h4 44px/54px margin-bottom 20px, p padding-right 64px.
   #EED8C2 has no token (muse warm=#FBF4EC, accent=#EC665C); literal. mix-blend-mode unchanged from base (not repeated). */
html[data-brand="muse"] .partner {
  background: #EED8C2;
  padding: 200px 0;
  border-radius: 0;
  margin-bottom: 40px;
}
html[data-brand="muse"] .grid.g2 .partner + div h4 {
  font-size: 44px;
  line-height: 54px;
  margin: 0 0 20px;
}
html[data-brand="muse"] .grid.g2 .partner + div p { padding-right: 64px; }

@media screen and (max-width: 880px) {
  html[data-brand="muse"] .partner { padding: 23vw 0; }
}

/* -- big-cta (muse) -- */
/* Muse — .inner border-radius 0 (square panel) vs ECF 10px; h5.withArrow adds align-items:center */
html[data-brand="muse"] .colorblock { border-radius: 0; }
html[data-brand="muse"] .colorblock .btn-cta { align-items: center; }

/* -- news-stories (muse) -- */
/* ===== News / stories cards — MUSE overrides (deltas vs ECF) ===============
   Source: muse _stories-block.scss. Diffs from ECF:
   - .storiesBlock padding-top:64px (ECF 0), no section bg (ECF #F8F8F8).
   - .titleBar bg #EAE8E4.
   - card INVERTED: .topHalf = dark text panel (#113234, white, flat padding 30px, height 320px),
     .bottomHalf = image. No .storyCard:after divider.
   - circleBtn hover = $brightOrange (var(--accent-3)); storyPrev margin-right:10px. */
html[data-brand="muse"] section.block#news { background: transparent; padding-top: 64px; padding-bottom: 64px; }
html[data-brand="muse"] #news .carousel-head { background: #EAE8E4; }

html[data-brand="muse"] #news .carousel-head .arrows { gap: 10px; }
html[data-brand="muse"] #news .carousel-head .arrows button:hover { background: var(--accent-3); }

html[data-brand="muse"] #news .card.news::after { display: none; }

/* invert: card-body becomes the dark text panel on top; media drops below */
html[data-brand="muse"] #news .card.news { display: flex; flex-direction: column; }
html[data-brand="muse"] #news .card.news .card-body { order: 0; background: #113234; color: #fff;
  padding: 30px; height: 320px; border-radius: 0; }
html[data-brand="muse"] #news .card.news .card-body .label { color: #fff; }
html[data-brand="muse"] #news .card.news h3 { color: #fff; padding-right: 64px; line-height: normal; }
html[data-brand="muse"] #news .card.news .link { position: absolute; left: 30px; bottom: 30px;
  margin-top: 0; color: #fff; }
html[data-brand="muse"] #news .card.news .media { order: 1; min-height: 320px; border-radius: 0; margin-bottom: 0; }

@media screen and (max-width: 880px){
  html[data-brand="muse"] #news .card.news .card-body { height: 250px; }
  html[data-brand="muse"] #news .card.news .media { min-height: 250px; aspect-ratio: auto; }
  html[data-brand="muse"] #news .card.news h3 { line-height: normal; }
}


/* -- downloads (muse) -- */
/* Muse downloads: cover (theme .topHalf) border-radius 0px; section bg #FFF
   (vs ECF #F8F8F8). Booklet cover shadow + sizing identical to ECF, so omitted.
   The theme's .bottomHalf in Muse gains a grey panel (#F2F4F4) and the link
   icon is NOT inverted (filter brightness(0)); on the wireframe DOM the link
   sits below the tile, so no inversion override is needed. */
html[data-brand="muse"] .dl-tile { border-radius: 0; }

/* -- newsletter (muse) -- */
/* Muse deltas vs ECF: submit border-radius 0 (L157); $yellow=#91DAD1 = --accent-2,
   so submit bg + input focus border use --accent-2. submit color stays #000 (base).
   $fontMedium ('Citizen-Medium') has no token; left on --font-head. */
html[data-brand="muse"] .nl-submit {
  border-radius: 0;
  background-color: var(--accent-2);
}
html[data-brand="muse"] .nl-field:focus { border-bottom-color: var(--accent-2); }

/* -- survey (muse) -- */
/* ===== MUSE survey overrides (structural deltas vs ECF) ===== */
/* square corners on choices/inputs/btn; checked accent = mint #91DAD1 = --accent-2 */
html[data-brand="muse"] .opt { border-radius: 0; }
html[data-brand="muse"] textarea,
html[data-brand="muse"] input[type=text],
html[data-brand="muse"] input[type=email] { border-radius: 0; }

html[data-brand="muse"] .opt input { accent-color: var(--accent-2); }
html[data-brand="muse"] .rating button.on { background: var(--accent-2); color: var(--brand); border-color: var(--accent-2); }

/* btn: square, bg mint (--accent-2), ink #113234 (--ink-deep); hover #113234/#fff */
html[data-brand="muse"] .step-nav .btn { background: var(--accent-2); color: var(--ink-deep); border-radius: 0; }
html[data-brand="muse"] .step-nav .btn:hover { background: var(--ink-deep); color: #fff; }
/* slideBackBtn: bg #D3D3D3 (literal), ink --ink-deep; back btn has no bg hover in source */
html[data-brand="muse"] .step-nav .btn.ghost { background: #D3D3D3; color: var(--ink-deep); border-radius: 0; }
html[data-brand="muse"] .step-nav .btn.ghost:hover { background: #D3D3D3; color: var(--ink-deep); }
html[data-brand="muse"] .step .q.center .btn { background: var(--accent-2); color: var(--ink-deep); border-radius: 0; }
/* NOTE: muse mobile (max-width:880px) restructures .inner .btn (flex:1; padding 20px 40px 20px 20px;
   arrow top:calc(50% - 6px)/right:14px; ghost padding 20px 20px 20px 40px; before left:14px).
   Only applies once the .inner markup hook exists; add then. */

/* -- map (muse) -- */
/* Muse — NEW plan map deltas vs ECF.
   Legend label 20px/line-height 20px; swatch tile fully ROUND (.icon radius 47px).
   Tooltip / card / planMap radius 0. Marker dot fill = $darkGreen #113234 = muse
   --ink-deep (base already var(--ink-deep) => no dot-fill override needed). */
html[data-brand="muse"] .layer .nm { font-size: 20px; line-height: 20px; }
html[data-brand="muse"] .layer .sw { border-radius: 47px; }
html[data-brand="muse"] .map-stage { border-radius: 0; }
html[data-brand="muse"] .tool-hint { border-radius: 0; }
html[data-brand="muse"] .popover { border-radius: 0; }
html[data-brand="muse"] .popover .close { border-radius: 47px; }
/* marker hover -> #F8551C (~ --accent-3 #F9551B), no override needed */

/* ============================ HABIKO OVERRIDES ============================ */

/* -- tokens-base (habiko) -- */
/* ===== Habiko deltas vs ECF =====
   Heading scale + body sizes + section rhythm are IDENTICAL to ECF — handled by base.
   Real structural deltas come from Habiko's two-font system and component shapes:
   - headings use FTBureau-Medium (--font-head); body <p> uses FTSystem-BlankRegular (--font-body)
     (handled by tokens, since base already splits head vs body fonts).
   - h5 is NOT uppercase and has 0 letter-spacing, and uses the body/medium font.
   - .link is red + underlined (same as ECF) — no delta.
   - buttons are pill-shaped (radius 40px) and NOT uppercase / no letter-spacing. */

/* h5 / eyebrow: no uppercase, no tracking, body font (FTSystem-BlankRegular) */
html[data-brand="habiko"] h5,
html[data-brand="habiko"] .label,
html[data-brand="habiko"] .eyebrow {
  font-family: var(--font-body);
  letter-spacing: 0;
  text-transform: none;
}

/* nav h5 in Habiko keeps uppercase + 2.2px tracking (nav-specific) — leave .btn-cta as base */

/* buttons: pill radius (carried by --radius=14 -> radius-sm), not uppercase, no tracking */
html[data-brand="habiko"] .btn {
  border-radius: 40px;
  text-transform: none;
  letter-spacing: 0;
  font-family: var(--font-body);
}
html[data-brand="habiko"] .btn.sm,
html[data-brand="habiko"] .btn.lg { border-radius: 40px; }

/* .btn-cta keeps uppercase nav styling in base; Habiko nav h5 stays uppercase, so no delta */

/* -- header-nav (habiko) -- */
/* Habiko nav deltas vs ECF (habiko layout/_main.scss). nav bg #00CE8C = Habiko accent ($yellow),
   NOT --ink-deep, so repoint bar bg to --accent. nav-scoped h5 letter-spacing 2.2px (vs 3px), uppercase.
   .navCta is BLACK bg / white text; hover coral #EA745E with arrow rotate(180deg) translateX(-5px). */
html[data-brand="habiko"] .site-header { background: var(--accent); }
html[data-brand="habiko"] .logo,
html[data-brand="habiko"] .site-nav a { letter-spacing: 2.2px; }
html[data-brand="habiko"] .btn-cta {
  background: #000; color: #fff;
  letter-spacing: 2.2px;
}
html[data-brand="habiko"] .btn-cta:hover { background: #EA745E; color: #000; }
html[data-brand="habiko"] .btn-cta:hover span { transform: rotate(180deg) translateX(-5px); }

/* -- footer (habiko) -- */
/* ---- Footer (Habiko overrides) ----------------------------------------
   Habiko footer.scss matches ECF typographically (h4 26/34 #fff margin-bottom 0,
   p 26/34 #fff opacity .5 margin-bottom 34px, accent links $yellow/--accent
   text-underline-offset:10px, same .signup CTA, 64px paddings, rgba(255,255,255,.1)
   hairlines, mobile 22px 0). The one real delta: footer background is hard-coded
   #000 (line 3), not $blue/--ink-deep #242039. Legal-bar links use FTSystem-Blank
   (maps to --font-body). All other footer typographic values equal ECF base. */
html[data-brand="habiko"] footer.site-footer {
  background-color: #000;
}
/* the global Habiko .btn-cta is black (for the green nav); on the black footer that
   would be invisible — restore a visible green register button here. */
html[data-brand="habiko"] .foot-top .btn-cta { background: var(--accent); color: #000; }
html[data-brand="habiko"] .foot-top .btn-cta:hover { background: #EA745E; color: #000; }
html[data-brand="habiko"] .foot-legal .wrap,
html[data-brand="habiko"] .foot-legal .wrap a {
  font-family: var(--font-body);
}

/* -- hero (habiko) -- */
/* Habiko: tint heavier (0.5). letter-spacing -0.04em same as ECF.
   Font flows via --font-head (fraunces). */
html[data-brand="habiko"] .hero-full::after { opacity: 0.5; }

/* -- intro (habiko) -- */
/* Habiko .headerBlock is byte-identical to ECF (same 128/64 padding, 25/75
   split, divider rgba(36,32,57,.1), heading scale + margin-bottom 64/44).
   All brand differences (colour/font/radius) flow through tokens. No overrides. */

/* -- text-image-row (habiko) -- */
/* ===== Habiko overrides =====
   Habiko: block padding 64px, margin-bottom 128px. imageCol square (border-radius 0).
   Same 614px image min-height & 256px text bottom padding as ECF base (inherited; base
   non-reverse padding-right is now correctly 64px to match Habiko image_left L29).
   resp-max(md)=880px: block padding 52px 0. */
html[data-brand="habiko"] .row-split { margin-bottom: 128px; padding: 64px; }
html[data-brand="habiko"] .row-split .media { border-radius: 0; }
@media (max-width: 880px){
  html[data-brand="habiko"] .row-split { padding: 52px 0; margin-bottom: 128px; }
}

/* -- overlap-card (habiko) -- */
/* Habiko style3: identical to ECF except card has NO radius (border-radius 0),
   copy opacity 0.8 (vs ECF 0.5), block margin-bottom 128px (vs 96px). */
html[data-brand="habiko"] .overlap { margin-bottom: 128px; }
html[data-brand="habiko"] .overlap .ov-card { border-radius: 0; }
html[data-brand="habiko"] .overlap .ov-card p { opacity: .8; }

/* -- partners (habiko) -- */
/* Habiko identical to Muse logo tile plus aspect-ratio:16/9 on the tile (line 88 _partners-block.scss).
   #EED8C2 literal (habiko warm=#f3f7f5, accent=#00ce8c). mix-blend-mode inherited from base, not repeated. */
html[data-brand="habiko"] .partner {
  background: #EED8C2;
  padding: 200px 0;
  border-radius: 0;
  margin-bottom: 40px;
  aspect-ratio: 16 / 9;
}
html[data-brand="habiko"] .grid.g2 .partner + div h4 {
  font-size: 44px;
  line-height: 54px;
  margin: 0 0 20px;
}
html[data-brand="habiko"] .grid.g2 .partner + div p { padding-right: 64px; }

@media screen and (max-width: 880px) {
  html[data-brand="habiko"] .partner { padding: 23vw 0; }
}

/* -- big-cta (habiko) -- */
/* Habiko — square panel; taller arrow glyph (16x24 vs 16x16); h5.withArrow adds align-items:center */
html[data-brand="habiko"] .colorblock { border-radius: 0; }
html[data-brand="habiko"] .colorblock .btn-cta { align-items: center; }
html[data-brand="habiko"] .colorblock .btn-cta span { height: 24px; }

/* -- news-stories (habiko) -- */
/* ===== News / stories cards — HABIKO overrides (deltas vs ECF) =============
   Source: habiko _stories-block.scss identical to ECF EXCEPT
   .topHalf border-radius: 0px (ECF 12px). All other geometry == ECF base. */
html[data-brand="habiko"] #news .card.news .media { border-radius: 0; }


/* -- downloads (habiko) -- */
/* Habiko downloads: identical to ECF except cover (theme .topHalf)
   border-radius is 0px (ECF = 12px). Section bg #F8F8F8 same as ECF. */
html[data-brand="habiko"] .dl-tile { border-radius: 0; }

/* -- newsletter (habiko) -- */
/* Habiko delta vs ECF: submit border-radius 0 (L157). $yellow=#00ce8c = --accent
   (same token role as ECF) so bg/focus already correct via base --accent.
   submit color stays #000 (base). NOTE: habiko _contact.scss also defines a
   separate #gform_submit_button_214 pill/arrow CTA (padding 34px 80px 34px 44px;
   color #fff; background #000; border-radius 50px; :after arrowWhite.svg 20x20 right44px;
   hover bg #00ce8c + arrow.svg; resp-max 880 -> :after 14x14 right32px, padding 34px 70px 34px 44px)
   which has NO equivalent in the wireframe newsletter DOM and is out of this block. */
html[data-brand="habiko"] .nl-submit { border-radius: 0; }

/* -- survey (habiko) -- */
/* ===== HABIKO survey overrides (structural deltas vs ECF) ===== */
/* square corners on choices/inputs; pill (50px) buttons; checked accent #00ce8c (--accent) */
html[data-brand="habiko"] .opt { border-radius: 0; }
html[data-brand="habiko"] textarea,
html[data-brand="habiko"] input[type=text],
html[data-brand="habiko"] input[type=email] { border-radius: 0; }

html[data-brand="habiko"] .rating button.on { background: var(--accent); color: #000; border-color: var(--accent); }

/* btn: pill 50px, bg #00ce8c (--accent), ink #000, hover #000/#fff */
html[data-brand="habiko"] .step-nav .btn { background: var(--accent); color: #000; border-radius: 50px; }
html[data-brand="habiko"] .step-nav .btn:hover { background: #000; color: #fff; }
/* slideBackBtn: bg $grey #F2F4F4 (literal; NOT --warm), ink #000, pill, hover #000/#fff */
html[data-brand="habiko"] .step-nav .btn.ghost { background: #F2F4F4; color: #000; border-radius: 50px; }
html[data-brand="habiko"] .step-nav .btn.ghost:hover { background: #000; color: #fff; }
html[data-brand="habiko"] .step .q.center .btn { background: var(--accent); color: #000; border-radius: 50px; }
/* NOTE: habiko active-restored choice highlight is $orange #EC665C (= --accent-3),
   distinct from the checked #00ce8c — not expressible without a .checkmark element. */

/* -- map (habiko) -- */
/* Habiko — NEW plan map deltas vs ECF.
   Swatch tile SQUARE (.icon radius 0). Tooltip / card / planMap radius 0.
   Marker dot fill = $darkGreen #113234 (habiko --brand & --ink-deep are both
   #242039, so MUST hardcode #113234). Hover + comment-pin = $orange #EC665C. */
html[data-brand="habiko"] .layer .sw { border-radius: 0; }
html[data-brand="habiko"] .map-stage { border-radius: 0; }
html[data-brand="habiko"] .tool-hint { border-radius: 0; }
html[data-brand="habiko"] .popover { border-radius: 0; }
html[data-brand="habiko"] .popover .close { border-radius: 999px; }
html[data-brand="habiko"] .poi .dot { background: #113234; }
html[data-brand="habiko"] .poi:hover .dot { background: #EC665C; }
html[data-brand="habiko"] .cpin .dot { background: #EC665C; }
