/* ⚠ WARM WHITE: THE GROUND IS NEARLY FLAT NOW, SO RULES DO THE SEPARATING.
   Charlie chose the lightest option, 28 Aug: --cream #fefdfb, --cream2 #ffffff.
   That collapses the page's three-tier ground — cream, cream2, white — into
   one, and every place that used TONE to separate stops working. Measured: the
   old cream->cream2 step was 4.84, cream2->white 5.95; both are now 1.71 and
   ZERO. So structure comes from hairlines and one sunk fill instead, which is
   the app's own house style anyway ("hairlines, not boxes").

   --sunk is that fill: it reads on white AND on the new cream (11.9 and 10.2),
   so anything that needs to sit INSIDE a white panel uses it rather than
   cream2, which is now the same colour as its parent. */
:root { --sunk: #f4f1ea; }

/* ── The marketing page's data sections ───────────────────────────────────
 *
 * Charlie's brief, 27 Aug 2026: build the page around the map panel, with no
 * section that is text alone — "show not tell". Every block here is a figure or
 * a chart; the prose is a one-line caption under it.
 *
 * ⚠ THE RHYTHM IS THE POINT. The first draft was six sections of the same
 * shape — eyebrow, big number, headline, chart on the right — and Charlie's
 * read was "it's kind of just looking like a stat pamphlet". It was: a page of
 * identical tiles is a deck, not an argument. So no two consecutive sections
 * here share a layout. A full-bleed navy statement, then a white instrument you
 * operate, then a near-empty centred field, then an asymmetric split, then a
 * document. If you add a section, give it a shape none of its neighbours has.
 *
 * Tokens come from marketing.html's :root — this file defines none of its own.
 */

.mk { padding: 104px 40px; background: var(--cream); }
/* ⚠ Consecutive sections no longer differ enough in tone to read as separate.
   The navy ones carry their own edge, so they are left out — a light hairline
   along the top of a navy band reads as a mistake. */
.mk + .mk:not(.mk-stop):not(.mk-band) { border-top: 1px solid var(--border); }
.mk-in { max-width: 1200px; margin: 0 auto; }
.mk-eyebrow {
  font-size: 11px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase;
  color: var(--gold-soft); margin: 0 0 14px;
}
.mk-h {
  font-family: 'Playfair Display', Georgia, serif; font-weight: 700;
  font-size: clamp(26px, 3.1vw, 34px); line-height: 1.14; letter-spacing: -.022em;
  color: var(--navy); margin: 0; max-width: 18ch; text-wrap: balance;
}
.mk-h-mid { margin: 0 auto 30px; max-width: 21ch; }
.mk-cap { color: var(--text2); font-size: 14px; line-height: 1.6; margin: 18px 0 0; max-width: 56ch; }
.mk-cap b { color: var(--navy); font-weight: 600; }
.mk-split { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: 46px; align-items: center; }

/* shared bar + key ------------------------------------------------------- */
.mk-bar { display: flex; gap: 2px; height: 46px; }
.mk-bar-lg { height: 56px; }
.mk-bar i { display: block; height: 100%; }
.mk-bar i:first-child { border-radius: 9px 2px 2px 9px; }
.mk-bar i:last-child { border-radius: 2px 9px 9px 2px; }
.mk-key { display: flex; flex-wrap: wrap; gap: 10px 28px; margin-top: 16px; font-size: 13px; color: var(--text2); }
.mk-key span { display: flex; align-items: baseline; gap: 8px; }
.mk-key em { width: 9px; height: 9px; border-radius: 2px; font-style: normal; flex: 0 0 auto; position: relative; top: 1px; }
.mk-key b { color: var(--navy); font-weight: 600; font-family: 'DM Mono', ui-monospace, monospace; font-variant-numeric: tabular-nums; }
.mk-key-mid { justify-content: center; }
.mk-key-dark { color: #a8b6c6; }
.mk-key-dark b { color: #fff; }

/* 1. the statement — full-bleed navy, the page stops -------------------- */
.mk-stop {
  background: var(--navy); color: #fff; padding: 112px 40px;
  background-image: radial-gradient(130% 120% at 12% -20%, rgba(255, 255, 255, .075), transparent 58%);
}
.mk-stop .mk-eyebrow { color: var(--gold); }
.mk-stop-h {
  font-family: 'Playfair Display', Georgia, serif; font-weight: 700;
  font-size: clamp(30px, 5vw, 56px); line-height: 1.05; letter-spacing: -.03em;
  margin: 0 0 34px; max-width: 19ch; text-wrap: balance; color: #fff;
}
.mk-cap-dark { color: #a8b6c6; max-width: 60ch; margin-top: 26px; }

/* 2. the instrument — white, ruled off, operated not read --------------- */
.mk-tool { border-bottom: 1px solid var(--border); }
.mk-toolhead { display: flex; justify-content: space-between; align-items: flex-end; gap: 26px; flex-wrap: wrap; margin-bottom: 28px; }
.mk-pick {
  display: flex; align-items: center; gap: 9px; background: var(--sunk);
  border: 1px solid var(--border); border-radius: 100px; padding: 10px 18px; min-width: 280px;
  transition: border-color .18s, box-shadow .18s;
}
.mk-pick:focus-within { border-color: var(--gold); box-shadow: 0 0 0 3px rgba(201, 168, 76, .15); }
.mk-pick-l { font: 500 11px/1 'DM Mono', ui-monospace, monospace; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.mk-pick input { border: 0; background: none; outline: none; font-weight: 400; font-size: 13.5px; line-height: 1.4; color: var(--text); width: 100%; min-width: 0; }
.mk-strip { display: flex; align-items: flex-end; gap: 1px; height: 168px; border-bottom: 1px solid var(--border); }
.mk-strip i { flex: 1 1 0; min-width: 0; border-radius: 2px 2px 0 0; cursor: pointer; transition: opacity .14s, background .14s; }
.mk-strip.dim i { opacity: .26; }
.mk-strip.dim i.hit { opacity: 1; background: var(--gold) !important; }
.mk-strip i:hover { opacity: 1; }
.mk-strip i:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.mk-axis { display: flex; justify-content: space-between; gap: 12px; margin-top: 11px; font: 400 11px/1.4 'DM Mono', ui-monospace, monospace; color: var(--muted); }
.mk-readout { margin-top: 22px; border-top: 1px solid var(--border); padding-top: 20px; min-height: 76px; }
.mk-who { font: 500 21px/1.25 'DM Mono', ui-monospace, monospace; color: var(--navy); letter-spacing: -.02em; }
.mk-what { color: var(--text2); font-size: 13.5px; margin-top: 7px; line-height: 1.55; }
.mk-what b { color: var(--navy); font-weight: 600; }
.mk-idle { color: var(--muted); font-size: 13.5px; line-height: 1.55; }

/* 3. the field — centred, quiet, almost nothing on it ------------------- */
.mk-field { text-align: center; }
.mk-dots { display: grid; grid-template-columns: repeat(32, 1fr); gap: 7px; max-width: 760px; margin: 0 auto 24px; }
.mk-dots i { aspect-ratio: 1; border-radius: 50%; border: 1.4px solid #b3aca0; display: block; }
.mk-dots i.on { background: var(--gold); border-color: var(--gold); }
.mk-dot-on { background: var(--gold); border-radius: 50% !important; }
.mk-dot-off { border: 1.4px solid #b3aca0; border-radius: 50% !important; }

/* 4. the split — proposals ---------------------------------------------- */
.mk-fun { border-top: 1px solid var(--border); }

/* 5. the document — offset, tilted half a degree ------------------------ */
.mk-receipt {
  border: 1px solid var(--border); border-radius: var(--r); background: var(--bg2);
  padding: 22px 24px; display: flex; flex-direction: column; gap: 11px;
  font: 400 12.5px/1.5 'DM Mono', ui-monospace, monospace; color: var(--text2);
  box-shadow: 0 12px 34px -20px rgba(13, 33, 55, .45); transform: rotate(-.5deg);
}
.mk-hd { color: var(--muted); letter-spacing: .13em; text-transform: uppercase; font-size: 9.5px; }
.mk-r { display: flex; justify-content: space-between; gap: 18px; border-top: 1px dashed var(--border); padding-top: 11px; }
.mk-r b { color: var(--navy); font-weight: 500; text-align: right; }
.mk-flag { color: #a4442e; }

/* 6. the band ----------------------------------------------------------- */
.mk-band { background: var(--navy); padding: 64px 40px; color: #fff; }
.mk-band .mk-eyebrow { color: var(--gold); }
.mk-bandgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 30px 24px; }
.mk-n { font: 500 clamp(26px, 3vw, 34px)/1 'DM Mono', ui-monospace, monospace; letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.mk-l { font-size: 11.5px; color: #a8b6c6; margin-top: 9px; line-height: 1.45; }

@media (max-width: 860px) {
  .mk { padding: 72px 24px; }
  .mk-stop { padding: 84px 24px; }
  .mk-band { padding: 52px 24px; }
  .mk-split { grid-template-columns: 1fr; gap: 30px; }
  .mk-bandgrid { grid-template-columns: repeat(2, 1fr); }
  .mk-dots { grid-template-columns: repeat(16, 1fr); }
  .mk-strip { height: 132px; }
  .mk-receipt { transform: none; }
  .mk-axis { font-size: 10px; }
}
@media (prefers-reduced-motion: reduce) {
  .mk-strip i { transition: none; }
}

/* 7. the directory — one line, 128 links behind it ----------------------
 *
 * ⚠ These are the homepage's only crawlable links to the council pages, which
 * earn 100% of the site's search traffic. The map's anchors are built by
 * JavaScript and a crawler never sees them. Collapsed for the reader, present
 * in the served HTML for the crawler. Style it however you like; do not remove
 * it, and do not render it client-side. */
.mk-dir { border-top: 1px solid var(--border); padding: 30px 40px; }
.mk-details > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center; gap: 10px;
  font-size: 13px; font-weight: 600; color: var(--text2); padding: 4px 0;
  transition: color .14s;
}
.mk-details > summary::-webkit-details-marker { display: none; }
.mk-details > summary:hover, .mk-details > summary:focus-visible { color: var(--navy); }
.mk-details > summary i {
  width: 6px; height: 6px; border-right: 1.5px solid currentColor;
  border-bottom: 1.5px solid currentColor; transform: rotate(45deg) translate(-1px, -1px);
  transition: transform .18s;
}
.mk-details[open] > summary i { transform: rotate(-135deg) translate(-2px, -2px); }
.mk-dirlist {
  /* ⚠ EVERY ONE OF THESE RESETS IS LOAD-BEARING. marketing.html styles the site
     header with a BARE ELEMENT SELECTOR — `nav{position:fixed;top:12px;left:50%;
     transform:translateX(-50%);z-index:100;width:calc(100% - 32px);
     max-width:1200px}` — so it catches any <nav> on the page, including this
     one. It took the directory out of flow: the list measured 944px tall while
     its section collapsed to 279px, and 128 council names painted straight over
     the FAQ below. A class beats an element selector, so no !important is
     needed, but each property has to be named to be undone. */
  position: static; top: auto; left: auto; transform: none;
  width: auto; max-width: none; z-index: auto;
  margin-top: 18px; columns: 4; column-gap: 34px;
  font-size: 12.5px; line-height: 1.5;
}
.mk-dirlist a {
  display: block; padding: 4px 0; color: var(--muted); text-decoration: none;
  break-inside: avoid; transition: color .14s;
}
.mk-dirlist a:hover, .mk-dirlist a:focus-visible { color: var(--navy); text-decoration: underline; }
@media (max-width: 1000px) { .mk-dirlist { columns: 3; } }
@media (max-width: 700px)  { .mk-dirlist { columns: 2; } .mk-dir { padding: 24px; } }
@media (max-width: 460px)  { .mk-dirlist { columns: 1; } }

/* ⚠ NEVER WRITE `font: <weight> <size>/<lh> inherit`. `inherit` is not a valid
   family inside the font shorthand, so the ENTIRE declaration is discarded and
   the element silently falls back to body text. It shipped here once: hero rows
   rendered at 16px/1.7 instead of 13px/1.3 and grew from 55px to 99px, which
   pushed the fourth row out of the panel. Use longhand and let family inherit. */

/* ── 8. the hero showcase ─────────────────────────────────────────────────
 *
 * Text left, a product panel right with two cards breaking its corners, three
 * screens sliding every 4.5s. Replaces the centred hero and the fabricated
 * mock-frame that used to sit under it.
 *
 * ⚠ EVERY CLASS IS PREFIXED `hs-`. The page already styles `nav`, and the
 * generic names this component wants — .pill, .num, .tr, .dots, .float — are
 * exactly the kind that collide silently. One bare `nav{position:fixed}` in
 * this file's own page already took the council directory out of flow once.
 *
 * ⚠ THE PANEL MUST NOT BLEED PAST THE CANVAS. An earlier version ran it wider
 * than the column for effect and the last table column was sliced off; the
 * irregularity comes from the floating cards, not from clipping. */
.hero-split { display: grid; grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr);
  gap: 52px; align-items: center; text-align: left; }
.hero-split .hero-text { text-align: left; max-width: none; }
.hero-split h1 { font-size: clamp(30px, 3.3vw, 42px); line-height: 1.07; letter-spacing: -.028em;
  margin: 0 0 18px; text-wrap: balance; }
.hero-split .hero-sub { margin: 0 0 24px; font-size: 15.5px; line-height: 1.6; max-width: 40ch; }
.hero-split .hero-actions { justify-content: flex-start; }

.hstats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; margin: 0 0 28px;
  padding: 20px 0; border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
.hstats .n { font: 700 25px/1 'Playfair Display', Georgia, serif; color: var(--navy); letter-spacing: -.02em; }
.hstats .l { font-size: 10.5px; color: var(--muted); margin-top: 7px; line-height: 1.35; }

.hs-wrap { position: relative; padding: 22px 8px 20px 22px; overflow: visible;
  display: flex; flex-direction: column; }
.hs-dev { position: relative; width: 100%; background: var(--bg2); border-radius: 16px; overflow: hidden;
  box-shadow: 0 40px 80px -40px rgba(13,33,55,.4), 0 4px 14px rgba(13,33,55,.05); }
.hs-bar { display: flex; align-items: center; gap: 6px; padding: 12px 16px; border-bottom: 1px solid var(--border); }
.hs-bar u { width: 8px; height: 8px; border-radius: 50%; text-decoration: none; }
.hs-ttl { margin-left: 8px; font-weight: 700; font-size: 9.5px; line-height: 1; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
/* Sized to the tallest screen's content. Not a magic number: if a screen gains
   a row, re-measure rather than letting it clip. */
.hs-stage { position: relative; height: 258px; overflow: hidden; }
.hs-screen { position: absolute; inset: 0; opacity: 0; transform: translateX(38px); pointer-events: none;
  transition: opacity .46s cubic-bezier(.22,1,.3,1), transform .55s cubic-bezier(.22,1,.3,1); }
.hs-screen.on { opacity: 1; transform: translateX(0); pointer-events: auto; }
.hs-screen.prev { opacity: 0; transform: translateX(-38px); }

.hs-tr { display: grid; grid-template-columns: 1fr 92px 64px 52px; gap: 9px; align-items: center;
  padding: 10px 14px; border-bottom: 1px solid var(--border); }
.hs-tr.head { padding: 12px 20px; }
.hs-tr.head span { font-weight: 700; font-size: 9px; line-height: 1; letter-spacing: .13em; text-transform: uppercase; color: var(--muted); }
.hs-t { font-weight: 700; font-size: 11.5px; line-height: 1.32; color: var(--navy); }
.hs-m { font-size: 9.5px; color: var(--muted); margin-top: 3px; }
.hs-pill { display: inline-block; font-weight: 700; font-size: 9px; line-height: 1; padding: 6px 9px; border-radius: 100px; white-space: nowrap; }
.hs-grn { background: rgba(46,125,91,.13); color: #2e7d5b; }
.hs-blu { background: rgba(91,127,156,.16); color: #3d6a8c; }
.hs-gld { background: rgba(201,168,76,.18); color: #8a6d1f; }
.hs-pur { background: rgba(91,86,184,.13); color: #5b56b8; }
.hs-num { font: 500 11px/1 'DM Mono', ui-monospace, monospace; color: var(--navy); }
.hs-mut { font-size: 10px; color: var(--muted); }

.hs-floats { position: absolute; inset: 0; pointer-events: none; z-index: 6; }
.hs-fg { position: absolute; inset: 0; opacity: 0; transform: translateX(22px);
  transition: opacity .46s cubic-bezier(.22,1,.3,1), transform .55s cubic-bezier(.22,1,.3,1); }
.hs-fg.on { opacity: 1; transform: translateX(0); }
.hs-fg.prev { opacity: 0; transform: translateX(-22px); }
.hs-card { position: absolute; background: var(--bg2); border-radius: 12px; padding: 11px 13px;
  box-shadow: 0 24px 48px -18px rgba(13,33,55,.34), 0 2px 8px rgba(13,33,55,.06); }
.hs-card .k { font-weight: 700; font-size: 8.5px; line-height: 1; letter-spacing: .13em; text-transform: uppercase;
  color: var(--muted); margin-bottom: 9px; }
.hs-tr-card { top: -8px; right: -14px; width: 168px; }
.hs-bl-card { bottom: -6px; left: -26px; width: 184px; }
.hs-big { font: 700 19px/1 'Playfair Display', Georgia, serif; color: var(--navy); letter-spacing: -.02em; }
.hs-row { display: flex; align-items: center; gap: 11px; }
.hs-ic { width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center;
  justify-content: center; flex: 0 0 auto; }
.hs-sub { font-size: 9.5px; color: var(--muted); margin-top: 4px; }
.hs-bars { display: flex; gap: 5px; margin-top: 11px; }
.hs-bars i { flex: 1; height: 5px; border-radius: 100px; display: block; }

.hs-dots { display: flex; flex-direction: row; gap: 8px; justify-content: center; padding: 22px 0 0; }
.hs-dots button { width: 7px; height: 7px; padding: 0; border: 0; border-radius: 50%;
  background: #ddd6cb; cursor: pointer; transition: all .22s; }
.hs-dots button:hover { background: #c3bbac; }
.hs-dots button:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
.hs-dots button[aria-current="true"] { background: var(--navy); width: 20px; border-radius: 100px; }

@media (max-width: 980px) {
  .hero-split { grid-template-columns: 1fr; gap: 30px; }
  .hs-wrap { padding: 26px 0; }
  .hs-tr-card { right: -6px; width: 180px; }
  .hs-bl-card { left: -6px; width: 190px; }
  .hs-stage { height: 320px; }
  .hs-tr { grid-template-columns: 1fr 104px 112px; }
  .hs-tr > :last-child { display: none; }
}
@media (prefers-reduced-motion: reduce) {
  .hs-screen, .hs-fg { transition: none !important; transform: none !important; }
}

/* ── 9. the three hero screens, three different shapes ────────────────────
 *
 * ⚠ THEY HAD TO STOP LOOKING ALIKE. All three were four-row tables, so the
 * slide ran correctly — classes, opacity and transform all measured right —
 * and still read as "the visuals arent actually changing", because at a glance
 * nothing did. A feed, a ranked chart and a table now differ in silhouette,
 * not just in text. Keep it that way if a screen is added. */

/* a feed */
.hs-feed { padding: 10px 14px; display: flex; flex-direction: column; gap: 5px; }
.hs-item { display: flex; align-items: center; gap: 10px; padding: 9px 11px;
  border-left: 3px solid var(--border); border-radius: 0 10px 10px 0; background: var(--sunk); }
.hs-item-b { flex: 1; min-width: 0; }

/* a ranked chart */
.hs-rank { padding: 15px 17px; display: flex; flex-direction: column; gap: 13px; }
.hs-rank-r { display: grid; grid-template-columns: 1fr 32% 36px; gap: 12px; align-items: center; }
.hs-rank-n { min-width: 0; }
.hs-rank-bar { height: 8px; border-radius: 100px; background: var(--border); overflow: hidden; }
.hs-rank-bar i { display: block; height: 100%; border-radius: 100px;
  background: linear-gradient(90deg, #5b7f9c, var(--navy)); }
.hs-rank-r .hs-num { text-align: right; }

.hs-ic { font-weight: 700; font-size: 15px; }

/* ⚠ .hero has NO bottom padding of its own — the next section sat hard against
   the buttons. section.hero out-specifies the page's own .hero rule. */
section.hero { padding-bottom: 78px; }
@media (max-width: 900px) { section.hero { padding-bottom: 52px; } }

/* ── 10. phones: no hero visual, no map ───────────────────────────────────
 *
 * Charlie, 28 Aug: remove both on the phone. The map is 129KB of boundaries
 * and 132 large SVG paths with no pinch zoom, and its responsive rules have
 * never been seen on a real device; the hero panel is a drawn illustration
 * that costs a phone screen more than it earns.
 *
 * ⚠ CSS ALONE DOES NOT STOP THE MAP LOADING. Hiding it is enough for the lazy
 * path — a display:none element never intersects — but council-map.js starts
 * eagerly for a shared #map: link and for browsers without IntersectionObserver.
 * That guard lives at the top of council-map.js and uses THIS breakpoint. Move
 * one, move the other.
 *
 * The 128 council links are in the directory, not the map, so nothing that
 * matters to search is hidden here. */
@media (max-width: 768px) {
  .hs-wrap { display: none; }
  .lmap-section { display: none; }
  .hero-split { grid-template-columns: 1fr; gap: 0; }
  section.hero { padding-bottom: 44px; }
}

/* ── 11. the section ramp ─────────────────────────────────────────────────
 *
 * Charlie chose "deepening" from the mockup, 28 Aug: the page warms as you
 * scroll. The hero stays warm white and the navy bands are fixed points, so
 * these seven are the ones that move.
 *
 * ⚠ IT IS A SEQUENCE, NOT A SET. Each value only makes sense in the order
 * below — the page reads as intentional because it gets progressively richer
 * toward the base, with the two white panels breaking it. A section ADDED
 * later cannot just be appended a colour: it has to be slotted into the ramp
 * and the ones after it re-tuned, or the progression breaks and the whole
 * thing reads as accidental. That is the cost of this scheme over alternating,
 * and it was accepted knowingly.
 *
 * The hairlines stay. Two neighbours here differ by very little (hero to map),
 * and a rule guarantees the join regardless of what the shades do. */
:root {
  --sec-map:   #fcfaf5;   /* 1 */
  --sec-tool:  #ffffff;   /* 2 — white, the instrument lifts off the ramp */
  --sec-field: #f9f5ed;   /* 3 */
  --sec-fun:   #fdfbf7;   /* 4 */
  --sec-rec:   #f6f1e6;   /* 5 */
  --sec-faq:   #fffefd;   /* 6 — after the navy band, resets to near white */
  --sec-dir:   #f2ece0;   /* 7 — the base, richest */
}
.lmap-section { background: var(--sec-map); }
.mk-tool  { background: var(--sec-tool); }
.mk-field { background: var(--sec-field); }
.mk-fun   { background: var(--sec-fun); }
.mk-rec   { background: var(--sec-rec); }
.faq-section { background: var(--sec-faq); }
.mk-dir   { background: var(--sec-dir); }
