/* ===================== TOKENS ===================== */
:root {
  /* Anthropic/Claude-palet — Slate (inkt) · Cloud (grijs) · Ivory (papier) ·
     Book Cloth/Kraft/Manilla (warm) + Focus/Error. Eén warme achtergrond voor de
     héle app; kaarten in --color-surface contrasteren daartegen. Primitives onderaan. */
  --color-bg: hsl(60 14% 97%); /* licht warm-wit paginagrond */
  --color-surface: #ffffff;   /* kaarten */
  /* Sidebar een tint donkerder dan de warme bg, zodat de nav-rail zich aftekent. */
  --color-sidebar-bg: #f0eee6;
  /* Subtiele hover/actief-markering: een lichte donkere waas — altijd ietsje
     donkerder dan de ondergrond (werkt op elke achtergrond). */
  --color-hover: rgba(25, 25, 25, 0.06);
  /* Subtiel vlak voor het eigen bericht / actief nav-item (book cloth, lage opacity). */
  --color-surface-own: rgba(204, 120, 92, 0.08);
  --color-text: #191919;      /* Slate Dark (inkt) */
  --color-text-muted: #666663; /* Cloud Dark — AA op de bg (~4.8:1) */
  --color-border: #d6d5cd;    /* zacht, iets donkerder dan de bg */
  /* Book Cloth (#cc785c) is te licht voor witte tekst; verdiepte tint voor tekst-
     dragende acties (de heldere #cc785c gebruiken we waar geen tekst op staat). */
  --color-accent: #b5663f;
  --color-accent-hover: #9c5436;
  /* Omgangsband "wie heeft de kinderen": één vaste neutrale gray-tint voor béíde ouders,
     bewust BUITEN het agenda-kleurpalet (Agenda::Palette) zodat 'ie nooit botst met een
     door een ouder gekozen kleur. */
  --color-custody: #7d7a70;
  --color-focus: #61aaf2;     /* Focus-ring */
  /* Eén rood voor error én danger (herijkt 2026-07-18 naar de de-facto danger-tint
     die de app overal gebruikte; donkerder = beter contrast op wit/soft). */
  --color-error: #b23a2a;

  /* Redesign-tints (mobiel app-ontwerp 2026-06) — semantische zacht-vlakken +
     co-ouder/status-kleuren. Eén bron voor alle redesign-schermen (Home e.v.).
     Het accent (#b5663f) en de bg blijven de bestaande tokens; dit vult alleen
     de tints aan die het ontwerp gebruikt. */
  --color-soft: #f7e9e2;            /* accent-tint achtergrond (zacht zand) */
  --color-softer: #fbf4ef;          /* lichtste accent-tint (active/hover-rijen) */
  --color-faint: #b6ada3;           /* labels, placeholders, iconen-uit */
  --color-line: #ece4db;            /* fijne scheidingslijn op kaarten */
  --color-coparent: #6b53df;        /* co-ouder-kleur (custody, unread-stip) — paars */
  --color-coparent-soft: #ede9fb;   /* co-ouder tint-achtergrond */
  --color-amber: #b0742a;           /* status "actie nodig" / wacht-op-akkoord */
  --color-amber-soft: #f7ead5;      /* amber tint-achtergrond */
  --color-green: #3e8e5a;           /* status "geregeld" / bevestigd */
  --color-green-soft: #e4efe6;      /* groen tint-achtergrond */
  --color-now-line: #e0492b;        /* agenda huidige-tijd-markering (warm rood) */
  /* Status-diepten & -randen (consistentie-ronde 2026-07-18): tekst-op-soft en
     hairlines per statusfamilie — vervangen de losse hexes in de feature-css. */
  --color-amber-deep: #8a5a1e;      /* tekst op amber-soft */
  --color-amber-border: #ead6b8;
  --color-green-deep: #245c3b;      /* tekst op green-soft */
  --color-green-border: #cfe6d5;
  --color-coparent-deep: #4a3b8a;   /* tekst op coparent-soft */
  --color-coparent-border: #dad2f5;
  --color-error-soft: #f7e2dd;      /* zacht rood vlak (danger/nood) */
  --color-error-border: #ead0ca;    /* randen/hovers rond error-soft */
  --color-error-deep: #8a3324;      /* tekst op error-soft */
  --color-soft-border: #eedbcf;     /* randen op accent-soft/-softer-vlakken */
  /* Bestandstype-tinten (Documenten-handoff): één tint per extensie, zodat een PDF,
     Word- of spreadsheet-tegel op afstand herkenbaar is. Bewust eigen tokens en niet
     error-soft/green-soft hergebruikt: dit is typering, geen status. */
  --color-file-pdf: #c0402b;
  --color-file-pdf-soft: #f7e2dd;
  --color-file-doc: #2b5cc0;
  --color-file-doc-soft: #dee7f9;
  --color-file-sheet: #2e8b57;
  --color-file-sheet-soft: #e4efe6;
  /* Vakantie-badges: bewust blauw — functioneel onderscheidend van status-groen/amber
     (vakantie is een feit, geen status). Enige koele badge-familie in het palet. */
  --color-holiday-soft: #dbeafe;
  --color-holiday-deep: #1e40af;
  --color-cover-cool: #e7edef;      /* fotoboek-cover-tint t5 (bewust koel) */
  --color-on-accent: #ffffff;       /* tekst/iconen op gevulde (accent/coparent/donkere) vlakken */
  --color-muted-warm: #8b8076;      /* warme muted-tekst (splash; zelfde familie als de mails) */
  /* Gradients — één bron voor hero-/kaartvullingen (home, plan, paywall, overdracht). */
  --gradient-accent: linear-gradient(140deg, var(--book-cloth), var(--color-accent-hover));
  --gradient-coparent: linear-gradient(140deg, #7a63e8, #5942c9);

  /* Chat (DP2) — deelt de bg met de rest (DRY → --color-bg). Eigen bubbel warm
     (Manilla), de ander wit; book cloth als warm accent. */
  --color-chat-bg: var(--color-bg);
  --color-chat-bubble-own: #ebdbbc;   /* Manilla */
  /* Eigen-bubbel tekst/meta warm getint (zand-bubbel uit het mobiele ontwerp): bruine
     tekst + gedempte warme tijd i.p.v. neutraal grijs. Eigen tokens zodat de gezin-badge
     (die --color-chat-bubble-own deelt) ongemoeid blijft. */
  --color-chat-bubble-own-text: #4a3826;
  --color-chat-bubble-own-meta: #a98d63;
  --color-chat-bubble-other: #ffffff;
  --color-chat-text: var(--color-text);
  --color-chat-border: var(--color-border);
  /* Warme, accent-getinte hairline om witte bubbels/pill af te bakenen tegen de
     warm-witte bg — strak als een lijn, maar warm (geen koud grijs). */
  --color-chat-edge: rgba(204, 120, 92, 0.30);
  --color-chat-accent: var(--color-accent);
  --color-chat-accent-hover: var(--color-accent-hover);
  --color-chat-surface-own: rgba(204, 120, 92, 0.08);

  /* Spacing (4px-schaal) */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-6: 24px;
  --space-8: 32px;

  /* Typografie — klassiek Segoe UI op Windows: zwaar gehint, kraakhelder op kleine
     maten (de Variable-versie oogt waziger door zachtere hinting). De Fluent-look
     komt uit de layout/componenten, niet uit de font. --font-display deelt dezelfde
     stack; het Title-gevoel komt uit weight 600 + letter-spacing. */
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-display: "Funnel Display", var(--font-sans);
  /* Typografie-ladder (consistentie-ronde 2026-07-18): álle font-sizes verwijzen naar
     een trede — nooit een losse px-waarde in een declaratie. Anchors uit de design-
     handoff (xs/sm/base/lg = 12/14/16/18); tussen-/display-treden numeriek benoemd.
     Halve pixels zijn bij de migratie omhoog gerond; 9→10, 17→18, 19→20, 21/23→22,
     25→24, 27→26, 30/31/34→32. Latere versmalling richting de 4-staps design-schaal
     (13→xs/sm, 15→sm/base) = bewuste vervolg-stap mét visuele review. */
  --text-10: 0.625rem;   /* micro-badges, dev-labels */
  --text-11: 0.6875rem;  /* meta, timestamps, eyebrows */
  --text-xs: 0.75rem;    /* 12px */
  --text-13: 0.8125rem;  /* dichte UI — meest gebruikte maat */
  --text-sm: 0.875rem;   /* 14px */
  --text-15: 0.9375rem;  /* ruime body/rijen */
  --text-base: 1rem;     /* 16px */
  --text-lg: 1.125rem;   /* 18px — subkoppen */
  --text-20: 1.25rem;
  --text-22: 1.375rem;
  --text-24: 1.5rem;     /* sheet-/paginatitels */
  --text-26: 1.625rem;
  --text-28: 1.75rem;
  --text-32: 2rem;       /* hero-titels/statgetallen */
  --text-40: 2.5rem;
  --text-56: 3.5rem;     /* splash-logo */
  --weight-medium: 500;
  --leading: 1.5;

  /* Eén chevron-pijl voor álle app-selects (DRY): eigen SVG i.p.v. de native
     systeem-pijl. Gebruik met appearance:none + background-position: right 14px center
     + padding-right: 40px zodat de pijl nooit tegen de rand of onder de tekst plakt. */
  --select-chevron: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M2.5 4.5 6 8l3.5-3.5" stroke="rgb(91,95,102)" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>');

  /* Vorm — zacht (Claude): ruime radii, subtiele schaduwen. Bubbels krijgen hun
     eigen, grotere radius. */
  --radius: 8px;
  --radius-control: 6px;           /* knoppen/velden/nav-items */
  --radius-bubble: 18px;           /* chatbubbel-hoeken (minus de afgeplatte tail) */
  --sidebar-width: 264px;
  --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
  /* Elevatie-ladder — inkt-getinte, zachte dieptes; voor kaarten/zwevers. */
  --shadow-4: 0 2px 4px rgba(25, 25, 25, 0.10), 0 0 2px rgba(25, 25, 25, 0.07);
  --shadow-8: 0 4px 8px rgba(25, 25, 25, 0.10), 0 0 2px rgba(25, 25, 25, 0.06);
  --shadow-16: 0 8px 16px rgba(25, 25, 25, 0.12), 0 0 2px rgba(25, 25, 25, 0.06);

  /* Fluent-motion — decelerate-curve + snelle/normale duur. */
  --curve-decel: cubic-bezier(0.1, 0.9, 0.2, 1);
  --dur-fast: 120ms;
  --dur-normal: 200ms;

  /* Primitives uit het Anthropic/Claude-palet (laagste laag, geen semantiek). */
  --slate-dark: #191919;
  --slate-medium: #262625;
  --slate-light: #40403e;
  --cloud-dark: #666663;
  --cloud-medium: #91918d;
  --cloud-light: #bfbfba;
  --ivory-dark: #e5e4df;
  --ivory-medium: #f0f0eb;
  --ivory-light: #fafaf7;
  --book-cloth: #cc785c;
  --kraft: #d4a27f;
  --manilla: #ebdbbc;
  /* Merk-inkt van het blinCo-woordmerk (bewust geen slate: eigen merk-tint) + de
     inverse-accent op donkere grond. Alleen voor shared/_logo. */
  --logo-ink: #1a2230;
  --logo-inverse-accent: #6ea3e8;

  /* Dataviz (DP6) — losse data-lijn in neutraal grijs: bewust NIET de actie-kleur,
     zodat een sparkline/bar niet als klikbaar actie-element leest. */
  --color-dataviz-line: var(--cloud-dark);
  --color-dataviz-muted: var(--cloud-light);
  --color-dataviz-axis: var(--color-border);
  --color-dataviz-text: var(--color-text-muted);
  /* Categorie-kleuren voor donut/multi-serie: onderscheidend & gelijkwaardig
     (book cloth vs neutraal grijs — zoals M365/Claude-usage); géén verkeerslicht. */
  --color-dataviz-cat-1: var(--book-cloth);  /* #cc785c */
  --color-dataviz-cat-2: var(--cloud-dark);  /* #666663 */
  --color-dataviz-cat-3: var(--kraft);       /* #d4a27f */
  --color-dataviz-cat-4: var(--slate-light); /* #40403e */

  /* Barometer (DP3) — gespreks-richting-meter. Bewust één wárme tint-familie die
     in verzadiging/diepte oploopt (zand → terracotta → diep oker), NOOIT een
     verkeerslicht (groen→rood = morele as, smokkelt een oordeel terug) en NOOIT
     signaalrood (alarmeert → verhoogt arousal → escaleert zelf). Familie-conflict-
     /style-eis: rustig, niet-alarmerend. Tint-waarden = startwaarden, te tunen met
     de drempel-kalibratie. Track/fill dragen nooit tekst → geen WCAG-tekst-eis erop;
     de richting-betekenis staat in het label + de positie (kleur is nooit de enige
     drager). */
  --color-barometer-track: var(--color-chat-border);
  --color-barometer-calm-fill: #b8b3a7;     /* warm-neutraal grijs, geen connotatie */
  --color-barometer-warming-fill: var(--kraft);    /* Kraft (tan) — warm, geen alarm */
  --color-barometer-hot-fill: var(--book-cloth);   /* Book Cloth (terracotta), geen rood */
  /* Bewust expliciet warm gehouden (niet aan een nu-koel token gekoppeld): de
     warme niet-alarm-doctrine geldt ook ná de ZIVVER-restyle van de chrome. */
  --color-barometer-cooldown-bg: rgba(204, 120, 92, 0.08); /* zacht koraal-vlak */
}

/* ===================== BASE (mobile-first) ===================== */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html {
  -webkit-text-size-adjust: 100%;
  height: 100dvh;
  overflow: hidden;
}

body {
  height: 100%;
  overflow: hidden;
  font-family: var(--font-sans);
  font-size: var(--text-base);
  line-height: var(--leading);
  color: var(--color-text);
  background: var(--color-bg);
}

/* Headings in het display-font (Funnel Display) — één basisregel dekt alle h1..h6;
   titel-classes die al var(--font-display) zetten blijven werken. */
h1, h2, h3, h4, h5, h6 { font-family: var(--font-display); }

a { color: var(--color-accent); }

:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.container {
  width: 100%;
  max-width: 640px;
  margin-inline: auto;
  padding: var(--space-4);
}

@media (min-width: 640px) {
  .container { padding: var(--space-6); }
}

/* ===================== COMPONENTEN ===================== */
.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  padding: var(--space-4);
}

@media (min-width: 640px) {
  .card { padding: var(--space-6); }
}

.card__title {
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  color: var(--color-text);
}

.card__meta {
  margin-top: var(--space-1);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

/* ===================== CHAT (DP2) ===================== */
/* Eén gespreksstroom in het Claude-palet: volle-breedte warme achtergrond, content
   (berichten + composer) gecentreerd. Eigen bericht rechts (warm-grijs), de ander
   links (wit) — WhatsApp-indeling. De chat vult de viewport onder de nav (body =
   flex-kolom); de stroom scrollt, de composer staat vast onderaan. */
.chat {
  display: flex;
  flex-direction: column;
  height: 100%;
  overflow: hidden;
  background: var(--color-chat-bg);
  color: var(--color-chat-text);
}

.chat__stream {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: var(--space-4);
  display: flex;
  flex-direction: column;
}
/* Berichten vastgeankerd onderaan (WhatsApp-stijl): bij weinig berichten staan ze
   onderin, nieuwste onderaan; bij overflow collapst de marge en scroll je omhoog
   naar oudere berichten. */
.chat__stream .messages { margin-top: auto; }

.messages {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  width: 100%;
  /* 760px: chat-breedte — ruimer dan de 640px-container voor niet-chat-pagina's */
  max-width: 760px;
  margin-inline: auto;
}

.messages__empty {
  margin: var(--space-6) 0;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-align: center;
}

/* Rij = bubbel + status-vinkjes. De ander links, eigen rechts (class door de
   own-message-controller). Kant + afgeplatte bubbelhoek = twee signalen naast
   kleur (WCAG 1.4.1). */
.message-row {
  position: relative;
  display: flex;
  flex-direction: column;
  align-self: flex-start;
  align-items: flex-start;
  gap: 2px;
  max-width: 80%;
  transition: transform 0.18s ease;
}
/* Tijdens het slepen volgt de rij de vinger (geen transitie); bij loslaten veert
   'ie terug via de transitie hierboven. */
.message-row--swiping { transition: none; }

.message-row--own {
  align-self: flex-end;
  align-items: flex-end;
}

/* De ander: wit, géén rand — alleen een lichte schaduw voor de lift t.o.v. de bg. */
.message {
  padding: var(--space-2) var(--space-3);
  background: var(--color-chat-bubble-other);
  border: 1px solid var(--color-chat-edge);
  border-radius: var(--radius-bubble);
  border-bottom-left-radius: 5px;
}

/* Eigen bericht: warme zand-bubbel met bruine tekst, andere afgeplatte hoek. */
.message-row--own .message {
  background: var(--color-chat-bubble-own);
  color: var(--color-chat-bubble-own-text);
  border-color: transparent;
  border-bottom-left-radius: var(--radius-bubble);
  border-bottom-right-radius: 5px;
}
/* Tijd/vinkjes in de eigen bubbel: gedempt warm (i.p.v. het neutrale meta-grijs). */
.message-row--own .message__meta { color: var(--color-chat-bubble-own-meta); }

/* Geciteerd bericht (reply): klein quote-blokje bovenin de bubbel. */
.message__quote {
  display: block;
  margin-bottom: 4px;
  padding: 4px 8px;
  background: rgba(0, 0, 0, 0.04);
  border-left: 3px solid var(--color-chat-accent);
  border-radius: 6px;
  font-size: var(--text-xs);
  line-height: 1.35;
}
.message__quote-author { display: block; font-weight: 600; color: var(--color-chat-accent); }
.message__quote-body { display: block; color: var(--color-text-muted); overflow-wrap: anywhere; }

/* Reply-knop (desktop): verschijnt op hover, net buiten de bubbel aan de binnenkant.
   Op touch verborgen — daar is de swipe de manier. */
.message__reply {
  position: absolute;
  top: 50%;
  right: -34px;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-control);
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.12s ease;
}
.message-row--own .message__reply { right: auto; left: -34px; }
.message-row:hover .message__reply { opacity: 1; }
.message__reply-icon { width: 15px; height: 15px; }
@media (hover: none) {
  .message__reply { display: none; }
}

/* Crisis-bubbel — alléén de coach-ruimte. "De warme vloor": een zacht, warm
   vasthoudend vlak, NOOIT een alarm (geen rood, geen schreeuw). Zelfde bubbel-
   anatomie als .message (DRY); alleen warmer getint — zacht clay-vlak + gedempte
   clay-rand. Coach = links, dus de afgeplatte linkeronderhoek blijft staan. */
.message--crisis {
  background: var(--color-chat-surface-own);
  border-color: rgba(196, 115, 74, 0.35);
}

.message__body {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* Typ-indicator (assistent denkt na / andere ouder typt): drie bolletjes die om de
   beurt omhoog wippen — bewust GEEN bubbel-chrome (geen achtergrond/rand/schaduw),
   puur de bewegende stippen in de gespreksstroom. Vluchtig client-side element —
   nooit gepersisteerd. */
.message--typing {
  background: none;
  border: none;
  border-radius: 0;
  padding: var(--space-2) var(--space-3);
}
.typing-dots { display: inline-flex; align-items: center; gap: 6px; }
.typing-dots span {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--cloud-medium);
  animation: typing-bounce 1s ease-in-out infinite;
}
.typing-dots span:nth-child(2) { animation-delay: 0.16s; }
.typing-dots span:nth-child(3) { animation-delay: 0.32s; }
@keyframes typing-bounce {
  0%, 80%, 100% { transform: translateY(0); opacity: 0.4; }
  40% { transform: translateY(-7px); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .typing-dots span { animation: none; opacity: 0.6; }
}

/* Assistent-actieknoppen onder een coach-bubbel (prefill; efemeer op de verse beurt). */
.message__actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 6px 0 0 4px; }
.message__action-btn {
  border: 1px solid var(--color-border);
  background: var(--color-surface);
  border-radius: 999px;
  padding: 6px 14px;
  font: inherit;
  font-size: 0.9rem;
  cursor: pointer;
}
.message__action-btn:hover { background: var(--color-softer); }

/* Afzender-naam: in een 1-op-1-chat zegt de kant al wie het stuurde — visueel
   verborgen, maar in de DOM voor schermlezers. */
.message__author {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* Tijd + vinkjes rechtsonder ín de bubbel (WhatsApp-stijl). */
.message__meta {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--space-1);
  margin-top: 2px;
  font-size: 0.625rem;
  line-height: 1;
  color: var(--color-text-muted);
}

.message__time {
  font-variant-numeric: tabular-nums;
}

/* Status (vinkjes): ✓ verzonden, ✓✓ afgeleverd — own-only (controller toont 'm). */
.message__status {
  display: inline-flex;
  align-items: center;
}

.message__tick {
  letter-spacing: -0.15em;
}

/* Dag-scheiding: Fluent-divider — een fijne lijn met een gecentreerd caption-label
   (luchtiger dan een pil), gespannen over de berichten-kolom. */
.day-separator {
  align-self: stretch;
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin: var(--space-4) 0 var(--space-2);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}
.day-separator::before,
.day-separator::after {
  content: "";
  flex: 1;
  height: 1px;
  background: var(--color-chat-edge);
}

/* Fluent-entree: berichten zakken zacht naar hun plek (rise + fade) met de
   decelerate-curve. Eén keer per render; bij een nieuw broadcast-bericht
   animeert alleen die ene rij. Respecteert prefers-reduced-motion. */
@media (prefers-reduced-motion: no-preference) {
  .message-row {
    animation: message-in var(--dur-normal) var(--curve-decel) both;
  }
}
@keyframes message-in {
  from { opacity: 0; transform: translateY(8px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Chat-header: kleurband met naam van de andere ouder (anti-misverzend). */
/* Op mobiel verborgen: de naam staat daar in de bovenbalk (.app__topbar). Op desktop
   (geen topbar) komt 'ie terug — zie de 768px-media-query. */
.chat__header { display: none; align-items: center; gap: 0.5rem; padding: 0.625rem 1rem; border-bottom: 3px solid var(--gezin-color, transparent); background: var(--color-surface); flex-shrink: 0; }
.chat__header-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--gezin-color, var(--color-accent)); flex: none; }
.chat__header-name { font-weight: 600; }
/* Naam-label (anti-misverzend) zit als aria-label op de knop; visueel verborgen
   zodat alleen het vliegtuig-icoon toont. */
.compose__send-name {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
}

/* Composer: vast onderaan, wit afgerond veld + koraal-verzendknop (Claude-look). */
.chat__composer {
  flex-shrink: 0;
  padding: var(--space-3) var(--space-4) var(--space-4);
  background: var(--color-chat-bg);
}

/* Reply/quote ín de pill (WhatsApp-stijl): grijs blokje boven het tekstveld. */
.compose__reply {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  background: rgba(0, 0, 0, 0.05);
  border-left: 3px solid var(--color-chat-accent);
  border-radius: 12px;
}
.compose__reply[hidden] { display: none; } /* [hidden] moet de flex hierboven verslaan */
.compose__reply-quote { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.compose__reply-author { font-size: var(--text-xs); font-weight: 600; color: var(--color-chat-accent); }
.compose__reply-snippet {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.compose__reply-cancel {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  color: var(--color-text-muted);
  background: none;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
}
.compose__reply-cancel:hover { color: var(--color-text); }

/* Composer = los tekstveld (eigen pill) + losse ronde verzendknop ernaast
   (WhatsApp-stijl). Volle-breedte achtergrond eromheen; content gecentreerd. */
.compose {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: var(--space-2);
  width: 100%;
  max-width: 760px;
  margin-inline: auto;
}

/* Het veld is de pill (tekstveld + bijlage-/foto-iconen erin); de focus-rand
   staat op de pill, niet op het kale tekstveld. */
.compose__field {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-1) var(--space-2);
  background: var(--color-chat-bubble-other);
  border: 1px solid var(--color-chat-edge);
  border-radius: 24px;
  transition: border-color var(--dur-fast) var(--curve-decel);
}

/* De invoer-rij ín de pill: tekstveld + icoon-knoppen. */
.compose__field-row {
  display: flex;
  align-items: flex-end;
  gap: var(--space-1);
}

/* Fluent-focus: de pill zelf krijgt een accent-rand, geen zwevende doos. */
.compose__field:focus-within {
  outline: none;
  border-color: var(--color-chat-accent);
}

.compose__body {
  flex: 1;
  min-width: 0;
  min-height: 36px;
  max-height: 160px;
  padding: var(--space-2) var(--space-3);
  font: inherit;
  color: var(--color-chat-text);
  background: transparent;
  border: 0;
  resize: none;
}

.compose__body:focus-visible {
  outline: none;
}

/* Bijlage-/foto-placeholders (disabled): rustige icoon-knoppen in de pill. */
.compose__icon {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  color: var(--color-text-muted);
  background: transparent;
  border: 0;
  border-radius: var(--radius-control);
  cursor: pointer;
  transition: background var(--dur-fast) var(--curve-decel),
              color var(--dur-fast) var(--curve-decel);
}

.compose__icon:not(:disabled):hover {
  background: var(--color-hover);
  color: var(--color-chat-text);
}

.compose__icon:disabled {
  cursor: default;
  opacity: 0.55;
}

.compose__icon-svg {
  width: 20px;
  height: 20px;
}

/* Bij typen schuift het camera-icoon weg (en maakt ruimte voor de tekst) — WhatsApp-
   stijl. CSS-only: zodra het tekstveld niet meer de placeholder toont, is er tekst. */
.compose__icon--camera {
  transition: width 0.2s ease, opacity 0.2s ease, transform 0.2s ease;
}
.compose__body:not(:placeholder-shown) ~ .compose__icon--camera {
  width: 0;
  opacity: 0;
  transform: translateX(12px);
  overflow: hidden;
  pointer-events: none;
}

/* Verzendknop met vliegtuig-icoon — vierkante icoon-knop (48px). De "Stuur naar
   <naam>"-tekst (anti-misverzend) zit als aria-label op de knop en is visueel
   verborgen (zie .compose__send-name), zodat alleen het icoon toont. */
.compose__submit {
  position: relative;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  padding: 0;
  color: var(--color-on-accent);
  background: var(--color-chat-accent);
  border: 0;
  border-radius: 16px;
  cursor: pointer;
  overflow: hidden;
  transition: background var(--dur-fast) var(--curve-decel),
              transform var(--dur-fast) var(--curve-decel);
}

.compose__submit:hover {
  background: var(--color-chat-accent-hover);
}

.compose__submit:active {
  transform: translateY(0.5px);
}

.compose__send-icon {
  width: 20px;
  height: 20px;
  transition: opacity 0.15s;
}

/* Subtiele spinner: dun wit ringetje dat ronddraait; icoon verdwijnt zacht. */
/* Transparante wrapper zodat de flex-layout van .compose onveranderd blijft. */
.compose__actions { display: contents; }

/* Generieke laad-spinner-op-knop (submit-spinner-controller, DRY): verbergt de knop-
   inhoud (tekst óf icoon, ongeacht opmaak — via > * i.p.v. een element-specifieke regel)
   en draait er een wit ringetje overheen. Herbruikbaar op elke knop met een actie die
   even duurt (versturen, uploaden, toon-analyse, …) — app-breed één stijl i.p.v. losse
   per-knop-implementaties. */
.is-loading { position: relative; cursor: default; pointer-events: none; }
.is-loading > * { visibility: hidden; }
.is-loading::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: 18px;
  height: 18px;
  margin: -9px 0 0 -9px;
  border: 2px solid rgba(255, 255, 255, 0.35);
  border-top-color: var(--color-on-accent);
  border-radius: 50%;
  animation: spin 0.65s linear infinite;
}

@keyframes spin {
  to { transform: rotate(360deg); }
}

/* Info-/fail-melding boven het veld (rustig informatief, geen alarm). */
.compose__notice {
  flex-basis: 100%;
  padding: var(--space-1) var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}


/* ===================== COACH-RUIMTE (Claude-stijl) ===================== */
/* De coach-ruimte deelt de chat-shell (.chat / .message-row / .message / .compose)
   maar volgt het assistent-paradigma i.p.v. WhatsApp: de coach "praat" als platte
   donkere tekst direct op de achtergrond (géén bubbel), de ouder houdt een lichte
   bubbel rechts. Alle bubbel-anatomie komt nog uit .message (DRY) — hier alléén de
   afwijkingen, gescoped onder .coach. */

/* Ouder-bubbel: erft de warme zand-bubbel van de chat (DRY) — geen eigen coach-tint meer. */

/* Coach-beurt: geen bubbel. Sterretje-glyph + platte tekst op de achtergrond, volle
   leesbreedte. De crisis-vloer blijft wél een (warme) bubbel — bewust vasthoudend. */
.coach .message-row:not(.message-row--own) {
  flex-direction: row;
  gap: 11px;
  align-items: flex-start;
  max-width: 100%;
}
.coach .message-row:not(.message-row--own) .message:not(.message--crisis) {
  padding-inline: 0;
  background: transparent;
  border: 0;
  border-radius: 0;
  box-shadow: none;
}
.coach .message-row:not(.message-row--own) .message__body { line-height: 1.6; }

/* De coach-rij staat op row (bubbel + acties naast elkaar door de regel hierboven) —
   wrap zodat de actieknoppen op een eigen regel ONDER de bubbel vallen i.p.v.
   ernaast; flex-basis: 100% dwingt bij .message__actions de nieuwe regel af. */
.coach .message-row:not(.message-row--own) { flex-wrap: wrap; }
.coach .message-row:not(.message-row--own) .message__actions { flex-basis: 100%; }

/* Iets ruimer verticaal ritme tussen ouder-bubbel en coach-tekst (Claude-achtig). */
.coach .messages {
  gap: var(--space-4);
}

/* Coach-kop (full-bleed): terug-pijl + "Coach" + "Wis gesprek". */
.coach-head {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 11px;
  padding: calc(10px + env(safe-area-inset-top, 0px)) 14px 11px;
  background: var(--color-surface);
  border-bottom: 1px solid var(--color-line);
}
.coach-head__back {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  margin-left: -6px;
  color: var(--color-text);
}
.coach-head__back svg { width: 24px; height: 24px; }
.coach-head__title {
  flex: 1;
  min-width: 0;
  font-size: var(--text-lg);
  font-weight: 800;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.coach-head .button_to { margin: 0; }

/* Coach-drawer: off-canvas sessielijst (ChatGPT-stijl), ontwerp 2026-07-16. */
.coach-head__menu {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  color: var(--color-text);
  background: transparent;
  border: 0;
  cursor: pointer;
}
.coach-head__menu svg { width: 22px; height: 22px; }
.coach-drawer {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  width: min(280px, 84vw);
  background: var(--color-surface);
  border-right: 1px solid var(--color-line);
  box-shadow: var(--shadow-16);
  display: flex;
  flex-direction: column;
  transform: translateX(-100%);
  transition: transform var(--dur-normal) var(--curve-decel);
  /* Boven de altijd-zichtbare desktop-sidebar (.sidebar, z-index 50): eenmaal geopend
     dekt de coach-drawer ook die balk, anders onderscheppen de sidebar-links de klik. */
  z-index: 55;
}
.coach-drawer--open { transform: translateX(0); }
.coach-drawer__scrim {
  position: fixed;
  inset: 0;
  background: rgba(25, 25, 25, 0.32);
  z-index: 54;
}
.coach-drawer__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: calc(12px + env(safe-area-inset-top, 0px)) 14px 8px;
}
.coach-drawer__title { font-size: var(--text-lg); font-weight: 800; }
.coach-drawer__close {
  display: inline-flex;
  width: 28px;
  height: 28px;
  align-items: center;
  justify-content: center;
  color: var(--color-text-muted);
  background: transparent;
  border: 0;
  cursor: pointer;
}
.coach-drawer__new {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 2px 12px 10px;
  padding: 9px 12px;
  border-radius: var(--radius-control);
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  color: var(--color-text);
  font-size: var(--text-sm);
  font-weight: 700;
  text-decoration: none;
}
.coach-drawer__new svg { width: 16px; height: 16px; }
.coach-drawer__list { flex: 1; overflow-y: auto; padding: 0 8px; }
.coach-drawer__group-label {
  font-size: var(--text-11);
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--color-faint);
  padding: 10px 8px 5px;
}
.coach-drawer__row {
  display: flex;
  align-items: center;
  gap: 4px;
  border-radius: var(--radius-control);
}
.coach-drawer__row--active { background: var(--color-line); }
.coach-drawer__row--active .coach-drawer__row-title { color: var(--color-text); font-weight: 700; }
/* Gearchiveerde sessies: gedempt grijs (lichter dan de normale zwarte tekst), zodat het
   archief visueel terugtreedt t.o.v. de actieve lijst. */
.coach-drawer__list[data-coach-drawer-target="archivedList"] .coach-drawer__row-title {
  color: var(--color-text-muted);
  font-weight: 500;
}
.coach-drawer__row-link {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 5px;
  padding: 9px 4px 9px 8px;
  text-decoration: none;
  color: inherit;
}
.coach-drawer__row-title {
  font-size: var(--text-sm);
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.coach-drawer__chip {
  flex: none;
  font-size: var(--text-10);
  font-weight: 700;
  padding: 1px 6px;
  border-radius: 999px;
  background: var(--color-coparent-soft);
  color: var(--color-coparent);
}
.coach-drawer__row-menu {
  flex: none;
  display: inline-flex;
  width: 30px;
  height: 30px;
  align-items: center;
  justify-content: center;
  color: var(--color-faint);
  background: transparent;
  border: 0;
  cursor: pointer;
}
.coach-drawer__row-menu svg { width: 18px; height: 18px; }
.coach-drawer__empty { padding: 12px 8px; font-size: var(--text-sm); color: var(--color-text-muted); }
.coach-drawer__foot {
  border-top: 1px solid var(--color-line);
  padding: 11px 14px calc(11px + env(safe-area-inset-bottom, 0px));
  text-align: left;
  font-size: var(--text-13);
  font-weight: 600;
  color: var(--color-text-muted);
  background: transparent;
  border-left: 0;
  border-right: 0;
  border-bottom: 0;
  cursor: pointer;
}
/* Sessie-context-sheet (⋯-rijmenu): verticale opbouw — een hernoem-rij bóven een
   menu-lijst met tikbare rijen. Bewust NIET de horizontale .sheet-actions (die propt
   de drie forms op één regel: afgeknelde input + afgekapte acties). */
.coach-drawer__sheet { display: flex; flex-direction: column; }

/* Hernoem-rij: veld + compacte accent-knop, samen op één regel, gelijke hoogte. */
.coach-drawer__rename {
  display: flex;
  align-items: stretch;
  gap: 8px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--color-line);
}
.coach-drawer__rename-field {
  flex: 1;
  min-width: 0;
  padding: 11px 13px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-control);
  background: var(--color-surface);
  font: inherit;
  font-size: var(--text-15);
  color: var(--color-text);
  transition: border-color .15s ease, box-shadow .15s ease;
}
.coach-drawer__rename-field::placeholder { color: var(--color-faint); }
.coach-drawer__rename-field:focus {
  outline: none;
  border-color: var(--color-accent);
  box-shadow: 0 0 0 3px rgba(181, 102, 63, 0.14);
}
.coach-drawer__rename-save {
  flex: none;
  padding: 0 17px;
  border: 0;
  border-radius: var(--radius-control);
  background: var(--color-accent);
  color: var(--color-on-accent);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: 700;
  cursor: pointer;
  transition: background .15s ease;
}
.coach-drawer__rename-save:hover { background: var(--color-accent-hover); }

/* Menu-lijst: elke button_to is een eigen <form>; de knop zelf vult de rij. */
.coach-drawer__menu { display: flex; flex-direction: column; }
.coach-drawer__menu > form { margin: 0; }
.coach-drawer__item {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  padding: 15px 8px;
  border: 0;
  background: transparent;
  font: inherit;
  font-size: var(--text-15);
  font-weight: 600;
  color: var(--color-text);
  text-align: left;
  cursor: pointer;
  transition: background .13s ease;
}
/* Hairline tussen de rijen (niet boven de eerste — daar zit de hernoem-scheiding al). */
.coach-drawer__menu > form:not(:first-child) .coach-drawer__item {
  border-top: 1px solid var(--color-line);
}
.coach-drawer__item:hover,
.coach-drawer__item:active { background: var(--color-bg); }
.coach-drawer__item-icon {
  width: 20px;
  height: 20px;
  flex: none;
  color: var(--color-text-muted);
}
.coach-drawer__item--danger,
.coach-drawer__item--danger .coach-drawer__item-icon { color: var(--color-error); }


/* ===================== DE-ESCALATIE (DP3) ===================== */
/* Een gefluisterde alternatieve formulering bóven het invoerveld — géén dominante
   kaart en géén alarmerende blokkade. De kaart vervangt de verzendknop en wordt via
   flex (order/flex-basis) bovenop het veld geplaatst, zodat de suggestie verschijnt
   wáár je typt en niet ernaast. Een frosted, translucent warm vlak; het voorstel is
   een pull-quote (géén veld-look), de acties staan in één compacte rij. */
/* Suggestie-kaart in de eigen regio (#deescalation-review) boven de bar — vervangt
   NIET meer de verzendknop/het veld. Zacht warm vlak, géén rand. */
.review-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
  padding: var(--space-3) var(--space-4);
  background: var(--color-chat-surface-own);
  border: 0;
  border-radius: calc(var(--radius) + 4px);
  animation: review-card-in 0.28s cubic-bezier(0.25, 0.1, 0.25, 1);
}

@keyframes review-card-in {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

@media (prefers-reduced-motion: reduce) {
  .review-card { animation: none; }
}

/* Kop: kleine, rustige label-regel met een zacht koraal-puntje als markering. */
.review-card__heading {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin: 0;
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  letter-spacing: 0.02em;
  color: var(--color-text-muted);
}

.review-card__heading::before {
  content: "";
  flex-shrink: 0;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-chat-accent);
  opacity: 0.7;
}

/* Het voorstel: rechte tekst met een rustig koraal-lijntje links — een callout,
   géén box/rand/wit en géén cursief, dus niet te verwarren met een invoerveld. */
.review-card__suggestion {
  margin: 0;
  padding-left: var(--space-3);
  font-size: var(--text-sm);
  line-height: var(--leading);
  color: var(--color-chat-text);
  background: none;
  border: 0;
  border-left: 2px solid var(--color-chat-accent);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* Eén actie-rij: hoofdacties links, de uitweg rechts (margin-left:auto). */
.review-card__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-1);
}

.review-card__action {
  margin: 0;
}

/* Compact: icoon + kort label op inhoudsbreedte. */
.review-card__submit {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 38px;
  padding: 0 var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  border-radius: var(--radius);
  cursor: pointer;
}
.review-card__icon { width: 16px; height: 16px; flex-shrink: 0; }

/* Primair: gevuld accent, compact, met een subtiele lift. */
.review-card__submit--primary {
  color: var(--color-on-accent);
  background: var(--color-chat-accent);
  border: 0;
  box-shadow: 0 1px 2px rgba(179, 97, 63, 0.25);
}

.review-card__submit--primary:hover {
  background: var(--color-chat-accent-hover);
}

/* Secundair: pure ghost-knop (geen vlak/rand) — ondergeschikt aan primair. */
.review-card__submit--secondary {
  color: var(--color-chat-text);
  background: transparent;
  border: 0;
}

.review-card__submit--secondary:hover {
  background: var(--color-hover);
}

/* "Tóch ongewijzigd versturen": meest ondergeschikt — kleine link, rechts in de rij. */
.review-card__action--muted {
  margin-left: auto;
}

.review-card__link {
  padding: var(--space-1) 0;
  font: inherit;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-decoration: underline;
  text-underline-offset: 2px;
  background: none;
  border: 0;
  cursor: pointer;
}

.review-card__link:hover {
  color: var(--color-chat-text);
}

/* Hard-modus: melding dat rustige formulering vereist is — rechts in de rij. */
.review-card__enforced {
  margin: 0 0 0 auto;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}

/* ===================== BAROMETER (DP3) ===================== */
/* Cijferloze, perifere gespreks-richting-meter bovenaan de chat. Ontworpen om de
   arousal te VERLAGEN, niet om de "richting" zo scherp mogelijk te schreeuwen: een
   rustige rand-indicator, geen focaal element (anders gaan ouders "presteren voor de
   meter"). De track-container heeft in ELKE zone dezelfde footprint — alleen de
   fill-breedte + tint binnen die vaste track verschuift (thermometer, geen alarm).
   Geen border/shadow/groei die in de hot-zone aanzwelt (zou de meter laten schreeuwen,
   ongeacht de tint). */

/* Placeholder-staat (te weinig beurten): de lege #barometer blijft als Turbo-replace-
   target in de DOM maar neemt geen layout-ruimte in (geen opgedrongen witruimte). */
#barometer:not(.barometer) {
  display: contents;
}

/* Puur-visuele temperatuur-indicator bovenaan de compose-zone: een dunne getinte
   lijn + een rustig info-icoon met tooltip. Geen vaste tekstregels meer — de
   betekenis blijft als tekst beschikbaar via aria-label + tooltip (kleur is nooit
   de enige drager; de vullengte per zone is het tweede visuele kanaal). */
.barometer {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  width: 100%;
  max-width: 760px; /* zelfde kolom-as als .messages / .compose */
  margin: 0 auto var(--space-1);
  padding: 0 var(--space-2);
}

/* Meter-rij: de lijn groeit, het info-icoon staat rustig aan het eind. */
.barometer__meter {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

/* Temperatuur-lijn: dun (4px), perifere rand-indicator net boven het invoerveld. */
.barometer__track {
  flex: 1;
  height: 4px;
  border-radius: 999px;
  background: var(--color-barometer-track);
  overflow: hidden;
}

/* Vulling links→rechts. Breedte + tint per zone; nooit 100% (= max-uitslag, alarm).
   Startwaarden, te tunen met de drempel-kalibratie. */
.barometer__fill {
  height: 100%;
  width: 28%;
  background: var(--color-barometer-calm-fill);
}

.barometer--calm .barometer__fill {
  width: 28%;
  background: var(--color-barometer-calm-fill);
}

.barometer--warming .barometer__fill {
  width: 58%;
  background: var(--color-barometer-warming-fill);
}

.barometer--hot .barometer__fill {
  width: 88%;
  background: var(--color-barometer-hot-fill);
}

/* Rustige overgang — load-bearing voor de de-escalatie ÉN de asymmetrie-bescherming:
   een trage, continue vervloeiing voorkomt een toerekenbare visuele sprong na één
   bericht (zou de dyade-meter de facto per-persoon maken — §8a.2). Pas actief ná de
   ready-haak, zodat de eerste render geen flash van de beginstand toont. */
.barometer--ready .barometer__fill {
  transition: width 1.2s cubic-bezier(0.25, 0.1, 0.25, 1), background-color 1.8s ease;
}

@media (prefers-reduced-motion: reduce) {
  .barometer--ready .barometer__fill {
    transition: none;
  }
}

/* Richting-tekst: primaire betekenis-drager (kleur is nooit de enige drager), maar
   bewust niet zwaarder dan een bericht. */
/* Rustig info-icoon ("i", geen alarm-"!") aan het eind van de lijn. */
.barometer__info {
  position: relative;
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  padding: 0;
  background: none;
  border: 0;
  cursor: help;
}

.barometer__info-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 14px;
  height: 14px;
  font-size: var(--text-10);
  font-weight: 700;
  font-style: normal;
  line-height: 1;
  color: var(--color-text-muted);
  border: 1px solid currentColor;
  border-radius: 50%;
}

.barometer__info:hover .barometer__info-icon,
.barometer__info:focus-visible .barometer__info-icon {
  color: var(--color-chat-text);
}

/* Tooltip: verschijnt boven het icoon op hover én focus (tap = focus → werkt op
   touch). Donkere bubbel met lichte tekst; opent linksboven vanaf het icoon. */
.barometer__tooltip {
  position: absolute;
  bottom: calc(100% + 6px);
  right: 0;
  z-index: 5;
  width: max-content;
  max-width: 240px;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-xs);
  font-weight: 400;
  line-height: var(--leading);
  text-align: left;
  color: var(--color-chat-bg);
  background: var(--color-chat-text);
  border-radius: var(--radius);
  box-shadow: var(--shadow-4);
  opacity: 0;
  visibility: hidden;
  transform: translateY(3px);
  transition: opacity 0.12s ease, transform 0.12s ease, visibility 0.12s;
  pointer-events: none;
}

.barometer__info:hover .barometer__tooltip,
.barometer__info:focus .barometer__tooltip {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}

/* Afkoel-prompt: een zachte uitnodiging met agency, geen waarschuwing. Lichter dan
   de berichten eromheen (geen border/shadow → niet urgenter ogen dan de review-kaart).
   Niet-blokkerend, naast de stroom. */
.barometer__cooldown {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  margin-top: var(--space-1);
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius);
  background: var(--color-barometer-cooldown-bg);
}

/* [hidden] moet de display:flex hierboven verslaan — anders blijft de cooldown
   zichtbaar nadat de Sluit-knop hem op hidden zet (was de "Sluit werkt niet"-bug). */
.barometer__cooldown[hidden] {
  display: none;
}

.barometer__cooldown-text {
  flex: 1;
  min-width: 0;
}

.barometer__cooldown-title {
  margin: 0;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-chat-text);
}

.barometer__cooldown-body {
  margin: 2px 0 0;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

/* Sluiten: een rustige × rechtsboven — makkelijke, ondergeschikte uitweg. */
.barometer__cooldown-dismiss {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  margin: -2px -4px 0 0;
  padding: 0;
  color: var(--color-text-muted);
  background: none;
  border: 0;
  border-radius: var(--radius);
  cursor: pointer;
}

.barometer__cooldown-dismiss:hover {
  color: var(--color-chat-text);
  background: rgba(0, 0, 0, 0.04);
}

/* ===================== DOSSIER-OVERZICHT (DP2) ===================== */
.dossier__title {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
}

.dossier__status {
  margin-top: var(--space-2);
  color: var(--color-text-muted);
}

.dossier__conversation-link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  margin-top: var(--space-4);
  padding: 0 var(--space-4);
  font-weight: var(--weight-medium);
  color: var(--color-bg);
  background: var(--color-accent);
  border-radius: var(--radius);
  text-decoration: none;
}

.dossier__conversation-link:hover {
  background: var(--color-accent-hover);
}

.dossier__subtitle {
  margin-top: var(--space-6);
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
}

.dossier__parents {
  margin-top: var(--space-2);
  padding-left: var(--space-4);
}

/* ===================== METINGEN (DP6) ===================== */
/* Brede dashboard-pagina: vult de volledige breedte naast de sidebar (géén
   max-width), met ruime padding. Bewust niet de smalle .container (640px). */
.dashboard-page { width: 100%; padding: var(--space-6); }
@media (min-width: 768px) {
  .dashboard-page { padding: var(--space-8); }
}

.dashboard { display: flex; flex-direction: column; gap: var(--space-6); }
.dashboard__title { font-size: var(--text-lg); font-weight: var(--weight-medium); }
.dashboard__lede { font-size: var(--text-sm); color: var(--color-text-muted); }

/* Panelen-grid: tegels vloeien responsief in kolommen (M365-achtig). Laag-banden
   (toon/agenda, DEF-7) spannen de volle breedte zodat ze niet als gelijke tegel
   lezen maar als aparte meetlaag. */
.dashboard__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  align-items: start;
}
@media (min-width: 640px) {
  .dashboard__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1200px) {
  .dashboard__grid { grid-template-columns: repeat(4, 1fr); }
}
.dashboard__band { grid-column: 1 / -1; }

/* Agenda-sub-panelen tegelen net als de andere widgets (volume/lock/revert/self). */
.agenda-panel__sub-panels {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  align-items: start;
}
@media (min-width: 640px) {
  .agenda-panel__sub-panels { grid-template-columns: repeat(2, 1fr); }
}

.dashboard__band-heading {
  margin: 0 0 var(--space-3);
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  color: var(--color-text);
}

/* Sub-grid binnen een band: splitst een overvolle meetlaag in losse widgets
   (bv. de toon-trend + een indicatoren-widget per ouder), die tegelen. */
.dashboard__subgrid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-4);
  align-items: start;
}
@media (min-width: 640px) {
  .dashboard__subgrid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1200px) {
  .dashboard__subgrid { grid-template-columns: repeat(3, 1fr); }
}

/* Inklapbaar uitleg-panel: bundelt meet-kanttekeningen onder een band, rustig
   en standaard dicht. Chevron rechts die meedraait. */
.explain {
  margin-top: var(--space-3);
  padding-top: var(--space-3);
  border-top: 1px solid var(--color-border);
}
.explain__summary {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  cursor: pointer;
  list-style: none;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}
.explain__summary::-webkit-details-marker { display: none; }
.explain__summary::after {
  content: "›";
  margin-left: auto;
  font-size: var(--text-15);
  line-height: 1;
  transition: transform 0.15s ease;
}
.explain[open] .explain__summary::after { transform: rotate(90deg); }
.explain__body {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-top: var(--space-2);
}
.explain__body p {
  margin: 0;
  font-size: var(--text-xs);
  line-height: var(--leading);
  color: var(--color-text-muted);
}
.dashboard__panel { /* CardComponent verzorgt de border/padding */
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.measurements__pending {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-6) 0;
}
.measurements__pending-title { font-size: var(--text-lg); font-weight: var(--weight-medium); }
.measurements__pending-body { color: var(--color-text-muted); }
.measurements__pending-status { font-size: var(--text-sm); color: var(--color-text-muted); }

.dataviz { display: flex; flex-direction: column; gap: var(--space-2); }
.dataviz__label { font-size: var(--text-sm); color: var(--color-dataviz-text); }
.dataviz__svg { display: block; width: 100%; height: auto; max-height: 56px; }
.dataviz__stats-row { display: flex; flex-wrap: wrap; gap: var(--space-4); }
.dataviz__stat { display: flex; align-items: baseline; gap: var(--space-2); }
.dataviz__stat-value { font-size: var(--text-lg); font-weight: var(--weight-medium); }
.dataviz__stat-n { font-size: var(--text-sm); color: var(--color-dataviz-text); }
.dataviz__too-few {
  font-size: var(--text-sm);
  color: var(--color-dataviz-text);
  font-style: italic;
}

/* Lineaire %-meter (Claude-stijl): één dimensie als 0–100%-balk. */
.meter { display: flex; flex-direction: column; gap: 5px; }
.meter__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-2);
}
.meter__label { font-size: var(--text-sm); color: var(--color-text); }
.meter__value {
  display: inline-flex;
  align-items: baseline;
  gap: var(--space-1);
  font-variant-numeric: tabular-nums;
}
.meter__percent { font-size: var(--text-sm); font-weight: var(--weight-medium); color: var(--color-text); }
.meter__caption { font-size: var(--text-xs); color: var(--color-text-muted); }
.meter__value--muted { font-size: var(--text-sm); color: var(--color-text-muted); font-style: italic; }
.meter__track {
  height: 8px;
  background: var(--color-dataviz-muted);
  border-radius: 999px;
  overflow: hidden;
}
.meter__fill { height: 100%; background: var(--color-dataviz-line); border-radius: 999px; }

/* Stat-groep: een paar meters/stats onder een sub-label (bv. per ouder). */
.dashboard__stat-group {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin-bottom: var(--space-3);
}

/* Vergelijkingsbalken: per partij één balk op gedeelde schaal (voor duren e.d.,
   géén aandeel). Rij zonder waarde toont alleen tekst (te weinig data). */
.compare-bars {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}
.compare-bars__row {
  display: grid;
  grid-template-columns: 7rem 1fr auto;
  align-items: center;
  gap: var(--space-2);
}
.compare-bars__label { font-size: var(--text-sm); color: var(--color-text); }
.compare-bars__track {
  height: 8px;
  background: var(--color-dataviz-muted);
  border-radius: 999px;
  overflow: hidden;
}
.compare-bars__fill { height: 100%; border-radius: 999px; }
.compare-bars__value {
  font-size: var(--text-sm);
  color: var(--color-text);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.compare-bars__value--muted {
  grid-column: 2 / -1;
  color: var(--color-text-muted);
  font-style: italic;
}

/* Donut: ring met neutrale segmenten + totaal in het midden, legenda ernaast. */
.donut {
  display: flex;
  align-items: center;
  gap: var(--space-4);
  flex-wrap: wrap;
}

.donut__chart {
  position: relative;
  flex-shrink: 0;
  width: 132px;
  height: 132px;
}

.donut__svg { display: block; width: 100%; height: 100%; }

.donut__track { fill: none; stroke: var(--color-dataviz-muted); }

.donut__seg {
  fill: none;
  stroke-linecap: butt;
  transition: stroke-dasharray 0.6s cubic-bezier(0.25, 0.1, 0.25, 1);
}

.donut__center {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
}
.donut__center-value {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  line-height: 1;
  color: var(--color-text);
  font-variant-numeric: tabular-nums;
}
.donut__center-label { font-size: var(--text-xs); color: var(--color-text-muted); }

.donut__legend {
  flex: 1;
  min-width: 150px;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}
.donut__legend-item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: var(--text-sm);
}
.donut__legend-dot {
  flex-shrink: 0;
  width: 10px;
  height: 10px;
  border-radius: 3px;
}
.donut__legend-label { color: var(--color-text); }
.donut__legend-value {
  margin-left: auto;
  color: var(--color-text-muted);
  font-variant-numeric: tabular-nums;
}

.dataviz__bars { display: flex; flex-direction: column; gap: var(--space-2); }
/* Mobile-first: label vol-breed boven de track; vanaf 480px naast elkaar
   in drie kolommen. Voorkomt overflow op 320–360px schermen. */
.dataviz__bar-row {
  display: grid;
  grid-template-columns: 1fr 2.5rem;
  grid-template-rows: auto auto;
  align-items: center;
  gap: var(--space-1) var(--space-2);
}
.dataviz__bar-label {
  grid-column: 1 / -1;
  font-size: var(--text-sm);
  color: var(--color-dataviz-text);
}
.dataviz__bar-track { background: var(--color-dataviz-muted); border-radius: 999px; height: 8px; overflow: hidden; }
.dataviz__bar-fill { background: var(--color-dataviz-line); height: 100%; }
.dataviz__bar-value { font-size: var(--text-sm); color: var(--color-text); text-align: right; }

@media (min-width: 480px) {
  .dataviz__bar-row {
    grid-template-columns: 8rem 1fr 2.5rem;
    grid-template-rows: auto;
  }
  .dataviz__bar-label { grid-column: auto; }
}

/* ===================== APP-SHELL + SIDEBAR (mobile-first) ===================== */
/* Geen top-bar: links een sidebar-paneel. Off-canvas op mobiel (de hamburger
   schuift 'm in via .app--menu-open + backdrop), vast op desktop (≥768px). De chat
   vult de viewport (composer onderaan); content-pagina's groeien gewoon mee. */
.app { height: 100%; display: flex; }

.sidebar {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  z-index: 50; /* boven de mobiele bottom-nav (40): de open drawer dekt ook de tabbalk */
  display: flex;
  flex-direction: column;
  width: var(--sidebar-width);
  max-width: 85vw;
  padding: var(--space-4);
  background: var(--color-sidebar-bg);
  border-right: 1px solid var(--color-border);
  transform: translateX(-100%);
  transition: transform 0.2s ease;
  overflow: hidden;
}

.app--menu-open .sidebar { transform: translateX(0); }

.app__backdrop {
  position: fixed;
  inset: 0;
  z-index: 45; /* boven de bottom-nav (40), onder de sidebar (50) — dimt ook de tabbalk */
  background: rgba(0, 0, 0, 0.4);
  display: none;
}

.app--menu-open .app__backdrop { display: block; }

/* Mobiele header (WhatsApp-stijl): vaste balk bovenaan .app__main; de body eronder
   scrollt. Verborgen op desktop (de sidebar staat dan in de flow). */
.app__topbar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  height: 56px;
  /* Horizontale padding gelijk aan de content-container (--space-4) zodat de
     topbar-titel én de kebab uitlijnen met de kaarten eronder (niet 8px te ver links). */
  padding: 0 var(--space-4);
  background: var(--color-surface);
  /* Onderrand neemt de gezinskleur over wanneer een pagina die zet (chat); anders grijs. */
  border-bottom: 2px solid var(--gezin-color, var(--color-border));
}

.app__topbar-title {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  color: var(--color-text);
  /* Lange namen (de andere ouder) netjes afkappen i.p.v. de balk oprekken. */
  min-width: 0;
  flex: 1;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* Gezinskleur-stip vóór de naam in de bovenbalk (erft --gezin-color van .app__topbar). */
.app__topbar-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--gezin-color, var(--color-accent)); flex: none; }

/* Menu-knop: gewone knop ín de topbar (niet meer zwevend over de inhoud). */
.app__menu-toggle {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  color: var(--color-text);
  background: none;
  border: 0;
  border-radius: 50%;
  cursor: pointer;
}
.app__menu-toggle:hover { background: var(--color-hover); }

/* Dev-toggle: knop rechtsboven bínnen de main-container (absolute t.o.v. .app__main),
   klapt de dev-drawer in/uit (alleen development). Bij een open paneel schuift hij
   mee naar de nieuwe rechterrand van main, pal naast het paneel. */
.app__dev-toggle {
  position: absolute;
  top: var(--space-2);
  /* Links van de kebab (die rechts in de topbar hangt) zodat ze niet overlappen. */
  right: 96px;
  /* Boven alle pagina-chrome (max z-30, incl. agenda-modal), maar onder de
     dev-drawer-overlay (39/40) op mobiel — zo dekt de backdrop hem daar af. */
  z-index: 38;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 50%;
  box-shadow: var(--shadow-sm);
  cursor: pointer;
  transition: background var(--dur-fast) var(--curve-decel),
              color var(--dur-fast) var(--curve-decel),
              border-color var(--dur-fast) var(--curve-decel);
}
.app__dev-toggle:hover { background: var(--color-hover); color: var(--color-text); }

/* Aan-staat: paneel open → de toggle staat 'ingedrukt' (accent-vlak, witte icoon),
   zodat het zichtbaar een echte aan/uit-toggle is. */
.app.dev-panel-open .app__dev-toggle {
  color: var(--color-on-accent);
  background: var(--color-accent);
  border-color: var(--color-accent);
}
.app.dev-panel-open .app__dev-toggle:hover {
  color: var(--color-on-accent);
  background: var(--color-accent-hover);
  border-color: var(--color-accent-hover);
}

.app__menu-icon { width: 22px; height: 22px; }

/* Generiek dropdown-menu: topbar-kebab (opent naar beneden) en sidebar-footer-account
   (opent naar boven, --up). Eén bron voor de paneel- en item-stijl (DRY). Eigen blok
   `.dropdown` — NIET `.menu` (dat is het admin-beheer-menu, met eigen margin-top). */
.dropdown { position: relative; flex-shrink: 0; }
.dropdown__panel {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  min-width: 12rem;
  padding: var(--space-1);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.14);
  z-index: 40;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
/* Opent naar boven, links uitgelijnd (sidebar-footer). */
.dropdown__panel--up { top: auto; right: auto; left: 0; bottom: calc(100% + 4px); }
.dropdown__panel[hidden] { display: none; }
.dropdown__panel .button_to { width: 100%; margin: 0; }
.dropdown__item {
  display: block;
  width: 100%;
  padding: var(--space-3);
  /* Expliciet de app-tekstfont (knoppen erven die niet vanzelf). */
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  font-weight: var(--weight-normal, 400);
  line-height: 1.4;
  text-align: left;
  color: var(--color-text);
  text-decoration: none;
  background: none;
  border: 0;
  border-radius: var(--radius-control);
  cursor: pointer;
}
.dropdown__item:hover { background: var(--color-hover); }
.dropdown__item:focus-visible { outline: 2px solid var(--color-accent); outline-offset: -2px; }
/* Placeholder-item (nog niet functioneel): ziet er app-native uit, maar is niet
   klikbaar (cursor-signaal). */
.dropdown__item--placeholder { cursor: default; }

/* De kebab hangt altijd rechts in de topbar, ongeacht de titel-breedte. */
.app__topbar .dropdown { margin-left: auto; }

/* .app__main = kolom: topbar (vast) + body (scrollt). Position: relative zodat de
   dev-toggle er absoluut in verankert (rechtsboven). */
.app__main {
  position: relative;
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

/* Scrollende inhoud onder de topbar. Voor gewone pagina's scrollt de body zelf;
   voor chat-/coach-pagina's wordt de body een flex-kolom zodat de chat via flex:1
   exact vult en intern scrollt — de body zelf scrollt dan NIET (composer blijft
   vast onderin). :has() is veilig — de app dwingt moderne browsers af. */
.app__body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}
.app__body:has(> .chat),
.app__body:has(> .agenda-layout) {
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.app__body:has(> .chat) > .chat {
  flex: 1;
  min-height: 0;
  height: auto;
}

.sidebar__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--space-4);
}

.sidebar__brand {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  color: var(--color-chat-text);
  text-decoration: none;
}

/* Compacte merk-tegel (favicon): alleen zichtbaar in de ingeklapte balk. */
.sidebar__brand-mark { display: none; }

.sidebar__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  color: var(--color-text-muted);
  background: transparent;
  border: 0;
  cursor: pointer;
}

.sidebar__icon { width: 20px; height: 20px; }
.icon { width: 20px; height: 20px; flex-shrink: 0; }

.sidebar__nav {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  flex: 1;
  min-height: 0;
  overflow-y: auto;
}

.sidebar__link {
  position: relative;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 44px;
  padding: 0 var(--space-3);
  font: inherit;
  color: var(--color-chat-text);
  text-decoration: none;
  background: none;
  border: 0;
  border-radius: var(--radius-control);
  text-align: left;
  cursor: pointer;
  transition: background var(--dur-fast) var(--curve-decel),
              color var(--dur-fast) var(--curve-decel);
}
.sidebar__link .icon { transition: color var(--dur-fast) var(--curve-decel); }

.sidebar__link:hover { background: var(--color-hover); }

.sidebar__link--muted { color: var(--color-text-muted); cursor: default; }
.sidebar__link--muted:hover { background: none; }
/* Fluent v9-selectie: subtiel koraal-vlak + afgeronde accent-rail links +
   accent-icoon — dezelfde nav-taal als de instellingen. */
.sidebar__link--active {
  background: var(--color-surface-own);
  font-weight: var(--weight-medium);
}
.sidebar__link--active::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  width: 3px;
  height: 20px;
  transform: translateY(-50%);
  border-radius: 999px;
  background: var(--color-accent);
}
.sidebar__link--active .icon { color: var(--color-accent); }

/* Gesprek-groep: kop + per-gezin sublinks (ingeklapt → flyout, zie collapsed-blok) */
.sidebar__group { display: flex; flex-direction: column; position: relative; }
.sidebar__flyout { display: flex; flex-direction: column; }
.sidebar__flyout-title { display: none; }
.sidebar__group-label { display: flex; align-items: center; gap: 0.625rem; padding: 0.625rem 0.75rem 0.25rem; color: var(--color-text-muted); font: inherit; }
.sidebar__sublink { padding-left: 2.25rem; }
.sidebar__dot { width: 9px; height: 9px; border-radius: 50%; background: var(--gezin-color, var(--color-accent)); flex: none; }
.sidebar__badge-slot { margin-left: auto; display: inline-flex; align-items: center; }
.sidebar__badge { min-width: 1.25rem; padding: 0 0.375rem; border-radius: 0.625rem; background: var(--gezin-color, var(--color-accent)); color: var(--color-on-accent); font-size: 0.6875rem; line-height: 1.25rem; text-align: center; }

/* Berichtnotificaties — toasts rechtsonder, gestapeld. Verschijnen op elke pagina
   via de per-ouder Turbo-stream (#toasts); de container vangt zelf geen klikken. */
.toasts {
  position: fixed;
  right: var(--space-4);
  bottom: var(--space-4);
  z-index: 1000;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  width: min(22rem, calc(100vw - 2 * var(--space-4)));
  pointer-events: none;
}
.toast {
  pointer-events: auto;
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  padding: var(--space-3) var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-left: 3px solid var(--color-accent);
  border-radius: var(--radius);
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
  cursor: pointer;
  animation: toast-in 0.22s cubic-bezier(0.25, 0.1, 0.25, 1);
}
.toast--leaving { opacity: 0; transform: translateX(8px); transition: opacity 0.2s ease, transform 0.2s ease; }
.toast__icon { color: var(--color-accent); flex: none; display: inline-flex; margin-top: 1px; }
.toast__content { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.toast__title { font-size: var(--text-sm); color: var(--color-text); font-weight: 600; }
.toast__body { font-size: var(--text-sm); color: var(--color-text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.toast__close { flex: none; display: inline-flex; padding: 2px; border: 0; background: transparent; color: var(--color-text-muted); cursor: pointer; border-radius: var(--radius); }
.toast__close:hover { color: var(--color-text); }
@keyframes toast-in { from { opacity: 0; transform: translateX(16px); } to { opacity: 1; transform: translateX(0); } }
@media (prefers-reduced-motion: reduce) { .toast { animation: none; } .toast--leaving { transition: none; } }

.sidebar__footer {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  margin-top: var(--space-2);
  padding-top: var(--space-2);
  border-top: 1px solid var(--color-border);
}

.sidebar__signout {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  width: 100%;
  min-height: 44px;
  padding: 0 var(--space-3);
  font: inherit;
  color: var(--color-text-muted);
  background: var(--color-chat-bubble-other);
  border: 1px solid var(--color-chat-border);
  border-radius: var(--radius);
  cursor: pointer;
}

.sidebar__signout:hover { color: var(--color-chat-text); }

.sidebar__collapse { display: flex; align-items: center; gap: var(--space-2); min-height: 44px; padding: 0 var(--space-3); background: none; border: 0; border-radius: var(--radius); cursor: pointer; color: var(--color-text-muted); }
.sidebar__collapse:hover { background: var(--color-hover); border-radius: var(--radius); }

/* Account-blok onderin de footer: placeholder-avatar (initialen) + oudernaam +
   gezinsnaam, klikt door naar de instellingen. */
.sidebar__account {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  width: 100%;
  min-height: 48px;
  padding: var(--space-2) var(--space-3);
  border-radius: var(--radius);
  color: var(--color-text);
  text-decoration: none;
  font: inherit;
  text-align: left;
  background: none;
  border: 0;
  cursor: pointer;
}
.sidebar__account:hover { background: var(--color-hover); }
.sidebar__avatar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  background: var(--color-accent);
  color: var(--color-on-accent);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
}
.sidebar__account-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.sidebar__account-name {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sidebar__account-gezin {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

@media (min-width: 768px) {
  /* Sidebar in de echte flex-flow (geen fixed + margin-truc): flexbox reserveert
     de breedte fysiek, dus de chat kan er nooit achter verdwijnen en in-/uitklappen
     schuift de chat vanzelf mee. */
  .sidebar { position: relative; transform: none; flex-shrink: 0; }
  .app__topbar { display: none; } /* geen mobiele header op desktop */
  .app__menu-toggle { display: none; }
  .chat__header { display: flex; } /* desktop heeft geen topbar → in-page chat-header terug */
  .app__backdrop { display: none !important; }
  .sidebar__close { display: none; }
  .sidebar { transition: width 0.15s ease; }
  /* Ingeklapt (alleen desktop): icoon-only rail. Labels worden tooltips bij hover;
     de gespreksgroep krijgt een flyout-submenu naast de balk (M365-stijl). Overflow
     zichtbaar zodat tooltip/flyout naast de smalle balk mogen uitsteken. */
  /* Top-padding gelijk aan de uitgeklapte balk (var(--space-4)) zodat merk-tegel én
     nav-items op dezelfde hoogte staan; zijkanten smal zodat de iconen breed blijven. */
  .app--sidebar-collapsed .sidebar { width: 72px; padding: var(--space-4) var(--space-2) var(--space-2); overflow: visible; }
  .app--sidebar-collapsed .sidebar__nav { overflow: visible; }
  /* Woordmerk wijkt voor de compacte merk-tegel, op exact de woordmerk-hoogte
     (1.35rem) zodat de header even hoog blijft en de nav-items niet verspringen. */
  .app--sidebar-collapsed .sidebar__header { justify-content: center; }
  .app--sidebar-collapsed .sidebar__brand { display: flex; align-items: center; justify-content: center; }
  .app--sidebar-collapsed .sidebar__brand-wordmark { display: none; }
  .app--sidebar-collapsed .sidebar__brand-mark { display: block; width: 1.35rem; height: 1.35rem; }

  /* Iconen gecentreerd; geen accent-rail (de gevulde tegel markeert "actief"). */
  .app--sidebar-collapsed .sidebar__link,
  .app--sidebar-collapsed .sidebar__group-label,
  .app--sidebar-collapsed .sidebar__collapse,
  .app--sidebar-collapsed .sidebar__signout,
  .app--sidebar-collapsed .sidebar__account {
    justify-content: center;
    gap: 0;
    padding: 0;
    min-height: 44px;
    position: relative;
  }
  /* Ingeklapt: alleen de avatar tonen (initialen), naam/gezin wijken. */
  .app--sidebar-collapsed .sidebar__account-text { display: none; }
  .app--sidebar-collapsed .sidebar__link--active::before { display: none; }
  .app--sidebar-collapsed .sidebar__collapse .icon { transform: rotate(180deg); }

  /* Ongelezen-teller als hoekindicator i.p.v. in de flex-flow — anders duwt de
     auto-margin het icoon uit het midden (alleen top-level links, niet de flyout). */
  .app--sidebar-collapsed .sidebar__nav > .sidebar__link > .sidebar__badge-slot {
    position: absolute;
    top: 4px;
    right: 4px;
    margin: 0;
  }

  /* Tooltip = het (anders verborgen) label, zwevend rechts van het icoon. */
  .app--sidebar-collapsed .sidebar__nav > .sidebar__link > .sidebar__label,
  .app--sidebar-collapsed .sidebar__footer .sidebar__label {
    position: absolute;
    left: calc(100% + 0.625rem);
    top: 50%;
    transform: translateY(-50%);
    margin: 0;
    padding: 0.3rem 0.55rem;
    white-space: nowrap;
    background: var(--color-chat-text);
    color: var(--color-on-accent);
    font-size: var(--text-sm);
    border-radius: var(--radius-control);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity var(--dur-fast) var(--curve-decel);
    z-index: 50;
  }
  .app--sidebar-collapsed .sidebar__group-label > .sidebar__label { display: none; }
  .app--sidebar-collapsed .sidebar__nav > .sidebar__link:hover > .sidebar__label,
  .app--sidebar-collapsed .sidebar__nav > .sidebar__link:focus-visible > .sidebar__label,
  .app--sidebar-collapsed .sidebar__collapse:hover .sidebar__label,
  .app--sidebar-collapsed .sidebar__collapse:focus-visible .sidebar__label,
  .app--sidebar-collapsed .sidebar__signout:hover .sidebar__label,
  .app--sidebar-collapsed .sidebar__signout:focus-visible .sidebar__label {
    opacity: 1;
    visibility: visible;
  }

  /* Gespreksgroep: flyout-submenu naast de balk bij hover/focus. */
  .app--sidebar-collapsed .sidebar__flyout {
    position: absolute;
    left: calc(100% + 0.625rem);
    top: 0;
    min-width: 190px;
    padding: var(--space-1);
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.18);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--dur-fast) var(--curve-decel);
    z-index: 50;
  }
  .app--sidebar-collapsed .sidebar__group:hover .sidebar__flyout,
  .app--sidebar-collapsed .sidebar__group:focus-within .sidebar__flyout {
    opacity: 1;
    visibility: visible;
  }
  .app--sidebar-collapsed .sidebar__flyout-title {
    display: block;
    padding: 0.25rem 0.5rem 0.375rem;
    color: var(--color-text-muted);
    font-size: var(--text-sm);
    font-weight: var(--weight-medium);
  }
  .app--sidebar-collapsed .sidebar__flyout .sidebar__sublink {
    justify-content: flex-start;
    gap: var(--space-2);
    padding-left: var(--space-3);
    min-height: 40px;
  }
}

/* ===================== LANDING-DASHBOARD (DP1) ===================== */
.dashboard-landing { display: flex; flex-direction: column; gap: var(--space-3); }
.dashboard-landing__title { font-size: var(--text-lg); font-weight: var(--weight-medium); }
.dashboard-landing__welcome { color: var(--color-text-muted); }

/* Beheer-menu (coördinator/admin): kaarten met label + omschrijving. */
.menu {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-top: var(--space-4);
  padding: 0;
  list-style: none;
}

.menu__link {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  min-height: 44px;
  padding: var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  text-decoration: none;
}

.menu__link:hover { border-color: var(--color-accent); }
.menu__label { font-weight: var(--weight-medium); color: var(--color-text); }
.menu__description { font-size: var(--text-sm); color: var(--color-text-muted); }

/* Dossier-werklijst (ouder/casemanager): label + status + acties. */
.dossier-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-top: var(--space-4);
  padding: 0;
  list-style: none;
}

.dossier-list__item {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

.dossier-list__info { display: flex; flex-direction: column; gap: var(--space-1); }
.dossier-list__label { font-weight: var(--weight-medium); }
.dossier-list__status { font-size: var(--text-sm); color: var(--color-text-muted); }

.dossier-list__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

.dossier-list__action {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-accent);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  text-decoration: none;
}

.dossier-list__action:hover { border-color: var(--color-accent); }

.dossier-list__action--primary {
  color: var(--color-bg);
  background: var(--color-accent);
  border-color: var(--color-accent);
}

.dossier-list__action--primary:hover { background: var(--color-accent-hover); }

.dossier-list__empty {
  margin-top: var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

@media (min-width: 640px) {
  .dossier-list__item {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
  }
  .dossier-list__actions { flex-shrink: 0; }
}

/* ===================== UITNODIGINGEN-BEHEER (DP1) ===================== */
/* Mobile-first: elke uitnodiging is een kaart-rij met info boven de acties;
   vanaf 640px info links en acties rechts. Hergebruikt door portal + backoffice. */
.invitations {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  margin-top: var(--space-4);
  padding: 0;
  list-style: none;
}

.invitation {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

.invitation__info {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.invitation__email {
  font-weight: var(--weight-medium);
  overflow-wrap: anywhere;
}

.invitation__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.invitation__status {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.invitation__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
}

.invitation__action {
  min-height: 44px;
  padding: 0 var(--space-4);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text);
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  cursor: pointer;
}

.invitation__action:hover {
  border-color: var(--color-accent);
}

/* Intrekken is destructief: tekst-accent zonder rood alarm (rustige huisstijl). */
.invitation__action--danger {
  color: var(--color-text-muted);
}

.invitations__empty {
  margin-top: var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

@media (min-width: 640px) {
  .invitation {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
  }
  .invitation__actions { flex-shrink: 0; }
}

/* Linkje "Metingen openen" in dossiers-index: secondary-look, 44px touch-target,
   visueel onderscheidend van de form-knoppen. */
.dossier__measurements-link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 var(--space-4);
  font-size: var(--text-sm);
  color: var(--color-accent);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  text-decoration: none;
}
.dossier__measurements-link:hover { border-color: var(--color-accent); }

/* ===================== PROFESSIONAL — DOSSIERS-INDEX ===================== */
/* Kaarten-lijst: elke kaart = info-blok + acties. Mobile-first (gestapeld);
   vanaf 640px info links, acties rechts op dezelfde rij. */
.pro-dossiers__title {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  margin-bottom: var(--space-4);
}

.pro-dossier-list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: 0;
  list-style: none;
}

.pro-dossier-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  transition: border-color 0.15s;
}

.pro-dossier-card:hover { border-color: var(--color-accent); }

.pro-dossier-card__info {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

.pro-dossier-card__name {
  font-weight: var(--weight-medium);
  color: var(--color-text);
  text-decoration: none;
}

.pro-dossier-card__name:hover { color: var(--color-accent); }

.pro-dossier-card__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.pro-dossier-card__meta > * + *::before {
  content: "·";
  margin-right: var(--space-2);
}

.pro-dossier-card__actions {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.pro-dossier-card__assign-form {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
}

.pro-dossier-card__select {
  flex: 1;
  min-width: 0;
  min-height: 36px;
  padding: 0 34px 0 var(--space-2);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text);
  appearance: none;
  -webkit-appearance: none;
  background-color: var(--color-surface);
  background-image: var(--select-chevron);
  background-repeat: no-repeat;
  background-position: right 12px center;
  background-size: 12px 12px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}

.pro-dossier-card__submit {
  min-height: 36px;
  padding: 0 var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-bg);
  background: var(--color-accent);
  border: 0;
  border-radius: var(--radius);
  cursor: pointer;
  white-space: nowrap;
}

.pro-dossier-card__submit:hover { background: var(--color-accent-hover); }

.pro-dossier-card__enforcement {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
}

.pro-dossier-card__enforced-label {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

/* Collapsible agenda-lock-sectie: summary als klikbaar label (inline-flex),
   het formulier erin als card-achtige sectie. */
.lock-agenda {
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow: hidden;
}

.lock-agenda__summary {
  display: flex;
  align-items: center;
  min-height: 40px;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text);
  cursor: pointer;
  list-style: none;
}

.lock-agenda__summary::-webkit-details-marker { display: none; }

.lock-agenda__summary::after {
  content: "▸";
  margin-left: auto;
  color: var(--color-text-muted);
  transition: transform 0.15s;
}

.lock-agenda[open] .lock-agenda__summary::after { transform: rotate(90deg); }

.lock-agenda__form {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  padding: var(--space-3);
  border-top: 1px solid var(--color-border);
}

.lock-agenda__hint {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.lock-agenda__label {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
}

.lock-agenda__textarea {
  width: 100%;
  padding: var(--space-2) var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  resize: vertical;
}

.lock-agenda__textarea:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.lock-agenda__submit {
  align-self: flex-start;
  min-height: 36px;
  padding: 0 var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-bg);
  background: var(--color-accent);
  border: 0;
  border-radius: var(--radius);
  cursor: pointer;
}

.lock-agenda__submit:hover { background: var(--color-accent-hover); }

@media (min-width: 640px) {
  .pro-dossier-card {
    flex-direction: row;
    align-items: flex-start;
    justify-content: space-between;
  }

  .pro-dossier-card__info { flex: 1; min-width: 0; }

  .pro-dossier-card__actions {
    flex-shrink: 0;
    align-items: flex-end;
  }
}

/* ===================== PROFESSIONAL — METINGEN-DASHBOARD ===================== */
/* Dossier-context boven de panelen: naam van het dossier als oriëntatie. */
.dashboard-header {
  margin-bottom: var(--space-4);
  padding-bottom: var(--space-4);
  border-bottom: 1px solid var(--color-border);
}

.dashboard-header__title {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  color: var(--color-text);
}

/* Periode-filter: pill-tabs-rij boven de meetpanelen. */
.dashboard-filter {
  display: flex;
  gap: var(--space-1);
  flex-wrap: wrap;
  margin-bottom: var(--space-4);
}

.dashboard-filter__label {
  display: none;
}

.dashboard-filter__option {
  padding: var(--space-1) var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: 999px;
  text-decoration: none;
  cursor: pointer;
}

.dashboard-filter__option:hover {
  background: var(--color-border);
  color: var(--color-text);
}

.dashboard-filter__option--active {
  background: var(--color-text);
  color: var(--color-surface);
  border-color: var(--color-text);
}

/* AGENDA (DP4-4b) — week-grid + event-kaartjes */

.agenda-page {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  /* Top 0 (de .app-topbar draagt 'm), zijpadding 18px = app-brede scherm-padding. */
  padding: 0 18px var(--space-4);
  position: relative;
  min-width: 0;
}

.agenda-page__title {
  font-size: var(--text-lg);
  font-weight: var(--weight-medium);
  margin: 0;
  flex: 1;
}

.agenda-filter { display: flex; gap: 0.375rem; margin: 0.5rem 0; flex-wrap: wrap; }
.agenda-filter__pill { display: inline-flex; align-items: center; gap: 0.375rem; padding: 0.25rem 0.75rem; border: 1px solid var(--color-border); border-radius: 1rem; font-size: 0.8125rem; }
.agenda-filter__pill--active { border-color: var(--color-text); font-weight: 600; }
.agenda-filter__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--gezin-color, var(--color-accent)); }

/* Week-grid — CSS Grid: 1 uurkolom + 7 dagkolommen. Desktop geeft de dagen
   een comfortabele minimumbreedte; mobiel (media-query onderaan) perst alle
   zeven dagen op één scherm zonder horizontaal scrollen. */
/* Wrapper: vaste band (dagkoppen + hele-dag) bóven het scrollende uren-grid.
   Geen sticky-binnen-grid meer — dat gedrag verschilt per browser. */
.agenda-weekwrap {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0;
}
/* Visueel verborgen, wél leesbaar voor schermlezers. */
.a11y-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

.agenda-week__fixed {
  display: grid;
  grid-template-columns: 2.5rem repeat(7, minmax(0, 1fr));
  flex: none;
  /* Warme paginakleur i.p.v. hard wit: de band wordt een zachte "plank" die
     aansluit op de app-marges. Géén interne kolom-lijnen; afgesloten met één
     haarlijn + fluister-schaduw zodat hij als vaste laag boven het scrollende
     urengrid zweeft. De pillen zijn crisp wit (zie allday-cell) en poppen. */
  background: var(--color-bg);
  border-bottom: 1px solid var(--color-border);
  box-shadow: 0 4px 8px -6px rgba(60, 50, 40, 0.12);
  position: relative;
  z-index: 1;
}
.agenda-weekwrap--day .agenda-week__fixed { grid-template-columns: 3rem minmax(0, 1fr); }
.agenda-weekwrap--3day .agenda-week__fixed { grid-template-columns: 3rem repeat(3, minmax(0, 1fr)); }

.agenda-week {
  --hour-height: 80px;
  display: grid;
  grid-template-columns: auto repeat(7, minmax(7.5rem, 1fr));
  /* Vult de resthoogte en scrollt intern. */
  flex: 1;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}

/* Hoek linksboven (boven uur-labels) */
.agenda-week__corner {
  grid-column: 1;
  grid-row: 1;
  background: var(--color-surface);
}

/* Dag-koppen (rij 1 van de vaste band). Het is een link: tik wisselt tussen
   week- en dagweergave van die dag. */
.agenda-week__dayhead {
  display: block;
  background: var(--color-surface);
  padding: var(--space-2) var(--space-3);
  text-align: center;
  font-size: var(--text-sm);
  color: var(--color-text);
  text-decoration: none;
}

.agenda-week__dayhead:hover {
  background: var(--color-chat-surface-own);
}

.agenda-week__dayhead--today {
  color: var(--color-chat-accent);
  font-weight: var(--weight-medium);
}

/* Dagweergave: één dagkolom naast de uren-as (wint van de mobiele
   7-koloms-regel via de dubbele class). */
.agenda-week.agenda-week--day {
  grid-template-columns: 3rem minmax(0, 1fr);
}

/* 3-daagse weergave: uren-as + drie dagkolommen (wint van de mobiele
   7-koloms-regel via de dubbele class). */
.agenda-week.agenda-week--3day {
  grid-template-columns: 3rem repeat(3, minmax(0, 1fr));
}

/* Dag-kop: het dagnummer groot bovenaan, de afgekorte dagnaam klein eronder. */
/* Dagnaam klein/gedempt bóven, dagnummer vet eronder (design). */
.agenda-week__dayname {
  display: block;
  text-transform: none;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}

.agenda-week__daynum {
  display: block;
  font-size: var(--text-lg);
  font-weight: 600;
  line-height: 1.15;
  color: var(--color-text);
}

/* Hele-dag-rij — blijft sticky onder de dag-koppen (rij 1, ~3rem) bij verticaal
   scrollen, zodat een hele-dag-afspraak in beeld blijft. */
/* Hele-dag-rij: onderdeel van de vaste band (scrollt dus nooit mee), wit. */
.agenda-week__allday-label {
  grid-column: 1;
  background: var(--color-surface);
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.agenda-week__allday-cell {
  /* Transparant: de warme band-tint (agenda-week__fixed) schijnt door.
     Geen kolom-lijnen: een gelijke gutter (witruimte) scheidt de dag-kolommen. */
  background: transparent;
  padding: var(--space-1) 3px;
  min-height: 2rem;
}

/* Uur-labels (linkerkolom, rij 3+) — sticky bij horizontaal scrollen */
.agenda-week__hours {
  grid-column: 1;
  position: sticky;
  left: 0;
  z-index: 2;
  background: var(--color-bg);
  display: grid;
  grid-auto-rows: var(--hour-height);
}

/* Uur-getal links, gecentreerd ÓP zijn uur-lijn (Google/Outlook-stijl): het label
   krimpt tot z'n teksthoogte (align-self:start) op de cel-top = de uurlijn, en schuift
   vervolgens een halve regel omhoog zodat het cijfer de lijn straddelt. De lijnen komen
   uit de --agenda-hour-lines-tegel op de kolommen, niet uit een border. */
.agenda-week__hour {
  align-self: start;
  font-size: var(--text-xs);
  line-height: 1;
  color: var(--color-text-muted);
  padding: 0 var(--space-2);
  text-align: right;
  transform: translateY(-50%);
}

/* Dag-kolommen (tijdgebonden events) */
.agenda-week__col {
  position: relative;
  border-left: 1px solid var(--color-border);
  min-height: calc((var(--end-hour) - var(--start-hour)) * var(--hour-height));
  background-image: var(--agenda-hour-lines);
  background-size: 4px var(--hour-height);
  background-repeat: repeat;
}

/* Vandaag: subtiele warme tint onder de uurlijnen */
.agenda-week__col--today {
  background-color: color-mix(in srgb, var(--color-chat-accent) 4%, transparent);
}

/* Event-wrapper voor absolute positionering; --lane/--lanes verdelen
   overlappende afspraken naast elkaar binnen de kolom (AgendaHelper). */
.agenda-week__event {
  position: absolute;
  --lane: 0;
  --lanes: 1;
  left: calc(2px + (100% - 4px) * var(--lane) / var(--lanes));
  width: calc((100% - 4px) / var(--lanes) - 1px);
  top: calc(var(--top) / 60 * var(--hour-height));
  height: calc(var(--height) / 60 * var(--hour-height));
  min-height: 2.5rem;
  z-index: 1;
}

/* Eigen afspraken: versleepbaar (tijd/dag) + resize-handle onderaan.
   -webkit-user-drag voorkomt de native link-drag (Safari) die de
   pointer-gesture zou kapen. */
.agenda-week__event--draggable {
  cursor: grab;
  -webkit-touch-callout: none;
  user-select: none;
}

.agenda-week__event--draggable .agenda-event,
.agenda-week__event--draggable .agenda-event * {
  -webkit-user-drag: none;
}

.agenda-week__event--dragging {
  z-index: 5;
  opacity: 0.9;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
  cursor: grabbing;
}

.agenda-week--dragging,
.agenda-week--dragging * {
  cursor: grabbing;
  user-select: none;
}

.agenda-week__resize {
  position: absolute;
  left: 0;
  right: 0;
  bottom: -2px;
  height: 10px;
  cursor: ns-resize;
  touch-action: none;
  z-index: 2;
}

/* Inline-selectie op lege grid-ruimte; na loslaten wordt dit blok de
   klikbare "+"-placeholder (--armed) die de afspraak-modal opent. */
.agenda-week__select {
  position: absolute;
  left: 2px;
  right: 2px;
  top: calc(var(--top, 0) / 60 * var(--hour-height));
  height: calc(var(--height, 60) / 60 * var(--hour-height));
  padding: 0;
  font: inherit;
  background: color-mix(in srgb, var(--color-chat-accent) 14%, transparent);
  border: 1px dashed var(--color-chat-accent);
  border-radius: var(--radius);
  pointer-events: none;
}

.agenda-week__select--armed {
  pointer-events: auto;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.25rem;
  font-weight: var(--weight-medium);
  color: var(--color-chat-accent);
  border-style: solid;
  z-index: 2;
}

/* Agendakleur-instelling (account): swatch-radio's uit het vaste palet */
.agenda-color {
  border: none;
  padding: 0;
  margin: 0;
}

.agenda-color__swatches {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  padding: var(--space-2) 0;
}

.agenda-color__swatch {
  cursor: pointer;
}

.agenda-color__swatch input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.agenda-color__chip {
  display: block;
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  background: var(--swatch, var(--color-surface));
  border: 2px solid transparent;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08);
}

.agenda-color__swatch input:checked + .agenda-color__chip {
  border-color: var(--color-text);
}

/* Al in de andere groep gekozen kleur: niet nogmaals te kiezen (gedimd). */
.agenda-color__swatch--disabled {
  cursor: not-allowed;
}
.agenda-color__swatch--disabled .agenda-color__chip {
  opacity: 0.28;
}

.agenda-color__swatch input:focus-visible + .agenda-color__chip {
  outline: 2px solid var(--color-chat-accent);
  outline-offset: 2px;
}

.agenda-color__hint {
  margin: 0;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}

/* Bijnaam-veld alleen bij weergave "Anders" — class wint van .form__row-display (dat
   het [hidden]-attribuut zou overschrijven). */
.child-name__custom.is-hidden { display: none; }
/* Live-preview van de kind-weergavenaam op het bewerk-formulier. */
.child-name__preview {
  margin: 6px 0 2px;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}
.child-name__preview b {
  color: var(--color-text);
  font-weight: var(--weight-medium);
}

/* Maand: "+"-placeholder in een dag-cel */
.agenda-month__plus {
  align-self: center;
  width: 2.25rem;
  height: 2.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1.1rem;
  font-weight: var(--weight-medium);
  color: var(--color-chat-accent);
  background: color-mix(in srgb, var(--color-chat-accent) 14%, transparent);
  border: 1px solid var(--color-chat-accent);
  border-radius: var(--radius);
  cursor: pointer;
}

/* Nu-lijn: actuele tijd in de vandaag-kolom (positie via Stimulus, in
   minuten t.o.v. --start-hour) */
.agenda-week__now {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(var(--now-top, 0) / 60 * var(--hour-height));
  border-top: 2px solid var(--color-now-line);
  z-index: 2;
  pointer-events: none;
}

.agenda-week__now::before {
  content: "";
  position: absolute;
  left: -4px;
  top: -5px;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--color-now-line);
}

/* Huidige-tijd-label aan het begin van de nu-lijn ("21:52") */
.agenda-week__now-label {
  position: absolute;
  left: 2px;
  top: -0.6rem;
  padding: 0 4px;
  font-size: var(--text-10);
  font-weight: var(--weight-medium);
  line-height: 1.2;
  color: var(--color-on-accent);
  background: var(--color-now-line);
  border-radius: 6px;
  white-space: nowrap;
}

/* Event-kaartje */
.agenda-event {
  display: flex;
  flex-direction: column;
  gap: 2px;
  height: 100%;
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-sm);
  /* Zacht getint blok in de gezin-kleur (ontwerp), met een warme hairline i.p.v.
     het koude grijs. De dikkere linkerrand draagt de kleur het sterkst. */
  background: color-mix(in srgb, var(--event-color, var(--color-accent)) 8%, var(--color-surface));
  border: 1px solid var(--color-line);
  border-left: 3px solid var(--event-color, var(--color-text-muted));
  border-radius: var(--radius);
  overflow: hidden;
  text-decoration: none;
  color: inherit;
}

/* Fix 2: eigen-accent subtieler — alleen de linkerrand onderscheidt;
   geen extra achtergrond zodat eigen en andermans even leesbaar zijn. */
.agenda-event--own {
  border-left-color: var(--event-color, var(--color-chat-accent));
}

.agenda-event__time {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.agenda-event__title {
  font-weight: var(--weight-medium);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Kind-dot vóór de titel (ook zichtbaar in compacte maand-cellen) */
.agenda-event--child .agenda-event__title::before {
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  margin-right: 4px;
  border-radius: 50%;
  background: var(--event-color, var(--color-text-muted));
  vertical-align: baseline;
}

/* Kind-naam: eigen regel in het week-grid */
.agenda-event__child {
  font-size: var(--text-xs);
  color: var(--event-color, var(--color-text-muted));
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Herhaal-indicator vóór de titel */
.agenda-event__recurring {
  color: var(--color-text-muted);
  font-weight: normal;
}

/* Voorstel-afspraak: gestippelde rand tot de andere ouder bevestigt */
.agenda-event--proposed {
  border-style: dashed;
}

.agenda-event__badge {
  font-size: var(--text-xs);
  font-style: italic;
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.agenda-event__badge--confirmed {
  font-style: normal;
  color: var(--color-green);
}

/* Bevestigen-knop op andermans voorstel-kaartje (button_to → form.button_to > button) */
.agenda-event__confirm {
  font-size: var(--text-xs);
  padding: 2px var(--space-2);
  min-height: 0;
  background: var(--color-chat-surface-own);
  color: var(--color-chat-accent);
  border: 1px solid var(--color-chat-accent);
  border-radius: var(--radius);
  cursor: pointer;
  align-self: flex-start;
}

/* Maker-naam: altijd zichtbaar, muted, compact */
.agenda-event__creator {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ===================== INFO-KAART + SHEET-ACTIES (generiek, DRY) =====================
   Herbruikbaar detail-blok: een witte kaart met icoon-rijen (label boven, waarde
   eronder) + een actie-rij met twee knoppen. Gebruikt in het afspraak-detail; klaar
   voor hergebruik in andere detail-sheets. Kleur-accent via --event-color. */

/* Afspraak-detail: kleurbalk vóór de titel in de sheet-kop + eigenaar-pill. */
.event-detail__bar {
  display: inline-block;
  width: 5px;
  align-self: stretch;
  min-height: 1.1em;
  margin-right: 10px;
  border-radius: 3px;
  background: var(--event-color, var(--color-accent));
}
.event-sheet .sheet__title { display: inline-flex; align-items: center; min-width: 0; }

.event-detail__who {
  display: inline-block;
  margin-bottom: 16px;
  padding: 4px 11px;
  font-size: var(--text-11);
  font-weight: 800;
  border-radius: 9px;
  color: var(--event-color, var(--color-accent));
  background: color-mix(in srgb, var(--event-color, var(--color-accent)) 14%, var(--color-surface));
}

/* Info-kaart: witte kaart, icoon-rijen met haarlijn ertussen. */
.info-card {
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}
.info-card__row {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 14px 16px;
  border-bottom: 1px solid var(--color-line);
}
.info-card__row:last-child { border-bottom: 0; }
.info-card__row--top { align-items: flex-start; }
.info-card__icon {
  flex: none;
  display: flex;
  color: var(--color-faint);
}
.info-card__row--top .info-card__icon { margin-top: 2px; }
.info-card__icon svg { width: 18px; height: 18px; }
.info-card__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.info-card__label { font-size: var(--text-xs); font-weight: 600; color: var(--color-faint); }
.info-card__value { font-size: var(--text-15); font-weight: 600; color: var(--color-text); margin-top: 1px; }
.info-card__value--multiline { font-weight: 400; white-space: pre-wrap; line-height: 1.45; }

/* Status-banner (wacht op akkoord / bevestigd) onder de kaart. */
.event-detail__status {
  display: flex;
  align-items: center;
  gap: 9px;
  margin: 14px 0 0;
  padding: 12px 14px;
  font-size: var(--text-13);
  font-weight: 600;
  border-radius: 14px;
  color: var(--color-amber);
  background: var(--color-amber-soft);
  border: 1px solid color-mix(in srgb, var(--color-amber) 30%, var(--color-amber-soft));
}
.event-detail__status--confirmed {
  color: var(--color-green);
  background: var(--color-green-soft);
  border-color: color-mix(in srgb, var(--color-green) 30%, var(--color-green-soft));
}

/* Actie-rij: twee gelijke knoppen naast elkaar. */
.sheet-actions {
  display: flex;
  gap: 10px;
  margin-top: 18px;
}
.sheet-actions > .sheet-btn,
.sheet-actions > form { flex: 1; margin: 0; }
.sheet-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 46px;
  padding: 13px;
  font: inherit;
  font-size: var(--text-15);
  font-weight: 700;
  border-radius: 13px;
  cursor: pointer;
  text-decoration: none;
}
.sheet-btn--edit {
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-line);
}
.sheet-btn--edit:hover { background: var(--color-softer); }
.sheet-btn--delete {
  color: var(--color-error);
  background: var(--color-error-soft);
  border: 1px solid transparent;
}
.sheet-btn--delete:hover { background: var(--color-error-border); }

/* Gezin-keuze in de modal (2+ gezinnen): knoppen boven het eigenlijke formulier */
.agenda-modal__chooser { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 0.75rem; }
.agenda-modal__chooser-label { margin: 0 0 var(--space-1); font-size: var(--text-sm); color: var(--color-text-muted); }
.agenda-modal__choose { display: flex; align-items: center; gap: 0.5rem; width: 100%; min-height: 44px; padding: 0.5rem 0.75rem; background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); font: inherit; cursor: pointer; text-align: left; }
.agenda-modal__choose:hover { border-color: var(--color-accent); background: var(--color-hover); }

/* De afspraak-sheets (nieuw/detail/bewerken) delen nu de app-brede .sheet-chrome
   (zie "BOTTOM-SHEET (generiek, DRY)"). Alleen de formulier-specifieke styling
   binnen de sheet staat hier. */

/* Formulier binnen de sheet: volle breedte, compacte spacing. */
.sheet .agenda-form {
  max-width: none;
  gap: var(--space-3);
}

/* Titel-veld iets prominenter dan de rest (groter type), maar wél een gewoon
   veld mét label — consistent met de andere velden en de app-brede sheets. */
.sheet .agenda-form__field--title input[type="text"] {
  min-height: 48px;
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
}

/* Nieuwe-afspraak-sheet (ontwerp): radio-keuzes als cirkel + accent-stip, en warme
   velden met zachte ronding. Structuur/Stimulus-targets blijven ongewijzigd. */
.agenda-form__radio input[type="radio"] {
  appearance: none;
  -webkit-appearance: none;
  flex: none;
  width: 19px;
  height: 19px;
  margin: 0;
  border: 2px solid var(--color-faint);
  border-radius: 50%;
  display: inline-grid;
  place-content: center;
  cursor: pointer;
}
.agenda-form__radio input[type="radio"]::before {
  content: "";
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--color-accent);
  transform: scale(0);
  transition: transform var(--dur-fast) var(--curve-decel);
}
.agenda-form__radio input[type="radio"]:checked { border-color: var(--color-accent); }
.agenda-form__radio input[type="radio"]:checked::before { transform: scale(1); }

/* Velden in de sheet: warme hairline + zachte ronding. */
.sheet .agenda-form__when-input,
.sheet .agenda-form input[type="text"],
.sheet .agenda-form textarea,
.sheet .agenda-form select {
  border: 1px solid var(--color-line);
  border-radius: 12px;
}
/* Kind-select in de afspraak-sheet: eigen chevron mét rechter-padding (i.p.v. de
   native pijl tegen de rand) — DRY via --select-chevron. */
.sheet .agenda-form select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 40px;
  background-image: var(--select-chevron);
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 12px 12px;
}

/* Compacte keuzerijen (ontwerp "1a"): herhaling + herinnering dichtgeklapt tot één
   rij met hun waarde; een tik klapt open met chips. Eén rij tegelijk (accordeon). */
.agenda-form__optcard {
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 14px;
  overflow: hidden;
}
.agenda-form__opthr { height: 1px; background: var(--color-line); }

.agenda-form__optsummary {
  display: flex;
  align-items: center;
  gap: 11px;
  width: 100%;
  padding: 14px 15px;
  background: none;
  border: none;
  font: inherit;
  color: var(--color-text);
  text-align: left;
  cursor: pointer;
}
.agenda-form__optsummary:active { background: var(--color-softer); }
.agenda-form__optrow.is-open .agenda-form__optsummary { display: none; }

.agenda-form__opticon { display: inline-flex; flex: none; color: var(--color-accent); }
.agenda-form__optname { font-size: var(--text-15); font-weight: 600; }
.agenda-form__optvalue {
  margin-left: auto;
  min-width: 0;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--color-text-muted);
  font-size: var(--text-sm);
  font-weight: 600;
}
/* Lange waarden (plaats/notitie) op één regel afkappen. */
.agenda-form__optvalue > span:first-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.agenda-form__optvalue--empty { color: var(--color-faint); font-weight: 500; }
.agenda-form__optchevron { display: inline-flex; flex: none; color: var(--color-faint); }
/* Maat stond als width/height op de svg zelf; met de gedeelde icon-partial (.icon = 20px)
   hoort hij hier. */
.agenda-form__optchevron svg { width: 17px; height: 17px; }

/* Invoerveld binnen een open tekstrij (plaats/notitie). */
.agenda-form__fieldinput {
  width: 100%;
  padding: 11px 12px;
  border: 1px solid var(--color-line);
  border-radius: 11px;
  background: var(--color-bg);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text);
  outline: none;
}
.agenda-form__fieldinput:focus-visible { border-color: var(--color-accent); }
textarea.agenda-form__fieldinput { min-height: 76px; resize: vertical; }

.agenda-form__optpanel { padding: 13px 15px 15px; }
.agenda-form__optpanel[hidden] { display: none; }

.agenda-form__optdone {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  margin-bottom: 12px;
  padding: 0;
  background: none;
  border: none;
  font: inherit;
  cursor: pointer;
}
.agenda-form__optpanel-title { font-size: var(--text-15); font-weight: 700; color: var(--color-text); }
.agenda-form__done-label { font-size: var(--text-13); font-weight: 800; color: var(--color-accent); }

/* Chips (keuze + eenheid) */
.agenda-form__chips { display: flex; flex-wrap: wrap; gap: 7px; }
.agenda-form__chip {
  padding: 9px 14px;
  border-radius: 11px;
  background: var(--color-bg);
  color: var(--color-text-muted);
  border: 1px solid var(--color-line);
  font: inherit;
  font-size: var(--text-13);
  font-weight: 700;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--curve-decel);
}
.agenda-form__chip:active { transform: scale(0.95); }
.agenda-form__chip.is-selected { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }
.agenda-form__chip--sm { padding: 8px 11px; border-radius: 9px; font-size: var(--text-13); }

/* Stepper (− N +) + eenheid-chips op één rij */
.agenda-form__stepper-row { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 13px; }
.agenda-form__stepper-label { font-size: var(--text-sm); font-weight: 600; color: var(--color-text-muted); }
.agenda-form__stepper {
  display: inline-flex;
  align-items: center;
  border: 1px solid var(--color-line);
  border-radius: 10px;
  overflow: hidden;
}
.agenda-form__step {
  padding: 8px 13px;
  background: none;
  border: none;
  font: inherit;
  font-size: var(--text-base);
  font-weight: 700;
  color: var(--color-accent);
  cursor: pointer;
}
.agenda-form__step-n {
  min-width: 26px;
  padding: 8px 6px;
  text-align: center;
  font-size: var(--text-sm);
  font-weight: 700;
  border-left: 1px solid var(--color-line);
  border-right: 1px solid var(--color-line);
}

/* Duur (achter Aangepast): altijd / N keer / tot */
.agenda-form__duur { margin-top: 14px; padding-top: 13px; border-top: 1px dashed var(--color-line); }
.agenda-form__duur-label {
  margin: 0 0 8px;
  font-size: var(--text-xs);
  text-transform: uppercase;
  letter-spacing: 0.02em;
  color: var(--color-text-muted);
}
.agenda-form__duur-detail { display: flex; align-items: center; gap: 8px; margin-top: 10px; font-size: var(--text-sm); }
.agenda-form__duur-detail[hidden] { display: none; }
.agenda-form__duur-detail .agenda-form__number { margin: 0; }
.sheet .agenda-form__duur-detail input[type="date"] {
  min-height: 40px;
  padding: 9px 12px;
  border: 1px solid var(--color-line);
  border-radius: 11px;
  background: var(--color-surface);
  font: inherit;
  font-size: var(--text-sm);
}


/* Annuleer-knop in de modal deelt de link-stijl van .agenda-form__cancel */
button.agenda-form__cancel {
  background: none;
  border: none;
  font: inherit;
  cursor: pointer;
}

/* -- formulier-onderdelen (Samsung-stijl) -- */

/* Hele-dag-switch */
.agenda-form__switch {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  min-height: 44px;
  cursor: pointer;
  font-size: var(--text-sm);
}

.agenda-form__switch-box {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

.agenda-form__switch-track {
  flex: 0 0 auto;
  width: 44px;
  height: 24px;
  border-radius: 12px;
  background: var(--color-border);
  position: relative;
  transition: background 0.15s ease;
}

.agenda-form__switch-track::after {
  content: "";
  position: absolute;
  top: 2px;
  left: 2px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--color-surface);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
  transition: transform 0.15s ease;
}

.agenda-form__switch-box:checked ~ .agenda-form__switch-track,
.agenda-form__switch-track--on {
  background: var(--color-chat-accent);
}

.agenda-form__switch-box:checked ~ .agenda-form__switch-track::after,
.agenda-form__switch-track--on::after {
  transform: translateX(20px);
}

.agenda-form__switch-box:focus-visible ~ .agenda-form__switch-track {
  outline: 2px solid var(--color-chat-accent);
  outline-offset: 2px;
}

/* Begindag → einddag (+ tijden) */
.agenda-form__when {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.agenda-form__when-row {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.agenda-form__when-row[hidden] {
  display: none;
}

.agenda-form__when-input {
  flex: 1 1 0;
  min-width: 0;
  min-height: 44px;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
}

.agenda-form__when-arrow {
  color: var(--color-text-muted);
}

/* ── Tijd- & datumkiezer (design_handoff_pickers, 2026-07-15) ────────────────
   Twee herbruikbare bottom sheets: gedeelde chrome (.picker__*) + eigen body.
   Maten/kleuren 1-op-1 uit het ontwerp; kleuren via de app-tokens (zelfde palet). */
.timewheel, .datecal { flex: 1 1 0; min-width: 0; display: flex; }
button.timewheel__display, button.datecal__display { text-align: center; font-weight: 600; cursor: pointer; }
button.timewheel__display:active, button.datecal__display:active { background: var(--color-softer); }
/* Plat formulierveld-variant (Documenten "Geldig tot", design-feedback 2026-07-19): links-
   uitgelijnd en normaal gewicht, zoals de andere velden in dezelfde sheet — i.p.v. de grote
   gecentreerde/vette weergave die bij een agenda-datumkiezer hoort. Dubbele class-selector
   voor hogere specificiteit dan de basisregel hierboven (die wint anders ondanks bronvolgorde). */
button.datecal__display.datecal__display--plain { text-align: left; font-weight: 400; }

/* Gedeelde sheet-chrome */
.picker { background: var(--color-bg); }
/* De picker schakelt z'n onderdelen met het [hidden]-attribuut (JS: static/typed, dag- vs
   jaar-/maand-modus, de rechterhelft van de maandregel). Class-selectors met display
   (inline-flex/grid/contents) verslaan de UA-regel voor [hidden], waardoor verborgen delen
   tóch ruimte innamen — de lege jaar-grid (264px hoog) duwde zo de snelkeuzes + Opslaan uit
   de sheet. Eén regel op picker-scope i.p.v. per element (zelfde aanpak als .school-form). */
.picker [hidden] { display: none !important; }
.picker__grabber { width: 38px; height: 5px; border-radius: 3px; background: var(--color-line); margin: 10px auto 2px; flex: none; }
.picker__head { display: flex; align-items: center; justify-content: space-between; padding: 10px 20px 6px; flex: none; }
.picker__title { font-family: var(--font-display); font-size: var(--text-20); font-weight: 500; color: var(--color-text); }
.picker__close {
  flex: none; width: 30px; height: 30px; border: 0; border-radius: 50%; background: var(--color-softer);
  display: flex; align-items: center; justify-content: center; color: var(--color-text-muted); cursor: pointer;
}
.picker__close:active { background: var(--color-soft); }
.picker__close svg { width: 17px; height: 17px; }

/* Grote waarde: tik om te typen */
.picker__value { text-align: center; padding: 8px 0 2px; flex: none; }
.picker__typed { display: inline-flex; align-items: center; gap: 2px; }
.picker__typedcolon { font-family: var(--font-display); font-size: var(--text-40); font-weight: 600; color: var(--color-text); padding: 0 2px; }
.picker__typedinput {
  width: 66px; text-align: center; font-family: var(--font-display); font-size: var(--text-40); font-weight: 600;
  color: var(--color-text); background: var(--color-soft); border: 2px solid var(--color-accent);
  border-radius: 12px; padding: 2px 0; outline: none;
}
.picker__typedinput--date { width: 210px; font-size: var(--text-24); padding: 6px 0; }
.picker__static { display: inline-flex; align-items: center; border: 0; background: none; padding: 0; cursor: text; }
.picker__static:active { opacity: .6; }
.picker__bigtime { font-family: var(--font-display); font-size: var(--text-40); font-weight: 600; color: var(--color-text); letter-spacing: 1px; }
.picker__bigdate { font-family: var(--font-display); font-size: var(--text-26); font-weight: 600; color: var(--color-text); }

/* Snelkeuzes */
.picker__presets { padding: 4px 20px; flex: none; }
.picker__presets-label { display: block; font-size: var(--text-11); font-weight: 800; letter-spacing: .6px; text-transform: uppercase; color: var(--color-faint); margin-bottom: 8px; }
.picker__chips { display: flex; gap: 8px; flex-wrap: wrap; }
.picker__chip {
  padding: 9px 14px; border-radius: 11px; font: inherit; font-size: var(--text-sm); font-weight: 700; cursor: pointer;
  background: var(--color-surface); color: var(--color-text-muted); border: 1px solid var(--color-line);
}
.picker__chip:active { transform: scale(.96); }
.picker__chip.is-active { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }

/* Primaire bevestiging */
.picker__confirm { padding: 16px 20px 30px; flex: none; }
.picker__cta {
  display: block; width: 100%; background: var(--color-accent); color: var(--color-on-accent); text-align: center;
  border: 0; border-radius: 15px; padding: 16px; font: inherit; font-size: var(--text-base); font-weight: 800; cursor: pointer;
}
.picker__cta:active { transform: scale(.99); background: var(--color-accent-hover); }

/* Tijd-wiel: gecentreerde rij = keuze (46px per rij) */
.timewheel__wheels { position: relative; display: flex; justify-content: center; gap: 6px; padding: 6px 0 10px; flex: none; }
.timewheel__band {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  width: 186px; height: 46px; border-radius: 13px; background: var(--color-soft); pointer-events: none;
}
.timewheel__fade { position: absolute; left: 0; right: 0; height: 72px; pointer-events: none; }
.timewheel__fade--top { top: 0; background: linear-gradient(var(--color-bg), rgba(248, 247, 243, 0)); }
.timewheel__fade--bottom { bottom: 0; background: linear-gradient(rgba(248, 247, 243, 0), var(--color-bg)); }
.timewheel__col {
  position: relative; height: 184px; width: 86px; padding: 69px 0; /* (184-46)/2 → rand-items centreren */
  overflow-y: scroll; scroll-snap-type: y mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.timewheel__col::-webkit-scrollbar { display: none; }
.timewheel__col--hours { text-align: right; }
.timewheel__col--minutes { text-align: left; }
.timewheel__item {
  height: 46px; line-height: 46px; scroll-snap-align: center; font-size: var(--text-24); font-weight: 500;
  color: var(--color-faint); font-variant-numeric: tabular-nums;
}
.timewheel__col--hours .timewheel__item { padding-right: 14px; }
.timewheel__col--minutes .timewheel__item { padding-left: 14px; }
.timewheel__item.is-active { font-weight: 800; color: var(--color-text); }
.timewheel__colon { align-self: center; font-size: var(--text-26); font-weight: 700; color: var(--color-text); padding-bottom: 2px; }

/* Datumkiezer — maandregel: jaar links (tikbaar → jaar-grid) · maandnaam (tikbaar → maand-grid) · pijlen */
.datecal__nav { display: flex; align-items: center; justify-content: space-between; padding: 6px 20px 10px; flex: none; }
.datecal__yearbtn {
  display: flex; align-items: center; gap: 6px; border: 0; background: none; cursor: pointer;
  padding: 4px 10px; margin-left: -10px; border-radius: 10px;
}
.datecal__yearbtn:active { background: var(--color-softer); }
.datecal__caret { display: inline-flex; flex: none; transition: transform .2s; }
.datecal__caret-icon { width: 16px; height: 16px; color: var(--color-accent); }
.datecal__navright { display: contents; }
.datecal__monthpick { flex: 1; display: flex; justify-content: center; }
.datecal__monthbtn {
  display: flex; align-items: center; gap: 5px; border: 0; background: none; cursor: pointer;
  padding: 4px 10px; border-radius: 10px; font-family: var(--font-display); font-size: var(--text-base);
  font-weight: 600; color: var(--color-text);
}
.datecal__monthbtn:active { background: var(--color-softer); }
.datecal__monthbtn svg { width: 15px; height: 15px; color: var(--color-accent); flex: none; }
.datecal__arrows { display: flex; gap: 10px; }
.datecal__navbtn {
  width: 34px; height: 34px; border-radius: 50%; background: var(--color-surface); border: 1px solid var(--color-line);
  display: flex; align-items: center; justify-content: center; color: var(--color-text); cursor: pointer; flex: none;
}
.datecal__navbtn:active { background: var(--color-softer); }
.datecal__navbtn svg { width: 17px; height: 17px; }
.datecal__month { font-family: var(--font-display); font-size: var(--text-lg); font-weight: 600; color: var(--color-text); }

/* Jaar- en maand-modus: chips van 3 breed (jaar scrollt) */
.datecal__chipgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 0 18px 8px; flex: none; }
.datecal__chipgrid--years { height: 264px; overflow-y: auto; align-content: start; scrollbar-width: none; }
.datecal__chipgrid--years::-webkit-scrollbar { display: none; }
.datecal__chip {
  border: 0; background: transparent; font: inherit; font-size: var(--text-15); font-weight: 600;
  color: var(--color-text); cursor: pointer; text-align: center;
}
.datecal__chip:active { transform: scale(.96); }
.datecal__chip--year { padding: 12px 0; border-radius: 999px; }
.datecal__chip--month { padding: 13px 0; border-radius: 12px; font-size: var(--text-sm); background: var(--color-surface); border: 1px solid var(--color-line); }
.datecal__chip.is-active { font-weight: 800; color: var(--color-on-accent); background: var(--color-accent); border-color: var(--color-accent); }
.datecal__dows { display: grid; grid-template-columns: repeat(7, 1fr); padding: 0 16px 4px; flex: none; }
.datecal__dow { text-align: center; font-size: var(--text-xs); font-weight: 800; color: var(--color-faint); text-transform: uppercase; }
.datecal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; padding: 0 16px 6px; flex: none; }
.datecal__day {
  aspect-ratio: 1; display: flex; flex-direction: column; align-items: center; justify-content: center;
  border: 0; background: transparent; border-radius: 12px; font: inherit; font-size: var(--text-15); font-weight: 500;
  color: var(--color-text); cursor: pointer;
}
.datecal__day:active { transform: scale(.94); }
.datecal__dot { width: 4px; height: 4px; border-radius: 50%; margin-top: 2px; background: transparent; }
/* Aangrenzende maanddagen: zichtbaar + tikbaar (vervangt de lege lead-cellen) */
.datecal__day.is-outside { color: var(--color-faint); }
/* Onder de ondergrens (vooruitkijkende velden): zichtbaar maar niet kiesbaar — je ziet de
   maand nog kloppen, je kunt er alleen niet in terug. */
.datecal__day.is-disabled { color: var(--color-faint); opacity: .45; cursor: default; }
.datecal__day.is-disabled:active { transform: none; }
.datecal__day.is-outside.is-today { background: transparent; }
.datecal__day.is-today { font-weight: 700; color: var(--color-accent); background: var(--color-soft); }
.datecal__day.is-today .datecal__dot { background: var(--color-accent); }
.datecal__day.is-selected { font-weight: 800; color: var(--color-on-accent); background: var(--color-accent); }
.datecal__day.is-selected .datecal__dot { background: transparent; }

/* Inklapbare secties: grijze kop, klik klapt uit */
.agenda-form__section {
  border-top: 1px solid var(--color-border);
  padding-top: var(--space-2);
}

.agenda-form__summary {
  list-style: none;
  cursor: pointer;
  min-height: 40px;
  display: flex;
  align-items: center;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.agenda-form__summary::-webkit-details-marker {
  display: none;
}

.agenda-form__summary::after {
  content: "▾";
  margin-left: auto;
  font-size: var(--text-xs);
}

.agenda-form__section[open] > .agenda-form__summary {
  color: var(--color-text);
  font-weight: var(--weight-medium);
}

.agenda-form__section[open] > .agenda-form__summary::after {
  content: "▴";
}

.agenda-form__section-body {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
  padding: var(--space-1) 0 var(--space-2);
}

.agenda-form__section-body input[type="text"],
.agenda-form__section-body textarea {
  width: 100%;
  min-height: 44px;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}

.agenda-form__section-body textarea {
  min-height: 4.5rem;
  resize: vertical;
}

/* Radio-rijen (herhaling / duur / herinnering) */
.agenda-form__radios {
  display: flex;
  flex-direction: column;
}

.agenda-form__radio {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 40px;
  font-size: var(--text-sm);
  cursor: pointer;
}

.agenda-form__number {
  width: 4.25rem;
  min-height: 36px;
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-sm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  text-align: center;
}

.agenda-form__duration {
  margin-top: var(--space-2);
  padding-top: var(--space-2);
  border-top: 1px dashed var(--color-border);
}

.agenda-form__duration-label {
  margin: 0 0 var(--space-1);
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-transform: uppercase;
}

/* Detail-rij onder een radio-keuze (aantal keer / tot-datum / aangepast) */
.agenda-form__detail {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-1) 0 var(--space-1) calc(var(--space-2) + 1.1rem);
  font-size: var(--text-sm);
}

.agenda-form__detail[hidden] {
  display: none;
}

.agenda-form__detail input[type="date"],
.agenda-form__detail select {
  min-height: 36px;
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-sm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
}

/* Mobiel: de hele week past op één scherm — geen horizontaal scrollen.
   Zeven smalle dagkolommen (zoals een telefoon-agenda); de uren-kolom wordt
   smal zodat de dagen zoveel mogelijk ruimte krijgen. Kaartjes worden
   compact: alleen de titel — de tijd blijkt uit de verticale positie. De
   verticale scroll binnen het grid (met sticky dag-koppen) blijft. */
/* Agenda = telefoon-kolom op ÉLKE breedte (mobiel design overal). Voorheen
   max-width:767px; nu altijd-aan zodat de mobiele schil ook op desktop geldt. */
@media (min-width: 0px) {
  .agenda-week {
    /* Lagere uur-rijen op mobiel: minder scrollen op een smal scherm. */
    --hour-height: 56px;
    grid-template-columns: 2.5rem repeat(7, minmax(0, 1fr));
  }

  /* Smalle dag-koppen: gedempte naam boven, vet dagnummer eronder */
  .agenda-week__dayhead { padding: var(--space-1) 0; }
  .agenda-week__dayname { font-size: var(--text-10); }
  .agenda-week__daynum {
    font-size: var(--text-base);
    font-weight: 600;
  }

  /* Smalle uren- en hele-dag-labels: cijfer rechts uitgelijnd tegen de kolomrand. */
  .agenda-week__hour { font-size: var(--text-10); padding: 0 6px 0 2px; }
  .agenda-week__allday-label {
    font-size: var(--text-10);
    line-height: 1.1;
    padding: var(--space-1);
  }
  .agenda-week__dayhead { min-height: 2.5rem; box-sizing: border-box; }

  /* Compacte kaartjes: alleen de titel (mag over meerdere regels afbreken),
     overige details verbergen we — net als in de maand-cellen. De gezin-kleur
     blijft via de linkerrand zichtbaar, een voorstel via de gestippelde rand. */
  .agenda-weekwrap .agenda-event {
    padding: 2px 4px;
    border-radius: 4px;
  }
  .agenda-weekwrap .agenda-event__time,
  .agenda-weekwrap .agenda-event__child,
  .agenda-weekwrap .agenda-event__creator,
  .agenda-weekwrap .agenda-event__badge {
    display: none;
  }
  .agenda-weekwrap .agenda-event__title {
    font-size: var(--text-11);
    line-height: 1.15;
    white-space: normal;
    overflow-wrap: anywhere;
    display: -webkit-box;
    -webkit-line-clamp: 4;
    line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  /* Hele-dag-afspraak in de band = één slanke rij (de base is een hoog flex-column-
     blok met height:100% → hier platgeslagen tot ~20px). Titel links op één regel met
     ellipsis, kleine eigenaar-chip rechts ("Jij"/voornaam); de gezin-kleur (linkerrand
     + zachte tint) draagt verder de identiteit. Deze regels staan ná de clamp-regel
     hierboven (gelijke specificiteit) en winnen dus. */
  .agenda-event__owner { display: none; }
  .agenda-week__allday-cell .agenda-event {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 6px;
    height: auto;
    min-height: 0;
    padding: 1px 5px;
    border-left-width: 3px;
    border-radius: 6px;
    line-height: 1.35;
    /* Duidelijk gekleurde vulling in de persoons-kleur (kleur = identiteit van de maker):
       fors sterker dan de tijdgebonden kaartjes, want een lichte tint valt op de warme
       band-tint weg tot "wit". Rand rondom mee-getint zodat de pill helemaal de kleur
       draagt; de dikkere linkerrand het sterkst. Donkere tekst blijft leesbaar. */
    background: color-mix(in srgb, var(--event-color, var(--color-accent)) 42%, var(--color-surface));
    border-color: color-mix(in srgb, var(--event-color, var(--color-accent)) 55%, var(--color-surface));
    border-left-color: var(--event-color, var(--color-text-muted));
  }
  .agenda-week__allday-cell .agenda-event + .agenda-event { margin-top: 2px; }
  .agenda-week__allday-cell .agenda-event__title {
    flex: 1 1 auto;
    min-width: 0;
    display: block;
    -webkit-line-clamp: unset;
    line-clamp: unset;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    font-size: var(--text-11);
    font-weight: var(--weight-medium);
  }
  .agenda-week__allday-cell .agenda-event__owner {
    display: inline-block;
    flex: none;
    font-size: var(--text-10);
    font-weight: 700;
    line-height: 1.5;
    padding: 0 6px;
    border-radius: 999px;
    /* Wit chipje met de persoons-kleur als tekst — popt tegen de getinte pill. */
    background: var(--color-surface);
    color: var(--event-color, var(--color-accent));
  }

  /* Kop compacter: minder paginarand. */
  .agenda-page {
    padding: 0 18px var(--space-3);
    gap: var(--space-3);
  }
}

/* Afspraak-formulier (new/edit) — mobile-first, labels boven inputs,
   44px touch-targets, tokens uit :root. */
.agenda-form {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  max-width: 480px;
}

.agenda-form__errors {
  padding: var(--space-3) var(--space-4);
  background: rgba(220, 38, 38, 0.06);
  border: 1px solid rgba(220, 38, 38, 0.25);
  border-radius: var(--radius);
  font-size: var(--text-sm);
  color: var(--color-text);
}

.agenda-form__errors ul {
  padding-left: var(--space-4);
  margin: 0;
}

/* Werkbalk in het afspraak-formulier (Outlook-stijl): opslaan + de minder-
   frequente keuzes (kind/herhaling/herinnering) als compacte dropdowns. */
/* Inline keuze-secties (kind/herhaling/herinnering): accent-kop (ontwerp). */
.agenda-form__section-label {
  margin: 0 0 8px;
  font-size: var(--text-13);
  font-weight: 800;
  color: var(--color-accent);
}

/* Opslaan onderaan: vol-breed accent-knop (ontwerp), met de annuleer-link eronder. */
.agenda-form__actions {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: var(--space-2);
  margin-top: var(--space-4);
}
.agenda-form__save {
  width: 100%;
  margin: 0;
  padding: 15px;
  font: inherit;
  font-size: var(--text-base);
  font-weight: 700;
  text-align: center;
  color: var(--color-on-accent);
  background: var(--color-accent);
  border: 0;
  border-radius: 15px;
  cursor: pointer;
}
.agenda-form__save:hover { background: var(--color-accent-hover); }

.agenda-form__field {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
}

/* Inline variant: checkbox + label naast elkaar */
.agenda-form__field--inline {
  flex-direction: row;
  align-items: center;
  gap: var(--space-2);
}
/* Uitgeschakeld (solo: geen co-ouder om aan voor te leggen) — gedimd, hint eronder. */
.agenda-form__field--disabled { opacity: 0.55; flex-wrap: wrap; }
/* Het (lange) label blijft náást de checkbox en tekst-wrapt intern — zonder flex:1
   duwt de max-content-breedte het als geheel naar de volgende flex-regel. */
.agenda-form__field--inline label { flex: 1; min-width: 0; }
.agenda-form__inline-hint { flex-basis: 100%; font-size: var(--text-xs); color: var(--color-text-muted); }

.agenda-form__field label {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text);
}

.agenda-form__field input[type="text"],
.agenda-form__field input[type="datetime-local"],
.agenda-form__field select,
.agenda-form__field textarea {
  width: 100%;
  min-height: 44px;
  padding: var(--space-2) var(--space-3);
  font: inherit;
  font-size: var(--text-sm);
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}

.agenda-form__field input[type="text"]:focus-visible,
.agenda-form__field input[type="datetime-local"]:focus-visible,
.agenda-form__field select:focus-visible,
.agenda-form__field textarea:focus-visible {
  outline: 2px solid var(--color-focus);
  outline-offset: 2px;
}

.agenda-form__field textarea {
  resize: vertical;
  min-height: 80px;
}

.agenda-form__field input[type="checkbox"] {
  width: 18px;
  height: 18px;
  flex-shrink: 0;
  accent-color: var(--color-accent);
}

.agenda-form__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  padding-top: var(--space-2);
}

/* Opslaan-knop: accent, volle kleur, 44px touch-target */
.agenda-form__actions input[type="submit"] {
  min-height: 44px;
  padding: 0 var(--space-6);
  font: inherit;
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-on-accent);
  background: var(--color-accent);
  border: 0;
  border-radius: var(--radius);
  cursor: pointer;
}

.agenda-form__actions input[type="submit"]:hover {
  background: var(--color-accent-hover);
}

/* Annuleren-link: rustig, ondergeschikt */
.agenda-form__cancel {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  text-decoration: underline;
}

.agenda-form__cancel:hover {
  color: var(--color-text);
}

/* Maand-grid — 7 kolommen, mobiel horizontaal scrollbaar */
.agenda-month {
  display: grid;
  grid-template-columns: repeat(7, minmax(2.5rem, 1fr));
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow-x: auto;
}

/* Dag-naam koppen (ma–zo) */
/* Dagnamen (ma–zo): faint uppercase, géén wit vlak/rand (ontwerp). */
.agenda-month__dayname {
  padding: var(--space-1) var(--space-2);
  font-size: var(--text-xs);
  font-weight: 700;
  letter-spacing: 0.4px;
  color: var(--color-faint);
  text-align: center;
  text-transform: uppercase;
  background: transparent;
}

/* Dag-cellen */
.agenda-month__cell {
  min-height: 5.5rem;
  padding: var(--space-1);
  border-top: 1px solid var(--color-border);
  border-left: 1px solid var(--color-border);
  display: flex;
  flex-direction: column;
  gap: 2px;
  overflow: hidden;
}

/* Eerste kolom (ma): geen linker border dubbeling */
.agenda-month__cell:nth-child(7n+8) {
  border-left: none;
}

/* Dag buiten de huidige maand: gedimd */
.agenda-month__cell--out {
  opacity: 0.4;
  background: transparent;
}

/* Vandaag: accent-bovenrand + zacht accent-vlak als markering (ontwerp). */
.agenda-month__cell--today {
  border-top-color: var(--color-chat-accent);
  border-top-width: 2px;
  background: var(--color-soft);
}

/* Dag-nummer: link naar de week-weergave van die dag */
.agenda-month__num {
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-text-muted);
  line-height: 1;
  margin-bottom: 2px;
  align-self: flex-start;
  text-decoration: none;
}

.agenda-month__num:hover {
  color: var(--color-chat-accent);
  text-decoration: underline;
}

.agenda-month__cell--today .agenda-month__num {
  color: var(--color-chat-accent);
  font-weight: var(--weight-bold, 700);
}

/* Geselecteerde dag (klik in het grid): accent-vlak + witte cijfer (wint van vandaag). */
.agenda-month__cell--selected { background: var(--color-accent); border-color: var(--color-accent); }
.agenda-month__cell--selected .agenda-month__num,
.agenda-month__cell--selected .agenda-month__num:hover { color: var(--color-on-accent); font-weight: 700; text-decoration: none; }

/* Geselecteerde-dag-lijst onder het maand-grid (ontwerp). */
.agenda-month__selday { margin-top: var(--space-4); }
.agenda-month__selday-head {
  margin: 0 4px 10px;
  font-size: var(--text-xs);
  font-weight: 800;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--color-accent);
}
.agenda-month__selday-empty {
  padding: 22px 16px;
  text-align: center;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
}

/* Events in maand-cellen: compacte weergave —
   tijd verborgen, alleen titel;
   creator ook verborgen (te krap in cel). */
.agenda-month__cell .agenda-event {
  font-size: var(--text-xs);
  padding: 1px var(--space-1);
  gap: 0;
  height: auto;
}

.agenda-month__cell .agenda-event__time,
.agenda-month__cell .agenda-event__creator,
.agenda-month__cell .agenda-event__child,
.agenda-month__cell .agenda-event__badge,
.agenda-month__cell .agenda-event__confirm {
  display: none; /* in maand-cellen blijft alleen titel + kind-dot over */
}

.agenda-month__cell .agenda-event__title {
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
}

/* Mobiel maand-grid (ontwerp): losse afgeronde vierkante tegels met een gecentreerd
   dagnummer + stipjes onder het cijfer (geen titel-chips/banden — tik = detail). */
@media (min-width: 0px) {
  .agenda-month { border: 0; gap: 3px; }
  .agenda-month__cell {
    aspect-ratio: 1;
    min-height: 0;
    padding: 2px;
    border: 0;
    border-radius: 11px;
    align-items: center;
    justify-content: center;
    gap: 4px;
    overflow: hidden;
  }
  .agenda-month__cell--today { border: 0; }
  .agenda-month__num {
    align-self: center;
    font-size: var(--text-13);
    line-height: 1;
    margin: 0;
  }
  .agenda-month__cell .agenda-custody,
  .agenda-month__cell .agenda-birthday { display: none; }
  .agenda-month__cell .agenda-event {
    width: 6px;
    height: 6px;
    min-height: 0;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--event-color, var(--color-accent));
    font-size: 0;
    line-height: 0;
    overflow: hidden;
  }
}

/* Verjaardag (read-time uit de gezinsinfo, geen event): compact pill-item
   met de gezin-kleur als linksaccent; past in maand-cel én all-day-rij. */
.agenda-birthday {
  display: block;
  font-size: var(--text-xs);
  padding: 1px var(--space-2);
  margin-bottom: 2px;
  border-radius: var(--radius);
  background: var(--color-surface-own);
  border-left: 3px solid var(--event-color, var(--color-accent));
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Omgangs-custody-band: wie heeft de kinderen op deze dag (read-time via Agenda::Custody).
   Eén vaste neutrale kleur (--color-custody) voor béíde ouders — dit gaat over wáár de
   kinderen zijn, geen persoon, dus geen persoons-kleur (en buiten het kiesbare palet). */
.agenda-custody { display: flex; flex-direction: column; gap: 2px; margin-bottom: 2px; }
.agenda-custody__band {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 4px;
  font-size: var(--text-xs);
  padding: 1px var(--space-2);
  border-radius: var(--radius);
  background: color-mix(in srgb, var(--color-custody) 14%, var(--color-surface));
  border-left: 3px solid var(--color-custody);
}
.agenda-custody__label { color: var(--color-text); }
/* Aantikbare band → zorgperiode-scherm. Geen onderstreping of accentkleur: 'ie moet een
   rustige informatieband blijven, alleen mét een tik-doel. */
a.agenda-custody__band--link { text-decoration: none; color: inherit; cursor: pointer; }
a.agenda-custody__band--link:active { background: color-mix(in srgb, var(--color-custody) 26%, var(--color-surface)); }

/* Wisselvoorstel-overlay: náást de custody-band, muteert 'm niet (design 2026-07-13
   §2/§4). Amber = dezelfde "wacht op akkoord"-taal als elders in de app (afspraak-
   card__wait, plan-status--wacht); gestippelde rand spiegelt .agenda-event--proposed
   (nog niet bevestigd). */
.swap-overlay {
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin-bottom: 2px;
  padding: 3px var(--space-2);
  font-size: var(--text-xs);
  border-radius: var(--radius);
  background: var(--color-amber-soft);
  border: 1px dashed color-mix(in srgb, var(--color-amber) 45%, var(--color-amber-soft));
}
.swap-overlay__status { font-weight: 700; color: var(--color-amber); }
/* Veld-groepje dat als geheel verschijnt/verdwijnt (Tot en met, het contextuele reden-veld
   en de generieke Notitie) — de Stimulus-controller zet alleen [hidden]. */
.zw-field[hidden] { display: none; }
/* .sheet__hint trekt zichzelf normaal 10px omhoog onder een .sheet__field (die 16px
   ondermarge heeft); onder een datumkiezer (geen ondermarge) zou 'ie daardoor over het
   veld heen vallen. */
.zw-field > .sheet__hint { margin: 7px 0 16px; }
.swap-overlay__summary { margin: 0; color: var(--color-text); }
.swap-overlay__reason { color: var(--color-text-muted); }
.swap-overlay__note { margin: 0; color: var(--color-text-muted); font-style: italic; }
.swap-overlay__standby { margin: 0; color: var(--color-text-muted); }
.swap-overlay__actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 1px; }
.swap-overlay__actions .button_to { margin: 0; }
.swap-overlay__accept,
.swap-overlay__counter,
.swap-overlay__withdraw {
  font: inherit;
  font-size: var(--text-xs);
  font-weight: 700;
  padding: 2px var(--space-2);
  min-height: 0;
  border-radius: var(--radius);
  cursor: pointer;
}
.swap-overlay__accept { background: var(--color-amber); color: var(--color-on-accent); border: none; }
.swap-overlay__counter,
.swap-overlay__withdraw {
  background: var(--color-surface);
  color: var(--color-amber);
  border: 1px solid var(--color-amber);
}

/* Volle variant (design 2026-07-25): op het overdracht-detailscherm is dit geen strookje
   náást een agenda-rij maar het beslisblok bovenaan het scherm — dus kaart-padding,
   leesbare tekstmaat en knoppen op tik-formaat, in lijn met de kaarten eronder. */
.swap-overlay--full {
  gap: 5px;
  margin: 0 0 14px;
  padding: 13px 15px;
  font-size: var(--text-13);
  border-radius: 18px; /* gelijk aan .info-card eronder, zodat de blokken uitlijnen */
}
.swap-overlay--full .swap-overlay__status { font-size: var(--text-13); }
.swap-overlay--full .swap-overlay__summary { font-size: var(--text-15); font-weight: 600; line-height: 1.4; }
.swap-overlay--full .swap-overlay__reason,
.swap-overlay--full .swap-overlay__note,
.swap-overlay--full .swap-overlay__standby { font-size: var(--text-13); line-height: 1.4; }
.swap-overlay--full .swap-overlay__actions { gap: 8px; margin-top: 9px; }
.swap-overlay--full .swap-overlay__accept,
.swap-overlay--full .swap-overlay__withdraw {
  font-size: var(--text-13);
  padding: 9px 15px;
  min-height: 38px;
  border-radius: 12px;
}

/* Agenda-toolbar: view-switcher (week/maand) */
.agenda-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  padding: var(--space-3) 0;
  --color-accent: var(--color-chat-accent);
}

/* Segmented control: week / maand */
.agenda-toolbar__views {
  display: flex;
  gap: 0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow: hidden;
}

.agenda-toolbar__view {
  padding: var(--space-2) var(--space-4);
  min-height: 44px;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
  text-decoration: none;
  background: transparent;
  border-right: 1px solid var(--color-border);
  display: flex;
  align-items: center;
}

.agenda-toolbar__view:last-child {
  border-right: none;
}

.agenda-toolbar__view:hover {
  color: var(--color-text);
}

.agenda-toolbar__view--active {
  color: var(--color-chat-accent);
  font-weight: var(--weight-medium);
  background: var(--color-chat-surface-own);
}

/* Mobiele 4-weg-weergaveschakelaar (Lijst · Dag · 3 dagen · Maand) — segmented
   control: zacht spoor, actief = witte pill met accent. */
.agenda-mobile__views {
  display: flex;
  gap: 3px;
  margin-bottom: 12px;
  padding: 3px;
  background: var(--color-soft);
  border-radius: 13px;
}
.agenda-mobile__view {
  flex: 1;
  padding: 8px 0;
  text-align: center;
  text-decoration: none;
  font-size: var(--text-13);
  font-weight: 700;
  color: var(--color-text-muted);
  border-radius: 10px;
  transition: color var(--dur-fast) var(--curve-decel);
}
.agenda-mobile__view--active {
  color: var(--color-accent);
  background: var(--color-surface);
  box-shadow: var(--shadow-sm);
}

/* ===================== AGENDA — LIJST-VIEW (mobiel-eerste) =====================
   Komende afspraken gegroepeerd per dag: dag-kop + een kaart met rijen
   (tijd+duur · gekleurde custody-balk · titel/sub · wacht-op-akkoord-badge). */
/* Losse dag-kaarten onder elkaar. Het scrollen gebeurt één niveau hoger, op
   .agenda-page__grid--padded — twee geneste scrollers zouden de rijen samenpersen. */
.agenda-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding-bottom: 24px;
}
/* Eén dag = één kaart: kop (dagnaam + datum + "bij jou") met daaronder de rijen. */
.agenda-list__card {
  overflow: hidden;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
}
.agenda-list__cardhead {
  display: flex;
  align-items: baseline;
  gap: 7px;
  padding: 12px 15px 10px;
  border-bottom: 1px solid var(--color-line);
}
.agenda-list__dayname { margin: 0; font-size: var(--text-15); font-weight: 800; }
/* Vandaag springt eruit in de accentkleur; de andere dagen blijven rustig donker. */
.agenda-list__dayname--today { color: var(--color-accent); }
.agenda-list__daydate { font-size: var(--text-13); color: var(--color-text-muted); }
/* "bij jou" rechts in de kop, met een stip in de kleur van die ouder. */
.agenda-list__who {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}
.agenda-list__whodot {
  flex: none;
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--dot-color, var(--color-accent));
}
.agenda-list__group {
  overflow: hidden;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
}
.agenda-list__item {
  display: flex;
  gap: 13px;
  padding: 13px 15px;
  text-decoration: none;
  color: var(--color-text);
  border-bottom: 1px solid var(--color-line);
}
.agenda-list__item:last-child { border-bottom: 0; }
.agenda-list__item:active { background: var(--color-softer); }
/* Overdracht-icoon op de plek van het afspraak-streepje: getint vlak in de kleur van
   de ontvangende ouder, zodat het wisselmoment eruit springt zonder te schreeuwen. */
.agenda-list__swapicon {
  flex: none;
  align-self: center;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border-radius: 9px;
  background: color-mix(in srgb, var(--event-color, var(--color-accent)) 16%, transparent);
  color: var(--event-color, var(--color-accent));
}
.agenda-list__swapicon svg { width: 16px; height: 16px; }

/* Overdracht in het tijd-rooster: een moment zonder duur, dus een strook op de
   wisseltijd over de volle kolombreedte — niet het lane-blok van een afspraak.
   Boven de afspraken (z-index 1) zodat de markering nooit half wegvalt. */
.agenda-week__handover {
  position: absolute;
  left: 2px;
  right: 2px;
  top: calc(var(--top) / 60 * var(--hour-height));
  z-index: 2;
  display: flex;
  align-items: center;
  gap: 4px;
  padding: 2px 5px;
  border-left: 3px solid var(--event-color, var(--color-accent));
  border-radius: 4px;
  background: color-mix(in srgb, var(--event-color, var(--color-accent)) 12%, var(--color-surface));
  font-size: var(--text-11);
  font-weight: 700;
  line-height: 1.25;
  color: var(--color-text);
}
.agenda-week__handover svg { flex: none; width: 12px; height: 12px; color: var(--event-color, var(--color-accent)); }
.agenda-week__handover { text-decoration: none; }
.agenda-week__handover:active { filter: brightness(0.96); }
/* Openstaand wijzigingsverzoek: gestippelde rand, zelfde taal als een wisselvoorstel
   (.swap-overlay) — nog niet vast, dus geen dichte lijn. */
.agenda-week__handover--pending { border-style: dashed; border-color: var(--color-amber); }

/* Eén-regel-badge voor een openstaand wijzigingsverzoek ("Wijziging aangevraagd") — in het
   rooster en de lijst. Tik opent het panel met het volle voorstel; het beslisblok zelf
   staat nooit in de agenda (te groot, zie design-feedback 2026-07-26). Amber = dezelfde
   wacht-op-akkoord-familie als de overlay. */
.pending-badge {
  display: inline-flex; align-items: center; gap: 6px; max-width: 100%;
  margin: 2px 0; padding: 3px 9px; border-radius: 999px;
  border: 1px dashed var(--color-amber); background: var(--color-amber-soft);
  color: var(--color-amber-deep); font-size: var(--text-xs); font-weight: 700;
  font-family: inherit; cursor: pointer; text-align: left;
}
.pending-badge__dot { flex: none; width: 6px; height: 6px; border-radius: 50%; background: var(--color-amber); }
.pending-badge__text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ===================== OVERDRACHT-DETAIL (eigen scherm, geen modal) ===================== */
/* Gekleurd staafje vóór de scherm-titel, in de kleur van de ouder die het moment aangaat. */
.section-head__title--bar { display: flex; align-items: center; gap: 10px; }
.section-head__titlebar {
  flex: none;
  width: 4px;
  align-self: stretch;
  min-height: 1.1em;
  border-radius: 3px;
  background: var(--bar-color, var(--color-accent));
}
/* "Tot nu → Vanaf nu": de kern van het scherm, dus als eerste blok en symmetrisch —
   geen van beide ouders krijgt visueel voorrang. */
/* Kaarten onder elkaar met lucht ertussen; de app-brede rij-padding (14px 16px) blijft
   overal gelijk, ook in dit blok. */
.overdracht-detail .info-card + .info-card { margin-top: 14px; }
.overdracht-flow {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px;
  border-bottom: 1px solid var(--color-line);
}
.overdracht-flow__side {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 7px;
  text-align: center;
}
.overdracht-flow__label {
  font-size: var(--text-11);
  font-weight: 800;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--color-faint);
}
.overdracht-flow__chip {
  padding: 4px 12px;
  border-radius: 999px;
  font-size: var(--text-13);
  font-weight: 800;
  color: var(--chip-color, var(--color-accent));
  background: color-mix(in srgb, var(--chip-color, var(--color-accent)) 15%, transparent);
}
.overdracht-flow__arrow { flex: none; color: var(--color-accent); }
.overdracht-flow__arrow svg { width: 20px; height: 20px; }
/* Kind-avatars rechts op de "Kinderen"-regel: zelfde initiaal-in-cirkel als de gezin-hub. */
.overdracht-kids { margin-left: auto; display: inline-flex; align-items: center; gap: 5px; }
.overdracht-kids__avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: var(--kid-color, var(--color-accent));
  color: var(--color-on-accent);
  font-size: var(--text-11);
  font-weight: 800;
}
/* Herinnering-rij: een button_to (geen checkbox), dus de schakelaar-stand komt uit een
   class. De visual zelf blijft die van het afspraakformulier — één bron. */
.reminder-form { margin-top: 14px; }
.reminder-row {
  display: flex;
  align-items: center;
  gap: 13px;
  width: 100%;
  padding: 14px 16px;
  border: 1px solid var(--color-line);
  border-radius: 18px;
  background: var(--color-surface);
  box-shadow: var(--shadow-sm);
  cursor: pointer;
  text-align: left;
  font: inherit;
  color: var(--color-text);
}
.reminder-row:active { background: var(--color-softer); }
.reminder-row__icon { flex: none; color: var(--color-accent); }
.reminder-row__icon svg { width: 20px; height: 20px; }
.reminder-row__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.reminder-row__title { font-size: var(--text-sm); font-weight: 700; }
.reminder-row__sub { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 1px; }

/* Herkomst-notitie: rustig getint, geen waarschuwing — het is een uitleg, geen fout. */
.overdracht-note {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  margin: 14px 0 0;
  padding: 13px 14px;
  border-radius: 14px;
  background: var(--color-soft);
  font-size: var(--text-13);
  line-height: 1.45;
  color: var(--color-text-muted);
}
.overdracht-note__icon { flex: none; color: var(--color-accent); margin-top: 1px; }
.overdracht-note__icon svg { width: 17px; height: 17px; }
/* De tekst is één flex-item: zonder deze wikkel werd de link ernaast gezet i.p.v. mee
   te lopen in de zin. */
.overdracht-note__text { min-width: 0; }
.overdracht-note a { color: var(--color-accent); font-weight: 700; }
.agenda-list__time { flex: none; width: 46px; }
.agenda-list__hour { display: block; font-size: var(--text-sm); font-weight: 800; line-height: 1; }
.agenda-list__bar {
  flex: none;
  width: 4px;
  align-self: stretch;
  border-radius: 3px;
  background: var(--event-color, var(--color-accent));
}
.agenda-list__body { flex: 1; min-width: 0; }
.agenda-list__title { display: block; font-size: var(--text-15); font-weight: 700; }
.agenda-list__sub { display: block; margin-top: 1px; font-size: var(--text-13); color: var(--color-text-muted); }
.agenda-list__badge {
  display: inline-block;
  margin-top: 6px;
  padding: 3px 8px;
  font-size: var(--text-11);
  font-weight: 800;
  color: var(--color-amber);
  background: var(--color-amber-soft);
  border-radius: 7px;
}
/* Eigenaar-chip rechts in de rij ("Jij"/voornaam) — zelfde chip als in de
   hele-dag-band van het grid. */
.agenda-list__owner {
  flex: none;
  align-self: center;
  padding: 2px 9px;
  font-size: var(--text-11);
  font-weight: 700;
  line-height: 1.5;
  color: var(--color-accent);
  background: var(--color-soft);
  border-radius: 999px;
}

/* ===================== AGENDA-CHROME (Outlook-stijl) ===================== */
/* Eén werkbalk over de volle breedte; daaronder de zijbalk (mini-kalender +
   bron-checkboxes) links en het rooster rechts. De uren-as + dag-koppen wit,
   de cellen grijzig (Fluent, strak, minimale schaduw). */
.agenda-layout {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  /* Geen top-padding: de gedeelde .app-topbar (eerste kind) draagt de safe-area-top.
     Zijpadding 18px = app-brede scherm-padding (gelijk aan Home/Gezin/Gesprek). */
  padding: 0 18px var(--space-4);
  min-width: 0;
  /* Vult de hoogte van het werkvlak; alleen het rooster scrollt (zie .agenda-week). */
  flex: 1;
  min-height: 0;
  overflow: hidden;
}

/* Eén werkbalk over de volle breedte: nieuwe afspraak + weergave-switch + tijd-
   navigatie links op één rij, de soort-filter rechts. */
.agenda-topbar {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
}
/* Vandaag + vorige/volgende + datumbereik als één groep, naast de weergave-switch. */
.agenda-topbar__time {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
}
/* Het segmented control (dag/week/maand) zit ín de werkbalk: geen eigen pad. */
.agenda-topbar .agenda-toolbar { padding: 0; }

/* Zijbalk (mini + bronnen) links, rooster rechts — op gelijke hoogte, samen de
   resthoogte vullend onder de werkbalk. */
.agenda-body {
  display: grid;
  grid-template-columns: 232px minmax(0, 1fr);
  gap: var(--space-4);
  align-items: stretch;
  min-width: 0;
  flex: 1;
  min-height: 0;
}

.agenda-main {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  min-width: 0;
  min-height: 0;
}

/* De grid-wrapper geeft het rooster de resthoogte; het rooster scrollt intern. */
.agenda-page__grid {
  display: flex;
  flex-direction: column;
  flex: 1;
  min-height: 0;
}
/* Maand & lijst krijgen de normale schermpadding aan weerszijden (kaart-achtig);
   het tijd-rooster blijft full-bleed. */
/* En ze dragen hun eigen verticale scroller: de agenda-shell (.agenda-layout, .app__body)
   staat op overflow:hidden omdat in de tijd-weergaven alléén .agenda-week intern scrollt.
   Maand en lijst hebben zo'n binnen-scroller niet, dus zonder deze regel wordt een lijst
   die langer is dan het scherm gewoon afgekapt in plaats van scrollbaar. */
.agenda-page__grid--padded {
  padding-inline: 18px;
  overflow-y: auto;
  overscroll-behavior: contain;
}

/* ---- Zijbalk ---- */
.agenda-sidebar {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  position: sticky;
  top: var(--space-4);
}

/* Mini-maandkalender — transparant op de grijzige zijbalk (Outlook-stijl) */
.agenda-mini {
  padding: var(--space-1) 0 var(--space-2);
}

.agenda-mini__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--space-2);
}

.agenda-mini__label {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  text-transform: capitalize;
}

.agenda-mini__nav {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0;
  border: none;
  background: transparent;
  color: var(--color-text-muted);
  border-radius: var(--radius);
  cursor: pointer;
}
.agenda-mini__nav:hover { background: var(--color-hover); color: var(--color-text); }
.agenda-mini__nav-icon { width: 18px; height: 18px; }

/* Per-week-rijen zodat een hele week als pill kan oplichten (actieve week) of
   bij hover grijzen — beide puur in CSS. */
.agenda-mini__grid { display: flex; flex-direction: column; gap: 2px; }

.agenda-mini__weekdays {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  margin-bottom: var(--space-1);
}

.agenda-mini__wd {
  text-align: center;
  font-size: var(--text-10);
  color: var(--color-text-muted);
}

.agenda-mini__week {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  border-radius: 999px;
}
/* Actieve week (de getoonde week) lichtblauwe balk; hover op een andere week
   een grijze balk (iets donkerder dan de zijbalk). */
.agenda-mini__week--active { background: var(--color-surface-own); }
.agenda-mini__week:hover:not(.agenda-mini__week--active) { background: var(--color-hover); }

.agenda-mini__day {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2px 0;
  border: none;
  background: transparent;
  font: inherit;
  color: var(--color-text);
  cursor: pointer;
}
.agenda-mini__num {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1.75rem;
  height: 1.75rem;
  font-size: var(--text-xs);
  border-radius: 50%;
}
.agenda-mini__day--muted { color: var(--color-text-muted); opacity: 0.5; }
/* Vandaag: gevulde donkerblauwe stip (ook ín een lichtblauwe week-balk). */
.agenda-mini__day--today .agenda-mini__num {
  background: var(--color-accent);
  color: var(--color-on-accent);
  font-weight: var(--weight-medium);
}

/* "Mijn agenda's" — bron-checkboxes (welke gezinnen tonen); geen kaart, sluit
   aan op de transparante zijbalk. */
.agenda-sources {
  border: none;
  padding: var(--space-2) 0 0;
  margin: 0;
}
.agenda-sources__legend {
  padding: 0 var(--space-1);
  font-size: var(--text-xs);
  font-weight: var(--weight-medium);
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.agenda-sources__item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 36px;
  cursor: pointer;
  font-size: var(--text-sm);
}
.agenda-sources__box {
  width: 16px;
  height: 16px;
  accent-color: var(--gezin-color, var(--color-accent));
  cursor: pointer;
  flex: 0 0 auto;
}

/* ---- Nieuwe afspraak (knop + dropdown bij meerdere gezinnen) ---- */
.agenda-new {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 44px;
  padding: var(--space-2) var(--space-4);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  background: var(--color-chat-accent);
  color: var(--color-on-accent);
  border: none;
  border-radius: var(--radius);
  text-decoration: none;
  cursor: pointer;
}
.agenda-new:hover { background: var(--color-chat-accent-hover); }
.agenda-new__icon { width: 1.25rem; height: 1.25rem; flex: 0 0 auto; }
.agenda-new__caret { width: 1rem; height: 1rem; opacity: 0.85; }

/* Soort-filter: dropdown rechts in de werkbalk. */
.agenda-typefilter { position: relative; margin-left: auto; }
.agenda-typefilter__summary {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-height: 44px;
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  cursor: pointer;
  list-style: none;
}
.agenda-typefilter__summary::-webkit-details-marker { display: none; }
.agenda-typefilter__summary:hover { border-color: var(--color-accent); }
.agenda-typefilter__icon { width: 1.1rem; height: 1.1rem; color: var(--color-text-muted); }
.agenda-typefilter__menu {
  position: absolute;
  z-index: 20;
  top: calc(100% + var(--space-1));
  right: 0;
  min-width: 200px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: var(--space-2);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-4);
}
.agenda-typefilter__item {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-2);
  border-radius: var(--radius);
  cursor: pointer;
  font-size: var(--text-sm);
}
.agenda-typefilter__item:hover { background: var(--color-hover); }
.agenda-typefilter__item input { accent-color: var(--color-accent); width: 16px; height: 16px; }

/* ---- Tijd-navigatie in de werkbalk: vandaag, vorige/volgende, datumbereik ---- */
.agenda-chrome__today {
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  padding: 0 var(--space-3);
  font-size: var(--text-sm);
  color: var(--color-text);
  text-decoration: none;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  background: var(--color-surface);
}
.agenda-chrome__today:hover { border-color: var(--color-accent); color: var(--color-accent); }
.agenda-chrome__nav { display: inline-flex; gap: 2px; }
.agenda-chrome__step {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  color: var(--color-text-muted);
  border-radius: var(--radius);
}
.agenda-chrome__step:hover { background: var(--color-hover); color: var(--color-text); }
.agenda-chrome__step-icon { width: 20px; height: 20px; }
.agenda-chrome__range {
  display: inline-flex;
  align-items: center;
  gap: var(--space-1);
  min-height: 40px;
  padding: 0 var(--space-2);
  margin-left: var(--space-1);
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  color: var(--color-text);
  background: transparent;
  border: none;
  border-radius: var(--radius);
  cursor: pointer;
  text-transform: capitalize;
}
.agenda-chrome__range:hover { background: var(--color-hover); }
.agenda-chrome__caret { width: 1.1rem; height: 1.1rem; color: var(--color-text-muted); }
/* De datumkiezer-popup verschijnt bij de (verborgen) date-input; die zetten we
   links-onderaan de bereik-knop zodat de kalender netjes ónder de knop opent. */
.agenda-chrome__date { position: relative; }
.agenda-chrome__picker {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  border: 0;
}

/* ---- Kalender-chrome: de cellen grijzig, de uren-as + dag-koppen wit, en de
   vandaag-kolom wit. Vandaag valt op via een blauwe bovenrand op z'n dag-kop. ---- */
.agenda-week {
  --agenda-cell: #fafafa;
  /* Uur-lijn (solide, #e2e4e8) + half-uur-lijn (gestippeld, #E5E5E5) als één
     herhalende tegel; loopt door over de cellen én de uren-as links. */
  --agenda-hour-lines: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='4'%20height='80'%3E%3Cline%20x1='0'%20y1='0.5'%20x2='4'%20y2='0.5'%20stroke='%23e2e4e8'/%3E%3Cline%20x1='0'%20y1='40'%20x2='2'%20y2='40'%20stroke='%23E5E5E5'/%3E%3C/svg%3E");
  background: var(--agenda-cell);
}
/* Vaste band: koppen + hele-dag-cellen transparant zodat de warme band-tint
   (agenda-week__fixed) er uniform doorheen loopt. */
.agenda-week__corner,
.agenda-week__dayhead,
.agenda-week__allday-label { background: transparent; }
/* Uren-as: schoon wit — de uur/half-uur-lijnen lopen alleen in de dagkolommen,
   niet door tot de zijkant onder de cijfers (design). */
.agenda-week__hours { background: var(--color-surface); }
/* Vandaag in het scrollende grid = witte kolom tegen de grijze cellen. In de
   band blijft alles uniform (de today-markering is enkel het accent-nummer),
   zodat er geen wit-op-wit-vlak onder een hele-dag-pill ontstaat. */
.agenda-week__col--today { background-color: var(--color-surface); }
.agenda-week__dayhead--today .agenda-week__dayname,
.agenda-week__dayhead--today .agenda-week__daynum { color: var(--color-chat-accent); }

/* ---- Nu-lijn: alleen zichtbaar als "nu" in het venster valt (--has-now op de
   scroller). Solide met stip op vandaag; gestippeld zonder stip op de al
   verstreken dagen van deze week. Positie via --now-top, geërfd van de scroller. ---- */
.agenda-week__now { display: none; }
.agenda-week--has-now .agenda-week__now { display: block; }
.agenda-week__now--past {
  border-top: 1px dashed var(--color-chat-accent);
  opacity: 0.7;
}
.agenda-week__now--past::before { content: none; }

/* ---- Mobiele agenda-chrome: de desktop-werkbalk + zijbalk wijken voor een
   compacte dag-strip (Outlook-mobiel-stijl). Standaard verborgen. ---- */
.agenda-mobile { display: none; }

@media (min-width: 0px) {
  /* Full-bleed rooster (design): de layout draagt géén zij-/onderpadding meer — het
     grid loopt tot de schermranden en tot de bottom-nav. De chrome (topbar + dag-
     strip) houdt de 18px scherm-padding zelf. */
  .agenda-layout { padding: 0; gap: var(--space-2); align-self: center; width: 100%; max-width: 460px; }
  .agenda-layout > .app-topbar,
  .agenda-layout > .agenda-mobile { padding-inline: 18px; }
  .agenda-topbar,
  .agenda-sidebar { display: none; }
  .agenda-mobile { display: block; }
  /* Body = alleen het rooster (zijbalk verborgen); vult de resthoogte. */
  .agenda-body { display: flex; flex-direction: column; gap: 0; }
  /* Edge-to-edge: geen kaartrand/afronding om het rooster. De kleine padding-top
     geeft het eerste uurcijfer (dat zijn lijn straddelt) ruimte, anders wordt het
     boven afgeknipt; kolommen, lijnen en events schuiven consistent mee. Wit —
     ook de padding-strook en de cellen (design), niet de beige paginagrond. */
  .agenda-week { border: 0; border-radius: 0; padding-top: 8px; background: var(--color-surface); }
  /* Geen gap onder het rooster (het lege modal-frame telde als flex-kind mee):
     het grid loopt door tot de bottom-nav. */
  .agenda-main { gap: 0; }

  .agenda-mobile__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-2);
    padding-bottom: var(--space-2);
  }
  /* Maand-navigator (‹ juni 2026 ›) links + Jij/co-legenda rechts. */
  .agenda-mobile__nav { display: inline-flex; align-items: center; gap: 2px; flex-shrink: 0; }
  .agenda-mobile__navstep {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    color: var(--color-text-muted);
  }
  .agenda-mobile__navstep svg { width: 22px; height: 22px; }
  .agenda-mobile__head-right {
    display: inline-flex;
    align-items: center;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: var(--space-2);
  }
  .agenda-mobile__legend {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    font-size: var(--text-xs);
    font-weight: 600;
    color: var(--color-text-muted);
  }
  .agenda-mobile__legend-item { display: inline-flex; align-items: center; gap: 5px; }
  .agenda-mobile__legend-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--dot); }
  .agenda-mobile__month {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    padding: var(--space-1) 4px;
    font-size: var(--text-15);
    font-weight: 700;
    white-space: nowrap;
    color: var(--color-text);
    background: transparent;
    border: 0;
    border-radius: var(--radius);
    cursor: pointer;
    text-transform: capitalize;
  }
  .agenda-mobile__caret { width: 1.1rem; height: 1.1rem; color: var(--color-text-muted); }
  .agenda-mobile__actions { display: inline-flex; gap: var(--space-1); }
  .agenda-mobile__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    color: var(--color-text-muted);
    background: transparent;
    border: 0;
    border-radius: var(--radius);
    cursor: pointer;
    text-decoration: none;
  }
  .agenda-mobile__icon:hover { background: var(--color-hover); }
  .agenda-mobile__icon--active { color: var(--color-accent); background: var(--color-surface-own); }
  .agenda-mobile__icon-svg { width: 22px; height: 22px; }
  /* "Vandaag"-pill: duidelijke tekst-knop i.p.v. cryptisch kalender-icoon;
     verschijnt alleen als je niet al op vandaag staat. */
  .agenda-mobile__today {
    display: inline-flex;
    align-items: center;
    height: 40px;
    padding: 0 var(--space-3);
    font-size: var(--text-sm);
    font-weight: var(--weight-medium);
    white-space: nowrap;
    color: var(--color-accent);
    background: var(--color-surface-own);
    border-radius: var(--radius);
  }
  .agenda-mobile__today:hover { background: var(--color-hover); }

  /* Dag-strip: 7 dagen, vandaag = accent-ring, gekozen dag = gevuld accent. */
  .agenda-mobile__strip {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    padding-bottom: var(--space-2);
    border-bottom: 1px solid var(--color-border);
    touch-action: pan-y;
  }
  .agenda-mobile__day {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    padding: 4px 0;
    text-decoration: none;
    color: var(--color-text);
  }
  .agenda-mobile__dayname { font-size: var(--text-11); color: var(--color-text-muted); }
  .agenda-mobile__daynum {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 34px;
    height: 34px;
    font-size: var(--text-base);
    border-radius: 11px;
  }
  .agenda-mobile__day--sel .agenda-mobile__daynum {
    background: var(--color-accent);
    color: var(--color-on-accent);
    font-weight: var(--weight-medium);
  }
  .agenda-mobile__daynum--today {
    color: var(--color-accent);
    font-weight: var(--weight-medium);
    box-shadow: inset 0 0 0 1.5px var(--color-accent);
  }
  .agenda-mobile__day--sel .agenda-mobile__daynum--today { box-shadow: none; color: var(--color-on-accent); }
  /* Puntje onder dagen met (zichtbare) afspraken. */
  .agenda-mobile__dot { width: 4px; height: 4px; border-radius: 50%; background: transparent; }
  .agenda-mobile__dot--on { background: var(--color-accent); }

  /* Dag-view op mobiel: de grid-dag-kop (en hoek) weg — de dag-strip toont al
     welke dag in beeld is, dus dat zou dubbel zijn. */
  .agenda-weekwrap--day .agenda-week__corner,
  .agenda-weekwrap--day .agenda-week__dayhead { display: none; }

  /* Uitklap-panelen: de maandkalender (hergebruik) en het soort-filter. */
  .agenda-mobile__panel {
    padding: var(--space-2) 0;
    border-bottom: 1px solid var(--color-border);
  }
  .agenda-mobile__panel[hidden] { display: none; }
  .agenda-mobile__panel .agenda-mini { display: block; padding: 0; }
  .agenda-mobile__filter { border: 0; margin: 0; padding: 0; }
  .agenda-mobile__filter-legend { font-size: var(--text-xs); color: var(--color-text-muted); padding-bottom: var(--space-1); }
  .agenda-mobile__filter-item { display: flex; align-items: center; gap: var(--space-2); min-height: 40px; font-size: var(--text-sm); }
  .agenda-mobile__filter-item input { accent-color: var(--color-accent); width: 18px; height: 18px; }

  /* Datum/tijd-velden mogen krimpen i.p.v. overlopen. */
  .agenda-form__when-input { min-width: 0; flex: 1; }
}

/* ── Agenda-kop (design scherm 5): 3 icoonknoppen + zoekbalk + weergave-sheet ── */
.agenda-mobile__actions { display: inline-flex; align-items: center; gap: 7px; }
.agenda-mobile__act {
  display: inline-flex; align-items: center; justify-content: center;
  width: 36px; height: 36px; border-radius: 11px; border: 0; cursor: pointer;
  background: var(--color-soft); color: var(--color-accent);
  text-decoration: none; /* ook als <a> (spring-naar-vandaag) — geen onderstreping */
  transition: transform .12s ease;
}
.agenda-mobile__act:active { transform: scale(.9); }
.agenda-mobile__act svg { width: 19px; height: 19px; }
/* "+" als laatste icoon in de kop-rij: accent-gevuld, zodat 'ie opvalt tussen de
   rustige icoonknoppen ernaast. */
.agenda-mobile__act--add { background: var(--color-accent); color: var(--color-on-accent); box-shadow: 0 2px 6px rgba(140, 55, 30, .28); }
.agenda-mobile__act--add svg { width: 20px; height: 20px; }
.agenda-mobile__searchbar {
  display: flex; align-items: center; gap: 10px; margin: 0 0 12px;
  background: var(--color-surface); border: 1px solid var(--color-line);
  border-radius: 13px; padding: 10px 13px; box-shadow: var(--shadow-4);
}
/* De zoekbalk is dicht tot het zoek-icoon 'm toont; [hidden] moet de display winnen. */
.agenda-mobile__searchbar[hidden] { display: none; }
.agenda-mobile__searchbar svg { flex: none; width: 18px; height: 18px; color: var(--color-faint); }
.agenda-mobile__searchbar input {
  flex: 1; min-width: 0; border: 0; outline: 0; background: none;
  font-family: inherit; font-size: var(--text-15); color: var(--color-text);
}
.agenda-mobile__searchclear { appearance: none; -webkit-appearance: none; flex: none; display: inline-flex; padding: 0; border: 0; background: none; color: var(--color-faint); cursor: pointer; }

.agenda-viewsheet { display: flex; flex-direction: column; gap: 3px; }
.agenda-viewsheet__opt {
  display: flex; align-items: center; gap: 12px; padding: 13px 14px;
  border-radius: 13px; text-decoration: none; color: var(--color-text);
}
.agenda-viewsheet__opt:active { background: var(--color-softer); }
.agenda-viewsheet__opt--active { background: var(--color-soft); color: var(--color-accent); }
.agenda-viewsheet__icon { flex: none; width: 20px; height: 20px; }
.agenda-viewsheet__label { flex: 1; font-size: var(--text-15); font-weight: 600; }
.agenda-viewsheet__check { flex: none; width: 19px; height: 19px; color: var(--color-accent); }
.agenda-viewsheet__heading {
  display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: .8px;
  text-transform: uppercase; color: var(--color-faint); margin: 16px 4px 8px;
}
.agenda-viewsheet__filter { display: flex; flex-direction: column; gap: 4px; border: 0; padding: 0; margin: 0; }
.agenda-viewsheet__filter-item { display: flex; align-items: center; gap: 10px; min-height: 40px; font-size: var(--text-15); }
.agenda-viewsheet__filter-item input { accent-color: var(--color-accent); width: 18px; height: 18px; }

/* Uitklap-handvat onder de week-strip (design scherm 5): klapt de hele maand uit. */
.agenda-mobile__expander {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  width: 100%; padding: 8px 0 4px; margin: 0; border: 0; background: none; cursor: pointer;
}
.agenda-mobile__expander:active { opacity: .5; }
.agenda-mobile__grip { width: 34px; height: 4px; border-radius: 3px; background: var(--color-faint); }
.agenda-mobile__expander-caret { width: 13px; height: 13px; color: var(--color-faint); }
/* Maandoverzicht schuift naar beneden uit wanneer het handvat (of de maand-kop) opent. */
.agenda-mobile__panel[data-panel="month"]:not([hidden]) {
  margin-top: 4px;
  animation: agenda-month-down .3s cubic-bezier(.32, .72, 0, 1) both;
}
@keyframes agenda-month-down {
  from { opacity: 0; transform: translateY(-8px); max-height: 0; }
  to { opacity: 1; transform: translateY(0); max-height: 420px; }
}
/* Maand-label in de kop: tikbaar (opent de datumkiezer), geen dropdown-caret. */
.agenda-mobile__monthwrap { position: relative; display: inline-flex; }
.agenda-mobile__monthlabel {
  font-size: var(--text-base); font-weight: 800; min-width: 104px; text-align: center; text-transform: capitalize;
  border: 0; background: none; color: inherit; font-family: inherit; padding: 4px 2px; cursor: pointer;
}

/* Uitklap-maandoverzicht (design scherm 5): alleen het raster. */
.agenda-monthov { padding: 0; }
.agenda-monthov__dows { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 2px; }
.agenda-monthov__dow { text-align: center; font-size: var(--text-10); font-weight: 700; color: var(--color-faint); }
.agenda-monthov__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px 4px; }
.agenda-monthov__cell {
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  padding: 6px 0 4px; border-radius: 12px; text-decoration: none; color: var(--color-text);
}
.agenda-monthov__cell:active { background: var(--color-softer); }
.agenda-monthov__num { font-size: var(--text-sm); font-weight: 600; line-height: 1.1; }
.agenda-monthov__cell--out .agenda-monthov__num { color: var(--color-faint); }
.agenda-monthov__cell--today { background: var(--color-soft); }
.agenda-monthov__cell--today .agenda-monthov__num { color: var(--color-accent); font-weight: 800; }
.agenda-monthov__cell--sel { background: var(--color-accent); }
.agenda-monthov__cell--sel .agenda-monthov__num { color: var(--color-on-accent); font-weight: 800; }
.agenda-monthov__dot { width: 5px; height: 5px; border-radius: 50%; background: transparent; }
.agenda-monthov__dot--on { background: var(--color-accent); }
.agenda-monthov__cell--sel .agenda-monthov__dot--on { background: var(--color-surface); }
.agenda-monthov__collapse {
  display: flex; align-items: center; justify-content: center; gap: 6px;
  width: 100%; padding: 8px 0 4px; margin: 2px 0 0; border: 0; background: none; cursor: pointer;
}
.agenda-monthov__collapse:active { opacity: .5; }
.agenda-monthov__collapse svg { width: 13px; height: 13px; color: var(--color-faint); }

/* Week-strip + maand-overlay (design scherm 5): gedeelde dag-koppen, en het maandraster
   als ABSOLUTE overlay die met max-height óver de daglijst schuift (veeg/­tik open/dicht). */
.agenda-mobile__week { margin-bottom: 2px; }
.agenda-mobile__dows { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 2px; }
.agenda-mobile__dow { text-align: center; font-size: var(--text-10); font-weight: 700; color: var(--color-faint); }
/* Eén kalender-paneel: ingeklapt één rij (huidige week), groeit naar de hele maand.
   De hoogte wordt door JS gezet; overflow verbergt de niet-zichtbare weken. */
.agenda-mobile__cal, .agenda-mobile__expander { touch-action: none; }
.agenda-mobile__cal { overflow: hidden; height: 44px; }
.agenda-monthov { will-change: transform; }

/* ===================== INLOG (auth) ===================== */
/* Rustige, warme "doorway": gecentreerde kaart op een zachte warme gloed. Mobile-
   first; inputs 16px (geen iOS-zoom) en 48px hoog (touch). */
.auth {
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: var(--space-6);
  background:
    radial-gradient(120% 80% at 50% -10%, rgba(204, 120, 92, 0.10), transparent 60%),
    radial-gradient(90% 60% at 100% 110%, rgba(212, 162, 127, 0.12), transparent 55%),
    var(--color-bg);
}

.auth__card {
  width: 100%;
  max-width: 400px;
  padding: var(--space-8) var(--space-6);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: 0 12px 40px rgba(25, 25, 25, 0.08), 0 2px 8px rgba(25, 25, 25, 0.04);
  animation: auth-in 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

@keyframes auth-in {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
  .auth__card { animation: none; }
}

/* Woordmerk boven de card — groter, gecentreerd (geen icoon-tegel meer). */
.auth__brand {
  display: flex;
  justify-content: center;
  margin-bottom: var(--space-6);
}

.auth__heading {
  margin-bottom: var(--space-6);
  font-size: 1.6rem;
  font-weight: 600;
  letter-spacing: -0.02em;
  color: var(--color-text);
}
.auth__heading:has(+ .auth__lede) { margin-bottom: var(--space-2); }

/* Intro-regel onder de kop (bv. op de wachtwoord-vergeten-pagina). */
.auth__lede {
  margin: 0 0 var(--space-6);
  font-size: var(--text-sm);
  line-height: var(--leading);
  color: var(--color-text-muted);
}

/* "Wachtwoord vergeten?" — kleine link, rechts onder het wachtwoordveld. */
.auth__forgot {
  margin-top: calc(-1 * var(--space-2));
  text-align: right;
  font-size: var(--text-sm);
}

.auth__form { display: flex; flex-direction: column; gap: var(--space-4); }
.auth__field { display: flex; flex-direction: column; gap: 6px; }
.auth__label { font-size: var(--text-sm); font-weight: 500; color: var(--color-text); }

.auth__input {
  width: 100%;
  height: 48px;
  padding: 0 var(--space-3);
  font-size: 1rem; /* 16px → geen iOS-zoom */
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-control);
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.auth__input::placeholder { color: var(--color-text-muted); }
.auth__input:focus {
  outline: none;
  border-color: var(--color-accent);
  box-shadow: 0 0 0 3px rgba(204, 120, 92, 0.15);
}
.auth__input--password { padding-right: 48px; }

.auth__input-wrap { position: relative; }
.auth__reveal {
  position: absolute;
  top: 0;
  right: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 48px;
  color: var(--color-text-muted);
  background: none;
  border: 0;
  border-radius: var(--radius-control);
  cursor: pointer;
}
.auth__reveal:hover { color: var(--color-text); }
.auth__eye { width: 20px; height: 20px; }
/* Eén icoon zichtbaar: standaard het oog (tonen); na onthullen het doorgestreepte. */
.auth__eye--off { display: none; }
.auth__field.is-revealed .auth__eye--on { display: none; }
.auth__field.is-revealed .auth__eye--off { display: inline-block; }

/* Wachtwoord-sterkte-indicatie (alleen visueel). Track + groeiende balk + label.
   Kleur per niveau: zwak = error-rood, matig = kraft (tan), sterk = accent. */
.auth__strength { display: flex; align-items: center; gap: var(--space-2); margin-top: 6px; }
.auth__strength-track {
  flex: 1;
  height: 6px;
  background: var(--color-border);
  border-radius: 999px;
  overflow: hidden;
}
.auth__strength-bar {
  display: block;
  width: 0;
  height: 100%;
  border-radius: 999px;
  background: var(--color-border);
  transition: width 0.2s ease, background-color 0.2s ease;
}
.auth__strength-bar[data-level="1"] { background: var(--color-error); }
.auth__strength-bar[data-level="2"] { background: var(--kraft); }
.auth__strength-bar[data-level="3"] { background: var(--color-accent); }
.auth__strength-label {
  min-width: 3.5em;
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}

.auth__submit {
  margin-top: var(--space-2);
  width: 100%;
  height: 48px;
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-on-accent);
  background: var(--color-accent);
  border: 0;
  border-radius: var(--radius-control);
  cursor: pointer;
  transition: background 0.15s ease, transform 0.05s ease;
}
.auth__submit:hover { background: var(--color-accent-hover); }
.auth__submit:active { transform: translateY(1px); }

.auth__alert {
  margin-bottom: var(--space-4);
  padding: var(--space-3);
  font-size: var(--text-sm);
  line-height: var(--leading);
  color: var(--color-error);
  background: rgba(192, 54, 44, 0.08);
  border: 1px solid rgba(192, 54, 44, 0.3);
  border-radius: var(--radius);
}

/* Notice (info/bevestiging, bv. "we hebben je een e-mail gestuurd"). */
.auth__notice {
  margin-bottom: var(--space-4);
  padding: var(--space-3);
  font-size: var(--text-sm);
  line-height: var(--leading);
  color: var(--color-text);
  background: var(--color-chat-surface-own);
  border-radius: var(--radius);
}

/* Alternatieve actie onder de card (bv. "Nog geen account? Maak er een aan"). */
.auth__alt {
  width: 100%;
  max-width: 400px;
  margin-top: var(--space-4);
  text-align: center;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}
.auth__alt-link {
  margin-left: 4px;
  color: var(--color-accent);
  font-weight: 500;
  text-decoration: none;
}
.auth__alt-link:hover { text-decoration: underline; }

/* Mobiel: geen card-chrome (het formulier staat los op de warme achtergrond),
   maar het merk blijft erboven en de link eronder staan. */
@media (max-width: 767px) {
  .auth__card {
    max-width: none;
    width: 100%;
    padding: var(--space-6) 0;
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
    animation: none;
  }
}

/* ── Wachtwoordloze aanmeld-/inlogflow (e-mail → code → voornaam → Face ID) ── */
/* Tagline onder het woordmerk. */
.auth__tagline {
  margin: calc(-1 * var(--space-4)) 0 var(--space-6);
  text-align: center;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}
/* "Inloggen met wachtwoord" / "Terug naar inlogcode" — achtervang-link onderaan de
   aanmeldstap, met scheidingslijn. */
.auth__password-login {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  width: 100%;
  max-width: 400px;
  margin: var(--space-4) auto 0;
  padding-top: var(--space-4);
  border-top: 1px solid var(--color-line);
  text-align: center;
  color: var(--color-accent);
  font-weight: 700;
  font-size: var(--text-sm);
  text-decoration: none;
}
.auth__password-login svg { width: 17px; height: 17px; }
/* Code-veld (OTP): gecentreerd, ruime letter-spacing. */
.auth__form--code { margin-top: var(--space-4); }
.auth__input--code {
  text-align: center;
  font-size: 1.6rem;
  font-weight: 700;
  letter-spacing: 0.5em;
}
.auth__coderow {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  margin-top: var(--space-2);
}
.auth__codehint { font-size: var(--text-sm); color: var(--color-text-muted); }

/* button_to-acties (opnieuw sturen / terug / overslaan / Face ID inschakelen) doen mee
   in de flow alsof het de knop/link zelf is (geen form-wrapper-layout). */
.auth__card form.button_to { display: contents; }
button.auth__alt-link {
  padding: 0;
  background: none;
  border: 0;
  cursor: pointer;
  font: inherit;
}
.auth__back, .auth__skip {
  display: block;
  width: 100%;
  margin-top: var(--space-3);
  text-align: center;
}

/* Accept-modus: paarse co-ouder-uitnodig-banner. */
.auth__invite {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-5);
  padding: 13px 15px;
  background: var(--color-coparent-soft);
  border-radius: 16px;
}
.auth__invite-avatar {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 42px;
  height: 42px;
  border-radius: 50%;
  background: var(--color-coparent);
  color: var(--color-on-accent);
  font-weight: 700;
}
.auth__invite-text { display: flex; flex-direction: column; gap: 1px; }
.auth__invite-title { font-size: var(--text-sm); font-weight: 600; color: var(--color-text); }
.auth__invite-sub { font-size: 0.78rem; color: var(--color-text-muted); }

/* Face ID-stap: gecentreerd, met terracotta icoon-tegel. */
.auth__card--center { text-align: center; }
.auth__lockicon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 84px;
  height: 84px;
  margin: 0 auto var(--space-5);
  border-radius: 24px;
  background: rgba(204, 120, 92, 0.12);
  color: var(--color-accent);
}
.auth__lockicon svg { width: 40px; height: 40px; }

/* ===================== DEV-TOOLING (env-gated, alleen local) =====================
   Split-view + dev-paneel + reset-knoppen. Bewust een eigen, donker
   "developer-console"-palet (hardcoded, los van de tokens) zodat dev-tooling
   visueel onmiskenbaar verschilt van de echte ouder-/pro-UI. Alles hieronder
   verschijnt alleen in dev/test (env-guarded in de layout + controllers). */

/* Dev-paneel als off-canvas drawer (rechts), geopend via het dev-icoon in de
   header (alleen development). De gescopete --dev-*-tokens (GitHub-dark-achtig)
   staan hier zodat .dev-panel en .dev-reset binnen de drawer ze erven. */
.dev-drawer {
  --dev-bg: #0d1117;
  --dev-surface: #161b22;
  --dev-elev: #1f2733;
  --dev-border: #283041;
  --dev-text: #e6edf3;
  --dev-muted: #8b949e;
  --dev-accent: #58a6ff;
  --dev-accent-hover: #79b8ff;
  --dev-info: #a5d6ff;
  --dev-warn: #e3b341;
  --dev-border-hover: #3a455c;
  --dev-ok: #3fb950;
  --dev-warn: #d29922;
  --dev-danger: #f85149;

  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  z-index: 40;
  width: 360px;
  max-width: 90vw;
  overflow-y: auto;
  background: var(--dev-bg);
  color: var(--dev-text);
  border-left: 1px solid var(--dev-border);
  font-family: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, monospace;
  transform: translateX(100%);
  transition: transform 0.2s ease;
}
.app.dev-panel-open .dev-drawer { transform: translateX(0); }

.dev-drawer__backdrop {
  position: fixed;
  inset: 0;
  z-index: 39;
  background: rgba(0, 0, 0, 0.4);
  display: none;
}
.app.dev-panel-open .dev-drawer__backdrop { display: block; }

/* Desktop (≥768px): het dev-paneel staat in de flex-flow rechts — net als de
   sidebar links. Geen overlay/backdrop: dicht = breedte 0, open = 360px, dus
   .app__main (flex: 1) krimpt fysiek mee. De open-staat blijft staan (de
   controller bewaart 'm in localStorage en herstelt bij connect). z-index: auto
   zodat het zwevende dev-icoon (z-38) erboven blijft en kan toggelen. */
@media (min-width: 768px) {
  .dev-drawer {
    position: relative;
    top: auto;
    bottom: auto;
    z-index: auto;
    flex-shrink: 0;
    width: 0;
    max-width: none;
    overflow: hidden;
    border-left: 0;
    transform: none;
    transition: width 0.15s ease;
  }
  .app.dev-panel-open .dev-drawer {
    width: 360px;
    overflow-y: auto;
    border-left: 1px solid var(--dev-border);
  }
  .dev-drawer__backdrop { display: none !important; }
}

.dev-panel {
  padding: var(--space-3);
  font-size: var(--text-xs);
  line-height: 1.5;
}

/* Sticky header met env-badge: altijd zichtbaar dat dit dev-tooling is. */
.dev-panel__header {
  position: sticky;
  top: 0;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: var(--space-2);
  margin: calc(var(--space-3) * -1) calc(var(--space-3) * -1) var(--space-3);
  padding: var(--space-3);
  background: var(--dev-bg);
  border-bottom: 1px solid var(--dev-border);
}

.dev-panel__badge {
  padding: 2px 6px;
  font-size: var(--text-10);
  font-weight: 700;
  letter-spacing: 0.1em;
  color: var(--dev-warn);
  border: 1px solid var(--dev-warn);
  border-radius: 4px;
}

.dev-panel__title {
  margin: 0;
  font-size: var(--text-11);
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--dev-text);
}

/* Secties als subtiele kaarten — duidelijke groepering i.p.v. losse regels. */
.dev-panel__section {
  margin-bottom: var(--space-3);
  padding: var(--space-3);
  background: var(--dev-surface);
  border: 1px solid var(--dev-border);
  border-radius: 8px;
}

.dev-panel__section-title {
  margin: 0 0 var(--space-2);
  font-size: var(--text-10);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--dev-muted);
}

/* Inklapbare secties (<details>): de titel is de summary, met een chevron rechts
   die meedraait. Standaard open (open-attribuut in de HAML). */
.dev-panel__section--collapsible > summary {
  display: flex;
  align-items: center;
  margin: 0;
  cursor: pointer;
  list-style: none;
  user-select: none;
}
.dev-panel__section--collapsible > summary::-webkit-details-marker { display: none; }
.dev-panel__section--collapsible[open] > summary { margin-bottom: var(--space-2); }
.dev-panel__section--collapsible > summary::after {
  content: "›";
  margin-left: auto;
  font-size: var(--text-15);
  line-height: 1;
  color: var(--dev-muted);
  transition: transform 0.15s ease;
}
.dev-panel__section--collapsible[open] > summary::after { transform: rotate(90deg); }
.dev-panel__section--collapsible > summary:hover::after { color: var(--dev-text); }

.dev-panel__row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-3);
  padding: 5px 0;
}
.dev-panel__row + .dev-panel__row { border-top: 1px solid rgba(255, 255, 255, 0.04); }

.dev-panel__label { color: var(--dev-muted); }
.dev-panel__value {
  color: var(--dev-text);
  font-weight: 500;
  text-align: right;
  word-break: break-word;
}

.dev-panel__empty { padding: var(--space-3); color: var(--dev-muted); font-style: italic; }
.dev-panel__empty-inline { color: var(--dev-muted); font-style: italic; }

/* Status-pills (dot + label) voor backend, uitkomst, hard mode. */
.dev-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 2px 9px;
  font-size: var(--text-11);
  font-weight: 600;
  white-space: nowrap;
  border: 1px solid currentColor;
  border-radius: 999px;
}
.dev-pill::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: currentColor;
}
.dev-pill--ok      { color: var(--dev-ok); }
.dev-pill--warn    { color: var(--dev-warn); }
.dev-pill--accent  { color: var(--dev-accent); }
.dev-pill--muted   { color: var(--dev-muted); }
.dev-pill--neutral { color: var(--dev-text); border-color: var(--dev-border); }
.dev-pill--neutral::before { display: none; }

/* Meetscores als stat-chips: de score groot (hero), uitkomst + hard mode ernaast. */
.dev-stats {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}
.dev-stat {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
  padding: var(--space-2) var(--space-3);
  background: var(--dev-bg);
  border: 1px solid var(--dev-border);
  border-radius: 6px;
}
.dev-stat--wide { grid-column: 1 / -1; }
.dev-stat__label {
  font-size: var(--text-10);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--dev-muted);
}
.dev-stat__value {
  font-size: var(--text-22);
  font-weight: 700;
  line-height: 1;
  color: var(--dev-text);
  font-variant-numeric: tabular-nums;
}

.dev-details summary {
  cursor: pointer;
  color: var(--dev-accent);
  font-size: var(--text-11);
}

.dev-panel__json {
  margin: var(--space-2) 0 0;
  padding: var(--space-3);
  background: var(--dev-bg);
  border: 1px solid var(--dev-border);
  border-radius: 6px;
  font-size: var(--text-11);
  color: var(--dev-info);
  white-space: pre-wrap;
  word-break: break-word;
  overflow-x: auto;
}

.dev-input {
  width: 100%;
  margin-bottom: var(--space-2);
  padding: var(--space-2) var(--space-3);
  background: var(--dev-bg);
  border: 1px solid var(--dev-border);
  border-radius: 6px;
  font-family: inherit;
  font-size: var(--text-11);
  color: var(--dev-text);
  resize: vertical;
}
.dev-input::placeholder { color: var(--dev-muted); }
.dev-input:focus-visible { outline: 2px solid var(--dev-accent); outline-offset: 1px; }

.dev-btn {
  width: 100%;
  padding: 8px 10px;
  font-family: inherit;
  font-size: var(--text-11);
  font-weight: 600;
  color: var(--dev-text);
  background: var(--dev-bg);
  border: 1px solid var(--dev-border);
  border-radius: 6px;
  cursor: pointer;
  transition: background 0.12s ease, border-color 0.12s ease;
}
.dev-btn:hover { background: var(--dev-elev); border-color: var(--dev-border-hover); }
.dev-btn--primary {
  color: var(--dev-bg);
  background: var(--dev-accent);
  border-color: var(--dev-accent);
}
.dev-btn--primary:hover { background: var(--dev-accent-hover); border-color: var(--dev-accent-hover); }

.dev-panel__warning {
  display: flex;
  gap: var(--space-2);
  margin-top: var(--space-2);
  padding: var(--space-2) var(--space-3);
  background: rgba(210, 153, 34, 0.12);
  border: 1px solid rgba(210, 153, 34, 0.5);
  border-left: 3px solid var(--dev-warn);
  border-radius: 6px;
  font-size: var(--text-11);
  line-height: 1.45;
  color: var(--dev-warn);
}
.dev-panel__warning-icon { flex-shrink: 0; }

.dev-reset {
  padding: var(--space-3);
  border-top: 1px solid var(--dev-border);
}
.dev-reset__title {
  margin: 0 0 var(--space-2);
  font-size: var(--text-10);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--dev-muted);
}
.dev-reset form.button_to { display: block; margin: 0 0 var(--space-2); }
.dev-reset__btn {
  width: 100%;
  padding: 8px 10px;
  font-family: inherit;
  font-size: var(--text-11);
  font-weight: 600;
  border-radius: 6px;
  border: 1px solid rgba(248, 81, 73, 0.5);
  background: transparent;
  color: var(--dev-danger);
  cursor: pointer;
  transition: background 0.12s ease;
}
.dev-reset__btn:hover { background: rgba(248, 81, 73, 0.12); }

/* Gezin-hub — mobile-first; op desktop sidebar + paneel. Volledige visuele polish (knoppen/velden)
   = aparte style-agent-pass; dit blok regelt alleen de responsieve layout van de nieuwe secties. */
.gezin__layout { display: flex; flex-direction: column; gap: var(--space-4, 1rem); }
.gezin__nav { display: flex; flex-wrap: wrap; gap: var(--space-2, .5rem); }
.gezin__nav-item { text-decoration: none; padding: .5rem .75rem; border-radius: var(--radius-2, .5rem); }
.gezin__content { display: flex; flex-direction: column; gap: var(--space-4, 1rem); min-width: 0; }
.children { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--space-2, .5rem); }
.children__item { display: block; }
/* Read-first kind-kaart (C-2): tikbaar naar de detailpagina; bewerken leeft daar. */
.children__card {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-control);
  text-decoration: none;
  color: var(--color-text);
  transition: background var(--dur-fast) var(--curve-decel);
}
.children__card:hover { background: var(--color-hover); }
.children__card::after {
  content: "›";
  margin-left: auto;
  font-size: 1.375rem;
  line-height: 1;
  color: var(--color-text-muted);
}
.children__name { font-weight: var(--weight-medium); }
.children__age { color: var(--color-text-muted); font-size: var(--text-sm); }
.form__row { display: flex; flex-direction: column; gap: .25rem; margin-bottom: var(--space-3, .75rem); }
.form--inline { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2, .5rem); }
/* In een inline-form groeit het veld mee maar laat het de knop ernaast staan
   (i.p.v. de width:100% van de gedeelde veldbasis, die zou laten wrappen). */
.form--inline .form__input { width: auto; flex: 1 1 16rem; min-width: 0; }
.form__input--year { max-width: 8rem; }

/* ===================== SCHOOL/OPVANG-TOEVOEGFORMULIER ===================== */
.school-form { display: flex; flex-direction: column; }
/* [hidden] moet winnen van de display:flex-regels hieronder, anders blijven
   verborgen tijd-/soort-blokken zichtbaar (Stimulus zet .hidden, CSS overschreef). */
.school-form [hidden] { display: none !important; }
.school-form .form__label { display: block; font-weight: 700; margin: 18px 0 8px; }
.school-form__name { width: 100%; border: none; border-bottom: 1.5px solid var(--color-line); border-radius: 0; background: none; padding: 8px 2px; font-size: var(--text-20); color: var(--color-text); margin-bottom: 4px; }
.school-form__name:focus { border-bottom-color: var(--color-accent); outline: none; }
.form__label--accent { color: var(--color-accent); }
.form__label-opt { color: var(--color-faint); font-weight: 600; margin-left: 4px; }

/* Type-toggle (school / opvang) */
.school-form__toggle { display: flex; gap: 8px; }
.school-form__toggle-btn { flex: 1; padding: 11px; border: 1px solid var(--color-border); border-radius: 11px; background: var(--color-surface); color: var(--color-text); font-weight: 700; font-size: var(--text-sm); cursor: pointer; transition: transform .12s ease; }
.school-form__toggle-btn:active { transform: scale(.97); }
.school-form__toggle-btn.is-active { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }

/* Schooldagen-pills (verborgen checkbox + label) */
.school-form__days { display: flex; gap: 8px; }
.daypill { flex: 1; position: relative; }
.daypill__input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.daypill__label { display: block; text-align: center; padding: 12px 0; border: 1px solid var(--color-border); border-radius: 11px; background: var(--color-surface); color: var(--color-text); font-weight: 700; font-size: var(--text-sm); cursor: pointer; }
.daypill.is-active .daypill__label { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }
.daypill__input:focus-visible + .daypill__label { outline: 2px solid var(--color-focus); outline-offset: 2px; }

/* "Elke dag dezelfde tijd" — schakelaar-rij */
.school-form__same { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 16px; padding: 13px 16px; border: 1px solid var(--color-line); border-radius: 14px; font-weight: 600; font-size: var(--text-sm); cursor: pointer; }
.school-form__switch { appearance: none; -webkit-appearance: none; position: relative; flex: none; width: 46px; height: 28px; border-radius: 999px; background: var(--color-line); border: none; cursor: pointer; transition: background .18s ease; }
.school-form__switch::after { content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: var(--color-surface); box-shadow: 0 1px 2px rgba(0,0,0,.2); transition: transform .18s ease; }
.school-form__switch:checked { background: var(--color-accent); }
.school-form__switch:checked::after { transform: translateX(18px); }

/* Tijden — uniform paar en per-dag-rijen */
.school-form__times { display: flex; gap: 12px; margin-top: 14px; }
.school-form__time { flex: 1; display: flex; flex-direction: column; gap: 6px; }
.school-form__time-label { font-size: var(--text-xs); color: var(--color-faint); font-weight: 700; }
.school-form__perday { margin-top: 14px; display: flex; flex-direction: column; gap: 10px; }
.school-form__perday-row { display: flex; align-items: center; gap: 8px; }
.school-form__perday-day { flex: none; width: 28px; font-size: var(--text-13); font-weight: 700; color: var(--color-text-muted); }
.school-form__perday-row .form__input { flex: 1; min-width: 0; }
.school-form__perday-sep { color: var(--color-faint); }
.school-form__submit { margin-top: 22px; }

/* ===================== FORMULIER-VELDEN (gedeeld, Fluent v9) ===================== */

/* Zero-specificity baseline: élke bare input/select/textarea in de app krijgt een
   nette Fluent-doos, óók zónder class. `:where()` heeft specificiteit 0, dus elke
   class-regel hieronder (.form__*, .auth__input, .agenda-form__field, .compose__body,
   .field__input) wint moeiteloos en blijft intact. Voorkomt losse systeemvelden. */
:where(
  input:not([type="checkbox"], [type="radio"], [type="file"], [type="range"], [type="color"], [type="submit"], [type="button"], [type="reset"]),
  select,
  textarea
) {
  min-height: 40px;
  padding: 8px var(--space-3);
  font: inherit;
  color: var(--color-text);
  background-color: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-control);
  transition: border-color var(--dur-fast) var(--curve-decel);
}
:where(
  input:not([type="checkbox"], [type="radio"], [type="file"], [type="range"], [type="color"], [type="submit"], [type="button"], [type="reset"]):focus,
  select:focus,
  textarea:focus
) {
  outline: none;
  border-color: var(--color-accent);
}

/* Eén expliciete basis voor de geclassificeerde velden — vervangt de losse native
   form__-velden én de oude settings-.field__input (DRY). Fluent v9-signatuur: vlak
   veld met 1px stroke en een accent-onderlijn die op focus ingroeit. Geen box-shadow-
   ring (clean). Selects krijgen een eigen chevron i.p.v. de systeem-pijl. */
.form__label,
.field__label { font-size: var(--text-sm); font-weight: 500; color: var(--color-text); }

.form__input,
.form__select,
.form__textarea,
.form__input--textarea,
.field__input {
  width: 100%;
  min-height: 40px;
  padding: 8px var(--space-3);
  font: inherit;
  color: var(--color-text);
  background-color: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-control);
  /* Accent-onderlijn: groeit op focus vanuit het midden (Fluent v9-veld-signatuur). */
  background-image: linear-gradient(var(--color-accent), var(--color-accent));
  background-repeat: no-repeat;
  background-position: bottom center;
  background-size: 0 2px;
  transition: border-color var(--dur-fast) var(--curve-decel),
              background-size var(--dur-normal) var(--curve-decel);
}

.form__input::placeholder,
.form__textarea::placeholder,
.form__input--textarea::placeholder,
.field__input::placeholder { color: var(--color-text-muted); }

.form__input:focus,
.form__select:focus,
.form__textarea:focus,
.form__input--textarea:focus,
.field__input:focus {
  outline: none;
  border-color: var(--color-accent);
  background-size: 100% 2px;
}

/* Select: eigen chevron i.p.v. de native systeem-pijl (de grootste "systeemveld"-tell).
   .form__input--select is een alias: overal waar een select ".form__input form__input--select"
   draagt krijgt-ie zo dezelfde chevron mét ruime rechter-padding (i.p.v. de native pijl die
   tegen de rand plakte). Eén bron voor álle app-selects (DRY). */
.form__select,
.form__input--select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 40px;
  cursor: pointer;
  background-image:
    linear-gradient(var(--color-accent), var(--color-accent)),
    var(--select-chevron);
  background-repeat: no-repeat, no-repeat;
  background-position: bottom center, right 14px center;
  background-size: 0 2px, 12px 12px;
}
.form__select:focus,
.form__input--select:focus { background-size: 100% 2px, 12px 12px; }

/* Textarea: hoger, verticaal schaalbaar. */
.form__textarea,
.form__input--textarea {
  min-height: 88px;
  padding: var(--space-2) var(--space-3);
  line-height: var(--leading);
  resize: vertical;
}

.form__input--small { min-height: 36px; }

.form__input:disabled,
.form__select:disabled,
.form__input--select:disabled,
.form__textarea:disabled,
.field__input:disabled { opacity: 0.6; cursor: not-allowed; }

@media (min-width: 48rem) {
  .gezin__layout { flex-direction: row; align-items: flex-start; }
  .gezin__nav { flex-direction: column; flex: 0 0 12rem; position: sticky; top: var(--space-4, 1rem); }
  .gezin__content { flex: 1 1 auto; }
}

/* ===================== MIJN GEZINNEN-HUB ===================== */
/* Overzicht van de gezinnen van de ingelogde ouder: paginakop met "nieuw gezin",
   daaronder klikbare gezin-kaarten (BeNice-achtig: icoon · naam/status · chevron,
   met leden + uitnodig-badge). Zelfde content-breedte als de instellingen-hub. */
.container.gezinnen { max-width: 880px; }

.gezinnen__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  flex-wrap: wrap;
  margin-bottom: var(--space-6);
}

.gezinnen__title {
  font-family: var(--font-display);
  font-size: 1.375rem;
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--color-text);
}

.gezinnen__new { gap: var(--space-2); }
.gezinnen__new .icon { width: 18px; height: 18px; }

.gezinnen__list {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.gezinnen__empty { color: var(--color-text-muted); }

/* De kaart is één grote link: hele rij klikbaar, hover als zachte lift. */
.gezin-card {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
  text-decoration: none;
  color: var(--color-text);
  transition: border-color var(--dur-fast) var(--curve-decel),
              box-shadow var(--dur-fast) var(--curve-decel);
}
.gezin-card:hover {
  border-color: var(--color-accent);
  box-shadow: var(--shadow-4);
}

.gezin-card__head {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}
.gezin-card__head > .icon {
  flex: none;
  width: 28px;
  height: 28px;
  color: var(--color-accent);
}
.gezin-card__titles {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  flex: 1;
}
.gezin-card__name { font-weight: var(--weight-medium); }
.gezin-card__status { font-size: var(--text-sm); color: var(--color-text-muted); }
.gezin-card__chevron {
  flex: none;
  width: 18px;
  height: 18px;
  color: var(--color-text-muted);
  transform: rotate(180deg); /* chevrons-icoon wijst links; hier vooruit */
}

.gezin-card__members {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
}
.gezin-card__member {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  background: var(--color-hover);
  padding: 2px var(--space-3);
  border-radius: 999px;
}
/* Status-pill (BeNice-achtig warm geel → bij ons Manilla): uitnodiging onderweg /
   actie nodig. De action-variant kleurt accent zodat hij als uitnodiging-CTA leest. */
.gezin-card__badge {
  font-size: var(--text-sm);
  background: var(--color-chat-bubble-own);
  color: var(--color-text);
  padding: 2px var(--space-3);
  border-radius: 999px;
}
.gezin-card__badge--action {
  background: var(--color-surface-own);
  color: var(--color-accent);
  font-weight: var(--weight-medium);
}

/* ===================== SCHERMKOP (full-bleed top-level schermen) =====================
   In-body kop die de app-topbar vervangt op de full-bleed schermen: serif-titel links,
   kebab (Instellingen/Uitloggen) rechts. Ontwerp: elke pagina draagt zijn eigen kop. */
.screen-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  padding-top: calc(8px + env(safe-area-inset-top, 0px));
  margin-bottom: 14px;
}
.screen-head__title {
  font-family: var(--font-display);
  font-size: var(--text-28);
  font-weight: 500;
  line-height: 1.1;
  color: var(--color-text);
}
.screen-head__actions { display: flex; align-items: center; gap: 8px; }
.screen-head__action {
  width: 38px;
  height: 38px;
  flex: none;
  display: grid;
  place-items: center;
  border-radius: 50%;
  border: 0;
  cursor: pointer;
  background: var(--color-soft);
  color: var(--color-accent);
}
.screen-head__action .icon { width: 20px; height: 20px; }
/* De kebab is mobiel; op desktop verzorgt de sidebar instellingen/uitloggen. */
@media (min-width: 768px) { .screen-head .dropdown { display: none; } }

/* ===================== GESPREKKEN-HOME ===================== */
/* Ouder-landing: een gesprekkenlijst (WhatsApp/Outlook-stijl) — per actief gezin een
   klikbare rij met kleur-stip, naam, laatste-bericht-preview en ongelezen-badge. Eén
   wit paneel met hairline-scheidingen tussen de rijen. Zelfde breedte als de hub. */
.container.conversation-list { max-width: 880px; }

/* De gedeelde app-topbar draagt de safe-area (top 0); zijpadding 18px = app-brede
   scherm-padding (gelijk aan Home/Gezin/Agenda), niet de generieke .container-16/24px. */
.container.conversation-list { padding: 0 18px var(--space-4); }
.app-topbar + .screen-head { padding-top: 0; }

/* ===================== GEDEELDE APP-TOPBAR ===================== */
/* Merknaam "Blinco" links + bel + avatar rechts. Identiek + op dezelfde hoogte op
   Home, Gesprekken, Agenda en Gezin (design-handoff). */
.app-topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  align-self: stretch;
  width: 100%;
  padding-top: calc(8px + env(safe-area-inset-top, 0px));
  margin-bottom: 8px;
}
/* De topbar staat sinds de header-unificatie óók bovenaan de sectie-schermen (via
   shared/_section_head). Die containers dragen de safe-area zelf al — daarbinnen dus
   niet nóg een keer, anders valt de kop te laag. */
.gezin-section > .app-topbar,
.account-section > .app-topbar,
.account > .app-topbar,
.fotoboek-invitescreen > .app-topbar { padding-top: 0; }
.app-topbar__brand .blinco-logo { font-size: var(--text-20); }
.app-topbar__actions { display: flex; align-items: center; gap: var(--space-2); }
.app-topbar__bell {
  position: relative;
  width: 38px;
  height: 38px;
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  color: var(--color-text);
  text-decoration: none;
}
.app-topbar__bell svg { width: 19px; height: 19px; }
/* Paarse ongelezen-stip rechtsboven op de bel (co-ouder-kleur), zoals op de Home. */
.app-topbar__bell--unread::after {
  content: "";
  position: absolute;
  top: 6px;
  right: 6px;
  width: 9px;
  height: 9px;
  border-radius: 50%;
  background: var(--color-coparent);
  border: 2px solid var(--color-surface);
}

/* Zoekveld (placeholder) bovenaan — zacht afgeronde rechthoek (ontwerp): 16px radius,
   warme hairline. Gedeeld door de Gesprekken- en Gezin-zoekbalk (DRY). */
.conversation-search {
  display: flex;
  align-items: center;
  gap: 11px;
  margin-bottom: var(--space-3);
  padding: 13px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 16px;
  box-shadow: var(--shadow-sm);
}
/* Het hidden-attribuut moet de display:flex hierboven kunnen overrulen (class+attribuut
   wint van de class-only regel) — anders blijft de zoekbalk altijd zichtbaar. */
.conversation-search[hidden] { display: none; }
.conversation-search__icon { flex: none; color: var(--color-text-muted); display: grid; place-items: center; }
.conversation-search__icon .icon { width: 20px; height: 20px; }
.conversation-search__input {
  flex: 1;
  min-width: 0;
  border: 0;
  background: none;
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  color: var(--color-text);
}
.conversation-search__input::placeholder { color: var(--color-text-muted); }
.conversation-search__input:focus { outline: none; }
/* Sluit-knop (×) rechts in de zoekbalk — sluit de zoek-modus. */
.conversation-search__clear {
  flex: none;
  display: grid;
  place-items: center;
  width: 24px;
  height: 24px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--color-text-muted);
  cursor: pointer;
}
.conversation-search__clear svg { width: 18px; height: 18px; }

/* De feed: losse kaarten per sectie, krappe ruimte ertussen. */
.conversation-feed {
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

/* Sectielabel boven een groep rijen ("Andere ouder" / "Hulp van Blinco"). */
.conversation-section__label {
  margin: var(--space-6) var(--space-1) var(--space-3);
  font-size: var(--text-xs);
  font-weight: 800;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--color-faint);
}

/* Gezin-rij: avatar-tegel met initiaal · (naam + tijd / preview). Hele regel klikbaar. */
.conversation-row {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 14px 16px;
  text-decoration: none;
  color: var(--color-text);
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  transition: transform var(--dur-fast) var(--curve-decel);
}
.conversation-row:active { transform: scale(0.985); }

/* Leading-tegel: 46px afgeronde vierkant. Gezin = getinte initiaal (gezin-kleur),
   coach = accent-icoon op zacht vlak. */
.conversation-row__tile {
  position: relative;
  flex: none;
  width: 46px;
  height: 46px;
  display: grid;
  place-items: center;
  border-radius: 14px;
  font-weight: 800;
  font-size: var(--text-lg);
  color: var(--gezin-color, var(--color-accent));
  background: color-mix(in srgb, var(--gezin-color, var(--color-accent)) 16%, var(--color-surface));
}
.conversation-row__tile--coach { color: var(--color-accent); background: var(--color-soft); }
.conversation-row__tile--coach .icon { width: 24px; height: 24px; }
/* Ongelezen: pulserende stip rechtsboven de avatar (rust i.p.v. een teller). */
.conversation-row__tile--unread::after {
  content: "";
  position: absolute;
  top: -3px;
  right: -3px;
  width: 13px;
  height: 13px;
  border-radius: 999px;
  background: var(--gezin-color, var(--color-accent));
  border: 2.5px solid var(--color-surface);
  animation: conversation-pulse 2.4s ease-out infinite;
}
@keyframes conversation-pulse {
  0% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--gezin-color, var(--color-accent)) 45%, transparent); }
  70% { box-shadow: 0 0 0 7px color-mix(in srgb, var(--gezin-color, var(--color-accent)) 0%, transparent); }
  100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--gezin-color, var(--color-accent)) 0%, transparent); }
}

.conversation-row__body { flex: 1; min-width: 0; }
.conversation-row__top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-3);
}
.conversation-row__name {
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.conversation-row__time { flex: none; font-size: var(--text-sm); color: var(--color-faint); }
.conversation-row__preview {
  display: block;
  margin-top: 2px;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Coach-rij ("Hulp van Blinco"): zacht accent-vlak, witte icoon-tegel, 24/7-badge. */
.conversation-coach {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 14px 16px;
  text-decoration: none;
  color: var(--color-text);
  background: var(--color-soft);
  border: 1px solid var(--color-soft-border);
  border-radius: 18px;
  transition: transform var(--dur-fast) var(--curve-decel);
}
.conversation-coach:active { transform: scale(0.985); }
.conversation-coach__tile {
  flex: none;
  width: 46px;
  height: 46px;
  display: grid;
  place-items: center;
  border-radius: 14px;
  background: var(--color-surface);
  color: var(--color-accent);
}
.conversation-coach__tile .icon { width: 23px; height: 23px; }
.conversation-coach__body { flex: 1; min-width: 0; }
.conversation-coach__top { display: flex; align-items: center; gap: 7px; }
.conversation-coach__name { font-weight: 700; }
.conversation-coach__badge {
  font-size: var(--text-10);
  font-weight: 800;
  letter-spacing: 0.4px;
  color: var(--color-accent);
  background: var(--color-surface);
  padding: 2px 7px;
  border-radius: 7px;
}
.conversation-coach__preview {
  display: block;
  margin-top: 2px;
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* Uitnodig-rij (nog geen gezin): gestippelde kaart → gezin opzetten. */
.conversation-invite {
  display: flex;
  align-items: center;
  gap: 13px;
  width: 100%;
  padding: 16px;
  text-decoration: none;
  color: var(--color-text);
  background: none;
  border: 1.5px dashed var(--color-border);
  border-radius: 18px;
  text-align: left;
  font: inherit;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--curve-decel);
}
.conversation-invite:active { transform: scale(0.985); }
.conversation-invite__tile {
  flex: none;
  width: 46px;
  height: 46px;
  display: grid;
  place-items: center;
  border-radius: 14px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.conversation-invite__tile .icon { width: 22px; height: 22px; }
.conversation-invite__body { flex: 1; min-width: 0; }
.conversation-invite__title { display: block; font-weight: 700; }
.conversation-invite__text { display: block; margin-top: 1px; font-size: var(--text-sm); color: var(--color-text-muted); }

/* Lege staat: rustige tekst + verwijzing naar Mijn gezinnen. */
.conversation-list__empty {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-4);
  color: var(--color-text-muted);
}

/* ===================== GEZIN-DASHBOARD (kompas 2026-06-18) ===================== */
/* Onderwerp-eerst raadpleeg-dashboard op /gezin. Eén responsive auto-fit-grid:
   desktop tegelt, mobiel stapelt — geen aparte mobiele code. De topband
   (nu-bij-wie) + bijzondere dagen staan vol-breed erboven. */
/* ===================== GEZIN-LANDING (mobiel-eerste directory) =====================
   Design-handoff scherm 8: full-bleed directory met eigen kop, custody-pill, zoek,
   kinderen-rijen (kleur-avatar) en een gedeeld-grid. Op de redesign-tokens. */
.gezinhub {
  max-width: 520px;
  margin: 0 auto;
  /* Geen safe-area-top: de gedeelde .app-topbar (eerste kind) draagt die. */
  padding: 0 18px 24px;
  color: var(--color-text);
}
.gezinhub__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--space-3);
  margin-bottom: 14px;
}
.gezinhub__head-main { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.gezinhub__title { font-family: var(--font-display); font-size: var(--text-28); font-weight: 600; line-height: 1.05; }
.gezinhub__sub { font-size: var(--text-13); color: var(--color-text-muted); }
/* Zoek-toggle in de kop (klapt de verborgen zoekbalk uit) — consistent met Gesprekken. */
.gezinhub__search-toggle { appearance: none; -webkit-appearance: none; flex: none; margin-top: 4px; width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; border: 1px solid var(--color-line); background: var(--color-surface); color: var(--color-text-muted); cursor: pointer; }
.gezinhub__search-toggle svg { width: 19px; height: 19px; }
.gezinhub__search-toggle:active { background: var(--color-softer); transform: scale(0.95); }
.gezinhub__kebab {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  margin-top: 4px;
  border-radius: 50%;
  color: var(--color-text-muted);
}
.gezinhub__kebab svg { width: 22px; height: 22px; }
.gezinhub__kebab:active { background: var(--color-soft); }

/* Custody-contextregel: zachte co-ouder-tint, klikbaar → agenda. */
.gezinhub__custody {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 14px;
  padding: 11px 14px;
  background: var(--color-coparent-soft);
  border-radius: 14px;
  text-decoration: none;
  color: var(--color-text);
  transition: transform var(--dur-fast) var(--curve-decel);
}
.gezinhub__custody:active { transform: scale(0.99); }
.gezinhub__custody-icon { flex: none; width: 18px; height: 18px; color: var(--color-coparent); }
.gezinhub__custody-text { flex: 1; min-width: 0; font-size: var(--text-13); }
.gezinhub__custody-text b { font-weight: 800; }
.gezinhub__custody-chevron { flex: none; width: 16px; height: 16px; color: var(--color-coparent); }

/* Sectiekop + label. */
.gezinhub__section-label {
  display: block;
  margin: 24px 4px 12px;
  font-size: var(--text-xs);
  font-weight: 800;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--color-faint);
}
/* Spil-kaart "Begin met je kinderen": warme accent-tint-kaart — de éne eerste stap.
   Icoon-chip wit (--color-surface) op de --color-soft kaart, accent-icoon; zelfde radius
   + schaduw als de andere kaarten. */
.gezinhub__spil {
  display: flex;
  align-items: center;
  gap: 14px;
  width: 100%;
  margin-bottom: 14px;
  padding: 16px 17px;
  background: var(--color-soft);
  border: none;
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  color: var(--color-text);
  text-align: left;
  font: inherit;
  cursor: pointer;
  transition: transform var(--dur-fast) var(--curve-decel);
}
.gezinhub__spil:active { transform: scale(0.99); }
.gezinhub__spil-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border-radius: 14px;
  background: var(--color-surface);
  color: var(--color-accent);
}
.gezinhub__spil-icon svg { width: 24px; height: 24px; }
.gezinhub__spil-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.gezinhub__spil-title { font-size: var(--text-base); font-weight: 800; color: var(--color-text); }
.gezinhub__spil-sub { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; }
.gezinhub__spil-chevron { flex: none; width: 20px; height: 20px; color: var(--color-accent); }

/* Uitnodig-rij (Andere ouder) als sheet-opener — zelfde chrome als de instellingen-kaart. */
.gezinhub__invite {
  display: flex;
  align-items: center;
  gap: 13px;
  width: 100%;
  margin-bottom: 14px;
  padding: 14px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  color: var(--color-text);
  text-align: left;
  font: inherit;
  cursor: pointer;
  /* De kaart is soms een <a> (paywall-variant van invite_cta) — zonder reset onderstreept
     de browser dan de hele kaarttekst. */
  text-decoration: none;
  transition: transform var(--dur-fast) var(--curve-decel);
}
.gezinhub__invite:active { transform: scale(0.99); }
.gezinhub__invite-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 42px;
  height: 42px;
  border-radius: 13px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.gezinhub__invite-icon svg { width: 20px; height: 20px; }
.gezinhub__invite-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.gezinhub__invite-title { font-size: var(--text-15); font-weight: 700; color: var(--color-accent); }
.gezinhub__invite-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.gezinhub__invite-chevron { flex: none; width: 19px; height: 19px; color: var(--color-faint); }
/* Openstaande uitnodiging (zelfde rij, niet-klikbaar) — .leden-invite--pending-patroon. */
.gezinhub__invite--pending { cursor: default; }
.gezinhub__invite--pending .gezinhub__invite-icon { background: var(--color-softer); color: var(--color-faint); }
.gezinhub__invite-title--pending { color: var(--color-text-muted); font-weight: 600; }
.gezinhub__invite-cancel-form { margin: 0; flex: none; }
.gezinhub__invite-cancel { font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-error); background: none; border: 0; padding: 4px 6px; cursor: pointer; }
.gezinhub__invite-cancel:active { opacity: 0.7; }

/* Rij-kaart (gedeeld door kind- en toestemming-rijen, DRY): leading + body + trailing. */
.gezinhub__kids { display: flex; flex-direction: column; gap: 10px; }
.gezinhub__consents,
.gezinhub__regelingen { display: flex; flex-direction: column; gap: 10px; }
.gezinhub__kid,
.gezinhub__consent {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  text-decoration: none;
  color: var(--color-text);
  transition: transform var(--dur-fast) var(--curve-decel);
}
.gezinhub__kid:active,
.gezinhub__consent:active { transform: scale(0.985); }
.gezinhub__kid-avatar {
  flex: none;
  width: 50px;
  height: 50px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--kid-color, var(--color-accent));
  color: var(--color-on-accent);
  font-weight: 800;
  font-size: var(--text-20);
}
.gezinhub__kid-body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.gezinhub__kid-name { font-size: var(--text-base); font-weight: 700; }
.gezinhub__kid-meta { margin-top: 2px; font-size: var(--text-13); color: var(--color-text-muted); }
.gezinhub__kid-chevron { flex: none; width: 20px; height: 20px; color: var(--color-faint); }
.gezinhub__empty { padding: 4px; font-size: var(--text-sm); color: var(--color-text-muted); }

/* Toestemming-rij: icoon-tegel + titel/sub + status-badge. */
.gezinhub__consent-icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 12px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.gezinhub__consent-icon svg { width: 20px; height: 20px; }
.gezinhub__consent-body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.gezinhub__consent-title { font-size: var(--text-15); font-weight: 700; }
.gezinhub__consent-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.gezinhub__consent-badge {
  flex: none;
  align-self: center;
  padding: 4px 9px;
  font-size: var(--text-11);
  font-weight: 800;
  border-radius: 8px;
  color: var(--color-amber);
  background: var(--color-amber-soft);
}
.gezinhub__consent-badge--ok { color: var(--color-green); background: var(--color-green-soft); }
/* Neutrale status ("Nog niet ingesteld"): rustige muted-toon zolang er niets te tonen is. */
.gezinhub__consent-badge--neutral { color: var(--color-text-muted); background: var(--color-softer); }
/* Kind-poort (generiek): de rij als knop — badge "Eerst een kind", tikken opent de kind-sheet. */
button.gezinhub__consent { width: 100%; text-align: left; font: inherit; cursor: pointer; }
.kind-gate-badge {
  flex: none; align-self: center; padding: 4px 9px;
  font-size: var(--text-11); font-weight: 800; border-radius: 8px;
  color: var(--color-accent); background: var(--color-soft); white-space: nowrap;
}
/* Disabled (geen co-ouder): zelfde kaartvorm, ontkleurd + slot-badge i.p.v. status (Overdracht-patroon). */
.gezinhub__consent--disabled { opacity: 0.6; cursor: default; }
.gezinhub__consent--disabled .gezinhub__consent-icon { background: var(--color-softer); color: var(--color-faint); }
.gezinhub__consent-hint { font-size: var(--text-xs); color: var(--color-faint); line-height: 1.45; margin: 9px 3px 0; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.gezinhub__consent-hint-cta { font: inherit; color: var(--color-accent); font-weight: 700; background: none; border: none; padding: 0; cursor: pointer; }

/* Gezinsinstellingen-tegel (gedeelde config) — full-width onder de hub. */
.gezinhub__settings {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-top: 22px;
  padding: 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  text-decoration: none;
  color: var(--color-text);
  transition: transform var(--dur-fast) var(--curve-decel);
}
.gezinhub__settings:active { transform: scale(0.99); }
.gezinhub__settings-icon {
  flex: none;
  width: 46px;
  height: 46px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 14px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.gezinhub__settings-icon svg { width: 24px; height: 24px; }
.gezinhub__settings-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.gezinhub__settings-title { font-size: var(--text-base); font-weight: 700; }
.gezinhub__settings-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 2px; }
.gezinhub__settings-chevron { flex: none; width: 20px; height: 20px; color: var(--color-faint); }

/* Gedeeld-grid: 2 koloms tegels (icoon-tegel + label + sub). */
.gezinhub__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.gezinhub__tile {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  text-decoration: none;
  color: var(--color-text);
  transition: transform var(--dur-fast) var(--curve-decel);
}
.gezinhub__tile:active { transform: scale(0.985); }
.gezinhub__tile-icon {
  display: grid;
  place-items: center;
  width: 38px;
  height: 38px;
  border-radius: 11px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.gezinhub__tile-icon .icon { width: 20px; height: 20px; }
.gezinhub__tile-label { font-size: var(--text-15); font-weight: 700; }
.gezinhub__tile-sub { font-size: var(--text-13); color: var(--color-text-muted); }

/* ===================== GEZINSINFO (DP9) ===================== */
/* Tegel-pagina voor praktische gezinsinformatie: kinderen + categorie-tegels +
   mutatie-log. Tegel-grid: 2 kolommen mobiel, 3 kolommen desktop. Muted-tegels
   tonen "Binnenkort" en zijn niet klikbaar (volgende stappen activeren ze). */
.container.gezinsinfo { max-width: 640px; }
.container.gezinsinfo > .card { margin-top: var(--space-4); }
.container.gezinsinfo > .card .card__title { margin-bottom: var(--space-3); }

.gezinsinfo__tiles {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-3);
  margin-top: var(--space-4);
}

@media (min-width: 640px) {
  .gezinsinfo__tiles { grid-template-columns: repeat(3, 1fr); }
}

.gezinsinfo__tile {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-2);
  padding: var(--space-4);
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
}

.gezinsinfo__tile--muted {
  opacity: 0.65;
  cursor: default;
}

.gezinsinfo__tile-icon { color: var(--color-text-muted); }

.gezinsinfo__tile-label {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--color-text);
}

.gezinsinfo__tile-soon {
  font-size: var(--text-xs);
  color: var(--color-text-muted);
}

.gezinsinfo__mutations {
  list-style: none;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2);
}

.gezinsinfo__mutation {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
  line-height: var(--leading);
}

/* Agreement-specialisaties (reis-/medische toestemming): één gedeeld blok.
   Disclaimer = prominente kanttekening (onderlinge afspraak, geen officieel
   document) — zacht koraal-vlak + accentlijn links, bij lijst én formulier. */
.consents__disclaimer {
  margin: var(--space-2) 0 var(--space-3);
  padding: var(--space-2) var(--space-3);
  font-size: var(--text-sm);
  line-height: var(--leading);
  color: var(--color-text);
  background: var(--color-surface-own);
  border-left: 2px solid var(--color-accent);
  border-radius: var(--radius);
}

.consents {
  list-style: none;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.consents__item {
  display: flex;
  flex-direction: column;
  gap: var(--space-1);
  padding: var(--space-3);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
}

.consents__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--space-2);
}

.consents__primary { font-weight: var(--weight-medium); }

.consents__meta,
.consents__status {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.consents__empty {
  font-size: var(--text-sm);
  color: var(--color-text-muted);
}

.consents__add-title { margin-top: var(--space-4); }

/* Vervaldatum op een document: pill alleen als het urgent is (verlopen /
   verloopt binnenkort); een verre datum staat rustig in de meta-regel. */
.doclist__expiry {
  font-size: var(--text-sm);
  padding: 2px var(--space-3);
  border-radius: 999px;
  white-space: nowrap;
}

.doclist__expiry--soon {
  background: var(--color-surface-own);
  color: var(--color-accent);
  font-weight: var(--weight-medium);
}

.doclist__expiry--expired {
  background: rgba(191, 77, 67, 0.12); /* --color-error op 12% */
  color: var(--color-error);
  font-weight: var(--weight-medium);
}

/* ===================== NOODKAART ===================== */
/* ── Noodkaart (design): print-vriendelijke aggregatie van het kind. Op scherm één
   gestileerde kaart; bij printen verdwijnt de app-chrome (zie @media print). ── */
.noodkaart { max-width: 520px; margin: 0 auto; padding: 0 18px 28px; color: var(--color-text); }
.noodkaart__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 2px 0 12px; }
.noodkaart__back { display: inline-flex; align-items: center; gap: 5px; color: var(--color-accent); font-size: var(--text-sm); font-weight: 700; text-decoration: none; }
.noodkaart__back svg { width: 18px; height: 18px; }
.noodkaart__pdf { appearance: none; -webkit-appearance: none; display: inline-flex; align-items: center; gap: 8px; padding: 10px 16px; border: 0; border-radius: 13px; background: var(--color-accent); color: var(--color-on-accent); font: inherit; font-size: var(--text-sm); font-weight: 700; cursor: pointer; }
.noodkaart__pdf svg { width: 18px; height: 18px; }

.noodkaart__card { border: 1px solid var(--color-line); border-radius: 22px; background: var(--color-surface); box-shadow: var(--shadow-4); overflow: hidden; }

/* Header (terracotta). */
.noodkaart__header { background: var(--color-accent); color: var(--color-on-accent); padding: 16px 18px 18px; }
.noodkaart__header-top { display: flex; align-items: center; justify-content: space-between; }
.noodkaart__badge { display: inline-flex; align-items: center; gap: 7px; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; opacity: 0.95; }
.noodkaart__badge svg { width: 15px; height: 15px; }
/* Op de terracotta header (zelfde kleur als het accent) blijft het hele woordmerk wit —
   een oranje "Co" zou hier onzichtbaar zijn. */
.noodkaart__brand { opacity: 0.95; }
.noodkaart__brand .blinco-logo { font-size: var(--text-15); color: var(--color-on-accent); }
.noodkaart__brand .blinco-logo__accent { color: var(--color-on-accent); }
.noodkaart__hero { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.noodkaart__avatar { flex: none; width: 54px; height: 54px; display: grid; place-items: center; border-radius: 50%; background: rgba(255, 255, 255, 0.22); color: var(--color-on-accent); font-weight: 800; font-size: var(--text-22); }
.noodkaart__name { display: block; font-family: var(--font-display); font-size: var(--text-24); font-weight: 600; line-height: 1.1; }
.noodkaart__meta { display: block; margin-top: 3px; font-size: var(--text-sm); opacity: 0.92; }

/* Secties. */
.noodkaart__section { padding: 16px 18px; border-top: 1px solid var(--color-line); }
.noodkaart__section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.noodkaart__section-label { display: inline-flex; align-items: center; gap: 7px; margin-bottom: 12px; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); }
.noodkaart__section-label svg { width: 15px; height: 15px; color: var(--color-accent); }
.noodkaart__manage { color: var(--color-accent); font-size: var(--text-sm); font-weight: 700; text-decoration: none; }

.noodkaart__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.noodkaart__cell { display: flex; flex-direction: column; gap: 3px; }
.noodkaart__cell-label { font-size: var(--text-13); color: var(--color-text-muted); }
.noodkaart__cell-value { font-size: var(--text-15); font-weight: 700; }
.noodkaart__cell-value--empty, .noodkaart__row-value--empty { color: var(--color-faint); font-weight: 600; }

.noodkaart__rows { display: flex; flex-direction: column; gap: 11px; }
.noodkaart__row { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; }
.noodkaart__row-label { font-size: var(--text-sm); color: var(--color-text-muted); }
.noodkaart__row-value { font-size: var(--text-15); font-weight: 700; text-align: right; word-break: break-word; }
.noodkaart__row-value--tel { color: var(--color-accent); text-decoration: none; }

.noodkaart__contact { display: flex; align-items: center; gap: 12px; padding: 9px 0; }
.noodkaart__contact + .noodkaart__contact { border-top: 1px solid var(--color-line); }
.noodkaart__contact-avatar { flex: none; width: 38px; height: 38px; display: grid; place-items: center; border-radius: 50%; background: var(--color-soft); color: var(--color-accent); font-weight: 700; font-size: var(--text-sm); }
.noodkaart__contact-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.noodkaart__contact-name { font-size: var(--text-15); font-weight: 700; }
.noodkaart__contact-rel { font-size: var(--text-13); color: var(--color-text-muted); }
.noodkaart__contact-phone { font-size: var(--text-sm); font-weight: 700; color: var(--color-accent); text-decoration: none; white-space: nowrap; }
.noodkaart__contact-phone--empty { color: var(--color-faint); font-weight: 600; }
.noodkaart__call { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 38px; height: 38px; border-radius: 50%; background: var(--color-accent); color: var(--color-on-accent); text-decoration: none; }
.noodkaart__call svg { width: 17px; height: 17px; }

.noodkaart__pickups { display: flex; flex-direction: column; gap: 8px; }
.noodkaart__pickup { display: flex; align-items: center; gap: 10px; padding: 10px 13px; border-radius: 12px; background: var(--color-softer); }
.noodkaart__pickup-check { flex: none; width: 18px; height: 18px; color: var(--color-green); }
.noodkaart__pickup-text { display: flex; flex-direction: column; min-width: 0; }
.noodkaart__pickup-name { font-size: var(--text-sm); font-weight: 700; }
.noodkaart__pickup-rel { font-size: var(--text-13); color: var(--color-text-muted); }

.noodkaart__school { display: flex; align-items: baseline; justify-content: space-between; gap: 14px; }
.noodkaart__school-naam { font-size: var(--text-15); font-weight: 700; }
.noodkaart__school-tel { font-size: var(--text-sm); font-weight: 700; color: var(--color-accent); text-decoration: none; white-space: nowrap; }

.noodkaart__empty { margin: 0; font-size: var(--text-sm); color: var(--color-text-muted); }

.noodkaart__footer { padding: 14px 18px 16px; background: var(--color-soft); }
.noodkaart__printed { margin: 0; font-size: var(--text-xs); line-height: 1.5; color: var(--color-text-muted); }
.noodkaart__112 { margin: 6px 0 0; font-size: var(--text-13); font-weight: 800; color: var(--color-error); }

.noodkaart__hint { display: flex; gap: 11px; margin-top: 16px; padding: 14px 16px; background: var(--color-soft); border-radius: 14px; }
.noodkaart__hint svg { flex: none; width: 19px; height: 19px; margin-top: 1px; color: var(--color-accent); }
.noodkaart__hint-text { margin: 0; font-size: var(--text-13); line-height: 1.5; color: var(--color-text-muted); }

/* Kind-detailkop: titel + noodkaart-knop naast elkaar. */
.kinddetail__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-3);
  flex-wrap: wrap;
}

/* Printen: alleen de kaart-inhoud; app-chrome, knoppen en scroll-kaders weg. */
@media print {
  .sidebar, .app__topbar, .app-topbar, .app__backdrop, .flash,
  .dev-drawer, .dev-drawer__backdrop, .app__dev-toggle, .bottom-nav,
  .noodkaart__top, .noodkaart__hint { display: none !important; }
  .app, .app__main, .app__body {
    display: block;
    height: auto;
    overflow: visible;
  }
  .noodkaart { padding: 0; }
  .noodkaart__card {
    border: 1px solid var(--cloud-light);
    box-shadow: none;
    break-inside: avoid;
  }
}

/* Fluent page-load — gedoseerde reveal van de instellingen-panels. */
@media (prefers-reduced-motion: no-preference) {
  .settings__panel {
    animation: settings-rise var(--dur-normal) var(--curve-decel) both;
    animation-delay: 100ms;
  }
}

@keyframes settings-rise {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* Sidebar: één Instellingen-doel per viewport — mobiel = hub-lijst. */
@media (max-width: 767px) {
  .sidebar__link--desktop-only { display: none; }
  /* Chat · Coach · Agenda staan mobiel in de bottom-nav; verberg ze hier zodat de
     off-canvas-sidebar het rustige 'meer'-menu blijft (Gezin + Instellingen). */
  .sidebar__group--desktop-only { display: none; }
  /* "Inklappen" is een desktop-functie (collapse werkt alleen ≥768px); op mobiel
     zinloos. Uitloggen blijft als enige in de (vastgezette) footer staan. */
  .sidebar__collapse { display: none; }
}

@media (min-width: 48rem) {
  .sidebar__link--mobile-only { display: none; }
}

/* Paneel-inhoud — Fluent-surface: zachte elevatie i.p.v. alleen een platte rand,
   met een hairline-rand die de schaduw afzet tegen de warme bg. */
.settings__panel {
  border-color: var(--color-border);
  box-shadow: var(--shadow-sm);
}
.settings__panel + .settings__panel { margin-top: var(--space-4); }
/* Instellingen → Omgang: bekrachtigd via het app-plan → read-only rooster + doorverwijzing. */
.settings-omgang__plan-note { display: grid; gap: 10px; justify-items: start; padding: 12px 0 18px; font-size: var(--text-sm); color: var(--color-text-muted, var(--cloud-dark)); }
/* Eén bewerk-pagina: rooster → structurele uitzonderingen → eigen afspraken → één gedeelde
   opslaan-knop. Consistente verticale ruimte tussen de blokken zodat niets tegen elkaar plakt. */
.settings-omgang .struct { margin-top: 28px; }
.settings-omgang .plan-afspraken { margin-top: 28px; }
/* De gedeelde primaire opslaan-knop, onderaan en over de volle breedte. */
.settings-omgang__save { width: 100%; margin-top: 28px; }

/* ===================== ZORGVERDELING-HUB (instellingen/gezin/omgang, taak 3) =====
   Regeling-kaart + rijen-vensters i.p.v. acht blokken boven één knop (design 2026-07-23
   §1) — copy/vorm 1-op-1 uit docs/design/mockups/zorgverdeling-hub.html. Eigen kaart-
   recept (18px radius/warme schaduw), zelfde vorm als .omgang__card op Gezin→Omgang maar
   in een eigen naamruimte (los aanpasbaar); kleuren komen uit de bestaande tokens
   (--color-accent = mockup --accent, --color-coparent = --co, enz.) — geen nieuwe hexen. */
.omgang-hub__chip {
  display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-11); font-weight: 700;
  padding: 4px 10px; border-radius: 999px; background: var(--color-green-soft); color: var(--color-green-deep);
}
.omgang-hub__chip--wacht { background: var(--color-coparent-soft); color: var(--color-coparent-deep); }
.omgang-hub__chip-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.omgang-hub__status { display: flex; justify-content: flex-end; margin: -6px 0 10px; }

.omgang-hub__card {
  background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px;
  box-shadow: 0 1px 2px rgba(60, 33, 18, .05), 0 8px 22px rgba(60, 33, 18, .05);
}
.omgang-hub__reg { padding: var(--space-4); margin-bottom: 14px; cursor: pointer; }
.omgang-hub__reg--locked { cursor: default; opacity: .92; }
.omgang-hub__reg-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 4px; }
.omgang-hub__reg-title { font-size: var(--text-lg); font-weight: 800; }
.omgang-hub__reg-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-bottom: 14px; }
.omgang-hub__reg-edit {
  flex: none; width: 34px; height: 34px; border-radius: 12px; background: var(--color-soft); color: var(--color-accent);
  display: grid; place-items: center; border: 0; cursor: pointer;
}

.omgang-hub__strip { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; margin-bottom: 6px; }
.omgang-hub__strip + .omgang-hub__strip { margin-bottom: 10px; }
.omgang-hub__day {
  position: relative; height: 44px; border-radius: 11px; display: grid; place-items: center;
  font-size: var(--text-13); font-weight: 700;
}
.omgang-hub__day--jij { background: var(--color-soft); color: var(--color-accent); }
.omgang-hub__day--co { background: var(--color-coparent-soft); color: var(--color-coparent); }
.omgang-hub__dow {
  position: absolute; top: 4px; left: 0; right: 0; text-align: center; font-size: var(--text-10);
  font-weight: 600; letter-spacing: .04em; color: var(--color-faint); text-transform: uppercase;
}
.omgang-hub__swap {
  position: absolute; right: -2px; top: -5px; width: 16px; height: 16px; border-radius: 50%;
  background: var(--color-accent); color: var(--color-on-accent); display: grid; place-items: center;
  font-size: var(--text-10); border: 2px solid var(--color-surface);
}
.omgang-hub__legend { display: flex; gap: 14px; flex-wrap: wrap; font-size: var(--text-xs); color: var(--color-text-muted); }
.omgang-hub__legend-swatch { display: inline-block; width: 9px; height: 9px; border-radius: 3px; margin-right: 5px; }
.omgang-hub__legend-swatch--jij { background: var(--color-soft); }
.omgang-hub__legend-swatch--co { background: var(--color-coparent-soft); }
.omgang-hub__legend-swatch--swap { background: var(--color-accent); border-radius: 50%; }

.omgang-hub__rows {
  margin: 0 0 14px; border-radius: 18px; overflow: hidden; border: 1px solid var(--color-line);
  box-shadow: 0 1px 2px rgba(60, 33, 18, .05), 0 8px 22px rgba(60, 33, 18, .05);
}
.omgang-hub__row {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; background: var(--color-surface);
  border: 0; padding: 14px; cursor: pointer; font-family: var(--font-sans);
}
.omgang-hub__row + .omgang-hub__row { border-top: 1px solid var(--color-line); }
.omgang-hub__row:active { background: var(--color-softer); }
.omgang-hub__row:disabled { cursor: default; opacity: .55; }
.omgang-hub__row-icon {
  flex: none; width: 34px; height: 34px; border-radius: 11px; background: var(--color-soft); color: var(--color-accent);
  display: grid; place-items: center;
}
.omgang-hub__row-text { flex: 1; min-width: 0; }
.omgang-hub__row-title { font-size: var(--text-sm); font-weight: 700; display: block; }
.omgang-hub__row-sub {
  font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 1px; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; display: block;
}
.omgang-hub__row-badge {
  flex: none; font-size: var(--text-11); font-weight: 700; background: var(--color-soft); color: var(--color-accent);
  padding: 3px 9px; border-radius: 999px;
}
.omgang-hub__row-chevron { flex: none; color: var(--color-faint); }

.omgang-hub__refer {
  display: flex; gap: 12px; align-items: center; padding: 13px 14px; border-radius: 18px; margin-bottom: 14px;
  background: linear-gradient(135deg, var(--color-coparent-soft), var(--color-surface)); border: 1px solid var(--color-coparent-border);
}
.omgang-hub__refer-icon {
  flex: none; width: 34px; height: 34px; border-radius: 11px; background: var(--color-coparent); color: var(--color-on-accent);
  display: grid; place-items: center; font-size: var(--text-lg);
}
.omgang-hub__refer-text { flex: 1; min-width: 0; }
.omgang-hub__refer p { font-size: var(--text-xs); line-height: 1.45; color: var(--color-coparent-deep); }
.omgang-hub__refer a { flex: none; color: var(--color-coparent); font-weight: 700; text-decoration: none; white-space: nowrap; font-size: var(--text-xs); }

.omgang-hub__footnote { display: flex; gap: 8px; align-items: flex-start; font-size: var(--text-xs); color: var(--color-text-muted); line-height: 1.5; padding: 0 4px 14px; }
.omgang-hub__footnote-icon { color: var(--color-accent); flex: none; }

/* Lege staat: startpunt-kaarten i.p.v. rijen (presets verhuisd uit de editor, taak 2/3). */
.omgang-hub__starters { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.omgang-hub__starter {
  display: flex; gap: 12px; align-items: center; background: var(--color-surface); border: 1.5px solid var(--color-line);
  border-radius: 18px; padding: 13px 14px; cursor: pointer; text-align: left; font-family: var(--font-sans); width: 100%;
}
.omgang-hub__starter:hover, .omgang-hub__starter:focus-visible { border-color: var(--color-accent); background: var(--color-soft); }
.omgang-hub__starter-mini { flex: none; display: grid; grid-template-columns: repeat(7, 7px); gap: 2px; }
.omgang-hub__starter-mini i { display: block; height: 14px; border-radius: 3px; }
.omgang-hub__starter-mini i.omgang-hub__mini--jij { background: var(--color-soft); }
.omgang-hub__starter-mini i.omgang-hub__mini--co { background: var(--color-coparent-soft); }
.omgang-hub__starter-title { font-size: var(--text-sm); font-weight: 700; display: block; }
.omgang-hub__starter-sub { font-size: var(--text-xs); color: var(--color-text-muted); }
.omgang-hub__starter--ghost { justify-content: center; border-style: dashed; color: var(--color-accent); font-weight: 700; font-size: var(--text-sm); }

/* Ritme-sheet: EditPatternFormComponent brengt zijn éigen <form> mee (render_submit:
   false), dus geen shared/_sheet form-variant (dat zou een tweede <form> nesten) — de
   knop staat aan het eind van de scrollende body, zelfde idioom als .sheet__save
   (StructuralExceptionFormComponent e.a.), form-attribuut-gekoppeld aan FORM_ID. */
.omgang-hub__ritme-save { margin-top: 16px; }
.omgang-hub__ritme-hint { font-size: var(--text-xs); color: var(--color-faint); line-height: 1.4; text-align: center; margin: 8px 0 0; }

/* Wissels & halen-brengen (taak 4, design 2026-07-23 §3): beleid-kaart (chips + zin) +
   per-wissel-schema-kaarten. Chips/velden hergebruiken .pattern-form__chip(s)/
   .pattern-form__field-input (DRY — zelfde primitieven als de ritme-editor). */
.wissel-editor__policy {
  background: var(--color-surface); border: 1px solid var(--color-line);
  border-radius: 16px; box-shadow: var(--shadow-4); padding: 14px 15px; margin-bottom: 12px;
}
.wissel-editor__policy-title { font-size: var(--text-13); font-weight: 800; margin-bottom: 9px; }
.wissel-editor__zin { margin-top: 10px; background: var(--color-softer); border-radius: 10px; padding: 9px 11px; font-size: var(--text-13); line-height: 1.45; }
.wissel-editor__exp { font-size: var(--text-11); color: var(--color-text-muted); margin-top: 9px; line-height: 1.45; }
.wissel-editor__exp[hidden] { display: none; }
/* Vaste overdrachtsplek: chips + veld onder de ja/nee-keuze (design 2026-07-24 §6). */
.wissel-editor__place-toggle { margin-bottom: 0; }
.wissel-editor__place { margin-top: 12px; }
.wissel-editor__place[hidden] { display: none; }
.wissel-editor__place .pattern-form__chips { margin-bottom: 10px; }
.wissel-editor__place .sheet__field { margin-bottom: 0; }
.wissel-editor__schema { display: flex; flex-direction: column; gap: 10px; margin-bottom: 4px; }
.wissel-editor__schema[hidden] { display: none; }
.wissel-editor__empty { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0; }
.wissel-editor__moment {
  background: var(--color-surface); border: 1px solid var(--color-line);
  border-radius: 16px; padding: 13px 14px;
}
.wissel-editor__moment-head { font-size: var(--text-13); font-weight: 800; margin-bottom: 8px; }
.wissel-editor__moment-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.wissel-editor__field label { display: block; font-size: var(--text-11); font-weight: 700; color: var(--color-text-muted); margin-bottom: 4px; }
.wissel-editor__who { margin-top: 10px; }
.wissel-editor__who-label { display: block; font-size: var(--text-11); font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--color-faint); margin-bottom: 6px; }
.wissel-editor__naam { margin-top: 8px; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.wissel-editor__naam .pattern-form__field-input { flex: 1; min-width: 120px; }
.wissel-editor__hint { font-size: var(--text-xs); color: var(--color-faint); line-height: 1.4; margin: 10px 0 0; }

/* Overdracht aanpassen (design 2026-07-24, lay-out herzien 2026-07-25): contextregel bovenaan,
   dan de velden in leesvolgorde (datum+tijd · wie regelt het · voor wie · plek · notitie) en
   onderaan één samenvatting van wat je verstuurt. Chips hergebruiken .chip-radio/
   .chip-radio-group; alleen de marges eromheen wijken hier af. */
.od-ctx {
  display: flex; align-items: center; gap: 8px; margin: 0 0 16px; padding: 9px 12px;
  border-radius: 12px; background: var(--color-coparent-soft); color: var(--color-coparent-deep);
  font-size: var(--text-13); font-weight: 700; line-height: 1.35;
}
.od-ctx[hidden] { display: none; }
.od-ctx b { font-weight: 800; }
.od-ctx__icon { flex: none; }
.od-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-bottom: 18px; }
.od-grid__cell { min-width: 0; }
.od-chips { margin-bottom: 0; }
.od-chips + .od-chips { margin-top: 10px; margin-bottom: 18px; }
.od-naam { margin-top: 10px; }
.od-naam[hidden] { display: none; }
/* Sectiekopje binnen een wijzigingsverzoek (design 2026-07-25 §2): bundelt wat bij elkaar
   hoort, zodat de tijd niet losgezongen naast de datum staat maar zichtbaar bij de
   overdracht. Lijn erachter i.p.v. een kader — het scheidt, het omsluit niet. */
.req-sec { display: flex; align-items: center; gap: 9px; margin: 22px 0 12px; }
.req-sec__t { font-size: var(--text-13); font-weight: 800; }
.req-sec__line { flex: 1; height: 1px; background: var(--color-line); }
/* Uitleg-regel onder de contextregel: die zegt wát je hier doet, de context zegt wáárover —
   dus kleiner en rustiger dan de context zelf. */
.swap-form__intro--sub { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: -6px; }
/* Verstuurknop uit zolang er niets is gewijzigd (zie agenda_overdracht_controller). */
.sheet__save:disabled { opacity: .45; cursor: default; }

/* Samenvatting: de zin die de ander straks te lezen krijgt, apart gezet zodat je 'm vóór
   het versturen echt leest en niet tussen de velden kwijtraakt. Gedeeld door het
   overdracht- en het zorgformulier (Agenda::RequestSummaryComponent). */
.req-summary {
  margin: 4px 0 6px; padding: 13px 14px; border-radius: 16px;
  background: var(--color-softer); border: 1px solid var(--color-soft-border);
}
.req-summary__intro { margin: 0 0 8px; font-size: var(--text-xs); color: var(--color-text-muted); line-height: 1.4; }
.req-summary__zin { margin: 0; font-size: var(--text-15); line-height: 1.45; }
.req-summary__zin b { color: var(--color-accent); }
.req-summary__gap { color: var(--color-faint); font-style: italic; font-weight: 600; }
.req-summary__note { margin: 7px 0 0; font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; }
.req-summary__note[hidden] { display: none; }

/* Inklapbaar overdrachtsmoment binnen een zorgwissel (design 2026-07-25 §2). Native
   <details>, dus de open/dicht-stand kost geen JS; dichtgeklapt staat de samenvatting op de
   regel zodat je in één blik ziet wat er geldt. */
.mom { border: 1px solid var(--color-line); background: var(--color-surface); border-radius: 14px; margin-bottom: 10px; }
.mom__head { display: flex; align-items: center; gap: 10px; padding: 12px 13px; cursor: pointer; list-style: none; }
.mom__head::-webkit-details-marker { display: none; }
.mom__caret { flex: none; color: var(--color-faint); font-size: var(--text-11); transition: transform .15s; }
.mom[open] .mom__caret { transform: rotate(90deg); }
.mom__t { flex: 1; min-width: 0; }
.mom__title { display: block; font-size: var(--text-13); font-weight: 800; }
.mom__datum { font-weight: 600; color: var(--color-text-muted); }
.mom__datum::before { content: " — "; }
.mom__sum { display: block; margin-top: 2px; font-size: var(--text-xs); font-weight: 600; color: var(--color-text-muted); }
.mom__body { padding: 12px 13px 13px; border-top: 1px solid var(--color-line); }
.mom__body .od-grid { margin-bottom: 14px; }
/* Alleen-één-datum: het overgebleven veld neemt de volle breedte i.p.v. een halve kolom. */
.od-grid:has(> .od-grid__cell[hidden]) { grid-template-columns: 1fr; }

/* "Welke overdracht?" — kieslijst van komende wisselmomenten (design 2026-07-25 §9).
   Rij-vorm i.p.v. de .plan-choice-tegels: dit zijn geen soorten om uit te kiezen maar
   concrete momenten, dus datum en tijd voorop. */
.pick-list { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 14px; overflow: hidden; }
.pick-row {
  display: flex; align-items: center; gap: 12px; padding: 13px 14px;
  border-bottom: 1px solid var(--color-line); text-decoration: none; color: var(--color-text);
}
.pick-row:last-child { border-bottom: 0; }
.pick-row:active { background: var(--color-softer); }
.pick-row__when { flex: none; width: 82px; }
.pick-row__day { display: block; font-size: var(--text-13); font-weight: 800; }
.pick-row__time { display: block; margin-top: 2px; font-size: var(--text-xs); font-weight: 700; color: var(--color-accent); }
.pick-row__t { flex: 1; min-width: 0; }
.pick-row__who { display: block; font-size: var(--text-13); font-weight: 700; }
.pick-row__sub { display: block; margin-top: 2px; font-size: var(--text-xs); color: var(--color-text-muted); }
.pick-row__chev { flex: none; width: 16px; height: 16px; color: var(--color-faint); }

/* Herinnering-keuzerij op het overdracht-detailscherm (design 2026-07-24 §7): dezelfde
   presets als de afspraak-editor, maar app-breed — de subregel zegt dat er expliciet bij. */
.reminder-choice {
  margin-top: 18px; padding: 14px 15px; border-radius: 16px;
  background: var(--color-surface); border: 1px solid var(--color-line); box-shadow: var(--shadow-4);
}
.reminder-choice__title { display: flex; align-items: center; gap: 8px; font-size: var(--text-13); font-weight: 800; margin-bottom: 10px; }
.reminder-choice__icon { display: inline-flex; color: var(--color-accent); }
.reminder-choice__icon svg { width: 18px; height: 18px; }
.reminder-choice .chip-radio-group { margin-bottom: 0; }
.reminder-choice__sub { display: block; margin-top: 9px; font-size: var(--text-xs); color: var(--color-faint); line-height: 1.4; }

/* Openstaand overdracht-verzoek op Home: één rustige regel bóven de overdracht-kaart —
   amber (= "wacht op iemand"), zelfde statusfamilie als een wisselvoorstel. */
.ov-request {
  display: flex; align-items: center; gap: 9px; margin-bottom: 9px; padding: 10px 13px;
  border-radius: 14px; background: var(--color-amber-soft); border: 1px solid var(--color-amber-border);
  color: var(--color-amber-deep); font-size: var(--text-13); font-weight: 700;
  line-height: 1.35; text-decoration: none;
}
.ov-request__dot { flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--color-amber); }
.ov-request__text { flex: 1; min-width: 0; }
.ov-request svg { flex: none; width: 16px; height: 16px; }

/* Historie — rustige, standaard-ingeklapte mutatie-log onderaan de zorg-editor. Bewust
   low-profile (niet prominent); open toont een compacte tijdlijn met avatar-initialen. */
.histlog { margin-top: 26px; border-top: 1px solid var(--color-border); }
.histlog__summary {
  display: flex; align-items: center; gap: 9px;
  padding: 14px 2px; cursor: pointer; list-style: none;
  font-size: var(--text-sm); font-weight: 600; color: var(--color-text-muted, var(--cloud-dark));
  -webkit-tap-highlight-color: transparent; user-select: none;
}
.histlog__summary::-webkit-details-marker { display: none; }
.histlog__summary::marker { content: ""; }
.histlog__chevron { width: 15px; height: 15px; flex: none; color: var(--color-faint, var(--cloud-medium)); transition: transform 0.2s var(--curve-decel, ease); }
.histlog[open] .histlog__chevron { transform: rotate(90deg); }
.histlog__count { margin-left: auto; font-weight: 500; font-size: var(--text-13); color: var(--color-faint, var(--cloud-medium)); }
.histlog__list { list-style: none; margin: 0 0 10px; padding: 2px 0 0; display: flex; flex-direction: column; }
.histlog__entry { display: flex; align-items: flex-start; gap: 11px; padding: 9px 2px; }
.histlog__entry + .histlog__entry { border-top: 1px solid var(--color-border); }
.histlog__avatar {
  flex: none; width: 26px; height: 26px; margin-top: 1px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--color-softer); color: var(--color-text-muted, var(--cloud-dark));
  font-size: var(--text-11); font-weight: 700; letter-spacing: 0.02em;
}
.histlog__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.histlog__text { font-size: var(--text-sm); line-height: 1.35; color: var(--color-text); }
.histlog__badge {
  display: inline-block; margin-left: 6px; padding: 0 6px; vertical-align: 1px;
  border-radius: 999px; background: var(--color-softer); color: var(--color-text-muted, var(--cloud-dark));
  font-size: var(--text-11); font-weight: 700;
}
.histlog__meta { font-size: var(--text-xs); color: var(--color-faint, var(--cloud-medium)); }
.histlog__empty { margin-top: 26px; padding-top: 14px; border-top: 1px solid var(--color-border); font-size: var(--text-sm); color: var(--color-text-muted); }
.settings__panel .card__title {
  font-family: var(--font-display);
  font-size: var(--text-lg);
  font-weight: 600;
  letter-spacing: -0.01em;
  margin-bottom: var(--space-4);
}

/* Read-only account-gegevens als nette definitielijst (label links, waarde rechts). */
.settings__defs { display: flex; flex-direction: column; margin: 0; }
.settings__def {
  display: flex;
  justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-3) 0;
  border-bottom: 1px solid var(--color-border);
}
.settings__def:last-child { border-bottom: 0; }
.settings__def-term { color: var(--color-text-muted); font-size: var(--text-sm); margin: 0; }
.settings__def-value { color: var(--color-text); text-align: right; margin: 0; }

/* Formulieren binnen instellingen — de velden zelf (.field__input/.field__label)
   draaien op de gedeelde Fluent v9-veldbasis (zie "FORMULIER-VELDEN (gedeeld)"). */
.settings__form { display: flex; flex-direction: column; gap: var(--space-4); }
.settings .field { display: flex; flex-direction: column; gap: 6px; }

.settings__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-2);
}

/* Intro-/hint-tekst boven een instellingen-paneel + lege-staat. */
.settings__hint { color: var(--color-text-muted); font-size: var(--text-sm); margin: 0 0 var(--space-3); }
.settings__empty { color: var(--color-text-muted); margin: 0; }

/* Instellingen → Gezin: per gezin de omgangsregeling, met de naam erboven bij
   meerdere gezinnen. De .agenda-sectie levert zelf zijn kaart-styling. */
.settings__family + .settings__family { margin-top: var(--space-5); }
.settings__family-name {
  font-family: var(--font-display);
  font-size: var(--text-base);
  font-weight: 600;
  color: var(--color-text-muted);
  margin: 0 0 var(--space-2);
}

/* Omgangsregeling — visuele invoer: snelkeuze-presets + gekleurde dagen-strip
   (tik = wissel ouder) + overdracht-tijden alléén op de wisselmomenten. De
   dag-cellen krijgen hun kleur (ouder-tint + rand) inline van agenda-pattern. */
.pattern-form { display: flex; flex-direction: column; }
/* De pattern-form-body erft de generieke .stack-ritmiek; een eyebrow-label (.pattern-form__
   sublabel) staat dichter (8px) op zijn eigen inhoud. */
.pattern-form__body > .pattern-form__sublabel + * { margin-top: 8px; }
.pattern-form__sublabel {
  font-size: var(--text-xs); font-weight: 800; letter-spacing: 0.8px;
  text-transform: uppercase; color: var(--color-faint); margin: 0 2px;
}
.pattern-form__solo-note { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0; }
/* "Voor wie": schema-tabs (Alle kinderen / aparte schema's) + hint + kind-chips-kaart. */
.pattern-form__who > * + * { margin-top: 8px; }
.pattern-form__tabs { display: flex; flex-wrap: wrap; gap: 8px; }
.pattern-form__tab {
  font: inherit; font-size: var(--text-13); font-weight: 700; white-space: nowrap;
  padding: 9px 15px; border-radius: 11px; cursor: pointer;
  background: var(--color-surface); color: var(--color-text); border: 1px solid var(--color-line);
}
.pattern-form__tab--on { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }
.pattern-form__tab-add {
  display: inline-flex; align-items: center; gap: 5px; white-space: nowrap;
  font: inherit; font-size: var(--text-13); font-weight: 700; padding: 9px 14px; border-radius: 11px;
  cursor: pointer; background: var(--color-surface); color: var(--color-accent);
  border: 1px dashed var(--color-accent);
}
.pattern-form__tabs-hint { font-size: var(--text-13); color: var(--color-faint); line-height: 1.4; margin: 0 4px; }
.pattern-form__kids-card {
  background: var(--color-surface); border: 1px solid var(--color-line);
  border-radius: 16px; box-shadow: var(--shadow-4); padding: 13px 15px;
}
.pattern-form__kids-title { font-size: var(--text-13); font-weight: 700; margin-bottom: 9px; }
.pattern-form__kids-remove {
  display: inline-flex; align-items: center; gap: 6px; margin-top: 12px;
  font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-error);
  background: none; border: none; padding: 0; cursor: pointer;
}
.pattern-form__chip--elsewhere { color: var(--color-faint); }
/* De rooster-kaart: patroon-naam + legenda boven de weken (elk met een kop — weeknummer +
   datumbereik — en de gekleurde dagen-strip; design 2026-07-23 §2, ritme week-voor-week).
   De cyclus-preset-rij is verhuisd naar de lege staat (taak 3, .starter*-achtige klassen
   daar — geen .pattern-form__preset* meer nodig hier). */
.pattern-form__card {
  background: var(--color-surface); border: 1px solid var(--color-line);
  border-radius: 18px; box-shadow: var(--shadow-4); padding: 16px 16px 14px;
}
.pattern-form__card-head {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: var(--space-2); margin-bottom: 14px;
}
.pattern-form__pattern-name { font-size: var(--text-15); font-weight: 800; }
.pattern-form__legend { display: flex; gap: 12px; }
.pattern-form__legend-item { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-xs); font-weight: 700; }
.pattern-form__legend-item--jij { color: var(--color-accent); }
.pattern-form__legend-item--co { color: var(--color-coparent); }
.pattern-form__legend-dot { width: 9px; height: 9px; border-radius: 3px; flex: none; background: currentColor; }
.pattern-form__weeks { display: flex; flex-direction: column; }
/* Eén week: kop (nr + datums + evt. "✕ weg") boven de 7-daagse strip; een dunne lijn
   scheidt opeenvolgende weken zonder een kaart-in-kaart te worden. */
.pattern-form__week { padding: 12px 0; border-top: 1px solid var(--color-line); }
.pattern-form__week:first-child { padding-top: 0; border-top: none; }
.pattern-form__week-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 8px; }
.pattern-form__week-nr { font-size: var(--text-13); font-weight: 800; }
.pattern-form__week-dates { font-size: var(--text-11); font-weight: 600; color: var(--color-faint); }
.pattern-form__week-del {
  margin-left: auto; font: inherit; font-size: var(--text-11); font-weight: 600;
  color: var(--color-faint); background: none; border: none; padding: 0; cursor: pointer;
}
.pattern-form__week-days { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 5px; }
.pattern-form__day {
  padding: 10px 0; display: flex; align-items: center; justify-content: center;
  font: inherit; font-size: var(--text-xs); font-weight: 700;
  border: 1px solid transparent; border-radius: 9px; cursor: pointer;
  transition: transform 0.12s ease;
}
.pattern-form__day:active { transform: scale(0.9); }
.pattern-form__day--jij { background: var(--color-soft); color: var(--color-accent); border-color: var(--color-soft-border); }
.pattern-form__day--co { background: var(--color-coparent-soft); color: var(--color-coparent); border-color: var(--color-coparent-border); }
/* "+ Week N toevoegen" tot 4 weken (mockup: gestippelde rand, valt weg naar
   "Maximaal 4 weken" op de grens). */
.pattern-form__add-week {
  width: 100%; margin-top: 4px; padding: 12px;
  font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-accent);
  background: none; border: 1.5px dashed var(--color-faint); border-radius: 14px; cursor: pointer;
}
.pattern-form__add-week:disabled { color: var(--color-faint); border-color: var(--color-line); cursor: default; }
.pattern-form__hint { font-size: var(--text-xs); color: var(--color-faint); line-height: 1.4; margin: 12px 0 0; }
.pattern-form__chips { display: flex; flex-wrap: wrap; gap: 6px; }
.pattern-form__chip {
  padding: 7px 12px; font: inherit; font-size: var(--text-13); font-weight: 600;
  border: 1px solid var(--color-border); border-radius: 10px;
  background: var(--color-surface); color: var(--color-text-muted); cursor: pointer;
}
.pattern-form__chip--on { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }
.pattern-form__field-input {
  width: 100%; font: inherit; font-size: var(--text-sm); padding: 9px 11px;
  border: 1px solid var(--color-border); border-radius: 10px;
  background: var(--color-surface); color: var(--color-text);
}
.pattern-form__field-input:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 1px; }
.pattern__deviations { font-size: var(--text-sm); color: var(--color-text-muted); margin: var(--space-2) 0 0; }

/* Generieke radio-chip (DRY): "Voor wie"/"Wat verandert er"/"Die dag bij" delen deze
   recipe — een verborgen radio + has()-selector voor de geselecteerde staat. */
.chip-radio-group { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
.chip-radio { position: relative; font-size: var(--text-13); font-weight: 700; color: var(--color-text-muted); background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 11px; padding: 8px 14px; cursor: pointer; }
.chip-radio__input { position: absolute; opacity: 0; width: 0; height: 0; }
.chip-radio:has(.chip-radio__input:checked) { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }
.chip-radio:has(.chip-radio__input:focus-visible) { outline: 2px solid var(--color-focus); outline-offset: 2px; }
/* Generieke inline tekst-link-knop (DRY): "Bewerken", "… toevoegen"-triggers. */
.link-edit { font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-accent); background: none; border: none; padding: 0; cursor: pointer; }
.link-add {
  display: inline-flex; align-items: center; gap: var(--space-1);
  font: inherit; font-size: var(--text-sm); font-weight: 700; color: var(--color-accent);
  background: none; border: none; padding: var(--space-1) 0; cursor: pointer;
}
.link-add-icon { width: 17px; height: 17px; }

/* ── Eenmalige uitzonderingen (design "Uitzonderingen → Eenmalig") ── */
.exceptions { margin-top: 22px; }
/* Sub-kop van een uitzonderingen-blok ("Structureel" / "Eenmalig") — één gedeelde stijl
   (DRY, design: 14px/800), niet het display-font. */
.struct__title,
.exceptions__title { font-size: var(--text-sm); font-weight: 800; margin: 0 2px 4px; }
.exceptions__lede { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0 2px 12px; }
.exceptions__empty { font-size: var(--text-sm); color: var(--color-text-muted); margin: 0 0 8px; }
.exceptions__list { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.exceptions__item {
  background: var(--color-surface); border: 1px solid var(--color-line);
  border-radius: 14px; box-shadow: var(--shadow-4); padding: 12px 14px;
}
.exceptions__label { display: block; font-size: var(--text-sm); font-weight: 700; }
.exceptions__note { display: block; font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.exceptions__actions { display: flex; align-items: center; gap: 14px; margin-top: 8px; }
.exceptions__delete {
  font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-error);
  background: none; border: none; padding: 0; cursor: pointer;
}
.exceptions__history { margin-top: 8px; font-size: var(--text-13); color: var(--color-text-muted); }
.exceptions__history summary { cursor: pointer; }

/* Form (toevoegen/bewerken eenmalige uitzondering) — op de gedeelde sheet-primitives. */
.exception-form { display: flex; flex-direction: column; }
.exception-form__intro { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0 0 18px; }

/* ── Structurele uitzonderingen (zorgrooster, design "Uitzonderingen → Structureel") ── */
.struct { margin-top: 22px; }
.struct__eyebrow { display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); margin-bottom: 4px; }
.struct__intro { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0 0 12px; }
.struct__list-hint { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0 0 10px; }
.struct__list { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.struct__card { position: relative; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 16px; box-shadow: var(--shadow-4); padding: 13px 14px; }
.struct__card-head { display: flex; align-items: flex-start; gap: 8px; }
.struct__card-name { flex: 1; min-width: 0; font-size: var(--text-15); font-weight: 700; }
.struct__card-note { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 4px 0 0; }
.struct__badge { flex: none; font-size: var(--text-11); font-weight: 800; padding: 4px 9px; border-radius: 8px; }
.struct__badge--green { color: var(--color-green); background: var(--color-green-soft); }
.struct__badge--amber { color: var(--color-amber); background: var(--color-amber-soft); }
.struct__remove { flex: none; width: 26px; height: 26px; padding: 0; border: none; background: none; color: var(--color-faint); cursor: pointer; display: flex; align-items: center; justify-content: center; }
.struct__remove svg { width: 16px; height: 16px; }
.struct__remove form, .struct__card form { margin: 0; }
.struct__agree { margin-top: 10px; width: 100%; min-height: 38px; border: 1px solid var(--color-accent); border-radius: 11px; background: none; color: var(--color-accent); font: inherit; font-weight: 700; font-size: var(--text-13); cursor: pointer; }
.struct__agree:active { background: var(--color-softer); }
.struct__card-act { display: flex; gap: 8px; margin-top: 10px; }
.struct__card-act .link-edit { border: 1px solid var(--color-line); border-radius: 10px; padding: 8px 12px; }
.struct__refer {
  display: flex; gap: 10px; align-items: center; padding: 12px 14px;
  background: var(--color-coparent-soft); border: 1px solid var(--color-line);
  border-radius: 14px; margin-bottom: 14px;
}
.struct__refer p { font-size: var(--text-13); line-height: 1.4; color: var(--color-coparent-deep); margin: 0; }

/* Form (toevoegen/bewerken structurele uitzondering) — velden op de gedeelde sheet-
   primitives (.sheet__label/.sheet__field). */
.struct-form { display: flex; flex-direction: column; }
.struct-form__intro { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0 0 18px; }
.struct-form__group { border: none; margin: 0 0 18px; padding: 0; }

/* Inplan-venster (design 2026-07-23 §5): afspraaktekst + tijd + mini-kalender + de
   "direct geboekt"-uitleg. Kalender-primitives (.struct-cal__*) hergebruiken de
   .agenda-mini__*-vorm (7-koloms weekrijen), maar toggle-select i.p.v. navigeren. */
.struct-apply__zin { font-size: var(--text-sm); line-height: 1.45; margin: 0 0 14px; }
.struct-apply__field { margin-bottom: 14px; }
.struct-apply__summary { font-size: var(--text-13); color: var(--color-text-muted); text-align: center; margin: 10px 0; }
.struct-apply__note {
  display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px;
  background: var(--color-green-soft); border-radius: 14px; margin: 12px 0 16px;
}
.struct-apply__note svg { flex: none; width: 18px; height: 18px; color: var(--color-green); margin-top: 1px; }
.struct-apply__note p { font-size: var(--text-13); line-height: 1.45; color: var(--color-text); margin: 0; }
.struct-apply__submit:disabled { opacity: .55; cursor: default; }

.struct-cal { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 16px; padding: 12px; margin-bottom: 4px; }
.struct-cal__head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 8px; }
.struct-cal__label { font-size: var(--text-sm); font-weight: 800; text-transform: capitalize; }
.struct-cal__nav { border: none; background: none; color: var(--color-faint); font-size: var(--text-lg); cursor: pointer; padding: 4px 8px; }
.struct-cal__weekdays { display: grid; grid-template-columns: repeat(7, 1fr); margin-bottom: 4px; }
.struct-cal__wd { text-align: center; font-size: var(--text-10); color: var(--color-text-muted); text-transform: uppercase; }
.struct-cal__week { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.struct-cal__week + .struct-cal__week { margin-top: 4px; }
.struct-cal__day {
  aspect-ratio: 1; border: none; background: none; border-radius: 10px;
  font: inherit; font-size: var(--text-13); font-weight: 600; color: var(--color-text);
  cursor: pointer; display: flex; align-items: center; justify-content: center;
}
.struct-cal__day--muted { color: var(--color-faint); }
.struct-cal__day--sel { background: var(--color-accent); color: var(--color-on-accent); font-weight: 800; }

/* Knop-primitive — `.btn` (instellingen) en `.button` (gezinsprofiel)
   delen één definitie (DRY: zelfde primitive, twee historisch gegroeide namen). */
.btn,
.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 40px;
  padding: 0 var(--space-4);
  font: inherit;
  font-weight: var(--weight-medium);
  color: var(--color-on-accent);
  background: var(--color-accent);
  border: 1px solid var(--color-accent);
  border-radius: var(--radius-control);
  text-decoration: none;
  cursor: pointer;
  appearance: none;
  transition: background var(--dur-fast) var(--curve-decel),
              border-color var(--dur-fast) var(--curve-decel),
              transform var(--dur-fast) var(--curve-decel);
}
.btn:hover, .button:hover { background: var(--color-accent-hover); border-color: var(--color-accent-hover); }
.btn:active, .button:active {
  transform: translateY(0.5px);
}
/* Zichtbaar disabled (bijv. "Foto's toevoegen" tot er iets gekozen is) — anders
   oogt een gevulde accent-knop bruikbaar terwijl hij dat niet is. */
.btn:disabled, .button:disabled {
  background: var(--color-faint);
  border-color: var(--color-faint);
  cursor: not-allowed;
}
.btn--secondary,
.button--secondary {
  color: var(--color-text);
  background: var(--color-surface);
  border-color: var(--color-border);
}
.btn--secondary:hover, .button--secondary:hover { background: var(--color-hover); }
/* Compacte variant voor inline-acties (kind-rijen, snelkoppelingen). */
.button--small {
  min-height: 32px;
  padding: 0 var(--space-3);
  font-size: var(--text-sm);
}
/* Terughoudende variant voor destructieve/zeldzame acties (kind verwijderen). */
.button--ghost {
  color: var(--color-text-muted);
  background: transparent;
  border-color: transparent;
  box-shadow: none;
}
.button--ghost:hover { background: var(--color-hover); color: var(--color-text); }

.alert {
  padding: var(--space-3);
  border-radius: var(--radius);
  background: rgba(191, 77, 67, 0.08);
  color: var(--color-error);
  font-size: var(--text-sm);
}

/* ===================== BLINCO WOORDMERK ===================== */
/* Self-hosted Funnel Display (AVG: NIET via Google's CDN — dat lekt het bezoeker-IP).
   De woff2's staan in app/assets/fonts/; Propshaft herschrijft de url() naar het
   gedigeste /assets-pad. Funnel Display is tevens het heading-font (--font-display). */
@font-face {
  font-family: "Funnel Display";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/funneldisplay-700-038fab07.woff2") format("woff2");
}
@font-face {
  font-family: "Funnel Display";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/funneldisplay-600-8315f11b.woff2") format("woff2");
}

/* Woordmerk "blinCo" via één shared/_logo-partial. Font volgt --font-display (Funnel
   Display), weight 700; accent volgt --color-accent (terracotta); merk-ink en
   de inverse-accent (op donkere grond) zijn merk-specifiek. */
.blinco-logo {
  font-family: var(--font-display);
  font-weight: 700;
  letter-spacing: -0.015em;
  color: var(--logo-ink);
  line-height: 1;
  font-size: 1.75rem;
  white-space: nowrap;
  user-select: none;
}
.blinco-logo__accent { color: var(--color-accent); }
.blinco-logo--inverse { color: var(--color-on-accent); }
.blinco-logo--inverse .blinco-logo__accent { color: var(--logo-inverse-accent); }

/* Formaat per plek (alles schaalt mee met font-size). */
.sidebar__brand .blinco-logo { font-size: 1.35rem; }
.app__topbar-title .blinco-logo { font-size: 1.3rem; }
.auth__brand .blinco-logo { font-size: 2.4rem; }

/* ===================== OUDERSCHAPSPLAN (gezin-sectie, scherm 14) =====================
   Read-first plan: ondertekend-badge + laatst-bijgewerkt + sectie-kaarten. Op de
   bestaande gezin-section-tokens (card/settings__panel). */
.plan__meta { display: flex; align-items: center; gap: 8px; margin: -6px 0 16px; }
.plan__badge {
  font-size: var(--text-11);
  font-weight: 800;
  color: var(--color-green);
  background: var(--color-green-soft);
  padding: 4px 10px;
  border-radius: 8px;
}
.plan__updated { font-size: var(--text-13); color: var(--color-faint); }
.plan__empty { color: var(--color-text-muted); font-size: var(--text-sm); padding: 20px 0; }
.plan__sections { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.plan__section {
  background: var(--color-bg);
  border: 1px solid var(--color-line);
  border-radius: 14px;
  padding: 14px 16px;
}
.plan__section-title { display: block; font-size: var(--text-15); font-weight: 800; margin-bottom: 6px; }
.plan__section-body { margin: 0; font-size: var(--text-sm); color: var(--color-text-muted); line-height: 1.5; white-space: pre-line; }
.plan__actions { display: flex; gap: 10px; margin-top: 16px; }
.plan__actions .button { flex: 1; text-align: center; }

/* ===================== ADRESBOEK (scherm 10/11) =====================
   Full-bleed naar het ontwerp: eigen kop (terug ‹ Gezin · titel · "+"), witte zoek-pill,
   gekleurde categorie-groepen, per-rij bel-knop, doorklik naar het contactdetail. */
.adresboek,
.contact-detail {
  max-width: 520px;
  margin: 0 auto;
  padding: calc(8px + env(safe-area-inset-top, 0px)) 18px 24px;
  color: var(--color-text);
}
.adresboek__head { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; }
.adresboek__back {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--color-accent);
  font-weight: 700;
  font-size: var(--text-sm);
  text-decoration: none;
}
.adresboek__back svg { width: 18px; height: 18px; }
.adresboek__add {
  width: 36px;
  height: 36px;
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--color-soft);
  color: var(--color-accent);
  text-decoration: none;
}
.adresboek__add svg { width: 20px; height: 20px; }
.adresboek__title {
  font-family: var(--font-display);
  font-size: var(--text-26);
  font-weight: 600;
  letter-spacing: -0.2px;
  margin: 4px 0 14px;
}
.adresboek__subtitle { font-size: var(--text-base); font-weight: 800; margin: 22px 0 10px; }
.adresboek__form { margin-bottom: 18px; }
.adresboek__form-actions { display: flex; gap: 8px; align-items: center; }
.adresboek__done { margin-top: 4px; }

.adresboek__search {
  display: flex;
  align-items: center;
  gap: 11px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 16px;
  padding: 12px 15px;
  box-shadow: var(--shadow-4);
}
.adresboek__search-icon { width: 19px; height: 19px; color: var(--color-faint); flex: none; }
.adresboek__search-input { flex: 1; min-width: 0; border: none; outline: none; background: none; font: inherit; font-size: var(--text-15); color: var(--color-text); }

/* ===================== BOTTOM-SHEET (generiek, DRY) =====================
   Native <dialog> die van onderen opkomt met ronde bovenkant. Hergebruikt voor
   "Nieuw contact", "Nieuwe afspraak", … (shared/_sheet + sheet-controller). */
dialog.sheet {
  /* Onderaan vastgeplakt via position:fixed — betrouwbaarder dan `margin:auto auto 0`,
     dat op sommige mobiele browsers (Samsung Internet) de modal toch centreert. */
  position: fixed;
  inset: auto 0 0 0;
  margin: 0 auto;
  width: 100%;
  max-width: 520px;
  max-height: 92vh;           /* fallback; content-hoog → de body scrollt */
  max-height: 88dvh;          /* dynamische viewport + topmarge: kop niet achter de mobiele browserbalk */
  padding: 0;
  border: none;
  border-radius: 28px 28px 0 0;
  background: var(--color-bg);
  color: var(--color-text);
  box-shadow: 0 -8px 30px rgba(60, 33, 18, 0.18);
  overflow: hidden;
}
/* Alleen geopend zichtbaar — een gesloten <dialog> blijft via de UA-default display:none.
   (display NIET op de basisregel zetten, anders staat de sheet altijd open.) */
dialog.sheet[open] {
  display: flex;
  flex-direction: column;
  animation: sheet-up 0.34s cubic-bezier(0.32, 0.72, 0, 1);
}
dialog.sheet::backdrop { background: rgba(30, 18, 10, 0.45); }
@keyframes sheet-up { from { transform: translateY(100%); } to { transform: translateY(0); } }

.sheet__head {
  flex: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 18px 22px 12px;
  border-bottom: 1px solid var(--color-line);
}
/* min-width:0 + afkappen: een flex-item krimpt standaard niet onder z'n inhoud
   (min-width:auto). Een lange bestandsnaam zonder spaties duwde de kop daardoor breder
   dan de sheet; met justify-content:space-between liep die overloop naar de START-kant
   en knipte overflow:hidden de linkerhelft van de sheet weg. */
.sheet__title { font-family: var(--font-display); font-size: var(--text-22); font-weight: 600;
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.sheet__close { flex: none; display: flex; padding: 0; background: none; border: none; color: var(--color-text-muted); cursor: pointer; }
.sheet__close svg { width: 22px; height: 22px; }
.sheet__body { flex: 1; overflow-y: auto; padding: 14px 22px 26px; }
/* Form-variant (schrijf-sheets): ✕ | titel | opslaan-submit; het formulier wrapt
   kop + body zodat de submit in de kop kan leven. Kop zonder lijn (design). */
.sheet__form { display: flex; flex-direction: column; min-height: 0; max-height: inherit; }
/* Opslaan-footer van de form-variant (conventions §Opslag-model): volle-breedte knop
   onderaan; in de sheet--full-flex blijft hij als flex:none altijd in beeld terwijl
   alleen .sheet__body scrollt. De knop zelf is de .button-primitive. */
.sheet__footer { flex: none; padding: 12px 20px calc(14px + env(safe-area-inset-bottom, 0px)); border-top: 1px solid var(--color-line); }
/* Intro-regel direct onder de kop (home-plan-sheet e.a.). */
.sheet__lede { font-size: var(--text-sm); color: var(--color-text-muted); line-height: 1.5; margin: 0 0 4px; }

/* Volledige-modal-variant (UX-besluit 2026-07-20): grote formulieren — zoals "Kind
   toevoegen" — worden full-screen i.p.v. een bottom-sheet die tegen zijn eigen hoogte-
   limiet aan schuurt en dan intern gaat scrollen. Zelfde <dialog>/sheet-controller-
   mechaniek (open/close/backdrop ongewijzigd) — alleen de chrome verandert: edge-to-edge
   zoals .viewer, fade i.p.v. slide-up (leest als een eigen scherm, niet als een sheet). */
dialog.sheet--full {
  inset: 0;
  width: 100vw;
  max-width: 100vw;
  height: 100dvh;
  max-height: 100dvh;
  border-radius: 0;
  box-shadow: none;
  /* Géén display hier: dat zit al op dialog.sheet[open] (flex kolom). Op de basisregel
     zou het de UA-default display:none van een gesloten <dialog> overrulen — de sheet
     ligt dan permanent over de pagina en lijkt niet meer te sluiten. */
}
/* Kop blijft staan; alleen de body scrollt. Beide layout-varianten (met en zonder
   form-kop) delen dit: .sheet__form is de flex-drager als hij er is. */
dialog.sheet--full .sheet__form { display: flex; flex-direction: column; flex: 1; min-height: 0; }
dialog.sheet--full .sheet__body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding-bottom: calc(24px + env(safe-area-inset-bottom, 0px)); }
dialog.sheet--full[open] { animation: sheet-full-in 0.22s ease both; }
@keyframes sheet-full-in { from { opacity: 0; transform: translateY(12px); } to { opacity: 1; transform: translateY(0); } }
/* Een bottom-sheet clearet de statusbalk vanzelf (onderaan-anchored); een fullscreen-
   dialoog begint bovenaan het scherm en heeft de notch-marge zelf nodig (zelfde recept
   als .viewer__bar). */
.sheet--full .sheet__head { padding-top: calc(18px + env(safe-area-inset-top, 0px)); }

/* ===================== COACH-INGANGEN (plan-onderwerp, design 'planTopicQ') ===================== */
/* Coach-balk boven elk plan-onderwerp: paarse rij, opent de coach-sheet. */
.coach-bar { display: flex; align-items: center; gap: 11px; width: 100%; background: var(--color-coparent-soft); border: none; border-radius: 15px; padding: 12px 14px; margin-bottom: 16px; cursor: pointer; text-align: left; font: inherit; transition: transform .14s ease; }
.coach-bar:active { transform: scale(.99); }
.coach-bar__icon { flex: none; width: 32px; height: 32px; border-radius: 10px; background: var(--color-coparent); color: var(--color-on-accent); display: flex; align-items: center; justify-content: center; }
.coach-bar__icon svg { width: 18px; height: 18px; }
.coach-bar__body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.coach-bar__title { font-size: var(--text-sm); font-weight: 800; color: var(--color-coparent); }
.coach-bar__sub { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 1px; }
.coach-bar__chevron { flex: none; width: 19px; height: 19px; color: var(--color-coparent); }

/* Coach-sheet: hoger dan de standaard sheet (design: vanaf 70px onder de top), eigen kop
   + picker/gesprek + composer. De bubbels hergebruiken de chat-styling (.message-row). */
dialog.sheet--coach { height: calc(100dvh - 70px); max-height: calc(100dvh - 70px); }
/* In combinatie met sheet--full wint full: de coach leest dan als een eigen scherm,
   edge-to-edge — de losse sheet--coach-hoogte (met 70px lucht) blijft voor de
   bottom-sheet-variant elders. */
dialog.sheet--coach.sheet--full { height: 100dvh; max-height: 100dvh; }
.coach-sheet { display: flex; flex-direction: column; height: 100%; padding: 10px 20px 22px; }
.coach-sheet__grabber { flex: none; width: 38px; height: 4px; border-radius: 3px; background: var(--color-line); margin: 6px auto 14px; }
.coach-sheet__head { flex: none; display: flex; align-items: flex-start; gap: 12px; }
.coach-sheet__titles { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.coach-sheet__title { font-family: var(--font-display); font-size: var(--text-20); font-weight: 600; }
.coach-sheet__about { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.coach-sheet__close { flex: none; margin-top: 2px; padding: 0; background: none; border: none; color: var(--color-faint); cursor: pointer; }
.coach-sheet__close svg { width: 24px; height: 24px; }
.coach-sheet__stream { flex: 1; overflow-y: auto; margin-top: 12px; padding-bottom: 2px; }
.coach-sheet__privacy { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.5; margin: 0 2px 14px; }
.coach-sheet__qs { display: flex; flex-direction: column; gap: 9px; }
.coach-sheet__q { display: flex; align-items: center; justify-content: space-between; gap: 12px; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 15px; padding: 14px 16px; box-shadow: var(--shadow-sm); cursor: pointer; text-align: left; font: inherit; transition: transform .14s ease; }
.coach-sheet__q:active { transform: scale(.98); }
.coach-sheet__q-text { font-size: var(--text-15); font-weight: 600; color: var(--color-text); line-height: 1.35; }
.coach-sheet__q-arrow { flex: none; width: 26px; height: 26px; border-radius: 8px; background: var(--color-coparent-soft); color: var(--color-coparent); display: flex; align-items: center; justify-content: center; }
.coach-sheet__q-arrow svg { width: 15px; height: 15px; }
.coach-sheet__composer { flex: none; margin-top: 14px; }
.coach-sheet__composer .compose__submit { background: var(--color-coparent); }

/* ===================== ABONNEMENT "BLINCO SAMEN" (design paywall/abo/mollie) ===================== */
.paywall { max-width: 480px; margin: 0 auto; padding: 0 24px 34px; }
.paywall__topbar { display: flex; justify-content: flex-end; padding: 16px 0 0; }
.paywall__close { width: 34px; height: 34px; border-radius: 50%; background: var(--color-surface); border: 1px solid var(--color-line); display: flex; align-items: center; justify-content: center; color: var(--color-text); }
.paywall__close svg { width: 17px; height: 17px; }
/* Paywall als bottom-sheet-modal (frame-dialog): de body scrollt binnen de sheet, de
   X-topbar blijft plakken. dialog.sheet is al flex-kolom + overflow:hidden. */
.paywall-sheet .paywall { flex: 1; min-height: 0; max-width: none; overflow-y: auto; -webkit-overflow-scrolling: touch; }
.paywall-sheet .paywall__topbar { position: sticky; top: 0; z-index: 1; padding-top: 12px; background: var(--color-bg); }
.paywall__hero { font-family: var(--font-display); font-size: var(--text-32); font-weight: 500; line-height: 1.12; letter-spacing: -.4px; margin: 2px 0 0; }
.paywall__lede { font-size: var(--text-15); color: var(--color-text-muted); margin: 11px 0 0; line-height: 1.5; }
.paywall__core { margin-top: 20px; border-radius: 20px; padding: 19px; background: var(--gradient-coparent); color: var(--color-on-accent); box-shadow: 0 14px 30px rgba(89, 66, 201, .30); }
.paywall__core-head { display: flex; align-items: center; gap: 13px; }
.paywall__core-icon { flex: none; width: 46px; height: 46px; border-radius: 14px; background: rgba(255, 255, 255, .18); display: flex; align-items: center; justify-content: center; color: var(--color-on-accent); }
.paywall__core-icon svg { width: 24px; height: 24px; }
.paywall__core-titles { flex: 1; display: flex; flex-direction: column; }
.paywall__core-eyebrow { font-size: var(--text-xs); font-weight: 700; opacity: .85; text-transform: uppercase; letter-spacing: .4px; }
.paywall__core-title { font-size: var(--text-lg); font-weight: 700; margin-top: 2px; }
.paywall__core-text { font-size: var(--text-sm); opacity: .92; margin: 12px 0 0; line-height: 1.5; }
.paywall__section { font-size: var(--text-xs); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--color-faint); margin: 24px 4px 10px; }
.paywall__table { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-sm); overflow: hidden; }
.paywall__row { display: grid; grid-template-columns: 1fr 46px 52px; align-items: center; padding: 12px 16px; border-bottom: 1px solid var(--color-line); }
.paywall__row:last-child { border-bottom: none; }
.paywall__row--head { padding: 11px 16px; background: var(--color-softer); }
.paywall__row--head .paywall__feature, .paywall__row--head .paywall__col { font-size: var(--text-11); font-weight: 800; letter-spacing: .3px; text-transform: uppercase; color: var(--color-faint); }
.paywall__row--head .paywall__col--samen { color: var(--color-coparent); }
.paywall__feature { font-size: var(--text-sm); font-weight: 600; }
.paywall__col { display: flex; justify-content: center; }
.paywall__col--none { color: var(--color-faint); }
.paywall__check { width: 16px; height: 16px; color: var(--color-green); }
.paywall__plan { position: relative; display: flex; align-items: center; gap: 13px; background: var(--color-surface); border: 2px solid var(--color-line); border-radius: 16px; padding: 15px 16px; cursor: pointer; transition: all .15s ease; }
.paywall__plan + .paywall__plan { margin-top: 10px; }
.paywall__plan.is-active { background: var(--color-softer); border-color: var(--color-accent); }
.paywall__plan-radio { position: absolute; top: 0; left: 0; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.paywall__plan-dot { flex: none; width: 22px; height: 22px; border-radius: 50%; border: 2px solid var(--color-line); display: flex; align-items: center; justify-content: center; }
.paywall__plan.is-active .paywall__plan-dot { border-color: var(--color-accent); }
.paywall__plan.is-active .paywall__plan-dot::after { content: ""; width: 11px; height: 11px; border-radius: 50%; background: var(--color-accent); }
.paywall__plan-body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.paywall__plan-name { font-size: var(--text-15); font-weight: 700; }
.paywall__plan-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.paywall__plan-price { font-size: var(--text-base); font-weight: 800; }
.paywall__plan-permonth { font-size: var(--text-xs); font-weight: 600; color: var(--color-text-muted); }
.paywall__plan-note { font-size: var(--text-13); color: var(--color-text-muted); margin: 11px 4px 0; line-height: 1.5; }
.paywall__cta { display: block; width: 100%; text-align: center; background: var(--color-accent); color: var(--color-on-accent); font-weight: 700; font-size: var(--text-base); padding: 16px; border: none; border-radius: 16px; margin-top: 20px; cursor: pointer; box-shadow: 0 8px 20px rgba(140, 55, 30, .22); font-family: inherit; transition: transform .12s ease; }
.paywall__cta:active { transform: scale(.98); }
.paywall__cta-note { text-align: center; font-size: var(--text-13); color: var(--color-text-muted); margin-top: 10px; line-height: 1.5; }
.paywall__privacy { display: flex; gap: 10px; align-items: flex-start; margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--color-line); font-size: var(--text-xs); color: var(--color-faint); line-height: 1.5; }
.paywall__privacy svg { flex: none; width: 16px; height: 16px; margin-top: 1px; }

/* Abonnement-statusscherm (design 'abo') */
/* Abonnement-statusscherm (design 'Abonnement'): rijke per-staat-kaarten. */
.abo__label { display: block; margin: 22px 4px 10px; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--color-faint); }

/* Gratis: paarse hero-kaart. */
.abo-hero { overflow: hidden; border-radius: 22px; padding: 20px; background: var(--gradient-coparent); color: var(--color-on-accent); box-shadow: 0 12px 28px rgba(89, 66, 201, 0.30); }
.abo-hero__eyebrow { font-size: var(--text-xs); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; opacity: 0.8; }
.abo-hero__title { font-family: var(--font-display); font-size: var(--text-20); font-weight: 600; margin: 7px 0 0; line-height: 1.25; }
.abo-hero__text { font-size: var(--text-sm); opacity: 0.9; margin: 8px 0 0; line-height: 1.5; }
.abo-hero__cta { display: block; margin-top: 16px; text-align: center; background: var(--color-surface); color: var(--color-coparent); font-weight: 700; font-size: var(--text-15); padding: 13px; border-radius: 13px; }
.abo-checklist { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-sm); overflow: hidden; }
.abo-checklist__row { display: flex; align-items: center; gap: 11px; padding: 13px 16px; border-bottom: 1px solid var(--color-line); }
.abo-checklist__row:last-child { border-bottom: none; }
.abo-checklist__check { flex: none; width: 17px; height: 17px; color: var(--color-green); }
.abo-checklist__label { font-size: var(--text-sm); font-weight: 600; }

/* Proef/actief/bevroren: statuskaart met badge. */
.abo-statecard { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 20px; box-shadow: var(--shadow-sm); padding: 18px; }
.abo-statecard--amber { background: var(--color-amber-soft); border-color: var(--color-amber-border); }
.abo-statecard--green { background: var(--color-green-soft); border-color: var(--color-green-border); }
.abo-statecard__badge { display: inline-block; font-size: var(--text-11); font-weight: 800; letter-spacing: .4px; text-transform: uppercase; color: var(--color-text-muted); background: var(--color-softer); padding: 4px 10px; border-radius: 8px; }
.abo-statecard__badge--amber { color: var(--color-amber); background: var(--color-amber-border); }
.abo-statecard__badge--green { color: var(--color-green); background: var(--color-green-border); }
.abo-statecard__title { font-family: var(--font-display); font-size: var(--text-22); font-weight: 600; color: var(--color-text); margin: 11px 0 0; }
.abo-statecard__text { font-size: var(--text-sm); color: var(--color-text); opacity: 0.82; margin: 6px 0 0; line-height: 1.5; }

/* Prijs/volgende-betaling-rijen onder een statuskaart. */
.abo-rows { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-sm); overflow: hidden; margin-top: 14px; }
.abo-rows__row { display: flex; justify-content: space-between; gap: 12px; padding: 14px 16px; border-bottom: 1px solid var(--color-line); }
.abo-rows__row:last-child { border-bottom: none; }
.abo-rows__label { font-size: var(--text-sm); color: var(--color-text-muted); }
.abo-rows__value { font-size: var(--text-sm); font-weight: 700; }

/* Gedekt door de ander. */
.abo-covered { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 20px; box-shadow: var(--shadow-sm); padding: 18px; }
.abo-covered__head { display: flex; align-items: center; gap: 13px; }
.abo-covered__avatar { flex: none; display: grid; place-items: center; width: 46px; height: 46px; border-radius: 14px; background: var(--color-coparent-soft); color: var(--color-coparent); font-weight: 800; font-size: var(--text-lg); }
.abo-covered__title { flex: 1; font-size: var(--text-base); font-weight: 700; line-height: 1.25; }
.abo-covered__text { font-size: var(--text-sm); color: var(--color-text-muted); margin: 12px 0 0; line-height: 1.5; }

/* Info-noot (halen-brengen-stijl): icoon + tekst. Variant --green voor de proef-noot. */
.abo-note { display: flex; gap: 11px; align-items: flex-start; background: var(--color-softer); border: 1px solid var(--color-line); border-radius: 15px; padding: 13px 15px; margin-top: 12px; font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.5; }
.abo-note svg { flex: none; width: 18px; height: 18px; margin-top: 1px; color: var(--color-text-muted); }
.abo-note--green { background: var(--color-green-soft); border-color: transparent; color: var(--color-green-deep); }
.abo-note--green svg { color: var(--color-green-deep); }

.abo__cta { width: 100%; margin-top: 16px; }
.abo__cta-form { margin-top: 0; }
.abo__ghost { display: block; width: 100%; text-align: center; background: none; border: none; color: var(--color-text-muted); font-weight: 700; font-size: var(--text-sm); padding: 15px; cursor: pointer; font-family: inherit; }
.abo__ghost-form { margin-top: 4px; }

/* Mollie/iDEAL-mock */
.mollie__heading { font-family: var(--font-display); font-size: var(--text-24); font-weight: 500; margin: 6px 0 0; }
.mollie__lede { font-size: var(--text-sm); color: var(--color-text-muted); line-height: 1.5; margin: 8px 0 16px; }
.mollie__demo { font-size: var(--text-13); color: var(--color-faint); line-height: 1.5; margin: 12px 0; }
.mollie__confirm { width: 100%; }

/* Flash-melding als toast onderaan (auto-fade) i.p.v. ruwe tekst bovenaan de pagina. */
.flash {
  position: fixed;
  left: 50%;
  bottom: calc(96px + env(safe-area-inset-bottom, 0px));
  transform: translateX(-50%);
  z-index: 60;
  max-width: 88%;
  text-align: center;
  background: var(--slate-dark);
  color: var(--color-on-accent);
  font-size: var(--text-sm);
  font-weight: 600;
  line-height: 1.35;
  padding: 11px 18px;
  border-radius: 12px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
  animation: flash-toast 4.2s ease forwards;
}
.flash[data-flash-type="alert"] { background: var(--color-error); }
@keyframes flash-toast {
  0% { opacity: 0; transform: translate(-50%, 12px); }
  7% { opacity: 1; transform: translate(-50%, 0); }
  86% { opacity: 1; transform: translate(-50%, 0); }
  100% { opacity: 0; transform: translate(-50%, 8px); pointer-events: none; }
}

/* Bestand-kiezen-veld netter: gestylede ::file-selector-button. */
.form__input[type="file"] { padding: 9px 12px; line-height: 1.4; }
.form__input[type="file"]::file-selector-button {
  margin-right: 12px;
  padding: 8px 14px;
  border: none;
  border-radius: 10px;
  background: var(--color-soft);
  color: var(--color-accent);
  font-weight: 700;
  font-size: var(--text-sm);
  cursor: pointer;
}

/* Nette bestand-kiezer (dropzone) — verbergt het native veld. */
.filepick { position: relative; display: flex; flex-direction: column; align-items: center; gap: 9px; margin-bottom: 16px; border: 1.5px dashed var(--color-line); border-radius: 14px; padding: 24px 16px; cursor: pointer; text-align: center; background: var(--color-surface); transition: border-color var(--dur-fast) var(--curve-decel); }
.filepick:active { border-color: var(--color-accent); }
.filepick__input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.filepick__icon { width: 30px; height: 30px; color: var(--color-accent); }
.filepick__label { font-size: var(--text-sm); font-weight: 700; color: var(--color-accent); }

/* Herbruikbare bevestigings-modal (DRY, app-breed) — gecentreerd, mobiel-vriendelijk. */
dialog.confirm { margin: auto; padding: 0; border: none; background: transparent; width: 340px; max-width: calc(100vw - 36px); }
dialog.confirm::backdrop { background: rgba(30, 18, 10, 0.5); }
dialog.confirm[open] { animation: confirm-pop 0.25s cubic-bezier(0.34, 1.56, 0.64, 1); }
@keyframes confirm-pop { from { opacity: 0; transform: scale(0.92); } to { opacity: 1; transform: scale(1); } }
.confirm__box { background: var(--color-surface); border-radius: 20px; padding: 24px 22px; text-align: center; box-shadow: 0 16px 40px rgba(0, 0, 0, 0.25); }
.confirm__icon { display: grid; place-items: center; width: 52px; height: 52px; margin: 0 auto 14px; border-radius: 16px; background: var(--color-error-soft); color: var(--color-error); }
.confirm__icon svg { width: 26px; height: 26px; }
.confirm__message { font-size: var(--text-15); font-weight: 600; line-height: 1.4; margin: 0 0 18px; color: var(--color-text); }
.confirm__ok { display: block; width: 100%; padding: 13px; border: none; border-radius: 13px; background: var(--color-error); color: var(--color-on-accent); font-weight: 700; font-size: var(--text-15); cursor: pointer; }
.confirm__cancel { display: block; width: 100%; margin-top: 9px; padding: 13px; border: 1px solid var(--color-line); border-radius: 13px; background: var(--color-surface); color: var(--color-text); font-weight: 700; font-size: var(--text-15); cursor: pointer; }

.sheet__name {
  width: 100%;
  border: none;
  border-bottom: 1.5px solid var(--color-line);
  background: none;
  padding: 8px 2px;
  font-size: var(--text-20);
  font-family: inherit;
  color: var(--color-text);
  outline: none;
  margin-bottom: 18px;
}
.sheet__label { display: block; font-size: var(--text-13); font-weight: 700; margin-bottom: 7px; }
.sheet__label--accent { font-weight: 800; color: var(--color-accent); margin-bottom: 8px; }
.sheet__label--muted { font-size: var(--text-13); color: var(--color-text-muted); margin-bottom: 6px; }
.sheet__optional { color: var(--color-faint); font-weight: 600; }
.sheet__field {
  width: 100%;
  border: 1px solid var(--color-line);
  background: var(--color-surface);
  border-radius: 12px;
  padding: 12px 14px;
  font-size: var(--text-15);
  font-family: inherit;
  color: var(--color-text);
  outline: none;
  margin-bottom: 16px;
}
.sheet__field--textarea { min-height: 66px; resize: none; }
select.sheet__field {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 40px;
  background-image: var(--select-chevron);
  background-repeat: no-repeat;
  background-position: right 14px center;
  background-size: 12px 12px;
}
/* Toelichtende microtekst direct onder een veld (design: "(terugval)"-hint, privacy-note). */
.sheet__hint { font-size: var(--text-xs); color: var(--color-faint); line-height: 1.4; margin: -10px 0 16px; }
.sheet__save {
  width: 100%;
  text-align: center;
  background: var(--color-accent);
  color: var(--color-on-accent);
  font-weight: 700;
  font-size: var(--text-base);
  padding: 15px;
  border: none;
  border-radius: 15px;
  cursor: pointer;
  margin-top: 6px;
}

/* ===================== GEZIN-SUBSCHERM (full-bleed, design) =====================
   Gedeelde container + kop voor de full-bleed gezin-sub-schermen (Scholen, Documenten,
   Ouderschapsplan, Toestemmingen) — zelfde idioom als het adresboek (shared/_section_head). */
.gezin-section {
  max-width: 520px;
  margin: 0 auto;
  padding: calc(8px + env(safe-area-inset-top, 0px)) 18px 24px;
  color: var(--color-text);
}
.section-head__row { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; }
.section-head__back {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--color-accent);
  font-weight: 700;
  font-size: var(--text-sm);
  text-decoration: none;
}
.section-head__back svg { width: 18px; height: 18px; }
/* History-terug-variant rendert als <button>: chrome resetten, font/kleur erven van boven. */
button.section-head__back { border: none; background: none; padding: 0; cursor: pointer; }
.section-head__action {
  width: 36px;
  height: 36px;
  flex: none;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--color-soft);
  color: var(--color-accent);
  text-decoration: none;
  border: 0;
  cursor: pointer;
}
.section-head__action svg { width: 20px; height: 20px; }
.section-head__title {
  font-family: var(--font-display);
  font-size: var(--text-26);
  font-weight: 600;
  letter-spacing: -0.2px;
  margin: 4px 0 14px;
}
.section-head__title:has(+ .section-head__sub) { margin-bottom: 4px; }
.section-head__sub { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 0 0 16px; }

.contacts__group { margin-top: 20px; }
.contacts__group-label {
  display: block;
  font-size: var(--text-xs);
  font-weight: 800;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: var(--color-faint);
  margin: 0 2px 8px;
}
.contacts__list { list-style: none; margin: 0; padding: 0; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 16px; overflow: hidden; }
.contacts__row { display: flex; align-items: center; gap: 0; border-bottom: 1px solid var(--color-line); }
.contacts__row:last-child { border-bottom: none; }
.contacts__link {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 12px 8px 12px 14px;
  text-decoration: none;
  color: var(--color-text);
}
.contacts__avatar {
  flex: none;
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 14px;
  font-weight: 800;
  font-size: var(--text-base);
}
.contacts__body { min-width: 0; display: flex; flex-direction: column; }
.contacts__name { font-size: var(--text-base); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.contacts__role { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.contacts__call {
  flex: none;
  width: 38px;
  height: 38px;
  margin-right: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 11px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.contacts__call svg { width: 18px; height: 18px; }
.contacts__empty { text-align: center; color: var(--color-text-muted); font-size: var(--text-sm); padding: 28px 0; }
.contacts__edit { margin-top: 14px; }
.contacts__edit-actions { display: flex; gap: 8px; align-items: center; }

/* Categorie-kleuren (avatar-tegel + detail-chip). Noodcontact = warm rood (geen token). */
.contacts__avatar--noodcontact { background: var(--color-error-soft); color: var(--color-error); }
.contacts__avatar--school      { background: var(--color-soft);          color: var(--color-accent); }
.contacts__avatar--medisch     { background: var(--color-green-soft);    color: var(--color-green); }
.contacts__avatar--sport       { background: var(--color-amber-soft);    color: var(--color-amber); }
.contacts__avatar--familie     { background: var(--color-coparent-soft); color: var(--color-coparent); }
.contacts__avatar--overig      { background: var(--color-softer);         color: var(--color-text-muted); }
.contacts__chip--noodcontact { background: var(--color-error-soft); color: var(--color-error); }
.contacts__chip--school      { background: var(--color-soft);          color: var(--color-accent); }
.contacts__chip--medisch     { background: var(--color-green-soft);    color: var(--color-green); }
.contacts__chip--sport       { background: var(--color-amber-soft);    color: var(--color-amber); }
.contacts__chip--familie     { background: var(--color-coparent-soft); color: var(--color-coparent); }
.contacts__chip--overig      { background: var(--color-softer);         color: var(--color-text-muted); }

/* ----- Contactdetail (scherm 10) ----- */
.contact-detail__back {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  color: var(--color-accent);
  font-weight: 700;
  font-size: var(--text-sm);
  text-decoration: none;
  margin-bottom: 8px;
}
.contact-detail__back svg { width: 18px; height: 18px; }
.contact-detail__head { display: flex; flex-direction: column; align-items: center; text-align: center; margin-bottom: 20px; }
.contact-detail__avatar {
  width: 72px;
  height: 72px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 24px;
  font-weight: 800;
  font-size: var(--text-28);
  margin-bottom: 12px;
}
.contact-detail__name { font-family: var(--font-display); font-size: var(--text-24); font-weight: 600; margin: 0; }
.contact-detail__role { font-size: var(--text-sm); color: var(--color-text-muted); margin-top: 2px; }
.contact-detail__chip { margin-top: 10px; font-size: var(--text-11); font-weight: 800; padding: 4px 11px; border-radius: 9px; }
.contact-detail__actions { display: flex; gap: 9px; margin-bottom: 20px; }
.contact-detail__action {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  padding: 13px 0;
  border-radius: 14px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  color: var(--color-text);
  text-decoration: none;
  font-size: var(--text-xs);
  font-weight: 700;
}
/* Accent-kleur: waren inline stroke: accent; het gedeelde Material-icoon volgt
   currentColor. De --primary-knop overschrijft naar wit hieronder. */
.contact-detail__action svg { width: 19px; height: 19px; color: var(--color-accent); }
.contact-detail__action--primary { background: var(--color-accent); border-color: var(--color-accent); color: var(--color-on-accent); }
.contact-detail__action--primary svg { fill: var(--color-on-accent); }
.contact-detail__fields { list-style: none; margin: 0; padding: 0; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; overflow: hidden; }
.contact-detail__field { display: flex; flex-direction: column; gap: 1px; padding: 14px 16px; border-bottom: 1px solid var(--color-line); }
.contact-detail__field:last-child { border-bottom: none; }
.contact-detail__field-label { font-size: var(--text-xs); color: var(--color-faint); font-weight: 600; }
.contact-detail__field-value { font-size: var(--text-15); font-weight: 600; }
.contact-detail__added { display: flex; align-items: center; gap: 8px; margin: 14px 4px 0; font-size: var(--text-13); color: var(--color-faint); }

/* ===================== DOCUMENTEN (design-handoff "Documenten") ===================== */
/* Dropbox-achtig: geen kaarten maar een platte lijst met fijne scheidingslijnen, per rij
   een bestandstype-tegel links en een kebab rechts. Mappen boven, losse documenten
   eronder. Zelfde rij-anatomie voor mappen, documenten en verplaats-doelen. */
.documenten__sharednote { display: flex; align-items: center; gap: 6px; margin: 6px 2px 0; font-size: var(--text-13); color: var(--color-text-muted); }
.documenten__sharednote svg { flex: none; width: 14px; height: 14px; color: var(--color-faint); }
.documenten__sectionhead { font-size: var(--text-xs); font-weight: 800; letter-spacing: 0.6px; text-transform: uppercase; color: var(--color-faint); margin: 20px 2px 10px; }
.documenten__loosehead { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
.documenten__loosehead .documenten__sectionhead { margin-bottom: 0; }
.documenten__sorthead { display: flex; justify-content: flex-end; margin: 18px 2px 6px; }
.documenten__foldermeta { display: flex; align-items: center; gap: 8px; margin: 8px 2px 0; }
.documenten__ownernote { font-size: var(--text-xs); color: var(--color-text-muted); }
.documenten__readonly { display: flex; align-items: flex-start; gap: 9px; background: var(--color-amber-soft); border-radius: 12px; padding: 10px 13px; margin-top: 12px; font-size: var(--text-xs); color: var(--color-amber-deep); line-height: 1.45; }
.documenten__readonly svg { flex: none; width: 16px; height: 16px; margin-top: 1px; color: var(--color-amber); }

/* Toegangsbadge van een map: grijs (prive) - amber (kan bekijken) - groen (kan bewerken). */
.accessbadge { flex: none; font-size: var(--text-11); font-weight: 800; padding: 4px 10px; border-radius: 8px; background: var(--color-softer); color: var(--color-faint); }
.accessbadge--lezen { background: var(--color-amber-soft); color: var(--color-amber); }
.accessbadge--bewerken { background: var(--color-green-soft); color: var(--color-green); }

/* Bestandstype-tegel, afgeleid van de extensie. Afbeeldingen krijgen het foto-icoon,
   de rest een extensielabel - elk met een eigen tint (design "Bestandstype-iconen"). */
.filetile { flex: none; width: 44px; height: 44px; border-radius: 10px; display: flex; align-items: center; justify-content: center; background: var(--color-soft); color: var(--color-accent); }
.filetile svg { width: 21px; height: 21px; }
.filetile__ext { font-size: 0.625rem; font-weight: 800; letter-spacing: 0.3px; }
.filetile--image { background: var(--color-green-soft); color: var(--color-green); }
/* Echte duimnagel: de afbeelding vult de tegel, geen gekleurd vlak eromheen. */
.filetile--thumb { background: var(--color-softer); overflow: hidden; }
.filetile__img { width: 100%; height: 100%; object-fit: cover; display: block; }
.filetile--pdf { background: var(--color-file-pdf-soft); color: var(--color-file-pdf); }
.filetile--doc { background: var(--color-file-doc-soft); color: var(--color-file-doc); }
.filetile--sheet { background: var(--color-file-sheet-soft); color: var(--color-file-sheet); }

/* ----- Mappenlijst ----- */
.folderlist, .doclist, .movelist { list-style: none; margin: 0; padding: 0; }
.folderlist__item, .doclist__item { display: flex; align-items: center; border-bottom: 1px solid var(--color-line); }
.folderlist__item:last-child, .doclist__item:last-child { border-bottom: none; }
.folderlist__link { flex: 1; min-width: 0; display: flex; align-items: center; gap: 13px; padding: 12px 2px; text-decoration: none; color: var(--color-text); }
.folderlist__link:active, .doclist__link:active { background: var(--color-softer); }
.folderlist__tile { flex: none; width: 44px; height: 44px; border-radius: 11px; background: var(--color-soft); color: var(--color-accent); display: flex; align-items: center; justify-content: center; }
.folderlist__tile svg { width: 23px; height: 23px; }
.folderlist__body { flex: 1; min-width: 0; }
.folderlist__naam { display: block; font-size: var(--text-15); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.folderlist__meta { display: flex; align-items: center; gap: 7px; margin-top: 3px; }
.folderlist__meta .accessbadge { padding: 2px 8px; border-radius: 7px; }
.folderlist__count { font-size: var(--text-xs); color: var(--color-text-muted); }
.folderlist__chevron { flex: none; width: 19px; height: 19px; color: var(--color-faint); }

/* ----- Documentenlijst ----- */
/* De rij is óf een link (download) óf een knop (afbeelding → viewer). De knop-variant
   moet de browserstijl kwijt — anders krijgt-ie een eigen kader, achtergrond, centrering
   en systeemfont, en wijkt de afbeeldingsrij zichtbaar af van de rest. */
.doclist__link {
  flex: 1; min-width: 0; display: flex; align-items: center; gap: 13px; padding: 12px 2px;
  text-decoration: none; color: var(--color-text);
  appearance: none; -webkit-appearance: none;
  background: none; border: none; border-radius: 0;
  font: inherit; text-align: left; cursor: pointer;
}
.doclist__body { flex: 1; min-width: 0; }
.doclist__naam { display: block; font-size: var(--text-15); font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.doclist__meta { display: block; font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 2px; }
.doclist__kebab { flex: none; width: 34px; height: 34px; border: none; border-radius: 50%; background: none; color: var(--color-faint); display: flex; align-items: center; justify-content: center; cursor: pointer; }
.doclist__kebab:active { background: var(--color-soft); }
.doclist__kebab svg { width: 20px; height: 20px; }
.doclist__expiry { display: inline-block; margin-left: 8px; font-size: var(--text-11); font-weight: 700; padding: 1px 7px; border-radius: 7px; }
/* Voorstellen ("Samen afgesproken"): titel-only tot de ander akkoord geeft. */
.doclist--voorstellen { margin-bottom: 14px; }
.doclist__item--voorstel { justify-content: space-between; gap: 12px; padding: 13px 2px; }
.doclist__item--voorstel .doclist__body { flex: 1; min-width: 0; }
.doclist__wacht { flex: none; font-size: var(--text-xs); font-weight: 700; color: var(--color-faint); }
.doclist__voorstel-acties { flex: none; display: flex; gap: 8px; }

/* Sorteer-toggle (Naam <-> Datum). */
/* Twee losse tapdoelen: label = sorteerveld, pijltje = richting. Beide krijgen wat
   padding zodat ze op een telefoon los aantikbaar blijven. */
.docsort { display: flex; align-items: center; gap: 2px; }
.docsort__field, .docsort__dir { display: inline-flex; align-items: center; padding: 4px 3px; text-decoration: none; }
.docsort__field:active, .docsort__dir:active { opacity: 0.6; }
.docsort__label { font-size: var(--text-xs); font-weight: 700; color: var(--color-text-muted); }
.docsort__icon { width: 14px; height: 14px; color: var(--color-text-muted); }

/* ----- Bestandschip in de gegevens-sheet (upload-eerst) ----- */
.visually-hidden-input { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; z-index: -1; }
.filechip { display: flex; align-items: center; gap: 12px; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 14px; padding: 12px 13px; box-shadow: var(--shadow-4); margin-bottom: 20px; }
.filechip .filetile { width: 42px; height: 42px; }
.filechip .filetile svg { width: 20px; height: 20px; }
.filechip__body { flex: 1; min-width: 0; }
.filechip__naam { display: block; font-size: var(--text-13); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.filechip__meta { display: block; font-size: var(--text-11); color: var(--color-text-muted); margin-top: 1px; }
.filechip__replace { flex: none; font-size: var(--text-xs); font-weight: 700; color: var(--color-accent); cursor: pointer; padding: 6px 8px; }
.filechip__replace:active { opacity: 0.6; }
.form__optional { color: var(--color-faint); font-weight: 600; margin-left: 4px; }

/* ----- Sheet-menus: rijke rijen (toevoeg-menu), inforegel, divider, deel-badge ----- */
.sheetmenu__label { flex: 1; }
.sheetmenu__item--rich { gap: 15px; padding: 15px 12px; border-radius: 14px; }
.sheetmenu__tile { flex: none; width: 42px; height: 42px; border-radius: 12px; background: var(--color-soft); color: var(--color-accent); display: flex; align-items: center; justify-content: center; }
.sheetmenu__tile svg { width: 21px; height: 21px; color: var(--color-accent); }
.sheetmenu__rich { flex: 1; display: flex; flex-direction: column; }
.sheetmenu__richtitle { font-size: var(--text-15); font-weight: 700; }
.sheetmenu__richsub { font-size: var(--text-xs); color: var(--color-text-muted); font-weight: 400; margin-top: 1px; }
.sheetmenu__info { display: flex; align-items: flex-start; gap: 12px; padding: 12px; margin: 2px 0; background: var(--color-softer); border-radius: 12px; font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.4; }
.sheetmenu__info svg { flex: none; width: 19px; height: 19px; margin-top: 1px; color: var(--color-text-muted); }
.sheetmenu__divider { height: 1px; background: var(--color-line); margin: 8px 12px; }
.sheetmenu__note { font-size: var(--text-11); color: var(--color-faint); text-align: center; margin: 8px 0 0; line-height: 1.4; }
.sharebadge { flex: none; font-size: var(--text-11); font-weight: 800; color: var(--color-faint); background: var(--color-softer); border-radius: 8px; padding: 4px 10px; }
.sharebadge--on { color: var(--color-green); }

/* Kop van het document-kebab-menu: tegel + meta onder de sheet-titel. */
.sheetfilehead { display: flex; align-items: center; gap: 13px; padding: 0 0 14px; margin-bottom: 6px; border-bottom: 1px solid var(--color-line); }
.sheetfilehead__meta { font-size: var(--text-xs); color: var(--color-text-muted); }

/* ----- Verplaatsen: doelenlijst + zichtbaarheidsbevestiging ----- */
.movelist__form { margin: 0; width: 100%; }
.movelist__item { display: flex; align-items: center; gap: 13px; width: 100%; padding: 13px 12px; border: none; border-radius: 12px; background: none; color: var(--color-text); font: inherit; text-align: left; cursor: pointer; }
.movelist__item:active { background: var(--color-softer); }
.movelist__tile { flex: none; width: 40px; height: 40px; border-radius: 11px; background: var(--color-soft); color: var(--color-accent); display: flex; align-items: center; justify-content: center; }
.movelist__tile svg { width: 20px; height: 20px; }
.movelist__body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.movelist__naam { font-size: var(--text-15); font-weight: 700; }
.movelist__sub { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 1px; }
.movelist__chevron { flex: none; width: 18px; height: 18px; color: var(--color-faint); }

/* ----- Mapformulier: "Wie mag erbij?" als drie keuzekaarten ----- */
.accesspick { display: flex; flex-direction: column; gap: 9px; }
.accesspick__opt { display: flex; align-items: flex-start; gap: 11px; background: var(--color-surface); border: 1.5px solid var(--color-line); border-radius: 14px; padding: 13px 14px; cursor: pointer; }
/* De selectie volgt de radio zelf (:has), niet alleen de server-gerenderde --on-class.
   Zonder dit bewoog er bij het aantikken van een andere optie visueel niets — de kaart
   bleef op de opgeslagen waarde staan, wat las als "de opties werken niet". */
.accesspick__opt--on,
.accesspick__opt:has(.accesspick__radio:checked) { border-color: var(--color-accent); background: var(--color-soft); }
/* Server-class wint niet van de live keuze: staat een ándere optie aangevinkt, dan
   verliest de oorspronkelijke kaart z'n accent. */
.accesspick:has(.accesspick__radio:checked) .accesspick__opt--on:not(:has(.accesspick__radio:checked)) {
  border-color: var(--color-line); background: var(--color-surface);
}
.accesspick__radio { position: absolute; opacity: 0; pointer-events: none; }
.accesspick__body { flex: 1; display: flex; flex-direction: column; }
.accesspick__label { font-size: var(--text-sm); font-weight: 700; }
.accesspick__sub { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 2px; line-height: 1.35; }
.accesspick__check { flex: none; width: 20px; height: 20px; margin-top: 1px; color: var(--color-accent); opacity: 0; }
.accesspick__opt--on .accesspick__check,
.accesspick__opt:has(.accesspick__radio:checked) .accesspick__check { opacity: 1; }
.accesspick:has(.accesspick__radio:checked) .accesspick__opt--on:not(:has(.accesspick__radio:checked)) .accesspick__check { opacity: 0; }

/* Deel-markering op een bestand-/maptegel: klein poppetje rechtsonder (Dropbox-idioom).
   Vervangt de losse "gedeeld met …"-regel boven de lijst. */
.filetile, .folderlist__tile { position: relative; }
.sharemark {
  position: absolute; right: -3px; bottom: -3px;
  display: inline-flex; align-items: center; justify-content: center;
  width: 17px; height: 17px; border-radius: 50%;
  background: var(--color-coparent); color: var(--color-on-accent);
  border: 2px solid var(--color-surface);
}
.sharemark svg { width: 10px; height: 10px; }

/* Mapnaam met mapicoon op een regel (mapweergave). */
.section-head__title--icon { display: flex; align-items: center; gap: 9px; }
.section-head__title--icon svg { flex: none; width: 24px; height: 24px; color: var(--color-accent); }

.button--block { display: block; width: 100%; text-align: center; }

/* ----- Scholen & opvang (scherm 12): kaart per locatie ----- */
.school-card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); overflow: hidden; margin-bottom: 12px; }
.school-card__head { display: flex; align-items: center; gap: 13px; padding: 15px 16px; border-bottom: 1px solid var(--color-line); }
.school-card__icon { flex: none; width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; border-radius: 14px; background: var(--color-soft); color: var(--color-accent); }
.school-card__icon svg { width: 22px; height: 22px; }
/* Kebab rechts in de kop (zelfde gebaar als de info-kluis): opent de actie-sheet. */
.school-card__edit { flex: none; margin-left: auto; display: grid; place-items: center; width: 32px; height: 32px; border: 0; border-radius: 8px; background: none; color: var(--color-faint); cursor: pointer; }
.school-card__edit:active { background: var(--color-softer); }
.school-card__edit svg { width: 20px; height: 20px; }
.school-card__head-text { min-width: 0; display: flex; flex-direction: column; }
.school-card__naam { font-size: var(--text-base); font-weight: 700; }
.school-card__sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.school-card__row { display: flex; align-items: center; gap: 11px; padding: 12px 16px; border-bottom: 1px solid var(--color-line); }
.school-card__row:last-child { border-bottom: none; }
.school-card__row-icon { flex: none; width: 17px; height: 17px; color: var(--color-faint); }
.school-card__row-text { flex: 1; min-width: 0; display: flex; flex-direction: column; font-size: var(--text-sm); }
.school-card__row-label { font-size: var(--text-xs); color: var(--color-faint); font-weight: 600; }
.school-card__row-value { font-size: var(--text-sm); font-weight: 600; margin-top: 1px; }
.school-card__call { flex: none; width: 38px; height: 38px; display: flex; align-items: center; justify-content: center; border-radius: 11px; background: var(--color-soft); color: var(--color-accent); }
.school-card__call svg { width: 17px; height: 17px; }
.school-card__enrollment { display: flex; flex-direction: column; padding: 11px 16px; border-bottom: 1px solid var(--color-line); }
.school-card__enrollment:last-child { border-bottom: none; }
.school-card__enrollment-kind { font-size: var(--text-sm); font-weight: 700; }
.school-card__enrollment-meta { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.school-card__edit-title { font-size: var(--text-base); font-weight: 800; margin: 18px 0 10px; }
.school-card__edit-actions { display: flex; gap: 8px; align-items: center; }
.school-card__enroll-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-top: 8px; font-size: var(--text-sm); }

/* ----- Kind-detail read-first (scherm 9) ----- */
.kinddetail__top { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; }
.kinddetail__edit-link { font-size: var(--text-sm); font-weight: 700; color: var(--color-accent); text-decoration: none; }
.kinddetail__hero { display: flex; align-items: center; gap: 16px; margin: 4px 0 8px; }
.kinddetail__avatar { flex: none; overflow: hidden; width: 64px; height: 64px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--kid-color, var(--color-accent)); color: var(--color-on-accent); font-weight: 800; font-size: var(--text-26); }
.kinddetail__hero-text { min-width: 0; }
.kinddetail__name { font-family: var(--font-display); font-size: var(--text-26); font-weight: 600; margin: 0; }
.kinddetail__age { font-size: var(--text-sm); color: var(--color-text-muted); }
.kinddetail__section-label { display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); margin: 22px 4px 10px; }
.kinddetail__card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); overflow: hidden; }
.kinddetail__row { display: flex; justify-content: space-between; gap: 12px; padding: 13px 16px; border-bottom: 1px solid var(--color-line); }
.kinddetail__row--last, .kinddetail__row:last-child { border-bottom: none; }
.kinddetail__row-label { font-size: var(--text-sm); color: var(--color-text-muted); }
.kinddetail__row-value { font-size: var(--text-sm); font-weight: 700; text-align: right; }
.kinddetail__row-value--amber { color: var(--color-amber); }
.kinddetail__empty { color: var(--color-text-muted); font-size: var(--text-sm); padding: 8px 4px; }
.kinddetail__chips { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); padding: 14px 16px; display: flex; flex-wrap: wrap; gap: 8px; }
.kinddetail__chip { font-size: var(--text-13); font-weight: 600; background: var(--color-softer); color: var(--color-text); padding: 8px 12px; border-radius: 10px; }
.kinddetail__actions { display: flex; gap: 10px; margin-top: 24px; }

/* ── Kind-detailpagina (design): hero + read-first secties met "+ Toevoegen" + sheets ── */
.kinddetail { max-width: 520px; margin: 0 auto; padding: 0 18px 28px; color: var(--color-text); }
.kinddetail__back { display: inline-flex; align-items: center; gap: 5px; margin: 2px 0 6px; color: var(--color-accent); font-size: var(--text-sm); font-weight: 700; text-decoration: none; }
.kinddetail__back svg { width: 18px; height: 18px; }
.kinddetail__meta { font-size: var(--text-sm); color: var(--color-text-muted); }
/* Rol per ouder t.o.v. dit kind (kindafhankelijk) — compacte chips onder de meta. */
.kinddetail__roles { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 7px; }
.kinddetail__role {
  font-size: var(--text-xs); font-weight: 700; color: var(--color-accent);
  background: var(--color-soft); border-radius: 8px; padding: 3px 9px;
}
.kinddetail__hero-actions { flex: none; margin-left: auto; display: flex; gap: 9px; }
.kinddetail__action { appearance: none; -webkit-appearance: none; flex: none; width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; border: 0; background: var(--color-soft); color: var(--color-accent); text-decoration: none; cursor: pointer; }
.kinddetail__action svg { width: 20px; height: 20px; }
.kinddetail__action:active { transform: scale(0.95); }
.kinddetail__add { appearance: none; -webkit-appearance: none; display: inline-flex; align-items: center; gap: 8px; padding: 6px 2px; border: 0; background: none; color: var(--color-accent); font: inherit; font-size: var(--text-15); font-weight: 700; cursor: pointer; }
.kinddetail__add-icon { width: 19px; height: 19px; }
/* Sectiekop: label links + optionele "Bewerken"-link rechts (bij een gevulde sectie). */
.kinddetail__section-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 20px 4px 10px; }
.kinddetail__section-head .kinddetail__section-label { margin: 0; }
.kinddetail__edit { appearance: none; -webkit-appearance: none; flex: none; border: 0; background: none; padding: 0; color: var(--color-accent); font: inherit; font-size: var(--text-sm); font-weight: 700; cursor: pointer; }
/* Lijst-item (School & opvang / Sport & hobby): witte kaart-rij. */
.kinddetail__item { display: flex; align-items: center; gap: 12px; width: 100%; text-align: left; padding: 13px 16px; margin-bottom: 8px; border: 1px solid var(--color-line); border-radius: 16px; background: var(--color-surface); box-shadow: var(--shadow-4); }
.kinddetail__item--btn { appearance: none; -webkit-appearance: none; cursor: pointer; }
.kinddetail__item-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.kinddetail__item-title { font-size: var(--text-15); font-weight: 700; }
.kinddetail__item-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.kinddetail__item-chevron { flex: none; width: 20px; height: 20px; color: var(--color-faint); }
.kinddetail__item-removeform { flex: none; margin: 0; }
.kinddetail__item-remove { appearance: none; -webkit-appearance: none; flex: none; display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; border: 0; background: none; color: var(--color-faint); border-radius: 8px; cursor: pointer; }
.kinddetail__item-remove svg { width: 18px; height: 18px; }
.kinddetail__sheet-remove { width: 100%; margin-top: 10px; }

/* ===================== GEZINSINSTELLINGEN-LANDING (scherm 20) ===================== */
.gsettings__intro { font-size: var(--text-13); color: var(--color-text-muted); margin: -8px 0 16px; line-height: 1.45; }
.gsettings__banner { display: flex; gap: 10px; align-items: flex-start; background: var(--color-coparent-soft); border-radius: 14px; padding: 12px 14px; }
.gsettings__banner-icon { flex: none; width: 18px; height: 18px; color: var(--color-coparent); margin-top: 1px; }
.gsettings__banner span { font-size: var(--text-13); color: var(--color-coparent-deep); line-height: 1.45; }
/* Solo-variant: zacht-zand i.p.v. paars ("je gebruikt Blinco alleen"). */
.gsettings__banner--solo { background: var(--color-soft); }
.gsettings__banner--solo .gsettings__banner-icon { color: var(--color-accent); }
.gsettings__banner--solo span { color: var(--color-accent-hover); }
.gsettings__label { display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); margin: 22px 4px 10px; }
.gsettings__card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); overflow: hidden; }
.gsettings__row { display: flex; align-items: center; gap: 13px; padding: 14px 16px; border-bottom: 1px solid var(--color-line); text-decoration: none; color: var(--color-text); }
.gsettings__row--last, .gsettings__row:last-child { border-bottom: none; }
a.gsettings__row:active { background: var(--color-softer); }
.gsettings__row--soon { cursor: default; }
.gsettings__row-icon { flex: none; width: 38px; height: 38px; display: flex; align-items: center; justify-content: center; border-radius: 11px; background: var(--color-soft); color: var(--color-accent); }
.gsettings__row-icon svg { width: 19px; height: 19px; }
.gsettings__row-icon--amber { background: var(--color-amber-soft); color: var(--color-amber); }
.gsettings__row-icon--danger { background: var(--color-error-soft); color: var(--color-error); }
.gsettings__row-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.gsettings__row-text--plain { padding: 0; }
.gsettings__row-title { font-size: var(--text-15); font-weight: 700; }
.gsettings__row-title--danger { color: var(--color-error); }
.gsettings__row-sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.gsettings__chevron { flex: none; width: 19px; height: 19px; color: var(--color-faint); }
.gsettings__soon { flex: none; font-size: var(--text-11); font-weight: 800; color: var(--color-faint); background: var(--color-softer); padding: 3px 8px; border-radius: 7px; }
.gsettings__hint { font-size: var(--text-xs); color: var(--color-faint); margin: 8px 4px 0; }
/* Zichtbaar-maar-uitgeschakeld-rij (solo): co-ouder-functie op zijn plek, maar gedimd. */
.gsettings__row--locked { opacity: 0.6; cursor: default; }
.gsettings__row--locked .gsettings__row-icon { background: var(--color-softer); color: var(--color-faint); }

/* Slot-badge "Met andere ouder" — staat waar gekoppeld de status/chevron zit. */
.slot-badge {
  flex: none; display: inline-flex; align-items: center; gap: 5px;
  background: var(--color-softer); color: var(--color-faint);
  border-radius: 9px; padding: 5px 9px; font-size: var(--text-xs); font-weight: 700;
}
.slot-badge__icon { width: 13px; height: 13px; }

/* Archiveren/Verlaten als button_to (form>button) — de knop is de hele rij */
.gsettings__card--actions form { margin: 0; }
.gsettings__row--action {
  width: 100%; border: none; border-bottom: 1px solid var(--color-line);
  background: none; text-align: left; cursor: pointer; font: inherit;
}
.gsettings__card--actions form:last-child .gsettings__row--action { border-bottom: none; }
.gsettings__row--action:active { background: var(--color-softer); }

/* ── Fotoboek (design "Fotoboek" S1–S10) ───────────────────────────────────── */
.fotoboek,
.fotoboek-detail {
  max-width: 520px;
  margin: 0 auto;
  padding: calc(8px + env(safe-area-inset-top, 0px)) 18px 104px;
  color: var(--color-text);
}
.fotoboek__empty,
.fotoboek-detail__empty { color: var(--color-text-muted); font-size: var(--text-sm); text-align: center; padding: 30px 4px; }

/* Overzicht-grid (S1) */
.fotoboek__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.fotoboek-card { position: relative; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); overflow: hidden; }
.fotoboek-card__body { display: block; text-decoration: none; color: var(--color-text); transition: transform var(--dur-fast) var(--curve-decel); }
.fotoboek-card__body:active { transform: scale(0.97); }
.fotoboek-card__cover {
  position: relative;
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-auto-rows: 1fr;
  gap: 2px;
  aspect-ratio: 1.15;
  background: var(--color-softer);
}
.fotoboek-card__cell { background-size: cover; background-position: center; background-color: rgba(0, 0, 0, 0.04); }
.fotoboek-card__cell--empty { background-color: rgba(181, 102, 63, 0.10); }
.fotoboek-card__count { position: absolute; right: 7px; bottom: 7px; background: rgba(44, 33, 24, 0.55); color: var(--color-on-accent); font-size: var(--text-10); font-weight: 700; padding: 2px 7px; border-radius: 7px; }
.fotoboek-card__info { padding: 11px 12px 13px; display: flex; flex-direction: column; }
.fotoboek-card__title { font-size: var(--text-sm); font-weight: 700; line-height: 1.2; }
.fotoboek-card__meta { font-size: var(--text-xs); color: var(--color-faint); margin-top: 2px; }
.fotoboek-card__badge { align-self: flex-start; margin-top: 9px; font-size: var(--text-10); font-weight: 800; padding: 4px 9px; border-radius: 8px; }
.fotoboek-card__badge--faint,
.fotoboek-detail__badge--faint { color: var(--color-faint); background: var(--color-softer); }
.fotoboek-card__badge--co,
.fotoboek-detail__badge--co { color: var(--color-coparent); background: var(--color-coparent-soft); }
.fotoboek-card__status { font-size: var(--text-11); font-weight: 700; margin-top: 6px; }
.fotoboek-card__status--amber { color: var(--color-amber); }
.fotoboek-card__status--faint { color: var(--color-faint); }
.fotoboek-card__menu { position: absolute; right: 7px; top: 7px; width: 30px; height: 30px; border-radius: 50%; background: rgba(44, 33, 24, 0.5); border: none; display: grid; place-items: center; cursor: pointer; color: var(--color-on-accent); }
.fotoboek-card__menu svg { width: 16px; height: 16px; }

/* Album-opties-sheet (kaart-⋯) + content-hoge sheet-variant */
.sheet--compact { height: auto; max-height: 92vh; }
.album-opties { display: flex; flex-direction: column; gap: 8px; }
.album-opties__form { margin: 0; }
.album-opties__row { display: flex; align-items: center; gap: 13px; width: 100%; text-align: left; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 14px; padding: 13px 15px; cursor: pointer; text-decoration: none; color: var(--color-text); font: inherit; transition: transform var(--dur-fast) var(--curve-decel); }
.album-opties__row:active { transform: scale(0.99); }
.album-opties__row--danger { background: var(--color-error-soft); border-color: var(--color-error-border); }
.album-opties__icon { flex: none; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 11px; }
.album-opties__icon svg { width: 18px; height: 18px; }
.album-opties__icon--accent { background: var(--color-soft); color: var(--color-accent); }
.album-opties__icon--muted { background: var(--color-softer); color: var(--color-text); }
.album-opties__icon--danger { background: var(--color-surface); color: var(--color-error); }
.album-opties__label { font-size: var(--text-15); font-weight: 600; }
.album-opties__row--danger .album-opties__label { color: var(--color-error); }

.fotoboek-privatehint { display: flex; gap: 9px; align-items: center; background: var(--color-soft); border-radius: 12px; padding: 11px 14px; margin-top: 14px; color: var(--color-accent-hover); }
.fotoboek-privatehint svg { width: 16px; height: 16px; flex: none; }
.fotoboek-privatehint span { font-size: var(--text-13); font-weight: 700; }

/* ── Fotoboek — album-detail naar ontwerp (S3/S6) ──────────────────────────── */
.fotoboek-detail__headrow { display: flex; align-items: center; justify-content: space-between; padding: 8px 0 12px; }
/* Zelfde gewicht/stijl als het app-brede kebab-menu (.app__menu-toggle) — dunne
   stroke-stippen i.p.v. dikke gevulde cirkels, voor een pagina-kop-kebab. */
.fotoboek-detail__settings { width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; color: var(--color-text); }
.fotoboek-detail__settings:hover { background: var(--color-hover); }
.fotoboek-detail__settings:active { background: var(--color-soft); }
.fotoboek-detail__settings svg { width: 24px; height: 24px; }
.fotoboek-detail__title { font-family: var(--font-display); font-size: var(--text-26); font-weight: 600; line-height: 1.12; margin: 0; }
.fotoboek-detail__markrow { display: flex; align-items: center; gap: 9px; margin: 10px 0 0; flex-wrap: wrap; }
.fotoboek-detail__access { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin: 13px 0 0; padding: 11px 14px; background: var(--color-coparent-soft); border-radius: 12px; }
.fotoboek-detail__photoshead { display: flex; align-items: center; justify-content: space-between; margin: 22px 4px 12px; }
.fotoboek-detail__photoslabel { font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); }
.fotoboek-detail__addinline { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-13); font-weight: 700; color: var(--color-accent); background: none; border: none; cursor: pointer; padding: 0; }
.fotoboek-detail__addinline svg { width: 16px; height: 16px; }
.fotoboek-detail__emptybox { border: 1.5px dashed var(--color-line); border-radius: 16px; padding: 26px 16px; text-align: center; color: var(--color-faint); font-size: var(--text-13); }

/* Foto-tegel: wrapper + media + overlays + opmerking */
.fotoboek-photo { display: flex; flex-direction: column; padding: 0; border: none; background: none; border-radius: 0; overflow: visible; }
.fotoboek-photo__media { position: relative; border-radius: 14px; overflow: hidden; }
.fotoboek-photo__btn { display: block; width: 100%; padding: 0; border: none; background: none; cursor: pointer; }
.fotoboek-photo__img { display: block; width: 100%; aspect-ratio: 1; background-size: cover; background-position: center; background-color: var(--color-soft); }
.fotoboek-photo__cobadge { position: absolute; left: 7px; top: 7px; width: 15px; height: 15px; border-radius: 50%; background: var(--color-coparent); border: 2px solid var(--color-surface); }
.fotoboek-photo__emotion { position: absolute; right: 7px; top: 7px; width: 24px; height: 24px; border-radius: 8px; background: rgba(255, 255, 255, 0.92); display: grid; place-items: center; color: var(--color-accent); box-shadow: none; }
.fotoboek-photo__emotion svg { width: 13px; height: 13px; }
.fotoboek-photo__hiddenform { margin: 0; }
.fotoboek-photo__hidden { position: absolute; inset: 0; width: 100%; height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; background: var(--color-softer); border: none; cursor: pointer; color: var(--color-text-muted); }
.fotoboek-photo__hidden svg { width: 20px; height: 20px; }
.fotoboek-photo__hidden-label { font-size: var(--text-11); font-weight: 700; }
.fotoboek-photo__hidden-show { font-size: var(--text-11); font-weight: 700; color: var(--color-accent); }
.fotoboek-photo__comment { font-size: var(--text-xs); color: var(--color-text-muted); line-height: 1.35; margin-top: 5px; padding: 0 2px; }

/* Deel-status-blok in het detail + deel-actie onderaan */
.fotoboek-share__pending--block { margin-top: 18px; border: 1px solid var(--color-amber-border); }

/* Meld-route-kaarten (S7c) */
.report-routes { display: flex; flex-direction: column; gap: 10px; }
.report-route { display: flex; align-items: flex-start; gap: 13px; width: 100%; text-align: left; background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 15px; padding: 14px 15px; cursor: pointer; font: inherit; color: var(--color-text); }
.report-route__icon { flex: none; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px; background: var(--color-softer); color: var(--color-text-muted); }
.report-route__icon--accent { background: var(--color-soft); color: var(--color-accent); }
.report-route__icon svg { width: 19px; height: 19px; }
.report-route__title { font-size: var(--text-15); font-weight: 700; }

/* Cover-tinten (deterministisch per album) */
.fotoboek-cover--t0 { background: var(--color-soft); }
.fotoboek-cover--t1 { background: var(--color-coparent-soft); }
.fotoboek-cover--t2 { background: var(--color-green-soft); }
.fotoboek-cover--t3 { background: var(--color-amber-soft); }
.fotoboek-cover--t4 { background: var(--ivory-medium); }
.fotoboek-cover--t5 { background: var(--color-cover-cool); }
.fotoboek-cover--t0 .fotoboek-card__cell--empty { background-color: rgba(181, 102, 63, 0.12); }
.fotoboek-cover--t1 .fotoboek-card__cell--empty { background-color: rgba(107, 83, 223, 0.12); }
.fotoboek-cover--t2 .fotoboek-card__cell--empty { background-color: rgba(62, 142, 90, 0.12); }
.fotoboek-cover--t3 .fotoboek-card__cell--empty { background-color: rgba(176, 116, 42, 0.12); }
.fotoboek-cover--t4 .fotoboek-card__cell--empty { background-color: rgba(120, 96, 64, 0.12); }
.fotoboek-cover--t5 .fotoboek-card__cell--empty { background-color: rgba(64, 96, 112, 0.12); }

/* Aanmaak-form (S2) */
.fotoboek-form__split { display: flex; gap: 10px; }
.fotoboek-form__col { flex: 1; min-width: 0; }
.fotoboek-form__note { font-size: var(--text-13); color: var(--color-text-muted); background: var(--color-softer); border-radius: 12px; padding: 10px 12px; margin: 4px 0 0; }
.album-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
.album-chip { position: relative; display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border: 1px solid var(--color-line); border-radius: 999px; background: var(--color-surface); font-size: var(--text-sm); cursor: pointer; }
.album-chip__cb { position: absolute; top: 0; left: 0; opacity: 0; width: 0; height: 0; }
.album-chip__dot { width: 14px; height: 14px; border-radius: 50%; background: var(--chip, var(--color-accent)); flex: none; }
.album-chip:has(.album-chip__cb:checked) { background: var(--color-soft); border-color: var(--color-accent); color: var(--color-accent); font-weight: 700; }

/* Detail (S3) */
.fotoboek-detail__head { margin-bottom: 10px; }
.fotoboek-detail__badge { display: inline-block; font-size: var(--text-11); font-weight: 800; padding: 4px 9px; border-radius: 8px; margin-bottom: 8px; }
.fotoboek-detail__meta { font-size: var(--text-13); color: var(--color-text-muted); margin: 0 0 8px; }
.fotoboek-detail__kids { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.fotoboek-detail__kid { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-13); padding: 4px 10px; border-radius: 999px; background: var(--color-surface); border: 1px solid var(--color-line); }
.fotoboek-detail__kid::before { content: ""; width: 10px; height: 10px; border-radius: 50%; background: var(--chip, var(--color-accent)); }
.fotoboek-detail__desc { font-size: var(--text-sm); line-height: 1.5; margin: 0 0 10px; }
.fotoboek-detail__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 6px; }
.fotoboek-photo { padding: 0; border: none; background: none; cursor: pointer; border-radius: 14px; overflow: hidden; }
.fotoboek-photo__img { display: block; width: 100%; aspect-ratio: 1; background-size: cover; background-position: center; background-color: var(--color-soft); border-radius: 14px; }

/* Fullscreen foto-viewer */
.viewer { margin: 0; padding: 0; border: none; width: 100vw; height: 100dvh; max-width: 100vw; max-height: 100dvh; background: var(--slate-dark); color: var(--color-on-accent); }
.viewer::backdrop { background: rgba(0, 0, 0, 0.85); }
.viewer[open] { display: flex; flex-direction: column; }
.viewer__bar { display: flex; align-items: center; justify-content: space-between; padding: calc(10px + env(safe-area-inset-top, 0px)) 14px 10px; }
.viewer__icon { width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: rgba(255, 255, 255, 0.12); color: var(--color-on-accent); border: none; cursor: pointer; }
.viewer__icon svg { width: 22px; height: 22px; }
.viewer__image { flex: 1; min-height: 0; width: 100%; object-fit: contain; }
.viewer__foot { padding: 12px 18px calc(16px + env(safe-area-inset-bottom, 0px)); display: flex; flex-direction: column; gap: 2px; }
/* PDF-frame: zelfde plek als de afbeelding, maar wit — een PDF op een donkere vloer
   leest slecht en de browserlezer tekent z'n eigen chrome. */
.viewer__frame { flex: 1; min-height: 0; width: 100%; border: none; background: var(--color-surface); }
.viewer__fallback { font-size: var(--text-13); color: var(--color-on-accent); text-decoration: underline; }
/* CSV-tabel: witte leesvloer, horizontaal scrollbaar (een kostenoverzicht is breder dan
   een telefoon) en een plakkende kopregel zodat je bij het scrollen ziet wat wat is. */
.viewer__csvwrap { flex: 1; min-height: 0; overflow: auto; background: var(--color-surface); color: var(--color-text); }
.viewer__csv { border-collapse: collapse; width: max-content; min-width: 100%; font-size: var(--text-13); }
.viewer__csv th, .viewer__csv td { border: 1px solid var(--color-line); padding: 7px 10px; text-align: left; white-space: nowrap; }
.viewer__csv th { position: sticky; top: 0; background: var(--color-softer); font-weight: 700; }
.viewer__csv tr:nth-child(even) td { background: var(--color-softer); }
.viewer__csv-note, .viewer__csv-error { font-size: var(--text-13); color: var(--color-text-muted); padding: 12px; margin: 0; }
/* Docx-tekst: leesbare kolom op een witte vloer. Geen opmaak uit het bestand — alleen
   de tekst — dus we geven 'm hier zelf een prettige ritmiek. */
.viewer__doc { padding: 18px 16px; max-width: 62ch; margin: 0 auto; }
.viewer__doc p { font-size: var(--text-15); line-height: 1.6; margin: 0 0 12px; }
.viewer__caption { font-size: var(--text-15); }
.viewer__by { font-size: var(--text-13); color: rgba(255, 255, 255, 0.6); }

/* ── Fotoboek — delen & uitnodigen (F2) ────────────────────────────────────── */
.fotoboek__invites { display: flex; flex-direction: column; gap: 12px; margin-bottom: 12px; }
.fotoboek-invite { display: flex; align-items: center; gap: 13px; padding: 14px 16px; background: var(--color-coparent-soft); border: 1px solid var(--color-coparent-border); border-radius: 18px; text-decoration: none; color: var(--color-text); transition: transform var(--dur-fast) var(--curve-decel); }
.fotoboek-invite:active { transform: scale(0.99); }
.fotoboek-invite__icon { flex: none; display: grid; place-items: center; width: 42px; height: 42px; border-radius: 13px; background: var(--color-surface); color: var(--color-coparent); }
.fotoboek-invite__icon svg { width: 20px; height: 20px; }
.fotoboek-invite__body { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.fotoboek-invite__title { font-size: var(--text-15); font-weight: 800; color: var(--color-coparent-deep); }
.fotoboek-invite__sub { font-size: var(--text-13); color: var(--color-coparent); margin-top: 1px; }
.fotoboek-invite__chevron { width: 19px; height: 19px; color: var(--color-coparent); flex: none; }

/* Lege staat (S1) — witte kaart met icoon-tegel + kop + subtekst + full-width knop. */
/* Gedeelde lege-staat-placeholder (design "Lege-staat-patroon"): card-loos, gecentreerd —
   zacht icoon-vlak + kop + uitleg + optionele accent-knop. Eén bron voor alle lijst-/
   sectie-schermen (EmptyStateComponent). */
.empty-state { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 46px 28px 34px; }
.empty-state__icon { display: grid; place-items: center; width: 64px; height: 64px; margin-bottom: 16px; border-radius: 20px; background: var(--color-soft); color: var(--color-accent); }
.empty-state__icon svg { width: 30px; height: 30px; }
.empty-state__title { font-size: var(--text-lg); font-weight: 800; color: var(--color-text); }
.empty-state__text { max-width: 255px; margin: 7px 0 0; font-size: var(--text-sm); line-height: 1.5; color: var(--color-text-muted); }
.empty-state__btn { display: inline-flex; align-items: center; gap: 8px; margin-top: 20px; padding: 12px 24px; border: none; border-radius: 13px; background: var(--color-accent); color: var(--color-on-accent); font-family: inherit; font-weight: 700; font-size: var(--text-15); text-decoration: none; white-space: nowrap; cursor: pointer; transition: transform var(--dur-fast) var(--curve-decel); }
.empty-state__btn:active { transform: scale(0.97); }
/* Kaart-variant (afspraken-idioom): dezelfde staat op een warme kaart. */
.empty-state--card {
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-sm);
  padding: 26px 20px;
  margin-top: 10px;
}
.empty-state__btn-icon { width: 18px; height: 18px; }

/* S5 — uitnodiging-scherm */
.fotoboek-invitescreen { max-width: 520px; margin: 0 auto; padding: calc(8px + env(safe-area-inset-top, 0px)) 18px 104px; }
.fotoboek-invitescreen__card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 20px; box-shadow: var(--shadow-4); padding: 26px 22px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 6px; margin-top: 8px; }
.fotoboek-invitescreen__icon { display: grid; place-items: center; width: 56px; height: 56px; border-radius: 16px; background: var(--color-coparent-soft); color: var(--color-coparent); }
.fotoboek-invitescreen__icon svg { width: 28px; height: 28px; }
.fotoboek-invitescreen__title { font-family: var(--font-display); font-size: var(--text-20); font-weight: 600; margin: 4px 0 2px; }
.fotoboek-invitescreen__line { font-size: var(--text-sm); color: var(--color-text-muted); margin: 0; }
.fotoboek-invitescreen__privacy { font-size: var(--text-13); color: var(--color-coparent); background: var(--color-coparent-soft); border-radius: 12px; padding: 10px 12px; margin: 6px 0 0; }
.fotoboek-invitescreen__actions { display: flex; flex-direction: column; gap: 8px; width: 100%; margin-top: 14px; }
.fotoboek-invitescreen__actions .button { width: 100%; }
.fotoboek-invitescreen__block { color: var(--color-error); }

/* S5b banner + S4 deel-sectie */
.fotoboek-detail__banner { background: var(--color-green-soft); color: var(--color-green); font-size: var(--text-13); font-weight: 600; padding: 10px 12px; border-radius: 12px; margin: 0 0 12px; }
.fotoboek-share__pending { display: flex; align-items: center; justify-content: space-between; gap: 12px; background: var(--color-amber-soft); border-radius: 14px; padding: 12px 14px; }
.fotoboek-share__pending .button { width: auto; flex: none; }
.fotoboek-share__pending-text { display: flex; flex-direction: column; gap: 1px; font-size: var(--text-13); color: var(--color-amber); }
.fotoboek-share__pending-text span { font-size: var(--text-xs); opacity: 0.85; }

/* Deel-modus-keuze (S4a deel-sheet) */
.album-modes { display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.album-mode { position: relative; display: block; border: 1px solid var(--color-line); border-radius: 14px; padding: 12px 14px; cursor: pointer; }
.album-mode__rb { position: absolute; top: 0; left: 0; opacity: 0; width: 0; height: 0; }
.album-mode__title { display: block; font-size: var(--text-15); font-weight: 700; }
.album-mode__sub { display: block; font-size: var(--text-13); color: var(--color-text-muted); margin-top: 2px; }
.album-mode:has(.album-mode__rb:checked) { border-color: var(--color-accent); background: var(--color-soft); }

/* Beheer-dropdown — destructieve variant */
.dropdown__item--danger { color: var(--color-error); }

.fotoboek-emotion-remove { margin: 10px 0 0; }
.fotoboek-emotion-remove .button { width: 100%; }

/* ── Fotoboek — afronding (F5): deelverzoeken-toggle + per-album consent-spiegel ── */
.fotoboek-requests { display: flex; align-items: center; justify-content: space-between; gap: 12px; background: var(--color-softer); border: 1px solid var(--color-line); border-radius: 14px; padding: 11px 14px; margin-bottom: 14px; }
.fotoboek-requests__text { font-size: var(--text-13); color: var(--color-text-muted); }
.fotoboek-detail__consent { margin: 18px 0 4px; }

/* ===================== OVERIGE INFO-KLUIS ===================== */
/* Categorie-kleuren (één bron, DRY): glyph-kleur --cat + zachte tint --cat-soft. */
.cat--wifi          { --cat: var(--color-accent);     --cat-soft: var(--color-soft); }
.cat--code          { --cat: var(--color-coparent);   --cat-soft: var(--color-coparent-soft); }
.cat--inloggegevens { --cat: var(--color-green);      --cat-soft: var(--color-green-soft); }
.cat--pasgegevens   { --cat: var(--color-amber);      --cat-soft: var(--color-amber-soft); }
.cat--medisch       { --cat: var(--color-error);      --cat-soft: rgba(191, 77, 67, 0.12); }
.cat--overig        { --cat: var(--color-text-muted); --cat-soft: var(--color-softer); }

.infovault__none { padding: 30px 4px; text-align: center; color: var(--color-text-muted); font-size: var(--text-sm); }

/* Categorie-filter: een keuze-sheet (geopend via het filter-icoon rechtsboven naast "+"). */
.filtersheet { display: flex; flex-direction: column; gap: 2px; }
/* Actief filter: klein bolletje (unread-stip-stijl) op het filter-icoon rechtsboven. */
.section-head__action--filter { position: relative; }
.section-head__action--active::after { content: ""; position: absolute; top: 5px; right: 6px; width: 8px; height: 8px; border-radius: 50%; background: var(--color-coparent); border: 1.5px solid var(--color-soft); }
/* Privacy-uitleg-blok (design): paars, onder de lijst. */
.infonote { display: flex; gap: 11px; margin: 18px 4px 4px; padding: 14px 16px; background: var(--color-coparent-soft); border-radius: 14px; }
.infonote__icon { flex: none; width: 20px; height: 20px; color: var(--color-coparent); margin-top: 1px; }
.infonote__text { margin: 0; font-size: var(--text-13); line-height: 1.5; color: var(--color-coparent); }
.infofilter__opt { display: flex; align-items: center; gap: 11px; width: 100%; padding: 12px; border-radius: 12px; text-decoration: none; color: var(--color-text); font-size: var(--text-15); font-weight: 600; }
.infofilter__opt:active { background: var(--color-softer); }
.infofilter__opt--active { color: var(--color-accent); background: var(--color-soft); }
.infofilter__opticon { display: inline-flex; flex: none; color: var(--cat, var(--color-text-muted)); }
.infofilter__opticon svg { width: 20px; height: 20px; }
.infofilter__opticon--all { color: var(--color-text-muted); }
.infofilter__optlabel { flex: 1; }
.infofilter__check { flex: none; width: 18px; height: 18px; color: var(--color-accent); }

/* Sectiekop per categorie. */
.infosection { margin-top: 18px; }
.infosection__head { display: flex; align-items: center; gap: 8px; margin: 0 4px 10px; }
.infosection__icon { display: inline-flex; color: var(--cat, var(--color-text-muted)); }
.infosection__icon svg { width: 17px; height: 17px; }
.infosection__label { font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); }
.infosection__count { display: inline-grid; place-items: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--color-soft); color: var(--color-text-muted); font-size: var(--text-11); font-weight: 800; }

/* Kluis-kaart. */
.infocard { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); padding: 14px 16px; margin-bottom: 10px; }
.infocard__head { display: flex; align-items: center; gap: 13px; }
.infocard__icon { flex: none; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 13px; background: var(--cat-soft, var(--color-soft)); color: var(--cat, var(--color-accent)); }
.infocard__icon svg { width: 22px; height: 22px; }
.infocard__headtext { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.infocard__title { font-size: var(--text-base); font-weight: 700; display: flex; align-items: center; gap: 8px; min-width: 0; }
.infocard__kid { flex: none; padding: 2px 8px; border-radius: 8px; background: var(--color-soft); color: var(--color-accent); font-size: var(--text-11); font-weight: 700; }
.infocard__cat { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.infocard__kebab { appearance: none; -webkit-appearance: none; flex: none; display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border: none; background: none; color: var(--color-faint); cursor: pointer; border-radius: 8px; }
.infocard__kebab svg { width: 20px; height: 20px; }
.infocard__kebab:active { background: var(--color-softer); }
/* Waarde-veld (design): peach gekleurd vlak met de waarde + kopieer/oog-knop-vierkantjes. */
.infocard__secret { display: flex; align-items: center; gap: 7px; margin-top: 12px; padding: 9px 9px 9px 14px; background: var(--color-soft); border-radius: 12px; }
.infocard__value { flex: 0 1 auto; min-width: 0; font-size: var(--text-15); font-weight: 600; letter-spacing: 0.5px; color: var(--color-text); word-break: break-all; }
/* Oog + kopiëren altijd tegen de rechterrand, ongeacht de tekstlengte. */
.infocard__acts { flex: none; margin-left: auto; padding-left: 8px; display: flex; align-items: center; gap: 7px; }
.infocard__act { appearance: none; -webkit-appearance: none; flex: none; display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border: none; border-radius: 9px; background: rgba(181, 102, 63, 0.12); color: var(--color-accent); cursor: pointer; }
.infocard__act svg { width: 19px; height: 19px; }
.infocard__act:active { background: rgba(181, 102, 63, 0.22); }
.infocard__act.is-revealed { color: var(--color-accent); }
.infocard__act.is-copied { color: var(--color-green); }
.infocard__shared { display: flex; align-items: center; gap: 6px; margin-top: 11px; font-size: var(--text-13); color: var(--color-text-muted); }
.infocard__shared svg { flex: none; width: 15px; height: 15px; }
.infocard__shared--private { color: var(--color-faint); }

/* Soort-chips (radio; actief-state puur CSS via :has(:checked)). */
.soortchips { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 16px; }
.soortchip { position: relative; display: inline-flex; align-items: center; gap: 7px; padding: 9px 13px; border: 1px solid var(--color-line); border-radius: 11px; background: var(--color-surface); cursor: pointer; font-size: var(--text-sm); font-weight: 600; }
.soortchip__rb { position: absolute; opacity: 0; width: 0; height: 0; }
.soortchip__icon { display: inline-flex; color: var(--cat, var(--color-text-muted)); }
.soortchip__icon svg { width: 17px; height: 17px; }
.soortchip:has(.soortchip__rb:checked) { border-color: var(--color-accent); background: var(--color-soft); color: var(--color-accent); }

/* Gevoelig-toggle (checkbox als schakelaar). */
.infotoggle { position: relative; display: flex; align-items: center; gap: 13px; padding: 13px 15px; margin: 4px 0 16px; border: 1px solid var(--color-line); border-radius: 14px; background: var(--color-surface); cursor: pointer; }
.infotoggle__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.infotoggle__title { font-size: var(--text-15); font-weight: 700; }
.infotoggle__sub { font-size: var(--text-13); color: var(--color-text-muted); margin-top: 1px; }
.infotoggle__cb { position: absolute; opacity: 0; width: 0; height: 0; }
.infotoggle__track { flex: none; position: relative; width: 46px; height: 28px; border-radius: 999px; background: var(--color-line); transition: background var(--dur-fast) var(--curve-decel); }
.infotoggle__track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: var(--color-surface); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); transition: transform var(--dur-fast) var(--curve-decel); }
.infotoggle__cb:checked ~ .infotoggle__track { background: var(--color-accent); }
.infotoggle__cb:checked ~ .infotoggle__track::after { transform: translateX(18px); }

/* Zichtbaarheid-segment (Samen met X / Alleen ik). */
.seg { display: flex; gap: 9px; margin: 4px 0; }
.seg__opt { position: relative; flex: 1; display: inline-flex; align-items: center; justify-content: center; padding: 13px; border: 1px solid var(--color-line); border-radius: 13px; background: var(--color-surface); cursor: pointer; font-size: var(--text-sm); font-weight: 700; color: var(--color-text-muted); text-align: center; }
.seg__rb { position: absolute; opacity: 0; width: 0; height: 0; }
.seg__opt:has(.seg__rb:checked) { background: var(--color-accent); border-color: var(--color-accent); color: var(--color-on-accent); }

.infoform__submit { width: 100%; margin-top: 8px; }

/* Actie-sheet (kebab → Bewerken/Verwijderen): rustige rijen, géén knop-look. De X in de
   sheet-kop sluit 'm (geen aparte Annuleren-knop). appearance:none zodat mobiele browsers
   de kale <button> niet als grijze knop tonen. */
.sheetmenu { display: flex; flex-direction: column; gap: 2px; }
.sheetmenu__form { margin: 0; width: 100%; }
.sheetmenu__item { appearance: none; -webkit-appearance: none; display: flex; align-items: center; gap: 13px; width: 100%; padding: 14px 6px; border: none; border-radius: 12px; background: none; color: var(--color-text); font: inherit; font-size: var(--text-base); font-weight: 600; text-align: left; cursor: pointer; }
.sheetmenu__item:active { background: var(--color-softer); }
.sheetmenu__item svg { flex: none; width: 21px; height: 21px; color: var(--color-text-muted); }
.sheetmenu__item--danger, .sheetmenu__item--danger svg { color: var(--color-error); }
.sheetmenu__item--active { background: var(--color-soft); color: var(--color-accent); }

/* ===================== ONDERTEKEN-SHEET (design consentSign) ===================== */
.consent-sign { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 4px 2px 2px; }
.consent-sign__icon { width: 54px; height: 54px; border-radius: 16px; background: var(--color-soft); color: var(--color-accent); display: flex; align-items: center; justify-content: center; margin-bottom: 14px; }
.consent-sign__icon svg { width: 26px; height: 26px; }
.consent-sign__body { font-size: var(--text-sm); color: var(--color-text-muted); line-height: 1.5; margin: 0 4px 18px; }
.consent-sign__note { background: var(--color-softer); border-radius: 14px; padding: 14px 16px; font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.45; margin-bottom: 20px; }
.consent-sign__submit { width: 100%; }

/* ===================== SPORT & HOBBY (design 'sport', club-centrisch) ===================== */
/* De clubkaart hergebruikt de school-card-klassen (zelfde patroon); hieronder alleen
   de sport-specifieke stukken: de tikbare kaartkop en de "Ingeschreven"-rijen. */
.school-card__head--btn { width: 100%; border: none; background: none; font: inherit; text-align: left; cursor: pointer; }
.school-card__head--btn:active { background: var(--color-softer); }
.clubcard__members-label { display: block; padding: 11px 16px 4px; font-size: var(--text-11); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--color-faint); }
.clubcard__member { display: flex; align-items: center; gap: 11px; padding: 7px 16px 12px; }
.clubcard__member-initial { flex: none; width: 32px; height: 32px; border-radius: 10px; background: var(--kid-color, var(--color-softer)); color: var(--color-on-accent); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: var(--text-13); }
.clubcard__member-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.clubcard__member-name { font-size: var(--text-sm); font-weight: 700; }
.clubcard__member-sub { font-size: var(--text-xs); color: var(--color-text-muted); margin-top: 1px; }

/* ===================== AFSPRAKEN-SCHERM (design 'afspraken') ===================== */
.afspraken__add { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; background: var(--color-soft); color: var(--color-accent); border: none; border-radius: 14px; padding: 13px; font: inherit; font-size: var(--text-15); font-weight: 700; cursor: pointer; margin: 10px 0 6px; transition: transform .12s ease; }
.afspraken__add:active { transform: scale(.98); }
.afspraken__add svg { width: 19px; height: 19px; }
.afspraken__section-label { display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); margin: 22px 4px 10px; }

.afspraak-card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 16px; box-shadow: var(--shadow-sm); padding: 14px 15px; margin-bottom: 10px; }
.afspraak-card--flush { padding: 0; overflow: hidden; }
.afspraak-card--flush .afspraak-card__row { padding: 14px 15px; }
.afspraak-card--archived { opacity: .82; }
.afspraak-card__row { display: flex; gap: 12px; }
.afspraak-card__check { flex: none; width: 30px; height: 30px; border-radius: 50%; background: var(--color-green-soft); color: var(--color-green); display: flex; align-items: center; justify-content: center; margin-top: 1px; }
.afspraak-card__check svg { width: 17px; height: 17px; }
.afspraak-card__body { flex: 1; min-width: 0; }
.afspraak-card__topic { display: inline-block; font-size: var(--text-11); font-weight: 800; letter-spacing: .4px; text-transform: uppercase; color: var(--color-text-muted); background: var(--color-softer); padding: 4px 9px; border-radius: 7px; margin-bottom: 8px; }
.afspraak-card__topic--pending { color: var(--color-amber); background: var(--color-amber-soft); }
.afspraak-card__summary { font-size: var(--text-15); font-weight: 600; line-height: 1.45; color: var(--color-text); margin: 0; }
.afspraak-card__meta { display: block; font-size: var(--text-xs); color: var(--color-faint); margin-top: 7px; }
.afspraak-card__menu { flex: none; width: 30px; height: 30px; border-radius: 9px; border: none; background: none; display: flex; align-items: center; justify-content: center; cursor: pointer; color: var(--color-faint); }
.afspraak-card__menu:active { background: var(--color-softer); }
.afspraak-card__menu svg { width: 18px; height: 18px; }

/* Pending: bevestigen/afwijzen (ontvanger) of wacht + bewerken/intrekken (voorsteller). */
.afspraak-card__actions { display: flex; gap: 9px; margin-top: 12px; }
.afspraak-card__actionform { margin: 0; }
.afspraak-card__actionform--grow { flex: 1; }
.afspraak-card__confirm { width: 100%; text-align: center; background: var(--color-accent); color: var(--color-on-accent); font: inherit; font-weight: 700; font-size: var(--text-sm); padding: 11px; border: none; border-radius: 11px; cursor: pointer; transition: transform .12s ease; }
.afspraak-card__confirm:active { transform: scale(.97); }
.afspraak-card__decline { text-align: center; background: var(--color-surface); color: var(--color-text-muted); font: inherit; font-weight: 700; font-size: var(--text-sm); padding: 11px 16px; border: 1px solid var(--color-line); border-radius: 11px; cursor: pointer; }
.afspraak-card__waitrow { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 12px; padding-top: 11px; border-top: 1px solid var(--color-line); }
.afspraak-card__wait { display: inline-flex; align-items: center; gap: 6px; font-size: var(--text-13); font-weight: 700; color: var(--color-amber); }
.afspraak-card__wait svg { width: 14px; height: 14px; }
.afspraak-card__ownactions { display: flex; gap: 14px; align-items: center; }
.afspraak-card__linkbtn { background: none; border: none; padding: 0; font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-accent); cursor: pointer; }
.afspraak-card__linkbtn--faint { color: var(--color-faint); }
.afspraak-card__linkform, .afspraak-card__restoreform { margin: 0; display: inline; align-self: center; flex: none; }

/* Vervolg-voorstel-blokken (wijziging=amber, beëindigen=rood, herstellen=groen). */
.afspraak-card__proposal { padding: 12px 15px; border-top: 1px solid var(--color-line); }
.afspraak-card__proposal--edit { background: var(--color-amber-soft); border-top-color: var(--color-amber-border); }
.afspraak-card__proposal--end { background: var(--color-error-soft); border-top-color: var(--color-error-border); }
.afspraak-card__proposal--restore { background: var(--color-green-soft); border-top-color: var(--color-green-border); }
.afspraak-card__proposal-label { display: block; font-size: var(--text-11); font-weight: 800; letter-spacing: .5px; text-transform: uppercase; margin-bottom: 6px; }
.afspraak-card__proposal--edit .afspraak-card__proposal-label { color: var(--color-amber); }
.afspraak-card__proposal--end .afspraak-card__proposal-label { color: var(--color-error); }
.afspraak-card__proposal--restore .afspraak-card__proposal-label { color: var(--color-green); }
.afspraak-card__proposal-text { font-size: var(--text-sm); font-weight: 600; line-height: 1.45; margin: 0; }
.afspraak-card__proposal--edit .afspraak-card__proposal-text { color: var(--color-amber-deep); }
.afspraak-card__proposal--end .afspraak-card__proposal-text { color: var(--color-error-deep); font-weight: 400; }
.afspraak-card__proposal--restore .afspraak-card__proposal-text { color: var(--color-green-deep); font-weight: 400; }
.afspraak-card__proposal-actions { display: flex; gap: 9px; margin-top: 11px; }
.afspraak-card__proposal-confirm { width: 100%; text-align: center; color: var(--color-on-accent); font: inherit; font-weight: 700; font-size: var(--text-sm); padding: 10px; border: none; border-radius: 10px; cursor: pointer; }
.afspraak-card__proposal-confirm--edit { background: var(--color-amber); }
.afspraak-card__proposal-confirm--end { background: var(--color-error); }
.afspraak-card__proposal-confirm--restore { background: var(--color-green); }
.afspraak-card__proposal-decline { text-align: center; background: var(--color-surface); font: inherit; font-weight: 700; font-size: var(--text-sm); padding: 10px 14px; border: none; border-radius: 10px; cursor: pointer; }
.afspraak-card__proposal-decline--edit { color: var(--color-amber); }
.afspraak-card__proposal-decline--end { color: var(--color-error); }
.afspraak-card__proposal-decline--restore { color: var(--color-green); }
.afspraak-card__proposal-waitrow { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 10px; }
.afspraak-card__proposal-wait { font-size: var(--text-xs); font-weight: 700; }
.afspraak-card__proposal--edit .afspraak-card__proposal-wait { color: var(--color-amber); }
.afspraak-card__proposal--end .afspraak-card__proposal-wait { color: var(--color-error); }
.afspraak-card__proposal--restore .afspraak-card__proposal-wait { color: var(--color-green); }

/* Lege staten + voetnoot. */
/* Lege staat: shared EmptyStateComponent met card: true — geen eigen defs meer. */
.afspraken__nomatch { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 34px 24px; }
.afspraken__nomatch-title { font-size: var(--text-15); font-weight: 800; }
.afspraken__nomatch-link { margin-top: 12px; font-size: var(--text-sm); font-weight: 700; color: var(--color-accent); }
.afspraken__footnote { display: flex; gap: 10px; align-items: flex-start; background: var(--color-softer); border-radius: 14px; padding: 12px 14px; margin-top: 16px; font-size: var(--text-xs); color: var(--color-text-muted); line-height: 1.45; }
.afspraken__footnote svg { flex: none; width: 17px; height: 17px; margin-top: 1px; color: var(--color-faint); }

/* Vastleg-sheet: onderwerp-chips (radio-pills). */
.afspraak-form__chips { display: flex; flex-wrap: wrap; gap: 7px; margin: 4px 0 6px; }
.afspraak-form__chip { position: relative; }
.afspraak-form__chip-input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.afspraak-form__chip-label { display: inline-block; padding: 9px 14px; border-radius: 11px; font-size: var(--text-13); font-weight: 700; cursor: pointer; background: var(--color-surface); color: var(--color-text-muted); border: 1px solid var(--color-line); transition: transform .12s ease; }
.afspraak-form__chip-label:active { transform: scale(.95); }
.afspraak-form__chip-input:checked + .afspraak-form__chip-label { background: var(--color-accent); color: var(--color-on-accent); border-color: var(--color-accent); }
.afspraak-form__chip-input:focus-visible + .afspraak-form__chip-label { outline: 2px solid var(--color-focus); outline-offset: 2px; }
.afspraak-form__note { display: flex; gap: 10px; align-items: flex-start; background: var(--color-coparent-soft); border-radius: 14px; padding: 12px 14px; margin: 12px 0 4px; font-size: var(--text-13); color: var(--color-coparent-deep); line-height: 1.45; }
.afspraak-form__note svg { flex: none; width: 18px; height: 18px; margin-top: 1px; color: var(--color-coparent); }
.afspraak-form__submit { width: 100%; margin-top: 12px; }

/* ── Gezinsleden (Instellingen → Gezin → Gezinsleden): gezinsnaam + volwassenen + kinderen ── */
.leden__section-label {
  display: block;
  margin: 26px 4px 12px;
  font-size: var(--text-xs);
  font-weight: 800;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: var(--color-faint);
}

/* Naam-van-het-gezin kaart */
.leden-namecard {
  display: flex;
  align-items: center;
  gap: 13px;
  width: 100%;
  padding: 14px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  text-align: left;
  color: var(--color-text);
  cursor: pointer;
}
.leden-namecard:active { transform: scale(0.99); }
.leden-namecard__icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 40px;
  height: 40px;
  border-radius: 12px;
  background: var(--color-soft);
  color: var(--color-accent);
}
.leden-namecard__icon svg { width: 20px; height: 20px; }
.leden-namecard__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.leden-namecard__label { font-size: var(--text-11); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--color-faint); }
.leden-namecard__value { margin-top: 2px; font-size: var(--text-base); font-weight: 700; }
.leden-namecard__edit { flex: none; color: var(--color-faint); }
.leden-namecard__edit svg { width: 19px; height: 19px; }

/* Volwassenen — persoons-kaarten */
.leden-people { display: flex; flex-direction: column; gap: 12px; }
.leden-person {
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  overflow: hidden;
}
.leden-person__head { display: flex; align-items: center; gap: 13px; padding: 14px 16px; }
.leden-person__avatar {
  flex: none;
  overflow: hidden;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--kid-color, var(--color-accent));
  color: var(--color-on-accent);
  font-weight: 800;
  font-size: var(--text-lg);
}
.leden-person__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.leden-person__name { font-size: var(--text-base); font-weight: 700; display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.leden-person__tag { font-size: var(--text-xs); font-weight: 600; color: var(--color-text-muted); }
.leden-person__sub { margin-top: 2px; font-size: var(--text-sm); color: var(--color-text-muted); }
.leden-person__hide-form { margin: 0; flex: none; }
.leden-person__hide { display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border: none; border-radius: 50%; background: none; color: var(--color-faint); cursor: pointer; }
.leden-person__hide:active { transform: scale(0.94); }
.leden-person__hide svg { width: 19px; height: 19px; }

/* Per-kind rol/gezag uitklap (<details>) */
.leden-perkid { border-top: 1px solid var(--color-line); }
.leden-perkid__summary {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  padding: 11px 16px;
  font-size: var(--text-sm);
  font-weight: 700;
  color: var(--color-accent);
  cursor: pointer;
  list-style: none;
}
.leden-perkid__summary::-webkit-details-marker { display: none; }
.leden-perkid__label--open { display: none; }
.leden-perkid[open] .leden-perkid__label--open { display: inline; }
.leden-perkid[open] .leden-perkid__label--closed { display: none; }
.leden-perkid__chevron { width: 18px; height: 18px; transition: transform var(--dur-fast) var(--curve-decel); }
.leden-perkid[open] .leden-perkid__chevron { transform: rotate(180deg); }
.leden-perkid__body { padding: 2px 16px 14px; }
.leden-perkid__row { display: flex; align-items: center; gap: 10px; padding: 8px 0; border-top: 1px solid var(--color-softer); }
.leden-perkid__row:first-child { border-top: none; }
.leden-perkid__kid { flex: 1; min-width: 0; font-size: var(--text-15); font-weight: 600; }
.leden-perkid__badges { flex: none; display: flex; gap: 6px; }
.leden-badge { display: inline-flex; align-items: center; padding: 4px 10px; border-radius: 999px; font-size: var(--text-xs); font-weight: 700; }
.leden-badge--rol { background: var(--color-soft); color: var(--color-accent); }
.leden-badge--gezag { background: var(--color-green-soft); color: var(--color-green-deep); }

/* Uitnodig-instap (solo) */
.leden-invite {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 14px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  text-decoration: none;
  color: var(--color-accent);
  font-weight: 700;
}
.leden-invite--pending { justify-content: space-between; color: var(--color-text-muted); font-weight: 600; font-size: var(--text-sm); }
.leden-invite__pending-text { flex: 1; min-width: 0; }
.leden-invite__cancel-form { margin: 0; flex: none; }
.leden-invite__cancel { font: inherit; font-size: var(--text-13); font-weight: 700; color: var(--color-danger, var(--color-error)); background: none; border: 0; padding: 4px 6px; cursor: pointer; }
.leden-invite__cancel:active { opacity: 0.7; }
.leden-invite__icon { flex: none; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px; background: var(--color-soft); }
.leden-invite__icon svg { width: 20px; height: 20px; }
.leden-invite__text { flex: 1; min-width: 0; }
.leden-invite__chevron { flex: none; width: 20px; height: 20px; color: var(--color-faint); }

/* Kinderen — kaarten + toevoeg-knop */
.leden-kids { display: flex; flex-direction: column; gap: 10px; }
.leden-kid {
  display: flex;
  align-items: center;
  gap: 13px;
  padding: 12px 16px;
  background: var(--color-surface);
  border: 1px solid var(--color-line);
  border-radius: 18px;
  box-shadow: var(--shadow-4);
  text-decoration: none;
  text-align: left;
  color: var(--color-text);
}
.leden-kid:active { transform: scale(0.99); }
.leden-kid__avatar {
  flex: none;
  overflow: hidden;
  width: 44px;
  height: 44px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: var(--kid-color, var(--color-accent));
  color: var(--color-on-accent);
  font-weight: 800;
  font-size: var(--text-lg);
}
.leden-kid__text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.leden-kid__name { font-size: var(--text-base); font-weight: 700; }
.leden-kid__meta { margin-top: 2px; font-size: var(--text-13); color: var(--color-text-muted); }
.leden-kid__chevron { flex: none; width: 20px; height: 20px; color: var(--color-faint); }
/* Kinderen-sectiekop: label links, kleine +-knop rechts (toevoegen zit niet meer in een
   grote knop onderaan). */
.leden__section-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin: 26px 4px 12px; }
.leden__section-head .leden__section-label { margin: 0; }
.leden__section-add { flex: none; display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: none; border-radius: 50%; background: var(--color-soft); color: var(--color-accent); cursor: pointer; transition: transform var(--dur-fast) var(--curve-decel); }
.leden__section-add:active { transform: scale(0.92); }
.leden__section-add svg { width: 18px; height: 18px; }

/* Eigen-naam potlood → account-instellingen (spiegelt de avatar-verberg-knop van de ander). */
.leden-person__edit { flex: none; display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; color: var(--color-faint); }
.leden-person__edit:active { transform: scale(0.94); }
.leden-person__edit svg { width: 18px; height: 18px; }

/* ── Kind toevoegen-sheet: herindeling + 2-staps-wizard ─────────────────────── */
.kindf__eyebrow { font-size: var(--text-xs); font-weight: 800; letter-spacing: 1.2px; text-transform: uppercase; color: var(--color-faint); margin: 4px 2px 14px; }
.kindf__names { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.kindf__group { margin-top: 18px; }
.child-name > .form__label { display: block; margin-bottom: 8px; }
.child-name__custom { margin-top: 14px; }
.kindf__preview { display: flex; align-items: center; gap: 8px; font-size: var(--text-13); color: var(--color-text-muted); margin: 10px 2px 0; }
.kindf__preview-ini { flex: none; width: 22px; height: 22px; border-radius: 7px; background: var(--color-soft); color: var(--color-accent); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: var(--text-11); }
.kindf__preview b { color: var(--color-text); }
.kindf__more { margin-top: 16px; }
.kindf__more-sum { display: flex; align-items: center; gap: 6px; list-style: none; cursor: pointer; color: var(--color-accent); font-size: var(--text-13); font-weight: 700; padding: 2px; }
.kindf__more-sum::-webkit-details-marker { display: none; }
.kindf__more-chev { width: 16px; height: 16px; transition: transform .18s ease; }
.kindf__more[open] .kindf__more-chev { transform: rotate(180deg); }
/* Rol & gezag: één card per ouder (avatar + naam + rol-chips + gezag). */
.kindf__parent { margin-top: 12px; padding: 15px; border: 1px solid var(--color-line); border-radius: 16px; background: var(--color-surface); }
.kindf__parent-head { display: flex; align-items: center; gap: 11px; margin-bottom: 13px; }
.kindf__parent-ava { flex: none; width: 38px; height: 38px; border-radius: 50%; display: grid; place-items: center; background: var(--color-accent); color: var(--color-on-accent); font-weight: 700; font-size: var(--text-15); }
.kindf__parent-ava--co { background: var(--color-coparent); }
.kindf__parent-id { display: flex; flex-direction: column; line-height: 1.15; }
.kindf__parent-name { font-size: var(--text-base); font-weight: 700; color: var(--color-text); }
.kindf__parent-tag { font-size: var(--text-xs); color: var(--color-text-muted); }
.kindf__sub { display: block; font-size: var(--text-11); font-weight: 800; letter-spacing: .7px; text-transform: uppercase; color: var(--color-faint); margin: 13px 0 7px; }
.kindf__group > .form__label { display: block; margin-bottom: 9px; }
/* Rol-chips: wrappen op eigen breedte (4 rollen) i.p.v. de gelijk-verdeelde 2-segment. */
.leden-seg--wrap { flex-wrap: wrap; }
.leden-seg--wrap .leden-seg__opt { flex: 0 0 auto; }
.leden-seg--wrap .leden-seg__label { padding-left: 15px; padding-right: 15px; }

/* Kind bewerken — detail-hub (hub-and-spoke, design_handoff_kind_bewerken). */
.kindhub__hero { display: flex; align-items: center; gap: 14px; padding: 4px 4px 20px; }
.kindhub__avatar { flex: none; overflow: hidden; width: 56px; height: 56px; border-radius: 18px; background: var(--kid-color, var(--color-soft)); color: var(--color-on-accent); display: grid; place-items: center; font-family: var(--font-display); font-weight: 600; font-size: var(--text-24); }
.kindhub__name { font-family: var(--font-display); font-size: var(--text-22); font-weight: 600; color: var(--color-text); line-height: 1.1; margin: 0; }
.kindhub__meta { font-size: var(--text-sm); color: var(--color-text-muted); }
.kindhub__eyebrow { display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--color-faint); margin: 0 4px 9px; }
.kindhub__card { background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px; box-shadow: var(--shadow-4); overflow: hidden; margin-bottom: 22px; }
.kindhub__row { display: flex; align-items: center; gap: 12px; width: 100%; padding: 14px 16px; background: none; border: none; font: inherit; text-align: left; color: var(--color-text); cursor: pointer; }
.kindhub__card > .kindhub__row:not(:first-child) { border-top: 1px solid var(--color-line); }
.kindhub__row.is-active { background: var(--color-softer); }
.kindhub__row-text { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.kindhub__row-label { font-size: var(--text-xs); color: var(--color-text-muted); font-weight: 600; }
.kindhub__row-value { font-size: var(--text-15); color: var(--color-text); font-weight: 600; margin-top: 2px; }
.kindhub__chev { flex: none; width: 9px; height: 9px; border-right: 2.2px solid var(--color-faint); border-top: 2.2px solid var(--color-faint); transform: rotate(45deg); }
.kindhub__pava { flex: none; width: 36px; height: 36px; border-radius: 11px; background: var(--color-soft); color: var(--color-accent); display: grid; place-items: center; font-weight: 800; font-size: var(--text-15); }
.kindhub__pava--co { background: var(--color-coparent-soft); color: var(--color-coparent); }
.kindhub__spoke { border-top: 1px solid var(--color-line); background: var(--color-softer); padding: 15px 16px; animation: kindhub-fade .25s ease both; }
.kindhub__spoke[hidden] { display: none; }
@keyframes kindhub-fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.kindhub__names { display: flex; gap: 9px; }
.kindhub__input { width: 100%; min-width: 0; border: 1px solid var(--color-line); background: var(--color-surface); border-radius: 12px; padding: 12px 13px; font: inherit; font-size: var(--text-15); color: var(--color-text); outline: none; }
.kindhub__input:focus-visible { border-color: var(--color-accent); }
.kindhub__custom { margin-top: 10px; }
.kindhub__custom.is-hidden { display: none; }
.kindhub__preview { display: flex; align-items: center; gap: 8px; margin: 12px 0 0; font-size: var(--text-13); color: var(--color-text-muted); }
.kindhub__preview-ini { flex: none; width: 26px; height: 26px; border-radius: 50%; background: var(--color-soft); color: var(--color-accent); display: grid; place-items: center; font-weight: 800; font-size: var(--text-xs); }
.kindhub__preview b { color: var(--color-text); font-weight: 700; }
.kindhub__hint { font-size: var(--text-13); color: var(--color-text-muted); line-height: 1.5; margin: 0 0 11px; }
.kindhub__sub { display: block; font-size: var(--text-xs); font-weight: 800; letter-spacing: .4px; text-transform: uppercase; color: var(--color-faint); margin: 0 0 8px; }
.kindhub__form .leden-seg + .kindhub__sub { margin-top: 16px; }
/* Spoke-submit = de .button-primitive (volle breedte, conventions §Opslag-model);
   hier alleen de afstand tot de velden erboven. */
.kindhub__done { margin-top: 12px; }
.kindhub__wis { display: flex; align-items: center; gap: 8px; margin-top: 10px; font-size: var(--text-13); color: var(--color-text-muted); }
.kindhub__delete { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; background: var(--color-surface); border: 1px solid var(--color-error-border); color: var(--color-error); border-radius: 14px; padding: 15px; font: inherit; font-size: var(--text-15); font-weight: 700; cursor: pointer; }
.kindhub__delete svg { width: 18px; height: 18px; }
.kind-wizard__bar { display: flex; align-items: center; gap: 9px; margin: 0 0 6px; }
.kind-wizard__seg { flex: 1; height: 5px; border-radius: 3px; background: var(--color-soft); transition: background .25s ease; }
.kind-wizard__seg.is-on { background: var(--color-accent); }
.kind-wizard__count { flex: none; font-size: var(--text-xs); color: var(--color-faint); white-space: nowrap; }
.kind-wizard__step { padding-bottom: 4px; }
.kind-wizard__nav { display: flex; gap: 10px; margin-top: 22px; padding-top: 16px; border-top: 1px solid var(--color-line); }
.kind-wizard__nav .button { flex: 1; }
.kind-wizard__back { flex: 0 0 auto; }
/* [hidden] verliest het van .button's eigen display — forceer het in de wizard. */
.kind-wizard [hidden] { display: none !important; }
.leden-seg { display: flex; gap: 8px; }
/* position:relative geeft de (visueel verborgen) radio een containing block binnen zijn eigen
   label; zonder dit valt de absolute radio terug op de fixed <dialog> en scrollt de sheet-body
   bij focus naar een verkeerd berekende positie ("verspringende" bottom-sheet). */
.leden-seg__opt { flex: 1; position: relative; }
.leden-seg__rb { position: absolute; opacity: 0; pointer-events: none; }
.leden-seg__label {
  display: block;
  text-align: center;
  padding: 10px;
  border: 1px solid var(--color-line);
  border-radius: 12px;
  font-size: var(--text-15);
  font-weight: 700;
  color: var(--color-text-muted);
  cursor: pointer;
}
.leden-seg__rb:checked + .leden-seg__label { background: var(--color-accent); border-color: var(--color-accent); color: var(--color-on-accent); }

/* ===================== UTILITIES ===================== */
/* Verticale ritmiek (DRY): één vaste maat tussen gestapelde blokken via de aangrenzende-
   sibling-selector — geen losse margins per kind. Nul de eigen verticale marges van directe
   kinderen zodat component-margins de ritmiek niet doorbreken. Override de maat met
   --stack-gap (bv. style="--stack-gap: 12px"). Staat laat in het bestand zodat de
   margin-reset component-regels wint. */
.stack { display: flex; flex-direction: column; }
.stack > * { margin-block: 0; }
.stack > * + * { margin-top: var(--stack-gap, 20px); }

/* ===================== OMGANG (design_handoff_omgang) =====================
   Read-only "wie is waar": volgende-wissel-banner + weekstrip per kind + dag-detail.
   Kleuren kijker-perspectief (jij perzik / andere ouder paars). Tokens uit :root;
   de strip-cel-kleuren staan inline (gesloten hex-set, geen injectie). */
.omgang { padding-bottom: 8px; }
.omgang__day,
.omgang__chevron,
.omgang__link,
.omgang__day:active,
.omgang__chevron:active,
.omgang__link:active { transform: scale(.97); }

/* Banner "Volgende wissel" (zelfde idioom als de overdracht-wisselbanner). */
.omgang__banner {
  display: flex; align-items: center; gap: 12px;
  background: var(--color-coparent-soft); border-radius: 15px;
  padding: 13px 15px; margin-bottom: 14px;
}
.omgang__banner-icon {
  flex: none; width: 36px; height: 36px; border-radius: 10px;
  background: var(--color-coparent); display: flex; align-items: center; justify-content: center;
}
.omgang__banner-icon svg { width: 19px; height: 19px; color: var(--color-on-accent); }
.omgang__banner-text { flex: 1; min-width: 0; }
.omgang__banner-title { display: block; font-size: var(--text-sm); font-weight: 700; color: var(--color-text); }
.omgang__banner-sub { display: block; font-size: var(--text-13); color: var(--color-coparent); margin-top: 1px; }

/* Kaart-basis (weekstrip, detail, links). */
.omgang__card {
  background: var(--color-surface); border: 1px solid var(--color-line); border-radius: 18px;
  box-shadow: 0 1px 2px rgba(60, 33, 18, .05), 0 8px 22px rgba(60, 33, 18, .05);
  margin-bottom: 14px;
}
.omgang__status { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 12px 15px; }
.omgang__status-badge { font-size: var(--text-13); font-weight: 700; padding: 5px 11px; border-radius: 999px; }
.omgang__status-badge--amber { background: var(--color-amber-soft); color: var(--color-amber-deep); }
.omgang__status-badge--ok { background: var(--color-green-soft); color: var(--color-green-deep); }
.omgang__status-confirm { margin-left: auto; border: 0; cursor: pointer; font-weight: 700; font-size: var(--text-13); padding: 8px 16px; border-radius: 999px; background: var(--color-accent); color: var(--color-on-accent); }
.omgang__status-link { margin-left: auto; font-size: var(--text-13); font-weight: 700; }
.omgang__strip-card { padding: 13px 12px 12px; }

/* Weeknavigatie. */
.omgang__weeknav { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; }
.omgang__chevron {
  width: 29px; height: 29px; border-radius: 50%; border: 1px solid var(--color-line);
  display: flex; align-items: center; justify-content: center; color: var(--color-text-muted);
}
.omgang__chevron svg { width: 15px; height: 15px; }
.omgang__weeknav-mid { text-align: center; }
.omgang__weeklabel { display: block; font-size: var(--text-sm); font-weight: 800; color: var(--color-text); }
.omgang__weekrange { display: block; font-size: var(--text-xs); font-weight: 600; color: var(--color-faint); }

/* Strip: labelkolom + 7 dagkolommen. */
.omgang__strip { display: flex; gap: 3px; }
.omgang__strip-labels {
  flex: none; width: 20px; display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px 0;
}
.omgang__strip-spacer { height: 13px; }
.omgang__strip-spacer--date { height: 22px; }
.omgang__kid-initial {
  height: 22px; display: flex; align-items: center;
  font-size: var(--text-11); font-weight: 800; color: var(--color-faint);
}
.omgang__day {
  flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 4px;
  padding: 6px 2px; border-radius: 12px; border: 1px solid transparent; background: transparent;
  cursor: pointer; font: inherit;
}
.omgang__day.is-selected { background: var(--color-softer); border-color: var(--color-soft-border); }
.omgang__dow {
  height: 13px; font-size: var(--text-10); font-weight: 800; letter-spacing: .5px;
  text-transform: uppercase; color: var(--color-faint);
}
.omgang__date {
  width: 22px; height: 22px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  font-size: var(--text-xs); font-weight: 700; color: var(--color-text);
}
.omgang__date--today { background: var(--color-accent); color: var(--color-on-accent); font-weight: 800; }
.omgang__cell { position: relative; width: 100%; height: 22px; border-radius: 7px; }
.omgang__cell-afw {
  position: absolute; top: -3px; right: -3px; width: 9px; height: 9px; border-radius: 50%;
  background: var(--color-amber); border: 2px solid var(--color-surface);
}

/* Legenda. */
.omgang__legend { display: flex; align-items: center; gap: 13px; flex-wrap: wrap; margin: 12px 4px 0; }
.omgang__legend-item { display: inline-flex; align-items: center; gap: 5px; font-size: var(--text-11); font-weight: 700; color: var(--color-text-muted); }
.omgang__legend-swatch { width: 10px; height: 10px; border-radius: 4px; }
.omgang__legend-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--color-amber); }

/* Dag-detailkaart. */
.omgang__detail { padding: 4px 15px; }
.omgang__detail-head { display: flex; align-items: center; gap: 8px; padding: 13px 0 3px; }
.omgang__detail-title { font-size: var(--text-15); font-weight: 800; color: var(--color-text); text-transform: capitalize; }
.omgang__detail-rel {
  font-size: var(--text-11); font-weight: 800; letter-spacing: .4px; text-transform: uppercase;
  color: var(--color-accent); background: var(--color-soft); border-radius: 6px; padding: 3px 8px;
}
.omgang__detail-empty { font-size: var(--text-13); color: var(--color-text-muted); padding: 10px 0 14px; }
.omgang__row { display: flex; align-items: flex-start; gap: 11px; padding: 12px 0 13px; }
.omgang__row--divider { border-bottom: 1px solid var(--color-line); }
.omgang__row-avatar {
  flex: none; width: 32px; height: 32px; border-radius: 50%; background: var(--color-softer);
  border: 1px solid var(--color-line); color: var(--color-text); font-size: var(--text-13); font-weight: 800;
  display: flex; align-items: center; justify-content: center;
}
.omgang__row-body { flex: 1; min-width: 0; }
.omgang__row-top { display: flex; align-items: center; gap: 8px; }
.omgang__row-name { font-size: var(--text-sm); font-weight: 700; color: var(--color-text); }
.omgang__chip { font-size: var(--text-xs); font-weight: 800; border-radius: 8px; padding: 3px 9px; }
.omgang__chip--you { color: var(--color-accent); background: var(--color-soft); }
.omgang__chip--co { color: var(--color-coparent); background: var(--color-coparent-soft); }
.omgang__chip--faint { color: var(--color-text-muted); background: var(--color-softer); }
.omgang__row-wissel {
  display: flex; align-items: center; gap: 6px; margin-top: 7px;
  font-size: var(--text-13); font-weight: 700; color: var(--color-coparent);
}
.omgang__row-wissel svg { flex: none; width: 14px; height: 14px; }
.omgang__wissel-override {
  flex: none; font-size: var(--text-10); font-weight: 700; letter-spacing: .2px;
  color: var(--color-text-muted); background: var(--color-border);
  border-radius: 6px; padding: 2px 7px;
}
.omgang__wissel-undo-form { display: inline; }
.omgang__wissel-undo {
  border: 0; background: none; padding: 0; cursor: pointer;
  font-size: var(--text-11); font-weight: 600; color: var(--color-text-muted);
  text-decoration: underline; text-underline-offset: 2px;
}
.omgang__row-afw { display: flex; align-items: flex-start; gap: 7px; margin-top: 8px; }
.omgang__afw-badge {
  flex: none; font-size: var(--text-11); font-weight: 800; letter-spacing: .4px; text-transform: uppercase;
  color: var(--color-amber); background: var(--color-amber-soft); border-radius: 6px; padding: 3px 8px;
}
.omgang__afw-note { font-size: var(--text-xs); color: var(--color-text-muted); line-height: 1.45; padding-top: 2px; }
.omgang__row-special { display: flex; align-items: center; gap: 8px; margin-top: 6px; }
.omgang__special-badge { font-size: var(--text-11); font-weight: 700; padding: 3px 9px; border-radius: 999px; }
.omgang__special-badge--vacation { background: var(--color-holiday-soft); color: var(--color-holiday-deep); }
.omgang__special-badge--holiday { background: var(--color-amber-soft); color: var(--color-amber-deep); }
.omgang__special-name { font-size: var(--text-13); color: var(--color-text-muted, var(--cloud-dark)); }

/* Linkskaart. */
.omgang__links { padding: 2px 15px; }
.omgang__link { display: flex; align-items: center; gap: 11px; padding: 13px 0; color: var(--color-text); }
.omgang__link + .omgang__link { border-top: 1px solid var(--color-line); }
.omgang__link-icon {
  flex: none; width: 32px; height: 32px; border-radius: 10px; background: var(--color-softer);
  display: flex; align-items: center; justify-content: center;
}
.omgang__link-icon svg { width: 16px; height: 16px; color: var(--color-accent); }
.omgang__link-text { flex: 1; min-width: 0; }
.omgang__link-title { display: block; font-size: var(--text-sm); font-weight: 700; color: var(--color-text); }
.omgang__link-sub { display: block; font-size: var(--text-xs); color: var(--color-faint); }
.omgang__link-chevron { flex: none; width: 17px; height: 17px; color: var(--color-faint); }

/* Lege staat (geen regeling): shared EmptyStateComponent — geen eigen defs meer. */
