/* Puls design-tokens — vormentaal B (FT-signatuur), goedgekeurd 2026-07-08.
   Single source of truth: elk katern erft hieruit. Referentiebeeld:
   design/referentie-b-goedgekeurd-20260708.png. Wijzigingen alleen via PR. */

:root {
  /* papier & inkt — vormentaal B (FT-zalm), geratificeerd 2026-07-08.
     Hersteld 2026-07-14 na niet-gestempelde C-palet-drift op productie
     (DECISIONS: vormentaal-C bewust niet gestempeld — blijft open beslispunt;
     C-newsprint alleen nog via preview/PR). */
  --papier: #FFF1E5;
  --papier-diep: #EFE3D6;
  --inkt: #33302E;
  --inkt-zacht: #66605B;
  --inkt-stil: #8C8378;
  --lijn: #C9B8A6;
  --lijn-licht: #E5D2C0;
  /* semantiek: één accent; rood bestaat alleen voor ACUUT */
  --accent: #0D7680;
  --gezond: #2E7D32;
  --aandacht: #B26B00;
  --acuut: #B3261E;
  /* type-schaal — sterkere kop-hiërarchie (broadsheet-voorpagina) */
  --font-display: 'Playfair Display', Georgia, serif;
  --font-body: Georgia, 'Times New Roman', serif;
  --masthead: 44px;
  --kop-1: 33px;
  --kop-2: 21px;
  --kop-3: 16px;
  --body: 14.5px;
  --klein: 13px;
  --meta: 11px;
  --colofon: 10.5px;
  /* ritme */
  --marge: 16px;
  --regel: 1.6;
  /* diepte — het enige schaduw-recept; nergens los rgba (C-2026-07-10-01) */
  --schaduw: 0 2px 14px rgba(51, 48, 46, 0.07);
}

* { box-sizing: border-box; margin: 0; }
html { background: var(--papier-diep); }
body { font-family: var(--font-body); color: var(--inkt); }

.krant { background: var(--papier); max-width: 760px; margin: 0 auto; min-height: 100vh; padding: 22px 20px 26px; border-left: 0.5px solid var(--lijn-licht); border-right: 0.5px solid var(--lijn-licht); box-shadow: var(--schaduw); }

/* Statusregel — de conditie van de editie, boven de nameplate (herontwerp
   01-08). Drie cellen: identiteit · modus · runway. Zwaarste regel van de
   pagina erboven; de masthead zakt daarmee naar een haarlijn. */
.statusregel { display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 2px 14px; border-top: 2px solid var(--inkt); padding: 7px 0 6px; font-size: var(--meta); letter-spacing: 1.5px; text-transform: uppercase; color: var(--inkt-zacht); font-variant-numeric: tabular-nums; }
.statusregel + .masthead { border-top: 0.5px solid var(--lijn); }
.status-cel.aandacht { color: var(--aandacht); }
.status-cel.acuut { color: var(--acuut); font-weight: 700; }
/* Onbekend is een zichtbaar gat, geen plausibel getal: kleinkapitaal eraf,
   cursief erbij — de lezer ziet dat de bron zweeg (fabricage-klasse
   C-2026-07-29-01). */
.status-cel.onbekend { color: var(--inkt-stil); font-style: italic; text-transform: none; letter-spacing: 0.5px; }

/* Nameplate: groot wordmerk tussen een dubbele regel — krant-masthead-gevoel. */
.masthead { display: flex; justify-content: space-between; align-items: baseline; border-top: 2px solid var(--inkt); border-bottom: 1px solid var(--inkt); padding: 11px 0 9px; }
.masthead .naam { font-family: var(--font-display); font-weight: 800; font-size: var(--masthead); letter-spacing: -0.6px; line-height: 0.96; }
.masthead .naam a { color: var(--inkt); text-decoration: none; }
.masthead .datum { font-size: var(--meta); color: var(--inkt-zacht); letter-spacing: 1.5px; text-transform: uppercase; }

.kicker { font-size: var(--meta); letter-spacing: 2px; color: var(--accent); margin: var(--marge) 0 6px; text-transform: uppercase; }
h1 { font-family: var(--font-display); font-weight: 600; font-size: var(--kop-1); line-height: 1.12; letter-spacing: -0.3px; }
h2 { font-family: var(--font-display); font-weight: 600; font-size: var(--kop-2); line-height: 1.25; }
.lead { font-size: 15px; line-height: 1.65; margin-top: 9px; }
p { font-size: var(--body); line-height: var(--regel); }
.caption { font-size: var(--colofon); color: var(--inkt-stil); border-bottom: 0.5px solid var(--lijn); padding-bottom: 12px; }
.byline { font-size: var(--colofon); color: var(--inkt-stil); }
/* Voorpagina-editieregel als dateline/standfirst onder de kop. */
#vp-editie { font-style: italic; font-size: var(--klein); color: var(--inkt-zacht); margin-top: 5px; }

.hairline { border-top: 0.5px solid var(--lijn); }
.regel-zwaar { border-top: 1px solid var(--inkt); }

.rij { display: flex; align-items: center; padding: 3.5px 0; font-size: var(--klein); font-variant-numeric: tabular-nums; }
.rij a { color: var(--inkt); text-decoration: none; }
.rij a:hover { color: var(--accent); }
.dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; margin-right: 9px; flex: none; animation: breathe 2.8s ease-in-out infinite; }
.dot.acuut { animation: none; }

.tape-wrap { overflow: hidden; border-bottom: 0.5px solid var(--lijn); padding: 4px 0; }
.tape { display: flex; width: max-content; animation: tape 28s linear infinite; font-size: 11.5px; color: var(--inkt-zacht); font-variant-numeric: tabular-nums; white-space: nowrap; }

.colofon { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 4px; font-size: var(--colofon); color: var(--inkt-stil); border-top: 0.5px solid var(--lijn); margin-top: 12px; padding-top: 7px; }
.fu { animation: fadeUp .7s ease-out both; }

@keyframes tape { from { transform: translateX(0) } to { transform: translateX(-50%) } }
@keyframes draw { to { stroke-dashoffset: 0 } }
@keyframes breathe { 0%,100% { opacity: .45 } 50% { opacity: 1 } }
@keyframes fadeUp { from { opacity: 0; transform: translateY(8px) } to { opacity: 1; transform: translateY(0) } }
@keyframes drift { from { transform: translateX(0) } to { transform: translateX(-160px) } }
@keyframes bob { 0%,100% { transform: translateY(0) } 50% { transform: translateY(2.5px) } }

@media (max-width: 560px) {
  :root { --masthead: 34px; --kop-1: 27px; }
  h1 { font-size: var(--kop-1); }
  .masthead { padding: 9px 0 8px; }
}

/* ── chrome vormentaal B (cutover 2026-07-11): nav, gate, vouw, kaart, md ── */
.masthead .ondertitel { font-family: var(--font-body); font-size: 15px; color: var(--inkt-zacht); font-weight: 400; }
.katern-nav { display: flex; flex-wrap: wrap; gap: 2px 14px; padding: 6px 0; border-bottom: 0.5px solid var(--lijn); font-size: var(--meta); letter-spacing: 1.5px; text-transform: uppercase; }
.katern-nav a { color: var(--inkt-zacht); text-decoration: none; }
.katern-nav a.aan { color: var(--accent); border-bottom: 1px solid var(--accent); }
.katern-nav a:hover { color: var(--accent); }

body.pulse-locked { overflow: hidden; }
body.pulse-locked > *:not(#pulse-auth-gate) { visibility: hidden; }
#pulse-auth-gate { position: fixed; inset: 0; z-index: 99999; background: var(--papier); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 32px; font-family: var(--font-display); transition: opacity 320ms ease; }
#pulse-auth-gate.pulse-auth-fadeout { opacity: 0; pointer-events: none; }
#pulse-auth-gate .pulse-auth-nameplate { font-weight: 800; font-size: 64px; color: var(--inkt); line-height: 1; }
#pulse-auth-gate .pulse-auth-rule { width: 64px; height: 1px; background: var(--lijn); }
#pulse-auth-gate input { width: 220px; padding: 14px 18px; background: transparent; border: 1px solid var(--lijn); font-family: var(--font-body); font-size: 18px; letter-spacing: 0.2em; text-align: center; color: var(--inkt); outline: none; }
#pulse-auth-gate input:focus { border-color: var(--accent); }
#pulse-auth-gate .pulse-auth-row { display: flex; align-items: center; gap: 8px; }
#pulse-auth-gate .pulse-auth-submit { border: none; background: transparent; font-size: 24px; color: var(--accent); cursor: pointer; padding: 0 6px; line-height: 1; }

.sectie { margin-top: 4px; }
.sectie-acuut { border-left: 2px solid var(--acuut); padding-left: 12px; }
.kicker-acuut { color: var(--acuut); }
.sectie-residu { border-top: 1px solid var(--inkt); margin-top: 16px; padding-top: 4px; }
.stil { color: var(--inkt-stil); font-size: var(--klein); }
.vouw { margin-top: 12px; border-top: 0.5px solid var(--lijn); padding-top: 8px; }
.vouw summary { cursor: pointer; font-size: var(--meta); letter-spacing: 2px; color: var(--inkt-stil); text-transform: uppercase; list-style: none; }
.vouw summary::before { content: '+ '; color: var(--accent); }
.vouw[open] summary::before { content: '− '; }
.vouw > *:not(summary) { margin-top: 8px; }

.kaart { border-top: 0.5px solid var(--lijn); padding: 12px 0 10px; }
.kaart:first-child { border-top: none; }
.kaart h2 { margin-top: 4px; }
.kaart-stelling { margin-top: 5px; }
.kaart-actie { margin-top: 5px; color: var(--accent); font-size: var(--klein); }
.kaart-meta .regime-cel, .regime-cel { color: var(--accent); font-size: 11px; letter-spacing: 1px; text-transform: uppercase; margin: 0 10px; flex: none; }
.rij-naam { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rij-waarde { margin-left: auto; }
.tijd-cel { color: var(--inkt-stil); font-size: 11px; flex: none; width: 52px; text-align: right; }

/* Staleness-badges (briefing 23-07 B.2): elke meting draagt haar leeftijd.
   Binnen cadans stil (inkt-stil); ouder dan cadans amber; ouder dan 2x cadans
   grijs + "verlopen". Kleuren blijven tokens — geen nieuwe waarden. */
.leeftijd { color: var(--inkt-stil); font-size: 11px; }
.tijd-cel.leeftijd { width: auto; max-width: 44%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.leeftijd-oud { color: var(--aandacht); }
.leeftijd-verlopen { color: var(--inkt-stil); opacity: 0.75; font-style: italic; }

/* Boek-noot op positie-kaarten: het boek corrigeert de runner in één regel. */
.kaart-boeknoot { color: var(--aandacht); font-size: var(--klein); margin: 2px 0 8px; }

/* Onleesbaar boek: het anker-cijfer wordt een gedempt em-streepje — aanwezig,
   maar zichtbaar zonder waarde (fail-closed, geen spookcijfer). */
.grootcijfer-stil { color: var(--inkt-stil); }
.necro-rij { display: flex; align-items: baseline; gap: 10px; padding: 7px 0; text-decoration: none; color: var(--inkt); font-size: var(--klein); }
.necro-rij:hover .rij-naam { color: var(--accent); }

.md-lijst { padding-left: 18px; margin: 6px 0; }
.md-lijst li { font-size: var(--body); line-height: var(--regel); margin: 3px 0; }
.md-kop { margin-top: 12px; }
.md-quote { border-left: 2px solid var(--lijn); padding-left: 12px; margin: 8px 0; color: var(--inkt-zacht); font-size: var(--klein); line-height: var(--regel); }
.md-tabel { border-collapse: collapse; margin: 8px 0; font-size: var(--klein); font-variant-numeric: tabular-nums; width: 100%; }
.md-tabel th { text-align: left; border-bottom: 1px solid var(--inkt); font-weight: 600; padding: 3px 10px 3px 0; }
.md-tabel td { border-bottom: 0.5px solid var(--lijn-licht); padding: 3px 10px 3px 0; }
code { font-size: 12px; background: var(--papier-diep); padding: 0 3px; }
p + p { margin-top: 6px; }
/* Tekstlinks in accent, niet hyperlink-blauw — krant, geen web-app. */
.byline a, .md-lijst a, .md-quote a, #vp-secties p a, #artikel-inhoud a, #katern-inhoud p a { color: var(--accent); text-decoration: none; }
.byline a:hover, .md-lijst a:hover, #vp-secties p a:hover, #artikel-inhoud a:hover, #katern-inhoud p a:hover { text-decoration: underline; }

/* ══════════════════════════════════════════════════════════════════════════
   VORMENTAAL C — Volkskrant-pass (2026-07-13). Extensie op B: hiërarchie ONDER
   de vouw + katern-template. De bovenvouw (kop + hero-figuur + ticker) blijft.
   Regels uit de referentie (De Volkskrant, SND46): één dominant beeld; data
   krijgt schaal/anker; genummerde inzichten als leesstructuur; één groot cijfer
   + één pull-quote als ritme-ankers; smalle leesmaat, royale marge. Hiërarchie
   via schaal — NIET via bold-strooiwerk. Kleuren uitsluitend uit de tokens
   hierboven (C-2026-07-10-01); rood blijft exclusief voor ACUUT.
   ══════════════════════════════════════════════════════════════════════════ */
:root {
  --bijschrift: 11px;                       /* ≈0,8× lopend */
  --deks: 22px;                             /* standfirst/lead ≈1,5× */
  --pullquote: 25px;                        /* ritme-anker ≈1,7× */
  --rang: 42px;                             /* rangcijfer genummerd blok */
  --grootcijfer: clamp(58px, 13vw, 96px);   /* het ene grote cijfer */
  --meet-smal: 64ch;                        /* leesmaat: 55–70 tekens */
}

/* Figuur-hero — geformaliseerd (dominant beeld, tekst annoteert). */
.figuur-hero { margin: 14px 0 2px; }
.figuur-hero svg { width: 100%; display: block; }
.figuur-bijschrift { font-size: var(--bijschrift); color: var(--inkt-stil); border-bottom: 0.5px solid var(--lijn); padding-bottom: 12px; }

/* Leesmaat: smalle kolom(men) met royale marge. */
.kolom-smal { max-width: var(--meet-smal); }
.sectie p, .blok-tekst, .md-lijst, .kaart-stelling, .vouw > *:not(summary) { max-width: var(--meet-smal); }
@media (min-width: 720px) {
  .kolommen-2 { column-count: 2; column-gap: 34px; column-rule: 0.5px solid var(--lijn); }
  .kolommen-2 > * { break-inside: avoid; }
}

/* Genummerde inzicht-blokken — SIGNAAL/Beslispunten als leesstructuur:
   groot rangcijfer + blokkop + 2–4 zinnen. Nummer 6+ = ruis → alleen wiki. */
.blok-genummerd { list-style: none; padding: 0; margin: 6px 0 0; }
.blok { display: grid; grid-template-columns: auto 1fr; gap: 16px; padding: 12px 0 13px; border-top: 0.5px solid var(--lijn); align-items: start; }
.blok:first-child { border-top: none; }
.blok-nr { font-family: var(--font-display); font-weight: 800; font-size: var(--rang); line-height: 0.86; color: var(--inkt-stil); font-variant-numeric: lining-nums; }
.blok-tekst { min-width: 0; }
.blok-kop { font-family: var(--font-display); font-weight: 600; font-size: var(--kop-2); line-height: 1.22; margin-bottom: 3px; }
.blok-tekst p { font-size: var(--body); line-height: var(--regel); }
.blok-meer { font-size: var(--klein); color: var(--inkt-stil); font-style: italic; margin-top: 10px; }
.sectie-beslis .blok-nr { color: var(--accent); }       /* handeling gevraagd */
/* ACUUT leest als genummerde blokken, niet als bullets (herontwerp 01-08):
   het rangcijfer draagt de urgentie, rood blijft exclusief voor ACUUT. */
.sectie-acuut .blok-nr { color: var(--acuut); }
.sectie-acuut .blok { border-top-color: var(--lijn-licht); }

/* Het ene grote cijfer — reuzencorps + één annotatieregel (geen kleur: schaal
   draagt het gewicht; rood blijft van ACUUT). */
.grootcijfer { margin: 16px 0 8px; padding: 13px 0; border-top: 1px solid var(--inkt); border-bottom: 0.5px solid var(--lijn); }
.grootcijfer-getal { display: block; font-family: var(--font-display); font-weight: 800; font-size: var(--grootcijfer); line-height: 0.9; letter-spacing: -1.5px; color: var(--inkt); font-variant-numeric: lining-nums tabular-nums; }
.grootcijfer-annotatie { display: block; font-size: var(--klein); color: var(--inkt-zacht); margin-top: 7px; max-width: var(--meet-smal); }

/* Pull-quote — "Residu van de dag" als ritme-anker, lijn boven/onder. */
.pullquote { font-family: var(--font-display); font-weight: 600; font-size: var(--pullquote); line-height: 1.34; color: var(--inkt); margin: 8px 0 12px; padding: 13px 0; border-top: 1px solid var(--inkt); border-bottom: 0.5px solid var(--lijn); max-width: 32ch; }

/* Katern-template: dominante lead-kaart bovenaan, rest secundair. */
.kaart-lead { border-top: none; padding-top: 2px; }
.kaart-lead h2 { font-size: var(--kop-1); line-height: 1.14; letter-spacing: -0.3px; margin-top: 6px; }
.kaart-lead .kaart-stelling { font-size: var(--deks); line-height: 1.4; color: var(--inkt); max-width: 46ch; }

@media (max-width: 560px) {
  :root { --rang: 34px; }
  .blok { gap: 12px; }
  .kaart-lead h2 { font-size: var(--kop-1); }
}

/* kaart-figuur — herstel figuurlaag (regressie sinds cutover 10-07); additief, palet ongemoeid */
.kaart-figuur { display: flex; align-items: baseline; gap: 10px; margin: 8px 0 4px; }
.kaart-figuur svg { flex: 1 1 auto; width: 100%; height: 44px; display: block; }
.kaart-lead .kaart-figuur svg { height: 58px; }
.fig-cijfer { font-size: var(--klein); color: var(--inkt-stil); white-space: nowrap; font-variant-numeric: tabular-nums; }

/* ══════════════════════════════════════════════════════════════════════════
   HERONTWERP 2026-07-15 — kaart-anatomie in drie rangen (lead · secundair ·
   kort) + katern-grid. Vertaling van design-review/herontwerp-2026-07-15.dc.html
   naar productie; geen nieuwe kleuren, alles erft uit de tokens hierboven.
   ══════════════════════════════════════════════════════════════════════════ */

/* Duiding op de kaart zelf: Bewijs en Les voluit — doorklik is verdieping. */
.kaart-bewijs { font-size: var(--klein); color: var(--inkt-zacht); margin-top: 6px; max-width: var(--meet-smal); }
.kaart-les { font-size: var(--klein); font-style: italic; color: var(--inkt-zacht); margin-top: 4px; max-width: var(--meet-smal); }

/* Secundaire kaarten twee-koloms met kolomlijn — krantengrid i.p.v. één strook.
   Onder 620px klapt het naar één kolom (mobiel eerst). */
.duo { display: grid; grid-template-columns: 1fr; gap: 0 34px; }
@media (min-width: 620px) {
  .duo { grid-template-columns: 1fr 1fr; }
  .duo > .kaart:nth-child(even) { border-left: 0.5px solid var(--lijn); padding-left: 17px; }
}
.duo .kaart { border-top: 0.5px solid var(--lijn); }

/* Kort-rijen: één regel per sensor, hairline-geleed. */
.kort .rij { border-top: 0.5px solid var(--lijn-licht); padding: 6.5px 0; }
.kort .rij:first-child { border-top: none; }
.kort .rij-naam { text-decoration: none; color: var(--inkt); }
.kort .rij-naam:hover { color: var(--accent); }
/* Vangnet: het regime-etiket mag de rij nooit uit elkaar duwen, hoe lang de
   sensor zijn oordeel ook opschrijft (regimeKort() kapt al semantisch). Het
   etiket krimpt vóór de naam — de sensornaam is de identiteit van de rij. */
.regime-cel { flex: 0 1 auto; min-width: 0; max-width: 40%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.kort .rij-naam { flex: 1 0 auto; }

/* Etiket op archief-rijen (doodsoorzaak) — rood blijft van ACUUT. */
.tag { font-size: 10px; letter-spacing: 1px; text-transform: uppercase; border: 0.5px solid var(--lijn); padding: 1px 7px; color: var(--inkt-zacht); flex: none; margin-left: 10px; max-width: 46%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tag-acuut { color: var(--acuut); border-color: var(--acuut); }
.necro-rij .rij-naam { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Telefoon: de titel is het verhaal, niet de restruimte naast een etiket.
   Datum + doodsoorzaak vormen de bovenregel, de titel loopt eronder voluit. */
@media (max-width: 560px) {
  .necro-rij { flex-wrap: wrap; }
  .necro-rij .tag { margin-left: auto; max-width: 70%; }
  .necro-rij .rij-naam { flex: 1 0 100%; order: 3; white-space: normal; overflow: visible; margin-top: 3px; }
}

/* Hero-figuur op de lead-kaart: het beeld draagt, de tekst annoteert. */
.kaart-lead .figuur-hero { margin: 12px 0 2px; }
