/* DebiCare DebiDash - moderne huisstijl */
/* Zelf gehost: geen verzoek naar Google, dus geen klant-IP's die naar buiten gaan
   (AVG) en font-src 'self' in de CSP blijft strak. Variabele fonts: alle gewichten
   zitten in hetzelfde bestand per subset. Alleen latin + latin-ext (Nederlands). */
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 600 700;
  font-display: swap;
  src: url('fonts/fredoka-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 600 700;
  font-display: swap;
  src: url('fonts/fredoka-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/nunito-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url('fonts/nunito-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
:root {
  --blue:#33509f; --blue-d:#223887; --blue-050:#eef2fb;
  --peach:#ef8b5e; --peach-d:#e2734a;
  --cream:#fff8ef; --paper:#ffffff; --ink:#2b332f; --ink-soft:#6b756f;
  --line:#ece3d4; --line-2:#f4ecdf;
  --groen:#2e9e6a; --groen-bg:#e7f6ee;
  --oranje:#e0900f; --oranje-bg:#fbf0d9;
  --rood:#d0463a; --rood-bg:#fbe8e6;
  --grijs:#9aa39d; --grijs-bg:#eef0ee;
  --shadow:0 1px 2px rgba(34,56,135,.05), 0 6px 20px rgba(34,56,135,.06);
  --radius:16px; --radius-s:12px;
  --vlak:#fbfaf7;
}
* { box-sizing:border-box; }
body {
  margin:0; font-family:"Nunito",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
  color:var(--ink); background:var(--cream); line-height:1.5;
  /* Zijbalk-layout: body is een rij van [zijbalk][rechterkolom]. Zonder zijbalk (niet
     ingelogd) blijft dit gewoon werken -- .zijbalk-inhoud is dan het enige flex-kind en
     neemt de volle breedte. */
  display:flex; flex-direction:row; align-items:stretch; min-height:100vh;
}
h1,h2,h3 { font-family:"Fredoka",system-ui,sans-serif; color:var(--blue-d); margin:0; font-weight:600; }
a { color:var(--blue); }

/* Rechterkolom naast de zijbalk: meekijk-/setup-balk, hoofdinhoud en footer. Eigen
   flex-column + min-height zodat de footer onderaan blijft plakken, zoals voorheen de
   hele <body> deed. min-width:0 voorkomt dat brede tabellen/grafieken de kolom breder
   duwen dan de beschikbare ruimte (flex-items krimpen anders niet onder hun content). */
.zijbalk-inhoud {
  flex:1 1 auto; min-width:0; display:flex; flex-direction:column; min-height:100vh;
}

.btn-ghost { background:transparent; color:#fff; border:1px solid rgba(255,255,255,.45);
  border-radius:10px; padding:.45rem .9rem; font-weight:600; cursor:pointer; font-family:inherit; }
.btn-ghost:hover { background:rgba(255,255,255,.12); }

/* --- Zijbalknavigatie (vervangt de oude blauwe topbar) -------------------------------- */
/* --zijbalk-breedte wordt door static/zijbalk.js gezet (versleepte breedte, 180-360px);
   zonder JS blijft het gewoon op de standaard 248px staan (progressive enhancement). */
.zijbalk {
  width:var(--zijbalk-breedte, 248px); flex-shrink:0; position:relative;
  background:var(--paper); border-right:1px solid var(--line);
  min-height:100vh; display:flex; flex-direction:column; padding:20px 14px 16px;
}
.zijbalk-top { display:flex; align-items:center; justify-content:space-between; gap:6px; }
.zijbalk-merk { font-family:"Fredoka",sans-serif; font-size:19px; font-weight:700;
  color:var(--blue-d); padding:0 0 18px 12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.zijbalk-merk span { opacity:.65; font-weight:500; }
/* In-/uitklapknop: alleen zichtbaar effect met zijbalk.js; zonder JS is het een gewone
   (nutteloze) knop die niets doet -- geen inline onclick, dus geen CSP-uitzondering nodig. */
.zijbalk-toggle { flex-shrink:0; background:transparent; border:1px solid var(--line);
  border-radius:8px; width:26px; height:26px; display:flex; align-items:center;
  justify-content:center; color:var(--ink-soft); cursor:pointer; margin-bottom:14px; }
.zijbalk-toggle:hover { background:var(--line-2); color:var(--blue-d); }
.zijbalk-toggle svg { transition:transform .15s ease; }
.zijbalk-toggle:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }

.zijbalk-groepen { display:flex; flex-direction:column; gap:14px; }
.zijbalk-groep { display:flex; flex-direction:column; gap:2px; }
.zijbalk-groep--intern { padding-top:12px; border-top:1px solid var(--line-2); }
.zijbalk-kop { font-size:10.5px; font-weight:800; letter-spacing:.09em; color:var(--grijs);
  text-transform:uppercase; padding:8px 12px 5px; }
.zijbalk-kop--intern { color:var(--peach-d); }

.zijbalk-links { display:flex; flex-direction:column; gap:2px; }
.zijbalk-links a { display:flex; align-items:center; gap:11px; color:var(--ink);
  text-decoration:none; padding:9px 12px; border-radius:10px; font-weight:700;
  font-size:14.6px; }
.zijbalk-links a svg { flex-shrink:0; color:var(--ink-soft); }
.zijbalk-links a:hover { background:var(--line-2); }
.zijbalk-links a.actief { color:var(--blue-d); background:var(--blue-050); font-weight:800;
  box-shadow:inset 3px 0 0 var(--blue); }
.zijbalk-links a.actief svg { color:var(--blue); }
.zijbalk-links a:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }

/* --- Zijbalk-submenu's (brok 2): locatiekiezer + uitklapgroep "Cijfers" ---------------- */
/* Beide zijn CSS-only <details>-dropdowns (zelfde patroon als .intrek-bevestig verderop in
   dit bestand): geen JavaScript nodig, en zijbalk.js hoeft er niet op te letten -- de
   ingeklapte/versleepbare staat werkt er onveranderd overheen. */
.zijbalk-locatiekiezer { margin:0 0 12px; }
.zijbalk-locatiekiezer summary { display:flex; align-items:center; justify-content:space-between;
  gap:8px; padding:8px 12px; background:var(--cream); border:1px solid var(--line);
  border-radius:var(--radius-s); cursor:pointer; list-style:none; }
.zijbalk-locatiekiezer summary::-webkit-details-marker { display:none; }
.zijbalk-locatiekiezer summary:hover { border-color:var(--blue); }
.zijbalk-locatiekiezer summary:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }
.zijbalk-locatiekiezer summary svg { flex-shrink:0; color:var(--ink-soft); transition:transform .15s ease; }
.zijbalk-locatiekiezer[open] summary svg { transform:rotate(180deg); }
.zlk-tekst { display:flex; flex-direction:column; min-width:0; }
.zlk-label { font-size:10px; font-weight:800; letter-spacing:.07em; color:var(--grijs);
  text-transform:uppercase; }
.zlk-waarde { font-weight:800; font-size:13.8px; color:var(--blue-d); white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; }
.zlk-lijst { display:flex; flex-direction:column; gap:1px; margin-top:4px; }
.zlk-lijst a { color:var(--ink); text-decoration:none; padding:6px 12px 6px 18px;
  border-radius:8px; font-weight:600; font-size:13.4px; }
.zlk-lijst a:hover { background:var(--line-2); }
.zlk-lijst a.actief { color:var(--blue-d); background:var(--blue-050); font-weight:800;
  box-shadow:inset 3px 0 0 var(--blue); }
.zlk-lijst a:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }

/* Uitklapgroep "Cijfers": de KPI-detailpagina's als subitems, compacter dan de hoofditems
   erboven (zie eisen: padding 4px 12px 4px 30px, ~13.4px). */
.zijbalk-uitklap summary { display:flex; align-items:center; justify-content:space-between;
  color:var(--ink); padding:7px 12px; font-weight:700; font-size:14.6px; cursor:pointer;
  list-style:none; border-radius:10px; }
.zijbalk-uitklap summary::-webkit-details-marker { display:none; }
.zijbalk-uitklap summary:hover { background:var(--line-2); }
.zijbalk-uitklap summary:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }
.zijbalk-uitklap summary svg { flex-shrink:0; color:var(--ink-soft); transition:transform .15s ease; }
.zijbalk-uitklap[open] summary { color:var(--blue-d); font-weight:800; }
.zijbalk-uitklap[open] summary svg { transform:rotate(180deg); }
.zijbalk-sublinks { display:flex; flex-direction:column; gap:1px; margin:0 0 2px; }
.zijbalk-sublinks a { color:var(--ink); text-decoration:none; padding:4px 12px 4px 30px;
  border-radius:8px; font-weight:600; font-size:13.4px; }
.zijbalk-sublinks a:hover { background:var(--line-2); }
.zijbalk-sublinks a.actief { color:var(--blue-d); background:var(--blue-050); font-weight:800;
  box-shadow:inset 3px 0 0 var(--blue); }
.zijbalk-sublinks a:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }

/* Sleepgreep aan de rechterrand: alleen bruikbaar met zijbalk.js (hover/actief-kleur laat
   'm zien voor wie er met de muis overheen gaat; zonder JS gebeurt er bij slepen niets). */
.zijbalk-sleepgreep { position:absolute; top:0; right:-3px; width:6px; height:100%;
  cursor:col-resize; z-index:5; }
.zijbalk-sleepgreep:hover, body.zijbalk-slepen-actief .zijbalk-sleepgreep { background:var(--blue-050); }
/* Tijdens het slepen (klasse door zijbalk.js op body gezet) geen tekst selecteren en de
   resize-cursor overal tonen, niet alleen boven de greep zelf. */
body.zijbalk-slepen-actief { cursor:col-resize; user-select:none; }

.zijbalk-gebruiker { margin-top:auto; display:flex; align-items:center; gap:10px;
  padding:10px 12px; border-top:1px solid var(--line-2); }
.zijbalk-avatar { display:flex; align-items:center; justify-content:center; width:34px;
  height:34px; border-radius:50%; background:var(--peach); color:#fff;
  font-family:"Fredoka",sans-serif; font-weight:600; font-size:13.5px; flex-shrink:0; }
.zijbalk-gebruiker-info { display:flex; flex-direction:column; min-width:0; }
.zijbalk-gebruiker-naam { font-weight:800; font-size:13.5px; color:var(--blue-d);
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.zijbalk-gebruiker-info form { margin:0; }
/* Vervangt btn-ghost (wit-op-blauw, voor de oude topbar) hier bewust door een gewone
   tekstlink-knop: op de witte zijbalk zou btn-ghost onzichtbaar wit-op-wit zijn. */
.zijbalk-uitloggen { background:none; border:0; padding:0; margin:0; font:inherit;
  font-size:12.5px; font-weight:700; color:var(--blue); text-decoration:none; cursor:pointer;
  text-align:left; }
.zijbalk-uitloggen:hover { text-decoration:underline; }
.zijbalk-uitloggen:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }

/* Ingeklapte iconenrail (desktop only, zie media query hieronder): labels, groepskoppen
   en de gebruikersnaam verbergen, alleen iconen + avatar blijven over. */
.zijbalk--ingeklapt { width:72px; padding-left:10px; padding-right:10px; }
.zijbalk--ingeklapt .zijbalk-merk,
.zijbalk--ingeklapt .zijbalk-kop,
.zijbalk--ingeklapt .zijbalk-gebruiker-info { display:none; }
.zijbalk--ingeklapt .zijbalk-top { justify-content:center; }
.zijbalk--ingeklapt .zijbalk-toggle svg { transform:rotate(180deg); }
.zijbalk--ingeklapt .zijbalk-links a { justify-content:center; padding:9px; }
.zijbalk--ingeklapt .zijbalk-links a.actief { box-shadow:none; } /* geen 3px-streep in een 72px-rail */
.zijbalk--ingeklapt .zijbalk-gebruiker { justify-content:center; padding:10px 0; }
.zijbalk--ingeklapt .zijbalk-sleepgreep { display:none; } /* ingeklapt telt niet mee als sleepbare breedte */
/* Locatiekiezer en de "Cijfers"-uitklapgroep hebben geen eigen hoofdicoon om in de rail te
   tonen (net als de labels bij de gewone links) -- volledig verbergen, uitklappen herstelt
   ze via de responsieve/normale regels hieronder. */
.zijbalk--ingeklapt .zijbalk-locatiekiezer,
.zijbalk--ingeklapt .zijbalk-uitklap { display:none; }
/* Labels van de hoofdlinks: kale tekstnodes worden in .zijbalk-label gewrapt (base.html) zodat
   ze hier verborgen kunnen worden zonder het icoon te raken. De `title` op elke <a> houdt de
   72px-rail bruikbaar (hover-tooltip met de linktekst). */
.zijbalk--ingeklapt .zijbalk-label { display:none; }

/* Responsief (CSS-only, geen JS-afhankelijkheid voor dit deel, zie eisen): de zijbalk
   wordt een blok bovenaan over de volle breedte, groepen naast elkaar in plaats van
   gestapeld. In-/uitklappen en verslepen zijn hier uitgeschakeld -- geen ruimte voor een
   aparte rail op een smal scherm, dus knop en greep verbergen we, en een eventuele
   ingeklapte staat uit localStorage negeren we door alle "ingeklapt"-regels hierboven op
   min-width te laten gelden (implicit via de aparte selectors hier, die alles weer
   volledig tonen). */
@media (max-width:820px) {
  body { flex-direction:column; }
  .zijbalk, .zijbalk--ingeklapt { width:100%; min-height:auto; border-right:none;
    border-bottom:1px solid var(--line); padding:14px 14px 10px; }
  .zijbalk-toggle, .zijbalk-sleepgreep { display:none; }
  .zijbalk--ingeklapt .zijbalk-merk,
  .zijbalk--ingeklapt .zijbalk-kop,
  .zijbalk--ingeklapt .zijbalk-gebruiker-info { display:initial; }
  .zijbalk--ingeklapt .zijbalk-label { display:inline; }
  .zijbalk-gebruiker-info { display:flex; }
  .zijbalk-top { justify-content:flex-start; }
  .zijbalk-groepen { flex-direction:row; flex-wrap:wrap; gap:10px 22px; }
  .zijbalk-links, .zijbalk--ingeklapt .zijbalk-links { flex-direction:row; flex-wrap:wrap; }
  .zijbalk--ingeklapt .zijbalk-links a { justify-content:flex-start; padding:9px 12px; }
  .zijbalk-gebruiker { margin-top:14px; }
  /* Kiezer + uitklapgroep blijven bruikbaar in het bovenblok, ook ingeklapt uit
     localStorage (zie de "ingeklapt"-regels hierboven, die op deze breedte niet gelden). */
  .zijbalk--ingeklapt .zijbalk-locatiekiezer,
  .zijbalk--ingeklapt .zijbalk-uitklap { display:block; width:100%; }
  .zijbalk-locatiekiezer { width:100%; max-width:280px; }
  .zijbalk-sublinks, .zijbalk--ingeklapt .zijbalk-sublinks { flex-direction:row; flex-wrap:wrap; }
}

/* Onderpadding 8rem: sinds de assistent-knop zichtbaar is staan er TWEE zwevende knoppen
   gestapeld rechtsonder; de laatste contentregel van elke pagina moet daar volledig boven
   uitkomen (ronde 1- en 2-bevindingen: overlap op debiteuren, productmix, leeftijdsopbouw,
   rustig- en kaarten-stijl). */
.container { width:100%; max-width:1120px; margin:0 auto; padding:1.75rem 1.5rem 8rem; flex:1; }
.dash-head { margin-bottom:1.25rem; }
.dash-head h1 { font-size:1.7rem; }
.muted { color:var(--ink-soft); }
.periode-pill { display:inline-block; background:var(--blue-050); color:var(--blue-d);
  font-weight:700; font-size:.8rem; padding:.25rem .7rem; border-radius:999px; }

.demo-note { font-size:.85rem; background:#fff; border:1px dashed var(--peach); color:var(--ink-soft);
  padding:.6rem .9rem; border-radius:10px; margin:.6rem 0 0; }

/* Hero: bezetting + stoplicht */
.hero { display:grid; grid-template-columns:minmax(230px,300px) 1fr; gap:1rem; margin-bottom:1.25rem; }
.card { background:var(--paper); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); padding:1.25rem 1.35rem; }
.hero-bezetting { display:flex; flex-direction:column; gap:.15rem; }
.hero-bezetting .label { font-weight:700; color:var(--ink-soft); font-size:.85rem; }
.hero-graad { display:flex; align-items:center; gap:.7rem; }
.hero-graad .pct { font-family:"Fredoka",sans-serif; font-size:3rem; font-weight:700; line-height:1; color:var(--blue-d); }
.dot { width:18px; height:18px; border-radius:50%; flex:none; box-shadow:0 0 0 4px rgba(0,0,0,.03); }
.dot-lg { width:26px; height:26px; }
.sl-groen{background:var(--groen);} .sl-oranje{background:var(--oranje);}
.sl-rood{background:var(--rood);} .sl-onbekend{background:var(--grijs);}
.hero-sub { color:var(--ink-soft); font-size:.9rem; margin-top:.15rem; }
.bar { height:9px; background:var(--line-2); border-radius:6px; overflow:hidden; margin-top:.6rem; }
.bar > span { display:block; height:100%; border-radius:6px; background:var(--peach); }

.tiles { display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:.6rem; align-content:start; }
.tile { background:var(--blue-050); border-radius:var(--radius-s); padding:.7rem .85rem; display:flex; flex-direction:column; }
.tile .t-label { font-size:.75rem; color:var(--blue-d); font-weight:700; opacity:.8; line-height:1.2; min-height:2.4em; }
.tile .t-val { font-family:"Fredoka",sans-serif; font-size:1.5rem; font-weight:700; color:var(--blue-d); line-height:1.1;
  white-space:nowrap; font-variant-numeric:tabular-nums; }
.tile .t-sub { font-size:.72rem; color:var(--ink-soft); }

/* Doorklikbare tegels: ze moeten aanvoelen als een knop, niet als een plaatje. */
a.tile, a.hero-bezetting { text-decoration:none; color:inherit; display:block; transition:transform .08s ease; }
a.tile:hover, a.hero-bezetting:hover { transform:translateY(-2px); box-shadow:var(--shadow); }
a.tile:focus-visible, a.hero-bezetting:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
.cijfers { margin-top:.8rem; font-size:.85rem; }

/* Signalen */
.signalen { display:flex; flex-direction:column; gap:.4rem; margin-bottom:1.25rem; }
.signaal { display:flex; align-items:center; gap:.6rem; padding:.6rem .9rem; border-radius:12px; font-size:.9rem; font-weight:600; }
.signaal.dreigt_over_capaciteit { background:var(--rood-bg); color:#8f2c23; }
.signaal.wachtlijst_naast_leegstand { background:var(--rood-bg); color:#8f2c23; }
.signaal.onderbezetting { background:var(--oranje-bg); color:#8a5a09; }
.signaal.drie_maanden_dalend { background:var(--oranje-bg); color:#8a5a09; }
.signaal.omzetdaling { background:var(--oranje-bg); color:#8a5a09; }
.signaal.hoog_verloop { background:var(--oranje-bg); color:#8a5a09; }
.signaal.geen_signalen { background:var(--groen-bg); color:#1c6b45;
  border-left:4px solid var(--groen); }

.section-title { font-size:1.15rem; margin:1.5rem 0 .8rem; }

/* Losse .card's zonder koptekst ertussen plakten tegen elkaar: alle ruimte kwam tot nu toe
   van section-title-marges, dus twee opeenvolgende kaarten zonder kop (detailpagina's,
   planning, beheer, locatie/groep) hadden geen witruimte. Eén regel, overal fix. Binnen een
   grid/flex-rij met een eigen `gap` (.hero, .duo, .ov-lijst, .pl-lijst) staan kaarten al goed
   uit elkaar via die gap -- daar zou deze marge een dubbele witruimte geven, dus daar weer op
   0 gezet. */
.card + .card { margin-top: 1rem; }
.hero > .card + .card, .duo > .card + .card,
.ov-lijst > .card + .card, .pl-lijst > .card + .card,
.filterbalk > .card + .card { margin-top: 0; }
/* Compacte klantenrij zonder kop na de kansenlijst (beheerder_planning.html): geen
   aangrenzende .card ervoor (de kansenlijst is .pl-lijst, geen .card), dus geen automatische
   marge van de regel hierboven -- alsnog expliciet. */
.pl-compact { margin-top: 1rem; }

/* Locatie-kaarten */
.loc-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(320px,1fr)); gap:1rem; }
.loc-card { background:var(--paper); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); overflow:hidden; }
.loc-top { height:6px; }
.loc-top.sl-groen{background:var(--groen);} .loc-top.sl-oranje{background:var(--oranje);}
.loc-top.sl-rood{background:var(--rood);} .loc-top.sl-onbekend{background:var(--grijs);}
.loc-body { padding:1.1rem 1.25rem; }
.loc-head { display:flex; align-items:center; justify-content:space-between; gap:.6rem; }
.loc-head h3 { font-size:1.05rem; }
.loc-head-right { display:flex; align-items:center; gap:.5rem; flex-shrink:0; }
.groep-vinkje { display:flex; align-items:center; gap:.3rem; font-size:.7rem;
  color:var(--ink-soft); cursor:pointer; white-space:nowrap; }
.groep-vinkje input { margin:0; cursor:pointer; }
.badge { font-size:.72rem; font-weight:800; padding:.2rem .6rem; border-radius:999px; text-transform:uppercase; letter-spacing:.02em; }
.badge.sl-groen{background:var(--groen-bg); color:#1c6b45;}
.badge.sl-oranje{background:var(--oranje-bg); color:#8a5a09;}
.badge.sl-rood{background:var(--rood-bg); color:#8f2c23;}
.badge.sl-onbekend{background:var(--grijs-bg); color:#5c635e;}
.cap-matrix { overflow-x: auto; }
.cap-matrix table { border-collapse: collapse; width: 100%; font-size: .85rem; }
.cap-matrix th, .cap-matrix td { padding: .4rem .6rem; text-align: center; }
.cap-matrix th:first-child { text-align: left; }
.cap-matrix td.loc { text-align: left; font-weight: 700; white-space: nowrap; padding-right: 1.2rem; }
.cap-matrix td.cel { border-radius: 6px; font-weight: 700; }
.cap-matrix td.cel.sl-groen { background: var(--groen-bg); color: #1c6b45; }
.cap-matrix td.cel.sl-oranje { background: var(--oranje-bg); color: #8a5a09; }
.cap-matrix td.cel.sl-rood { background: var(--rood-bg); color: #8f2c23; }
/* Prognosekolommen (ondergrens, nog geen gemeten maand) visueel onderscheiden. */
.cap-matrix .prognose { font-style: italic; opacity: .85; }
/* Locatienaam-link in de matrix: geen standaard blauwe onderstreping, wel on hover. */
.cap-matrix td.loc a { color: var(--blue-d); text-decoration: none; }
.cap-matrix td.loc a:hover { text-decoration: underline; }
/* Starts/opzeggingen-rijen onderaan de "Komende 3 maanden"-tabel: geen stoplichtkleur (het
   zijn geen bezettingscijfers), wel duidelijk als samenvattingsregel gescheiden. */
.cap-matrix tr.vooruit-rij td { border-top: 1px solid var(--line); }
.cap-matrix tr.vooruit-rij td.cel { background: var(--blue-050); color: var(--blue-d); }

/* Sectiekop met een link ernaast (bijv. "Per locatie" -> "Vergelijk locaties"). */
.section-title-row { display: flex; align-items: baseline; justify-content: space-between;
  gap: 1rem; margin: 1.5rem 0 .8rem; }
.section-title-row .section-title { margin: 0; }
.loc-graad { display:flex; align-items:baseline; gap:.5rem; margin:.5rem 0 .1rem; }
.loc-graad .pct { font-family:"Fredoka",sans-serif; font-size:2rem; font-weight:700; color:var(--blue-d); line-height:1; }
.loc-graad .sub { color:var(--ink-soft); font-size:.85rem; }
.mini { display:grid; grid-template-columns:repeat(3,1fr); gap:.5rem; margin:.8rem 0; }
.mini div { background:var(--line-2); border-radius:10px; padding:.45rem .6rem; }
.mini .m-l { font-size:.68rem; color:var(--ink-soft); font-weight:700; }
.mini .m-v { font-weight:800; color:var(--ink); white-space:nowrap; font-variant-numeric:tabular-nums; }
.chips { display:flex; flex-wrap:wrap; gap:.35rem; margin:.5rem 0; }
.chip { font-size:.75rem; font-weight:700; background:var(--blue-050); color:var(--blue-d);
  border-radius:999px; padding:.22rem .6rem; }
.chip b { color:var(--blue-d); }
/* W1c: label op tegels/grafieken die een klant-specifieke weergavekeuze volgen (niet de
   standaarddefinitie) -- peach i.p.v. het gewone blauw, zodat hij opvalt tussen de chips. */
.chip-weergave { background:#fff1e8; color:var(--peach-d); font-size:.68rem; }
/* Bezetting per weekdag: balk = bezettingsgraad van die dag, spoor = capaciteit. */
.week { display:flex; gap:5px; margin:.6rem 0 .2rem; }
.week .col { flex:1; display:flex; flex-direction:column; align-items:center; gap:3px; }
.week .track { position:relative; width:100%; height:44px; display:flex; align-items:flex-end;
  background:var(--line-2); border-radius:4px; overflow:hidden; }
/* Doel-streepje per weekdagbalk (streefbezetting): zelfde rol/stijl als .bullet-doel, maar
   horizontaal -- deze balken groeien van onder naar boven. */
.week .week-doel { position:absolute; left:0; right:0; height:2px; margin-bottom:-1px;
  background:var(--ink); opacity:.55; pointer-events:none; z-index:1; }
.week .track i { width:100%; background:var(--blue); opacity:.85;
  border-radius:4px 4px 0 0; min-height:2px; }
.week .n { font-size:.6rem; font-weight:700; color:var(--ink-soft); }
.week .dag { font-size:.62rem; color:var(--ink-soft); }
.week .col.dicht .track { background:repeating-linear-gradient(-45deg,
  var(--line-2) 0 4px, var(--paper) 4px 8px); }
.week .col.dicht .n, .week .col.dicht .dag { opacity:.5; }
.cap-label { font-size:.72rem; color:var(--ink-soft); margin-top:.35rem; }

/* Uitgesloten op de beheerpagina: zichtbaar laten, maar duidelijk uitgezet. */
a.loc-card.uit { opacity:.5; filter:grayscale(1); }
a.loc-card.uit:hover { opacity:.8; filter:grayscale(.5); }
.loc-top.sl-uit { background:var(--line); }
.badge-uit { background:var(--line); color:var(--ink-soft); white-space:nowrap; }
.chip.uit { opacity:.6; }

/* Lijngrafiek (zelf getekende SVG; geen externe library i.v.m. CSP) */
.lijn { width:100%; height:auto; display:block; margin-top:.5rem; }
.lijn .trend-lijn { fill:none; stroke:var(--blue); stroke-width:2.5;
  stroke-linejoin:round; stroke-linecap:round; }
.lijn .prog-lijn { fill:none; stroke:var(--ink-soft); stroke-width:2;
  stroke-dasharray:4 3; opacity:.55; }
.lijn .punt { fill:var(--blue); stroke:#fff; stroke-width:2; }
.lijn .punt-mini { fill:var(--blue); }
.lijn .punt-prog { fill:#fff; stroke:var(--blue); stroke-width:1.3; opacity:.75; }
.lijn .punt-hover { fill:transparent; stroke:transparent; cursor:pointer; }
.lijn .punt-hover:hover { fill:var(--blue); fill-opacity:.9; }
.lijn .as { font-size:7px; fill:var(--ink-soft); }
/* Prognosemaanden op de as (Wouter: as liep niet door tot waar de stippellijn eindigt) --
   iets lichter dan de gewone maandlabels, zodat "verwacht" ook zonder tekst herkenbaar is. */
.lijn .as-prog { opacity:.65; }
/* Y-hulplijnen bij uitgebreid=True op niet-percentage-grafieken (zie _lijn.html). */
.lijn .pt-label { display:none; font-size:7.5px; font-weight:700; fill:var(--ink);
  stroke:#fff; stroke-width:3; paint-order:stroke; pointer-events:none; }
.lijn .pt:hover .pt-label { display:block; }
.lijn .punt-live-label { font-size:11px; font-weight:800; fill:var(--blue-d);
  stroke:#fff; stroke-width:3; paint-order:stroke; pointer-events:none; }
/* Altijd-zichtbare korte waardelabels bij uitgebreid=True (detailpagina's) -- kleiner en
   stiller dan .punt-live-label (dat is er maar één, dit kan er meerdere zijn). */
.lijn .punt-vast-label { font-size:6.5px; font-weight:700; fill:var(--ink-soft);
  stroke:#fff; stroke-width:2.5; paint-order:stroke; pointer-events:none; }

/* Kaartgrafiek (locatiekaarten dashboard): dikkere lijn/stippen dan de standaardgrafiek,
   zodat de bezettingstrend in de kaart in één oogopslag leesbaar is. De hoogte komt nu uit
   een eigen, diepere viewBox (grafiek.py::Y1_GROOT, zie _lijn.html) i.p.v. CSS-uitrekken --
   width:100%/height:auto (.lijn hierboven) volgt die verhouding vanzelf, dus niets vervormt
   meer (was preserveAspectRatio="none": de stippen werden ovaal). */
.lijn-groot .trend-lijn { stroke-width:4; }
.lijn-groot .prog-lijn { stroke-width:3; }
.lijn-groot .punt { r:5; }
.lijn-groot .punt-mini, .lijn-groot .punt-prog { r:3.5; }
.lijn-groot .as { font-size:9px; }
.lijn-cijfers { margin:.5rem 0 0; font-size:.9rem; color:var(--ink-soft); }
.lijn-cijfers strong { color:var(--blue-d); font-size:1.05rem; }
.delta { font-weight:800; }
.delta.op { color:var(--groen); }
.delta.neer { color:var(--rood); }
.delta.gelijk { color:var(--ink-soft); }
.legenda { font-size:.72rem; color:var(--ink-soft); margin-top:.3rem; }

/* (De oude `.benchmark .bm-row/.bm-naam/.bm-graad/.bm-delta`-regels stonden hier. Ze hoorden
   bij de vorige, platte benchmarklijst en zijn met B4.3 weggevallen: `.benchmark` bestaat
   nergens meer in de templates. Weggehaald omdat `.bm-naam` nu een andere betekenis heeft
   in het nieuwe blok onderaan dit bestand -- twee regels met dezelfde naam die op een dag
   weer bij elkaar in de buurt komen is precies het soort verrassing dat je niet wilt. De
   verschilkleuren lopen nu via de bestaande `.delta.op`/`.delta.neer` hierboven.) */

/* Twee gelijke kolommen (trends, detailblokken) */
.duo { display:grid; grid-template-columns:1fr 1fr; gap:1rem; margin-bottom:1.25rem; }

/* Doorklikbare kaarten/kolommen naar de KPI-detailpagina: zelfde opmaak als .card/.stroom,
   maar met knop-gevoel (hover, focus) en een subtiele "Bekijk details"-hint. */
a.blok-link { display:block; text-decoration:none; color:inherit; transition:transform .08s ease, box-shadow .12s ease; }
a.blok-link:hover { transform:translateY(-2px); box-shadow:var(--shadow); }
a.blok-link:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
.blok-link-hint { display:block; margin-top:.6rem; font-size:.78rem; font-weight:700; color:var(--blue-d); }
a.loc-card { display:block; text-decoration:none; color:inherit;
  transition:transform .08s ease, box-shadow .12s ease; }
a.loc-card:hover { transform:translateY(-2px); box-shadow:0 6px 24px rgba(34,56,135,.13); }

/* Leeftijd in/uitstroom */
.stroom h4 { margin:.1rem 0 .5rem; font-family:"Fredoka",sans-serif; color:var(--blue-d); font-size:.95rem; }
.stroom-row { display:flex; align-items:center; gap:.5rem; margin:.28rem 0; font-size:.85rem; }
/* width:56px vast brak lange labels per woord af, verticaal gestapeld (zelfde balklabel-euvel
   als hieronder bij .n) -- bijv. volledige maandnamen (detail.html: "Nieuwe aanmeldingen per
   maand"/"Gewenste startmaand") en pakketnamen (detail.html: "Pakketten", geen mix-opvang-
   kolombreedte). min-width houdt de gebruikelijke korte labels (leeftijd, weekdag) precies zo
   breed als voorheen; flex:0 0 auto + white-space:nowrap voorkomt dat een langer label alsnog
   afbreekt. */
.stroom-row .lab { min-width:56px; width:auto; flex:0 0 auto; white-space:nowrap;
  color:var(--ink-soft); font-weight:700; }
.stroom-row .track { flex:1; height:14px; background:var(--line-2); border-radius:7px; overflow:hidden; }
.stroom-row .track i { display:block; height:100%; border-radius:7px; background:var(--blue); }
.stroom-in .track i { background:var(--groen); }
.stroom-uit .track i { background:var(--peach); }
/* width:22px was te krap voor langere labels (bijv. productmix: "4 kinderen · 3500 uren")
   en brak per woord af, verticaal gestapeld (Wouter, screenshots). min-width houdt korte
   getallen compact; flex:0 0 auto + white-space:nowrap voorkomt dat de flexbox 'm alsnog
   laat krimpen/afbreken bij een langere tekst. Geldt voor elke .stroom-row op het dashboard
   en de detailpagina's (leeftijdsopbouw, uitsplitsingen, productmix): één regel, overal fix. */
.stroom-row .n { min-width:22px; width:auto; flex:0 0 auto; text-align:right;
  font-weight:800; white-space:nowrap; }
/* Opvangsoort-namen (bv. "Buitenschoolse opvang") zijn breder dan een leeftijdslabel. */
.mix-opvang .stroom-row .lab { width:150px; }
.mix-opvang .stroom-row .n { width:auto; min-width:34px; }

/* Kruistabel leeftijd x opvangsoort (stand-KPI's) */
.kruistabel { overflow-x: auto; margin-top: .8rem; }
.kruistabel table { border-collapse: collapse; width: 100%; font-size: .85rem; }
.kruistabel th, .kruistabel td { padding: .4rem .6rem; text-align: right; border-bottom: 1px solid var(--line); white-space: nowrap; }
.kruistabel th:first-child, .kruistabel td:first-child { text-align: left; font-weight: 700; }
.kruistabel thead th { color: var(--ink-soft); font-size: .78rem; text-transform: uppercase; letter-spacing: .03em; }
.kruistabel tfoot tr, .kruistabel td.totaal { font-weight: 800; }
.kruistabel .nul { opacity: .4; }

/* Beheer + tabellen + formulieren */
.card-narrow { max-width:520px; margin:2rem auto; }
table.beheer { width:100%; border-collapse:collapse; font-size:.9rem; }
table.beheer th, table.beheer td { text-align:left; padding:.55rem .5rem; border-bottom:1px solid var(--line); }
table.beheer th { color:var(--ink-soft); font-size:.78rem; text-transform:uppercase; letter-spacing:.03em; }
/* Verwachte (toekomst-)rijen in de "Exacte cijfers"-tabel (bijv. bezetting): cursief +
   label, zodat een klant een prognosemaand nooit voor een gerealiseerd cijfer aanziet. */
tr.rij-verwacht td { font-style:italic; color:var(--ink-soft); }
.tag-verwacht { font-style:normal; font-size:.65rem; font-weight:700; color:var(--ink-soft);
  text-transform:uppercase; letter-spacing:.03em; background:var(--line-2);
  border-radius:6px; padding:.08rem .4rem; margin-left:.3rem; }
input:not([type]), input[type=text], input[type=email], input[type=password], input[type=number],
input[type=date], input[type=search], select, textarea {
  padding:.5rem .6rem; border:1px solid var(--line); border-radius:10px; font-size:1rem;
  background:#fff; font-family:inherit; color:var(--ink); width:100%; }
textarea { resize:vertical; min-height:5rem; }
select {
  appearance:none; -webkit-appearance:none;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Cpath d='M5 8l5 5 5-5' fill='none' stroke='%236b756f' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right .65rem center; background-size:14px;
  padding-right:2.1rem; }
input:not([type]):focus-visible, input[type=text]:focus-visible, input[type=email]:focus-visible, input[type=password]:focus-visible,
input[type=number]:focus-visible, input[type=date]:focus-visible, input[type=search]:focus-visible,
select:focus-visible, textarea:focus-visible { outline:2px solid var(--blue); outline-offset:1px; border-color:var(--blue); }
input[type=checkbox], input[type=radio] { width:18px; height:18px; accent-color:var(--blue); }
label.veld { display:block; margin:1rem 0 .35rem; font-weight:700; color:var(--ink-soft); }
.filterbalk { display:flex; flex-wrap:wrap; align-items:center; gap:.6rem; margin-bottom:1rem; }
.filterbalk label { font-weight:700; color:var(--ink-soft); font-size:.85rem; }
.filterbalk select { width:auto; max-width:100%; }
/* Smalle telefoons (r9, logboek op 375px): een lange klantnaam maakt de select breder dan
   het scherm; het flex-veld eromheen krimpt standaard niet onder zijn inhoud (min-width:auto). */
@media (max-width:480px){
  .filterbalk .triage-filterveld { min-width:0; max-width:100%; }
}
.filterbalk .btn { margin-top:0; }
.radio-row { display:flex; gap:1rem; margin:.4rem 0; }
.radio-row label { display:flex; align-items:center; gap:.4rem; font-weight:600; }
/* Nog niet gebouwde keuze: grijs en niet aanklikbaar (zie beheer.html, LRK). */
.radio-row label.uit { opacity:.5; cursor:not-allowed; }
.radio-row label.uit em { font-style:normal; font-weight:700; color:var(--oranje); }
/* Zelfde hint-stijl voor de auto-uit-toelichting achter een groepsnaam (zie beheer.html). */
table.beheer .uit em { font-style:normal; font-weight:700; color:var(--oranje); }
.btn { display:inline-block; margin-top:1.2rem; padding:.7rem 1.3rem; border:none; border-radius:12px;
  font-family:"Fredoka",sans-serif; font-size:1rem; font-weight:600; cursor:pointer; }
.btn-primary { background:var(--peach); color:#fff; box-shadow:0 4px 0 var(--peach-d); }
.btn-primary:hover { transform:translateY(1px); box-shadow:0 3px 0 var(--peach-d); }
.flash { padding:.8rem 1rem; border-radius:12px; margin-bottom:1rem; }
.flash-success { background:var(--groen-bg); color:#1c6b45; }
.flash-error { background:var(--rood-bg); color:#8f2c23; }
/* Inlogscherm: zelfde opzet als de DebiCare Tool, zodat klanten de huisstijl herkennen.
   Gecentreerde kaart op crème; geen topbar/footer-ruis eromheen. */
.login-page { min-height:100vh; display:flex; align-items:center; justify-content:center;
  background:var(--cream); padding:24px; }
.login-card { background:var(--paper); border:1px solid var(--line);
  border-radius:var(--radius); box-shadow:var(--shadow); padding:40px 36px;
  width:100%; max-width:420px; }
.login-logo { font-family:"Fredoka",sans-serif; font-size:28px; font-weight:700;
  color:var(--blue-d); text-align:center; margin-bottom:6px; }
.login-title { font-family:"Fredoka",sans-serif; font-size:18px; font-weight:600;
  color:var(--ink-soft); text-align:center; margin:0 0 28px; }
.login-card label { display:block; margin:0 0 .3rem; font-weight:700; font-size:.85rem;
  color:var(--ink-soft); }
.login-card input { margin-bottom:1rem; }
/* flex-start + kleine top-marge: het label loopt over twee regels, en gecentreerd hing het
   vinkje tussen de regels in i.p.v. naast de eerste regel (r10, 2FA-scherm). */
.login-card .checkbox-row { display:flex; align-items:flex-start; gap:.5rem; font-weight:600;
  font-size:.9rem; color:var(--ink-soft); margin:.9rem 0; }
.login-card .checkbox-row input { margin:.05rem 0 0; }
.login-uitleg { text-align:center; color:var(--ink-soft); font-size:.85rem;
  margin:1.4rem 0 0; }
.btn-full { width:100%; }
.login-page .flash { margin-bottom:1rem; }

/* Meekijk-balk: moet opvallen. Je mag nooit twijfelen wiens cijfers je ziet. */
.meekijk-balk { display:flex; align-items:center; justify-content:space-between; gap:1rem;
  flex-wrap:wrap; padding:.7rem 1.5rem; background:var(--oranje-bg); color:#8a5a09;
  border-bottom:2px solid var(--oranje); font-size:.9rem; }
.meekijk-balk strong { color:#6d4707; }
.meekijk-balk .btn-ghost { border-color:var(--oranje); color:#8a5a09; }

/* Herinneringsbalk voor de begeleide setup-wizard (brok 4). Zelfde idioom als
   .meekijk-balk, maar blauw i.p.v. oranje: dit is een uitnodiging, geen waarschuwing over
   een beheerder die meekijkt. btn-ghost is standaard wit-op-blauw (topbar) en moet hier,
   op een lichtblauwe achtergrond, expliciet blauw worden -- anders is "Niet nu" onzichtbaar
   wit-op-wit (zelfde valkuil als .klant-kop hierboven). */
.setup-balk { display:flex; align-items:center; justify-content:space-between; gap:1rem;
  flex-wrap:wrap; padding:.7rem 1.5rem; background:var(--blue-050); color:var(--blue-d);
  border-bottom:2px solid var(--blue); font-size:.9rem; }
.setup-balk .btn { margin-top:0; }
.setup-balk .btn-ghost { color:var(--blue); border-color:var(--blue); }
.setup-balk .btn-ghost:hover { background:#fff; }

.klant-kop { display:flex; align-items:center; justify-content:space-between; gap:1rem;
  flex-wrap:wrap; margin-bottom:1rem; }
/* Paginakop met een knop ernaast (beheer.html). Zonder deze twee regels neemt de tekstkolom
   de volle breedte -- de subtitel is een hele alinea -- en wipt de knop naar de regel
   eronder, terwijl hij naast de titel hoort te staan. De basis van 22rem laat hem op een
   smal scherm alsnog netjes onder de tekst vallen (flex-wrap hierboven). */
.dash-head.klant-kop > div { flex:1 1 22rem; min-width:0; }
.dash-head.klant-kop > .btn-ghost { flex:none; }
/* btn-ghost is wit-op-blauw (topbar); op een witte klantkaart moet hij blauw zijn,
   anders is de knop (bv. de planning-schakelaar) onzichtbaar wit-op-wit. */
.klant-kop .btn-ghost, .planning-schakelaar .btn-ghost { color:var(--blue); border-color:var(--blue); }
.klant-kop .btn-ghost:hover, .planning-schakelaar .btn-ghost:hover { background:var(--blue-050); }

/* Waarschuwende variant van btn-ghost, voor "Toegang intrekken". */
.btn-danger { color:#8f2c23; border-color:var(--rood); }
.btn-danger:hover { background:var(--rood-bg); }

/* De intrek-bevestiging hangt aan <details>: de summary oogt als knop, geen JS nodig (CSP).
   .module-bevestig is dezelfde bevestig-stap voor het uitzetten van de dashboard-module
   (zie beheerder.html) -- eigen klassenaam zodat 'ie los staat van de intrekknop-tests. */
.intrek-bevestig summary, .module-bevestig summary { list-style:none; cursor:pointer; }
.intrek-bevestig summary::-webkit-details-marker,
.module-bevestig summary::-webkit-details-marker { display:none; }
.intrek-bevestig[open] summary, .module-bevestig[open] summary { margin-bottom:.5rem; }
.intrek-bevestig-inhoud { display:flex; align-items:center; gap:.6rem; }
.intrek-bevestig-inhoud p { margin:0; font-size:.85rem; color:var(--ink-soft); }

/* Planning-schakelaar: status-badge + knop, met uitleg eronder. */
.planning-schakelaar { display:flex; align-items:center; gap:.7rem; margin:.9rem 0 .2rem;
  flex-wrap:wrap; }
.planning-uitleg { font-size:.85rem; margin:.2rem 0 0; }
.pl-klant .planning-schakelaar { margin-top:0; margin-bottom:.8rem; }

/* Beheerdersoverzicht: compacte rij per klant, blijft scanbaar met 20+ klanten. */
.ov-lijst { display:flex; flex-direction:column; gap:.6rem; }
.ov-rij { display:grid; grid-template-columns: 1.4fr auto 140px auto 140px;
  align-items:center; gap:1rem; padding:.7rem 1rem; }
.ov-naam { display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; }
.ov-naam h3 { margin:0; font-size:1rem; }
.ov-naam form { display:flex; align-items:center; gap:.6rem; flex-wrap:wrap; }
/* De klantnaam is een submit-knop vermomd als kop: klik = dashboard van die klant. */
.ov-naam-knop { background:none; border:0; padding:0; cursor:pointer; text-align:left; font:inherit; }
.ov-naam-knop:hover h3 { text-decoration:underline; color:var(--blue); }
.ov-naam-knop:focus-visible { outline:2px solid var(--blue); outline-offset:2px; border-radius:4px; }
/* btn-ghost is wit-op-blauw (topbar); op een witte kaart moet hij blauw zijn. */
.ov-bekijk { color:var(--blue); border-color:var(--blue); font-size:.8rem; padding:.3rem .7rem; }
.ov-bekijk:hover { background:var(--blue-050); }
.ov-graad { display:flex; align-items:center; gap:.5rem; }
.ov-graad .pct { font-weight:800; font-size:1.1rem; }
.ov-grafiek { width:140px; }
.ov-grafiek .lijn { width:100%; height:auto; }
.ov-wachtlijst { text-align:center; }
@media (max-width: 900px) {
  .ov-rij { grid-template-columns: 1fr; }
  .ov-grafiek { width:100%; }
}

/* Planningsoverzicht: kansenlijst + matrix per klant, compacte rij voor klanten zonder kans. */
.pl-lijst { display:flex; flex-direction:column; gap:.8rem; }
.pl-klant h3 { margin:0 0 .5rem; }
.pl-kansen { margin:0 0 .6rem; padding-left:1.1rem; }
.pl-kansen li { margin-bottom:.25rem; }
.pl-warn { background:var(--oranje-bg); color:#8a5a09; border-radius:8px; padding:.5rem .7rem;
  font-size:.85rem; font-weight:700; }
.pl-voetnoot { color:var(--ink-soft); font-size:.85rem; font-style:italic; }
.pl-matrix { margin-top:.6rem; }
.pl-matrix h4 { margin:.6rem 0 .3rem; font-size:.85rem; }
.pl-kans-cel { background:var(--groen-bg); color:#1c6b45; }
.pl-compact-rij { margin:.3rem 0; }
.pl-warn-inline { color:#8a5a09; font-weight:700; font-size:.85rem; }

.tenant-note { margin-top:2rem; font-size:.8rem; }
/* Extra padding-bottom: een andere sessie bouwt een supportbot-widget die rechtsonder in
   het venster zweeft (fixed/absolute, buiten dit bestand). Ruimte vrijhouden zodat die
   widget de footer-tekst of laatste knoppen op een pagina niet overlapt. */
.footer { padding:1.1rem 1.5rem 90px; text-align:center; color:var(--ink-soft); font-size:.85rem; }

@media (max-width:720px){ .hero{grid-template-columns:1fr;}
  .duo{grid-template-columns:1fr;} }

/* Debiteuren-tab: risico-tegel, ouderdomsbalk, trend */
.kpi-risico.is-risico { border-left:4px solid var(--rood, #c0392b); }
.kpi-risico.is-risico .pct { color:var(--rood, #c0392b); }

.payt-balk { display:flex; width:100%; height:26px; border-radius:6px; overflow:hidden;
  background:var(--line,#eee); margin:.3rem 0 .8rem; }
.payt-balk .seg { height:100%; }
.payt-balk .seg + .seg { border-left:2px solid #fff; }
.seg.b0, .stip.b0 { background:#2e9e6b; }   /* nog niet vervallen  */
.seg.b1, .stip.b1 { background:#e8c000; }   /* 1-30   */
.seg.b2, .stip.b2 { background:#e8912d; }   /* 31-60  */
.seg.b3, .stip.b3 { background:#d9603a; }   /* 61-90  */
.seg.b4, .stip.b4 { background:#c0392b; }   /* 90+    */

.payt-legenda { display:flex; flex-wrap:wrap; gap:.4rem 1.4rem; margin-bottom:1.2rem; }
.payt-legenda .li { display:inline-flex; align-items:center; gap:.4rem; font-size:.9rem;
  color:var(--ink-soft,#555); }
.payt-legenda .li strong { color:var(--ink,#222); }
.payt-legenda .stip { width:11px; height:11px; border-radius:3px; display:inline-block; }

/* Achterstallig-tegel op het hoofddashboard: risicobedrag opvallend maken */
.tile .t-val.t-risico { color:#c0392b; }

/* Twee tegelgroepen: planning boven, financieel onder, met een dunne scheiding */
.tiles-groepen { display:flex; flex-direction:column; gap:.7rem; align-content:start; }
.tiles-financieel { border-top:1px solid var(--line); padding-top:.7rem; }

/* --- Begeleide setup-wizard (setup_welkom/setup_stap/setup_klaar.html) ---------------- */
/* Geen JavaScript: uitklappers zijn <details>, de voortgangsbalk is een breedte-inline
   style. Alles hergebruikt de bestaande tokens; geen nieuwe kleuren. */

/* Zachte tweede knop naast .btn-primary ("Nu niet", "Instellingen bekijken"). */
.btn-stil { background:var(--paper); color:var(--blue-d); border:1px solid var(--line);
  text-decoration:none; }
.btn-stil:hover { background:var(--blue-050); }
a.btn { text-decoration:none; }

.setup-knoppen { display:flex; flex-wrap:wrap; gap:.8rem; align-items:center; }
.setup-fijndruk { font-size:.82rem; margin:.6rem 0 0; }

/* Welkomscherm */
.setup-welkom { max-width:760px; }
.setup-welkom h2 { font-size:1.15rem; margin:.4rem 0 .6rem; }
.setup-eerder { background:var(--blue-050); color:var(--blue-d); border-radius:var(--radius-s);
  padding:.6rem .8rem; font-weight:600; margin:0 0 1rem; }
.setup-vragenlijst { margin:.4rem 0 0; padding-left:1.3rem; }
.setup-vragenlijst li { margin-bottom:.3rem; }

/* Stapscherm: smalle checklist links, brede vraag rechts. */
.setup-raster { display:grid; grid-template-columns:270px 1fr; gap:1rem; align-items:start; }
.setup-verloop { margin:.4rem 0 0; color:var(--ink-soft); font-size:.9rem; }
.setup-verloop strong { color:var(--blue-d); }

.setup-checklist { position:sticky; top:1rem; }
.setup-teller { margin:0; font-weight:700; color:var(--blue-d); font-size:.9rem; }
.setup-voortgang { height:7px; background:var(--line-2); border-radius:6px; overflow:hidden;
  margin:.45rem 0 .9rem; }
.setup-voortgang > span { display:block; height:100%; border-radius:6px; background:var(--peach); }
.setup-checklist ol { list-style:none; margin:0; padding:0; counter-reset:setupstap; }
.setup-checklist li { display:flex; flex-direction:column; padding:.32rem 0;
  font-size:.88rem; border-bottom:1px solid var(--line-2); }
.setup-checklist li:last-child { border-bottom:none; }
.setup-checklist li.open { color:var(--grijs); }
.setup-checklist li.actief { font-weight:800; color:var(--blue-d); }
/* Pijltje ín de titelregel: de li is een kolom-flexbox, dus een ::before op de li zelf
   wordt een eigen flex-kind BOVEN de titel (float doet niets op flex-items, r9). */
.setup-checklist li.actief > span:first-child::before { content:"› ";
  color:var(--peach-d); font-weight:800; }
.setup-checklist li.af a { color:var(--ink); text-decoration:none; font-weight:600; }
.setup-checklist li.af a:hover { color:var(--blue); text-decoration:underline; }
.setup-checklist .vink { color:var(--groen); font-weight:800; margin-right:.25rem; }
.setup-antwoord { color:var(--ink-soft); font-size:.75rem; margin-left:1.1rem; }

/* Stapscherm: de vraagkaart. */
.setup-vraag h2 { font-size:1.3rem; margin:.15rem 0 .5rem; }
.setup-stapnr { margin:0; font-size:.72rem; font-weight:800; letter-spacing:.05em;
  text-transform:uppercase; color:var(--peach-d); }
.setup-fout { background:var(--rood-bg); color:var(--rood); border-radius:var(--radius-s);
  padding:.55rem .8rem; font-weight:700; margin:.8rem 0 0; }
.setup-nog-geen-cijfers { background:var(--oranje-bg); color:#8a5a09; font-size:.85rem;
  border-radius:var(--radius-s); padding:.55rem .8rem; margin:.9rem 0 0; }
.setup-chips { margin-top:1rem; }

/* Twee antwoorden naast elkaar; elke optie is één klikbaar <label>. */
.setup-opties { display:grid; grid-template-columns:1fr 1fr; gap:.8rem; margin:1.1rem 0 0; }
.setup-optie { display:flex; flex-direction:column; gap:.5rem; cursor:pointer;
  border:1px solid var(--line); border-radius:var(--radius-s); padding:.9rem;
  background:var(--paper); transition:border-color .12s, box-shadow .12s; }
.setup-optie:hover { border-color:var(--blue); }
.setup-optie:focus-within { outline:2px solid var(--blue); outline-offset:2px; }
.setup-optie.gekozen { border-color:var(--blue); box-shadow:inset 0 0 0 1px var(--blue);
  background:var(--blue-050); }
.setup-optie-kop { display:flex; align-items:flex-start; gap:.45rem; line-height:1.3; }
.setup-optie-kop strong { color:var(--blue-d); }
.setup-optie-tekst { font-size:.85rem; }
.setup-tegel { display:flex; flex-direction:column; background:var(--cream);
  border-radius:var(--radius-s); padding:.55rem .7rem; }
.setup-tegel b { font-family:"Fredoka",sans-serif; font-size:1.75rem; font-weight:700;
  color:var(--blue-d); line-height:1.1; }
.setup-tegel em { font-style:normal; font-size:.78rem; color:var(--ink-soft); }
.setup-tegel-leeg { font-size:.8rem; color:#8a5a09; background:var(--oranje-bg); }

.setup-verdieping { margin-top:1.3rem; border-top:1px solid var(--line); padding-top:.8rem; }
.setup-verdieping summary { cursor:pointer; font-weight:700; color:var(--blue-d);
  font-size:.9rem; }
.setup-verdieping p { margin:.6rem 0 0; font-size:.88rem; color:var(--ink-soft); }

.setup-voet { display:flex; align-items:center; justify-content:space-between; gap:1rem;
  margin-top:1.2rem; border-top:1px solid var(--line); padding-top:.4rem; }
.setup-vorige { font-weight:700; font-size:.9rem; text-decoration:none; }
.setup-vorige:hover { text-decoration:underline; }
.setup-voet .btn { margin-top:.8rem; }

/* Afrondscherm */
.setup-klaar { max-width:760px; }
.setup-afwijkingen { margin:.4rem 0 0; padding-left:1.2rem; }
.setup-afwijkingen li { margin-bottom:.2rem; }

@media (max-width:720px){
  .setup-raster { grid-template-columns:1fr; }
  .setup-checklist { position:static; }
  .setup-opties { grid-template-columns:1fr; }
}

/* Hulppaneel: vast knopje rechtsonder met wens/feedback-formulier, zonder JavaScript. */
.hulppaneel { position:fixed; right:1.2rem; bottom:1.2rem; z-index:40;
  max-width:min(340px, calc(100vw - 2.4rem));
  /* Twee losse widgets (assistent + feedback) onder elkaar, rechts uitgelijnd: de assistent
     moet duidelijk een eigen ding zijn, geen tabje in een verzamelpaneel (wens Wouter). */
  display:flex; flex-direction:column; align-items:flex-end; gap:.55rem; }
/* Compacter sinds ronde 2: twee gestapelde knoppen bedekken anders te veel content in de
   rechteronderhoek (de pil "Vraag de assistent" was de breedste boosdoener). */
.hulppaneel-knop { display:inline-block; background:var(--blue); color:#fff; font-weight:700;
  font-size:.8rem; padding:.45rem .85rem; border-radius:999px; box-shadow:var(--shadow);
  cursor:pointer; list-style:none; user-select:none; }
.hulppaneel-knop::-webkit-details-marker { display:none; }
.hulppaneel-knop:hover { background:var(--blue-d); }
/* Lichte variant voor de feedback-knop: aanwezig maar ondergeschikt aan de assistent. */
.hulppaneel-knop--licht { background:var(--paper); color:var(--ink); border:1px solid var(--line);
  font-size:.75rem; padding:.35rem .75rem; }
.hulppaneel-knop--licht:hover { background:var(--cream); }
.hulppaneel-knop .badge-beta { background:rgba(255,255,255,.25); color:#fff; margin-left:.15rem; }
.hulppaneel[open] .hulppaneel-knop,
.hulppaneel details[open] > .hulppaneel-knop { border-radius:16px 16px 0 0; }
.hulppaneel-inhoud { background:var(--paper); border:1px solid var(--line); border-top:none;
  border-radius:0 0 var(--radius-s) var(--radius-s); box-shadow:var(--shadow);
  padding:1rem 1.1rem 1.1rem; margin-top:-1px;
  /* Het paneel is fixed: groeit het gesprek, dan moet het paneel zelf scrollen in plaats
     van onder de vensterrand te verdwijnen (de verstuurknop was anders onbereikbaar). */
  max-height:calc(100vh - 7rem); overflow-y:auto; }
.hulppaneel-kop { font-size:1rem; margin-bottom:.6rem; }
.hulppaneel-inhoud label { display:block; font-size:.78rem; font-weight:700; color:var(--ink-soft);
  margin:.6rem 0 .25rem; }
.hulppaneel-inhoud select, .hulppaneel-inhoud textarea { width:100%; font-family:inherit;
  font-size:.9rem; padding:.5rem .6rem; border:1px solid var(--line); border-radius:10px;
  background:var(--cream); color:var(--ink); box-sizing:border-box; }
.hulppaneel-inhoud textarea { resize:vertical; }
.hulppaneel-let-op { font-size:.72rem; color:var(--ink-soft); margin:.4rem 0 0; }
.hulppaneel-inhoud .btn { margin-top:.8rem; padding:.55rem 1.1rem; font-size:.88rem; }
.hulppaneel-link { font-size:.8rem; margin:.8rem 0 0; }

@media (max-width:480px){
  .hulppaneel { right:.7rem; bottom:.7rem; }
}

/* Botblok "Vraag over dit scherm" (blok 18, fase B: supportbot). Zit boven het bestaande
   feedbackformulier in dezelfde .hulppaneel-inhoud, dus geen eigen kleurpalet -- alleen de
   bestaande huisstijlvariabelen. */
.hulppaneel-bot .hulppaneel-kop { display:flex; align-items:center; gap:.4rem; }
.badge-beta { display:inline-block; background:var(--oranje-bg); color:#8a5a09;
  font-size:.62rem; font-weight:800; letter-spacing:.03em; text-transform:uppercase;
  padding:.1rem .4rem; border-radius:999px; }
.hulppaneel-scheiding { border:none; border-top:1px solid var(--line); margin:1rem 0; }
.hulppaneel-bot-gesprek { max-height:220px; overflow-y:auto; display:flex; flex-direction:column;
  gap:.5rem; margin:.4rem 0 .6rem; }
.hulppaneel-bot-gesprek:empty { display:none; }
.hpbot-vraag, .hpbot-antwoord { font-size:.85rem; padding:.45rem .6rem; border-radius:10px;
  max-width:92%; word-wrap:break-word; }
.hpbot-vraag { align-self:flex-end; background:var(--blue); color:#fff; }
.hpbot-antwoord { align-self:flex-start; background:var(--cream); border:1px solid var(--line);
  color:var(--ink); }
.hpbot-status { align-self:flex-start; font-size:.78rem; color:var(--ink-soft); font-style:italic; }
.hpbot-melding { align-self:flex-start; font-size:.78rem; color:#8a5a09; background:var(--oranje-bg);
  padding:.4rem .6rem; border-radius:10px; }
.hpbot-bevestiging { align-self:flex-start; font-size:.78rem; color:#1c6b45; background:var(--groen-bg);
  padding:.4rem .6rem; border-radius:10px; }
.hpbot-beoordeel { display:flex; gap:.4rem; flex-wrap:wrap; align-self:flex-start; }
.hpbot-beoordeel .btn-ghost { font-size:.75rem; padding:.3rem .6rem; }

/* --- UI-overhaul fase 0: tokens en basisklassen --- */
/* Datavlak uitgezet (besluit Wouter 30-08): de tegels staan in alle vier de dashboardstijlen
   direct op de crème pagina, zoals bij Klassiek -- het bijna-witte vlak achter de
   rustig/kaarten/werklijst-lagen viel uit de toon. De .vlak-wrapper blijft bestaan voor de
   marges/padding van die stijlen (.rustig-vlak e.a.), alleen de achtergrond is weg. */
.vlak { background:transparent; }

.tnum { font-variant-numeric:tabular-nums; }
.num-r { text-align:right; font-variant-numeric:tabular-nums; }

.statuschip { display:inline-flex; align-items:center; gap:.35em; border-radius:999px;
  padding:.15rem .6rem; font-size:.72rem; font-weight:800; }
.statuschip-groen { color:var(--groen); background:var(--groen-bg); }
.statuschip-oranje { color:var(--oranje); background:var(--oranje-bg); }
.statuschip-rood { color:var(--rood); background:var(--rood-bg); }
.statuschip-grijs { color:var(--grijs); background:var(--grijs-bg); }
.statuschip-blauw { color:var(--blue-d); background:var(--blue-050); }

.dtab { width:100%; border-collapse:collapse; }
.dtab th { font-size:.72rem; text-transform:uppercase; letter-spacing:.03em;
  color:var(--ink-soft); font-weight:800; text-align:left;
  border-bottom:1px solid var(--line); padding:.55rem .6rem .55rem 0; }
.dtab td { padding:.55rem .6rem .55rem 0; border-bottom:1px solid var(--line-2); }
.dtab tr:last-child td { border-bottom:none; }

.bullet { position:relative; height:12px; background:var(--blue-050); border-radius:4px; }
.bullet-vul { position:absolute; left:0; top:0; bottom:0; border-radius:4px 3px 3px 4px;
  background:var(--blue); }
.bullet-doel { position:absolute; top:-3px; bottom:-3px; width:2px; background:var(--ink); }

/* --- UI-overhaul fase 2: dashboardstijl "rustig" (B2.3) ---
   Additief: alleen nieuwe klassen, uitsluitend gebruikt door templates/dashboard_rustig.html.
   Geen bestaande klasse hernoemd of van gedrag veranderd. */

/* Datavlak achter de glance-laag. De negatieve zijmarges heffen exact de zijpadding van
   .container op (1.75rem 1.5rem 3rem), zodat het vlak van rand tot rand doorloopt zonder dat
   base.html hoeft te wijzigen. Boven bewust GEEN negatieve marge: de kop staat op crème (merk-
   laag) en het vlak zou anders over de demo-melding heen geschilderd worden. */
.rustig-vlak { margin:0 -1.5rem; padding:1.25rem 1.5rem 2rem;
  border-top:1px solid var(--line-2); }

.kpi-strip { display:grid; grid-template-columns:repeat(4, minmax(0, 1fr)); gap:.9rem; }
.kpi-strip > .blok-link { min-width:0; }
.kpi-strip .kpi-tegel { height:100%; }
.kpi-tegel-delta { margin-top:.1rem; font-size:.8rem; }
.kpi-tegel-sparkline { margin-top:.5rem; }

.rustig-weergave-noot { font-size:.8rem; margin:.6rem 0 0; }
.rustig-doel-hint { font-size:.8rem; margin:.6rem 0 0; }

/* align-items blijft op de standaard `stretch`: beide panelen even hoog, zodat de drill-links
   en de vertrouwensregel (allebei `margin-top:auto`) op dezelfde onderrand uitkomen. */
.rustig-hoofd { display:grid; grid-template-columns:minmax(0, 1fr) 340px; gap:.9rem;
  margin-top:1rem; }
.rustig-paneel { display:flex; flex-direction:column; }
.rustig-paneel-kop { display:flex; align-items:baseline; justify-content:space-between;
  gap:.8rem; }
/* Maatvoering opgeschaald richting Klassiek (besluit Wouter 30-08: groter oogt leesbaarder;
   geldt voor de rustig-, kaarten- en werklijststijl hieronder). */
.rustig-paneel .section-title { margin:0 0 .6rem; font-size:1.25rem; }

/* Scrolwikkel om een brede tabel, zelfde patroon als .cap-matrix hierboven: de TABEL schuift,
   niet de pagina. Gebruikt door de rustige stijl (locatietabel) en de werklijst-stijl
   (locaties/groepen + de maandtabel in de rail). Additief: geen bestaande klasse geraakt. */
.tabel-scroll { overflow-x:auto; }

.rustig-tabel td { vertical-align:middle; }
.rustig-tabel tbody tr:hover { background:var(--blue-050); }
.rustig-tabel .rij-uit { opacity:.6; }
.rustig-loc a { font-weight:800; font-size:1rem; text-decoration:none; }
.rustig-loc a:hover { text-decoration:underline; }
.rustig-loc { min-width:8rem; }
.rustig-bullet { min-width:7rem; width:40%; }
/* Statuskolom: de chip is even breed als zijn woord en mag nooit halverwege afbreken. */
.rustig-status { white-space:nowrap; }
.rustig-pct { display:block; font-size:.85rem; font-weight:700; color:var(--ink-soft);
  margin-top:.25rem; }
.mini-spark { display:inline-block; vertical-align:middle; }

.rustig-drill { margin-top:auto; padding-top:.9rem; border-top:1px solid var(--line-2);
  display:flex; flex-wrap:wrap; gap:.4rem 1.1rem; font-size:.85rem; font-weight:700; }

.signaal-kaart { border:1px solid var(--line); border-radius:var(--radius-s);
  padding:.65rem .8rem; margin-bottom:.6rem; }
.signaal-kaart-tekst { margin:.35rem 0 0; font-size:.9rem; line-height:1.45; }
.signaal-kaart-rood { border-color:#f7d9d5; background:var(--rood-bg); }
.signaal-kaart-oranje { border-color:#f2e2bd; background:var(--oranje-bg); }
.signaal-kaart-groen { border-color:#cfeadc; background:var(--groen-bg); }

.rustig-vertrouwen { margin:auto 0 0; padding-top:.8rem; border-top:1px solid var(--line-2);
  font-size:.82rem; color:var(--ink-soft); line-height:1.5; }

@media (max-width:960px) {
  .kpi-strip { grid-template-columns:repeat(2, minmax(0, 1fr)); }
  .rustig-hoofd { grid-template-columns:1fr; }
}
@media (max-width:560px) {
  .kpi-strip { grid-template-columns:1fr; }
}

/* (De dashboardstijl "kaarten" is 31-08 verwijderd; haar CSS-blok stond hier.) */

/* --- UI-overhaul fase 2: dashboardstijl "werklijst" (B2.5) ---
   Additief: alleen nieuwe klassen, uitsluitend gebruikt door templates/dashboard_werklijst.html.
   Geen bestaande klasse hernoemd of van gedrag veranderd. Dit is de DICHTSTE van de vier
   stijlen: kleinere regelafstand en compactere tabelpadding, maar exact dezelfde tokens,
   radii en statuskleuren als de andere drie. */

/* Zelfde datavlak-truc als .rustig-vlak: de negatieve zijmarges heffen exact de
   zijpadding van .container op, zodat het vlak van rand tot rand doorloopt. Boven bewust geen
   negatieve marge (de kop hoort op de crème merklaag te blijven staan). */
.werk-vlak { margin:0 -1.5rem; padding:1rem 1.5rem 1.75rem;
  border-top:1px solid var(--line-2); }

/* Compactere kop dan de andere stijlen: geen welkomstzin, periode en toelichting op één regel. */
.werk-kop { margin-bottom:.5rem; }
.werk-kop h1 { margin-bottom:.2rem; }
.werk-kop-sub { font-size:.8rem; display:flex; align-items:center; flex-wrap:wrap; gap:.5rem; }
.werk-weergave-noot { font-size:.8rem; margin:0 0 .6rem; }

/* Het werkblad uit het artboard: KPI-kolom, werktabel, rail. align-items:start houdt de rail
   op zijn eigen hoogte i.p.v. hem tot de tabelhoogte uit te rekken. */
.werk-blad { display:grid; grid-template-columns:250px minmax(0, 1fr) 290px; gap:.85rem;
  align-items:start; }

.werk-kpi { display:flex; flex-direction:column; gap:.55rem; }
.werk-kpi > .blok-link { min-width:0; }
/* Compacte variant van .kpi-tegel: de macro zet zijn eigen typografie inline, dus alleen de
   omlijsting wordt hier dichter gezet. */
.werk-kpi .kpi-tegel { padding:.6rem .8rem; }

.werk-paneel { padding:.85rem 1rem; }
.werk-paneel-kop { display:flex; align-items:baseline; justify-content:space-between;
  gap:.8rem; }
.werk-paneel .section-title { margin:0 0 .5rem; font-size:1.15rem; }

.werk-tabel { font-size:.9rem; }
.werk-tabel th, .werk-tabel td { padding:.35rem .5rem .35rem 0; }
.werk-tabel thead th { font-size:.72rem; }
.werk-doelkop { font-weight:700; text-transform:none; letter-spacing:0; }
/* Tussenkopregel per locatie: draagt de locatiecijfers die groepen niet hebben (wachtlijst,
   status) en scheidt de groepen visueel. */
.werk-loc-kop > th, .werk-loc-kop > td { padding-top:.6rem; font-size:.9rem; font-weight:800;
  border-bottom:1px solid var(--line); text-align:right; }
/* `.dtab th` zet KAPITALEN aan voor kolomkoppen. Deze <th> is geen kolomkop maar een
   LOCATIENAAM (scope="rowgroup"); een eigennaam in kapitalen leest als geschreeuw en verandert
   bovendien hoe de naam eruitziet die de klant zelf heeft ingevoerd. Zelfde reset als
   .werk-doelkop hierboven. */
.werk-loc-kop > th { text-align:left; text-transform:none; letter-spacing:0; }
.werk-loc-kop a { text-decoration:none; }
.werk-loc-kop a:hover { text-decoration:underline; }
.werk-loc-uit { opacity:.6; }
.werk-verborgen { font-weight:600; font-size:.75rem; }
.werk-groep > td { border-bottom:1px solid var(--line-2); }
.werk-groep:hover { background:var(--blue-050); }
.werk-groep-naam { padding-left:.8rem !important; }
.werk-groep-naam a { text-decoration:none; font-weight:700; }
.werk-groep-naam a:hover { text-decoration:underline; }
.werk-soort { font-size:.75rem; margin-left:.35rem; }
/* Bezettingspercentage: vet, maar alleen bij rood ook gekleurd -- het woord in de statuskolom
   blijft de drager (kleur nooit als enige signaal). */
.werk-pct { font-weight:800; }
.werk-pct-rood { color:var(--rood); }
.werk-legenda { margin-top:.6rem; }

.werk-rail { display:flex; flex-direction:column; gap:.55rem; }
.werk-rail-blok { padding:.75rem .9rem; }
.werk-rail .section-title { margin:0 0 .5rem; font-size:1.1rem; }
.werk-signalen { list-style:none; margin:0; padding:0; display:flex; flex-direction:column;
  gap:.5rem; }
.werk-signaal { display:flex; gap:.45rem; align-items:flex-start; font-size:.85rem;
  line-height:1.4; }
.werk-signaal .statuschip { flex-shrink:0; }
.werk-maanden { font-size:.82rem; }
.werk-maanden th, .werk-maanden td { padding:.28rem .3rem .28rem 0; }
/* Rijkoppen ("Bezetting", "Starts", "Opzeggingen") zijn gewone woorden in een leesrichting,
   geen kolomkoppen: zelfde kapitalen-reset als .werk-loc-kop > th hierboven. */
.werk-maanden tbody th { text-align:left; font-weight:700; text-transform:none;
  letter-spacing:0; }
/* Zelfde onderscheid als .cap-matrix .prognose in de klassieke stijl: een prognosemaand mag
   nooit voor een gerealiseerd cijfer worden aangezien. */
.werk-maanden .prognose { color:var(--ink-soft); font-style:italic; }

/* Responsief stapelen: eerst valt de rail onder het werkblad, daarna ook de KPI-kolom. */
@media (max-width:1180px) {
  .werk-blad { grid-template-columns:220px minmax(0, 1fr); }
  .werk-rail { grid-column:1 / -1; flex-direction:row; flex-wrap:wrap; }
  .werk-rail-blok { flex:1 1 260px; }
}
@media (max-width:760px) {
  .werk-blad { grid-template-columns:1fr; }
  .werk-kpi { flex-direction:row; flex-wrap:wrap; }
  .werk-kpi > .blok-link { flex:1 1 150px; }
}

/* --- UI-overhaul fase 3: detailpagina "verhaal boven, actie in de zijrail" (B3.1) ---
   Additief: alleen nieuwe klassen, uitsluitend gebruikt door templates/detail.html (en de
   .dtab-variant van _cijfers.html::cijfertabel). Geen bestaande klasse hernoemd of van
   gedrag veranderd. */

/* Kruimelpad boven de titel. */
.kruimels { font-size:.75rem; font-weight:700; color:var(--ink-soft); margin:0; }
.kruimels a { color:var(--ink-soft); text-decoration:none; }
.kruimels a:hover { color:var(--blue-d); text-decoration:underline; }

/* Kop: titel links, het (ongewijzigde) periodefilter compact rechtsboven. */
.detail-kop-rij { display:flex; flex-wrap:wrap; align-items:flex-end; gap:.8rem 1rem; }
.detail-kop-tekst { min-width:0; }
.detail-kop-tekst h1 { margin:.1rem 0 0; }
.detail-kop .detail-filter { margin-left:auto; margin-bottom:0; padding:.6rem .8rem;
  font-size:.85rem; gap:.5rem; }
.detail-kop .detail-filter label { font-size:.78rem; }
/* padding-right 2.1rem behouden: de generieke select-regel reserveert die ruimte voor het
   chevron-pijltje; .5rem rondom drukte het pijltje bij smalle selects uit beeld
   (ronde 1-bevinding). */
.detail-kop .detail-filter select { font-size:.85rem; padding:.35rem 2.1rem .35rem .5rem; }
.detail-kop .detail-filter .btn { padding:.35rem .9rem; font-size:.85rem; }

/* Hoofdvlak: verhaal links, actie in de rail. */
.detail-blad { display:grid; grid-template-columns:minmax(0, 1fr) 330px; gap:1rem;
  align-items:start; }
.detail-kolom, .detail-rail { display:flex; flex-direction:column; gap:1rem; min-width:0; }
/* `.card + .card` zet elders 1rem bovenmarge; binnen deze flexkolommen doet `gap` dat al. */
.detail-kolom > .card + .card, .detail-rail > .card + .card { margin-top:0; }
.detail-rail .card { font-size:.9rem; }
.detail-rail h2 { font-size:1rem; }
/* In een rail van 330px past een rij radioknoppen naast elkaar niet: onder elkaar. Zelfde
   markup, alleen de richting draait. */
.detail-rail .radio-row { flex-direction:column; gap:.35rem; margin:.3rem 0; }
.detail-rail .radio-row label { align-items:flex-start; font-size:.82rem; line-height:1.35; }
.detail-rail .radio-row input { margin-top:.15rem; }
/* Wat-als-groepen: één chip per regel leest in een smalle rail beter dan een wolk. */
.detail-rail .chips { flex-direction:column; align-items:stretch; }
.detail-rail .chip { font-size:.78rem; }

/* Kerncijfer boven de grafiek: waarde groot, verandering en doel ernaast. */
.detail-kern { display:flex; align-items:baseline; flex-wrap:wrap; gap:.25rem .7rem;
  margin:.2rem 0 .7rem; }
.detail-kern-getal { font-family:'Fredoka', sans-serif; font-size:1.8rem; font-weight:700;
  color:var(--blue-d); line-height:1.1; font-variant-numeric:tabular-nums; }
.detail-kern-sub { font-size:.82rem; color:var(--ink-soft); }
.detail-uitleg { font-size:.88rem; line-height:1.55; margin:0 0 .5rem; }
.detail-uitleg:last-child { margin-bottom:0; }

@media (max-width:960px) {
  .detail-blad { grid-template-columns:1fr; }
  .detail-kop .detail-filter { margin-left:0; }
}

/* --- UI-overhaul fase 3: locatiepagina volgens het L1-stramien (B3.2a) ---
   Additief: alleen nieuwe klassen, uitsluitend gebruikt door templates/locatie.html. Geen
   bestaande klasse hernoemd of van gedrag veranderd. `.kruimels`, `.dtab`, `.num-r`,
   `.bullet`, `.statuschip`, `.kpi-tegel*` en `.tabel-scroll` komen uit fase 0/2/B3.1 en
   worden hier hergebruikt. */

/* Alleen voor schermlezers: het label bij het wat-als-vinkje in de groepstabel. De kolomkop
   en de chip in de wat-als-regel dragen de betekenis al visueel. */
.visueel-verborgen { position:absolute; width:1px; height:1px; padding:0; margin:-1px;
  overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; border:0; }

/* Kop: titel + statuschip links, de (ongewijzigde) periode-informatie rechtsboven. */
.loc-kop-rij { display:flex; flex-wrap:wrap; align-items:flex-end; gap:.4rem 1rem; }
.loc-kop-tekst { min-width:0; }
.loc-kop-tekst h1 { margin:.1rem 0 0; display:flex; align-items:center; flex-wrap:wrap;
  gap:.55rem; }
.loc-kop-periode { margin-left:auto; margin-bottom:.15rem; font-size:.85rem; }

/* KPI-regel: bezetting krijgt meer breedte (dat is het cijfer waar de pagina over gaat). */
.loc-kpi { display:grid; grid-template-columns:1.4fr repeat(4, minmax(0, 1fr)); gap:.75rem;
  margin-bottom:1rem; }
.loc-kpi > .blok-link { min-width:0; }
.loc-kpi .kpi-tegel { height:100%; padding:.75rem .95rem; }
.loc-kpi .kpi-tegel-waarde { font-family:"Fredoka", sans-serif; font-size:1.7rem;
  font-weight:700; color:var(--blue-d); line-height:1.1; }
.loc-kpi .kpi-tegel-label { font-size:.75rem; color:var(--ink-soft); font-weight:700;
  line-height:1.25; }
.loc-kpi .kpi-tegel-sub { font-size:.72rem; color:var(--ink-soft); line-height:1.3;
  margin-top:.15rem; }
.loc-kpi .hero-bezetting { display:flex; flex-direction:column; gap:.1rem; }
.loc-kpi-graad { display:flex; align-items:center; gap:.55rem; }
.loc-kpi-graad .pct { font-family:"Fredoka", sans-serif; font-size:1.9rem; font-weight:700;
  line-height:1; color:var(--blue-d); }
.loc-kpi-graad .dot-lg { width:16px; height:16px; }
/* De bestaande `.bar` (met #g-bar erin) wordt hier een bulletbalk: het doelstreepje mag niet
   worden weggeknipt, dus de overflow-clip van `.bar` gaat uit en de vulling clipt zichzelf. */
.loc-kpi-bar { position:relative; overflow:visible; margin-top:.5rem; }
.loc-kpi-bar > span { max-width:100%; }
/* Het doelstreepje in DEZE balk is een `span`, en `.bar > span` (klasse + element = 0,1,1)
   is specifieker dan `.bullet-doel` (0,1,0): zonder deze regel wint de peach vulbalk met
   `height:100%` en zie je geen streepje maar een tweede vulling. Twee klassen (0,2,0) winnen
   wel. `height:auto` is nodig omdat een absolute box met een expliciete height zijn `bottom`
   negeert -- anders blijft de -3px onderkant liggen op de hoogte van de balk. */
.loc-kpi-bar > .bullet-doel { display:block; width:2px; height:auto; top:-3px; bottom:-3px;
  background:var(--ink); border-radius:0; }
.loc-kpi .hero-sub { font-size:.72rem; margin-top:.35rem; }

/* Hoofdvlak: groepen + trend links, smalle rail rechts (artboard LocatieL1). */
.loc-blad { display:grid; grid-template-columns:minmax(0, 1fr) 400px; gap:1rem;
  align-items:start; margin-bottom:1.25rem; }
.loc-kolom, .loc-rail { display:flex; flex-direction:column; gap:1rem; min-width:0; }
/* `.card + .card` en `.duo`/`.section-title` brengen elders eigen marges mee; binnen deze
   flexkolommen doet `gap` dat al. */
.loc-kolom > .card + .card, .loc-rail > .card + .card { margin-top:0; }
.loc-kolom > .duo { margin-bottom:0; }
.loc-kolom > .section-title, .loc-rail .section-title { margin:0; }
.loc-rail .card { font-size:.9rem; }
.loc-rail .section-title { font-size:1rem; margin-bottom:.5rem; }
.loc-rail-blok { padding:.9rem 1.1rem; }
.loc-rail-uitleg { font-size:.78rem; margin:0 0 .6rem; }
.loc-rail-drill { margin:.5rem 0 0; font-size:.78rem; font-weight:700; }

/* Groepentabel. */
.loc-groepen-kop { display:flex; align-items:baseline; gap:.6rem; flex-wrap:wrap; }
.loc-groepen-kop .section-title { margin:0 0 .5rem; }
.loc-groepen-hint { font-size:.78rem; }
.groep-tabel { font-size:.88rem; }
.groep-tabel td { vertical-align:middle; }
.groep-tabel tbody tr:hover { background:var(--blue-050); }
.groep-tabel .rij-uit { opacity:.65; }
.groep-naam { min-width:11rem; }
.groep-naam a { font-weight:800; text-decoration:none; }
.groep-naam a:hover { text-decoration:underline; }
.groep-vinkje { display:inline-flex; align-items:center; margin-right:.4rem;
  vertical-align:middle; cursor:pointer; }
.groep-soort { display:block; font-size:.75rem; color:var(--ink-soft); font-weight:600;
  margin-top:.15rem; }
.groep-bullet-kop { min-width:9rem; }
.groep-bullet { min-width:9rem; width:32%; }
.groep-pct { display:block; font-size:.75rem; font-weight:700; color:var(--ink-soft);
  margin-top:.25rem; font-variant-numeric:tabular-nums; }
/* De chip is even breed als zijn woord en mag nooit halverwege afbreken. */
.groep-status { white-space:nowrap; }

/* Wat-als-regel onder de tabel: dezelfde flow, alleen visueel afgescheiden. */
.loc-watals { margin-top:.9rem; padding-top:.8rem; border-top:1px solid var(--line-2); }

/* Signalen in de rail: compacter dan de brede balken op het hoofddashboard. */
.signalen-rail .signaal { font-size:.82rem; padding:.5rem .7rem; align-items:flex-start;
  margin-bottom:.4rem; }
.signalen-rail .signaal:last-child { margin-bottom:0; }
.signalen-rail .dot { width:10px; height:10px; margin-top:.25rem; }

/* "Komende maanden" in de rail: werklijst-patroon (rijkoppen i.p.v. een locatiekolom), maar
   met dezelfde gekleurde cellen als .cap-matrix op het hoofddashboard. */
.loc-maanden { width:100%; border-collapse:collapse; font-size:.8rem; }
.loc-maanden th, .loc-maanden td { padding:.3rem .35rem; text-align:right;
  font-variant-numeric:tabular-nums; }
.loc-maanden thead th { font-size:.7rem; text-transform:uppercase; letter-spacing:.03em;
  color:var(--ink-soft); font-weight:800; }
.loc-maanden tbody th { text-align:left; font-weight:700; white-space:nowrap;
  padding-right:.6rem; }
.loc-maanden td.cel { border-radius:6px; font-weight:700; }
.loc-maanden td.cel.sl-groen { background:var(--groen-bg); color:#1c6b45; }
.loc-maanden td.cel.sl-oranje { background:var(--oranje-bg); color:#8a5a09; }
.loc-maanden td.cel.sl-rood { background:var(--rood-bg); color:#8f2c23; }
.loc-maanden td.cel.sl-onbekend { background:var(--grijs-bg); color:#5c635e; }
.loc-maanden .prognose { font-style:italic; opacity:.85; }
.loc-maanden tr.vooruit-rij th, .loc-maanden tr.vooruit-rij td { border-top:1px solid var(--line); }
.loc-maanden tr.vooruit-rij td.cel { background:var(--blue-050); color:var(--blue-d); }

/* Samenstelling in de rail: twee blokken onder elkaar in plaats van naast elkaar. */
.loc-samenstelling-tweede { margin-top:.9rem; padding-top:.8rem;
  border-top:1px solid var(--line-2); }

@media (max-width:1100px) {
  .loc-kpi { grid-template-columns:repeat(3, minmax(0, 1fr)); }
  .loc-blad { grid-template-columns:1fr; }
}
@media (max-width:640px) {
  .loc-kpi { grid-template-columns:repeat(2, minmax(0, 1fr)); }
  .loc-kop-periode { margin-left:0; }
}

/* --- UI-overhaul fase 3: groepspagina volgens het G2-stramien (B3.3) ---
   Additief: alleen nieuwe klassen, uitsluitend gebruikt door templates/groep.html. Geen
   bestaande klasse hernoemd of van gedrag veranderd. `.kruimels`, `.label`, `.pct`,
   `.tiles`/`.tile`, `.bullet*`, `.statuschip`, `.stroom*` en `.duo` komen uit fase 0/1/3
   en worden hier hergebruikt. */

/* Hero: één kaart, verhaal links + cijfers rechts (artboard GroepG2), i.p.v. de twee losse
   kaarten die het hoofddashboard/locatiepagina gebruiken -- hier hoort de naam zelf ook in
   de kaart (voorheen stond die los in de kop). */
.groep-hero { display:flex; flex-wrap:wrap; gap:1.6rem; align-items:center; }
.groep-hero-tekst { flex:1 1 320px; min-width:0; }
.groep-hero-tekst h1 { margin:0 0 .1rem; }
.groep-hero-sub { margin:0 0 .5rem; }
.groep-hero-tekst .label { display:block; margin-bottom:.15rem; }
.groep-hero-graad { display:flex; align-items:baseline; gap:.6rem; flex-wrap:wrap; }
.groep-hero-graad .pct { font-family:"Fredoka", sans-serif; font-size:2.6rem; font-weight:700;
  line-height:1; color:var(--blue-d); }
.groep-hero-verhaal { font-size:.9rem; margin:.5rem 0 0; max-width:34rem; line-height:1.5; }
.groep-hero-cijfers { flex:1 1 320px; min-width:280px; display:flex; flex-direction:column;
  gap:.75rem; }
.groep-hero-cijfers .tiles { grid-template-columns:repeat(3, minmax(0, 1fr)); }

/* "Waar zit de ruimte?" / leeftijdsopbouw naast elkaar; de rechterkolom stapelt twee kaarten
   zonder de dubbele `.card + .card`-marge (dezelfde `gap`-aanpak als `.loc-kolom`/`.loc-rail`
   hierboven). */
.groep-duo { align-items:start; }
.groep-rail { display:flex; flex-direction:column; gap:1rem; min-width:0; }
.ruimte-lijst { display:flex; flex-direction:column; gap:.5rem; }
.ruimte-row { display:grid; grid-template-columns:2rem minmax(0, 1fr) 4.5rem; gap:.6rem;
  align-items:center; font-size:.85rem; }
.ruimte-row .lab { color:var(--ink-soft); font-weight:700; }
.ruimte-row .track { height:11px; background:var(--blue-050); border-radius:4px; overflow:hidden; }
.ruimte-row .track i { display:block; height:100%; background:var(--blue); border-radius:4px; }
/* Doel-streepje in de ruimte-balk (streefbezetting): zelfde rol en stijl als .bullet-doel /
   .week-doel, maar verticaal op `left` -- deze balken groeien van links naar rechts. Staat
   binnen het (clippende) spoor, net als .week-doel, dus zonder overhang boven/onder.
   `position:relative` staat hier apart zodat de regel hierboven onaangeroerd blijft. */
.ruimte-row .track { position:relative; }
.ruimte-row .ruimte-doel { position:absolute; top:0; bottom:0; width:2px; margin-left:-1px;
  background:var(--ink); opacity:.55; pointer-events:none; z-index:1; }
/* Ruimer dan de oude 4.5rem: de kolom draagt nu "62,5% · 6 vrij" in plaats van alleen "6 vrij". */
.ruimte-row { grid-template-columns:2rem minmax(0, 1fr) 7.5rem; }
.ruimte-row .n { text-align:right; font-variant-numeric:tabular-nums; color:var(--ink-soft); }
.ruimte-row .n.n-top { font-weight:800; color:var(--ink); }
.ruimte-row.dicht .track { opacity:.35; }

@media (max-width:960px) {
  .groep-duo { grid-template-columns:1fr; }
}
@media (max-width:640px) {
  .groep-hero-graad .pct { font-size:2.1rem; }
}

/* --- UI-overhaul fase 4: benchmarkpagina (B4.3, artboards BenchmarkBM1 + BM2) ---
   Additief: alleen nieuwe `.bm-*`-klassen, uitsluitend gebruikt door
   templates/overzicht_benchmark.html. Geen bestaande klasse hernoemd of van gedrag veranderd.
   `.card`, `.section-title`, `.kruimels`, `.bullet`/`.bullet-vul`/`.bullet-doel`, `.delta`,
   `.num-r`, `.statuschip` en `.legenda` komen uit fase 0/1/3 en worden hier hergebruikt. */

.bm-kop { display:flex; align-items:baseline; gap:1rem; flex-wrap:wrap; margin-bottom:.4rem; }
.bm-kop .section-title { margin:0; }
.bm-legenda { margin-left:auto; display:flex; gap:1.1rem; font-size:.72rem; font-weight:700;
  color:var(--ink-soft); flex-wrap:wrap; }
.bm-leg { display:inline-flex; align-items:center; gap:.4rem; }
.bm-leg i { display:inline-block; }
.bm-leg-balk { width:18px; height:8px; border-radius:3px; background:var(--blue); }
.bm-leg-gem { width:2px; height:14px; background:var(--peach); }
.bm-leg-doel { width:2px; height:14px; background:var(--ink); }

.bm-verhaal { font-size:1rem; line-height:1.55; margin:.2rem 0 1.1rem; max-width:56rem; }
.bm-verhaal strong { color:var(--blue-d); }
.bm-op { color:var(--groen); }
.bm-neer { color:var(--rood); }

.bm-lijst { display:flex; flex-direction:column; gap:1rem; }
.bm-rij { display:grid; grid-template-columns:11rem minmax(0, 1fr) 7rem auto; gap:1rem;
  align-items:center; }
.bm-naam { font-size:.88rem; font-weight:800; min-width:0; }
.bm-cijfers { font-size:.82rem; white-space:nowrap; }
.bm-chip { white-space:nowrap; }
/* Het organisatiegemiddelde in de bulletbalk: zelfde vorm/rol als `.bullet-doel` (dat blijft
   het DOEL-streepje), maar in peach zodat de twee merkers uit elkaar te houden zijn -- de
   legenda bovenaan het blok benoemt beide. `margin-left:-1px` zet het streepje op de waarde
   in plaats van er net rechts van. */
.bm-gem { position:absolute; top:-3px; bottom:-3px; width:2px; margin-left:-1px;
  background:var(--peach); pointer-events:none; }
.bm-voet { margin-top:1rem; padding-top:.7rem; border-top:1px solid var(--line-2);
  line-height:1.5; }

/* Verdelingsstrook (extern blok). De breedte staat HIER en niet als `width="100%"` op het
   svg-element: de privacytest telt de percentages in dit blok en een attribuut "100%" zou daar
   als vijfde/zesde getal in meelopen. */
.bm-strook { display:block; width:100%; height:auto; margin:.2rem 0 .6rem; }
.bm-strook-label { font-size:11px; font-weight:700; fill:var(--ink-soft); }
.bm-strook-band { font-size:10.5px; font-weight:800; fill:#8a97c2; }
.bm-strook-u { font-size:13px; font-weight:800; fill:var(--blue-d); }
.bm-toggle { font-size:.85rem; color:var(--ink); margin:.2rem 0 0; font-weight:700; }

@media (max-width:760px) {
  .bm-rij { grid-template-columns:minmax(0, 1fr) auto; row-gap:.35rem; }
  .bm-rij .bullet { grid-column:1 / -1; order:3; }
  .bm-cijfers { order:2; text-align:right; }
  .bm-chip { order:4; grid-column:1 / -1; }
  .bm-legenda { margin-left:0; }
}

/* --- UI-overhaul fase 4: planning/plaatsingskansen (B4.4, artboard PlanningP1) ---
   Additief: alleen nieuwe `.pl-kaart*`, `.pl-kansen-*`, `.pl-cel*`, `.pl-heat*`,
   `.pl-leg*` en `.pl-duo`/`.pl-kolom`. De bestaande `.pl-kansen`, `.pl-warn`,
   `.pl-voetnoot`, `.pl-kans-cel`, `.pl-compact*` en `.pl-lijst` blijven staan: de
   beheerderpagina gebruikt ze nog ongewijzigd (B6.4 zet die om). `.card`,
   `.chip`, `.legenda`, `.tabel-scroll`, `.tnum` en `.muted` komen uit fase 0/1/3. */

/* Twee kolommen: kansen + aandachtspunten links, heatmap rechts (klantweergave). */
/* min-width:0 op de kinderen (r11): een grid-item rekt standaard op naar zijn inhoud
   (min-width:auto), waardoor de heatmap-kaart op mobiel breder werd dan het scherm en de
   HELE pagina horizontaal scrolde i.p.v. alleen de .tabel-scroll binnen de kaart. */
.pl-duo > * { min-width:0; }
.pl-duo { display:grid; grid-template-columns:minmax(0, 22rem) minmax(0, 1fr); gap:1rem;
  align-items:start; }
.pl-kolom { margin:0; }

.pl-kansen-kop { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap;
  margin-bottom:.6rem; }
.pl-kansen-titel { font-size:1rem; margin:0; }
.pl-aandacht-titel { margin:1.2rem 0 .6rem; }
.pl-chip-kans { background:var(--groen-bg); color:#1c6b45; border-radius:999px; }

/* Kansen-lijst: van bullets naar kaarten. De ul houdt de bestaande klasse (de
   beheerderpagina rekent er nog op), de opsommingstekens gaan eruit. */
.pl-kansen { list-style:none; margin:0; padding:0; display:flex; flex-direction:column;
  gap:.5rem; }
.pl-aandacht { list-style:none; margin:0; padding:0; display:flex; flex-direction:column;
  gap:.5rem; }
.pl-kaart { border:1px solid var(--line); border-radius:var(--radius-s);
  padding:.6rem .75rem; font-size:.85rem; line-height:1.5; background:var(--paper); }
.pl-kaart-kans { border-color:#d8ecdf; background:#f4faf6; }
.pl-kaart-kop { margin:0; font-weight:800; }
.pl-kaart-regel { margin:.15rem 0 0; }
/* Oranje = verouderde wachtlijst, grijs = uitgesloten groepen/flexibele vraag. Kleur
   staat nooit alleen: de tekst benoemt zelf wat er aan de hand is. */
.pl-kaart-warn { border-color:var(--oranje); background:var(--oranje-bg); color:#8a5a09;
  border-left-width:3px; }
.pl-kaart-neutraal { border-left:3px solid var(--line-2); color:var(--ink-soft); }

/* Heatmap: rijen locaties, kolommen weekdagen, tint op vrije plekken. */
.pl-heat-kop { display:flex; align-items:baseline; gap:1rem; flex-wrap:wrap;
  margin-bottom:.6rem; }
.pl-heat-legenda { margin:0 0 0 auto; display:flex; gap:1.1rem; flex-wrap:wrap; }
.pl-leg { display:inline-flex; align-items:center; gap:.3rem; }
.pl-leg-vak { display:inline-block; width:16px; height:11px; border-radius:3px; }
.pl-leg-kans { background:var(--groen-bg); box-shadow:inset 0 0 0 2px var(--groen); }

.pl-heat-tabel { border-collapse:separate; border-spacing:5px; width:100%;
  font-size:.85rem; }
.pl-heat-tabel th { font-size:.7rem; font-weight:800; color:var(--ink-soft);
  text-transform:uppercase; letter-spacing:.04em; padding:0 .2rem; }
.pl-heat-tabel thead th { text-align:center; }
.pl-heat-loc { text-align:left !important; font-size:.82rem !important;
  text-transform:none !important; letter-spacing:0 !important; color:var(--ink) !important;
  white-space:nowrap; }
.pl-cel { text-align:center; border-radius:8px; padding:.5rem .3rem; font-weight:800;
  min-width:3.2rem; }
.pl-cel-n { font-size:.95rem; }
/* Vier vaste tintstappen op vrije plekken: 0 / 1-4 / 5-9 / 10+ (zie _planning_blok.html). */
.pl-cel-t0 { background:var(--paper); border:1px solid var(--line); color:var(--ink-soft); }
.pl-cel-t1 { background:var(--blue-050); color:var(--blue-d); }
.pl-cel-t2 { background:#c9d7ef; color:var(--blue-d); }
.pl-cel-t3 { background:#4a6cb4; color:#fff; }
.pl-cel-geen { background:var(--line-2); color:var(--ink-soft); font-weight:700; }
/* Vraag op deze dag. Groen (kans) alleen als er óók vrije plekken zijn; anders neutraal —
   vraag zonder ruimte is geen kans. */
.pl-cel-vraag { display:inline-block; margin-left:.3rem; font-size:.62rem; font-weight:800;
  border-radius:999px; padding:1px 6px; background:#fff; color:var(--ink-soft); }
.pl-cel-kans { color:#1c6b45; }
/* Ook background+kleur hier (2 klassen): de losse .pl-kans-cel-regel verloor de cascade van
   de latere .pl-cel-t3 (beide 1 klasse), waardoor de kans-cel donkerblauw bleef terwijl de
   legenda groen belooft (ronde 1-bevinding). */
.pl-cel.pl-kans-cel { box-shadow:inset 0 0 0 2px var(--groen); background:var(--groen-bg);
  color:#1c6b45; }
.pl-heat-maand { font-size:.85rem; margin:.9rem 0 .2rem; }
.pl-heat-meer summary, .pl-heat-beheer summary { cursor:pointer; font-size:.85rem;
  font-weight:700; color:var(--blue-d); }
.pl-heat-voet { font-size:.78rem; margin:.6rem 0 0; }

@media (max-width:1100px) {
  .pl-duo { grid-template-columns:1fr; }
  .pl-heat-legenda { margin-left:0; }
}

/* --- UI-overhaul fase 4: debiteurenpagina volgens het DB2-stramien (B4.5) ---------------
   Additief: alleen nieuwe `.payt-*`-klassen plus een SCOPED herkleuring van de bestaande
   bucketkleuren (`.payt-verdeel .seg.b0` e.v.). De oude regels blijven onaangeroerd staan;
   `.card`, `.label`, `.kruimels`, `.periode-pill`, `.num-r`, `.section-title`, `.delta`,
   `.lijn`-SVG-stijlen en `.payt-balk`/`.payt-legenda` komen uit fase 0-3 en de bestaande
   debiteurentab, en worden hier hergebruikt. */

.payt-kop { display:flex; align-items:flex-start; gap:1rem; flex-wrap:wrap;
  margin-bottom:.5rem; }
.payt-kop-tekst { min-width:0; }
.payt-peil { margin-left:auto; display:inline-flex; align-items:center; gap:.45rem; }
/* Versheidsstip: groen bolletje vóór de peildatum. Alleen aanwezig als de route de meting
   als recent beoordeelde (payt_routes._is_vers) -- de stip zelf draagt dus geen logica. */
.payt-vers { width:8px; height:8px; border-radius:50%; background:var(--groen);
  display:inline-block; flex-shrink:0; }
.payt-inleiding { max-width:52rem; margin:0 0 1rem; }
/* Verouderd-waarschuwing: dezelfde oranje statustint als de onderbezettingssignalen. */
.payt-verouderd { background:var(--oranje-bg); color:#8a5a09; border-radius:var(--radius-s);
  padding:.6rem .9rem; font-size:.9rem; margin:0 0 1rem; max-width:52rem; }

/* Kerncijfers: twee brede tegels (openstaand, achterstallig) + twee smalle. */
.payt-kern { display:grid; grid-template-columns:1.3fr 1.3fr 1fr 1fr; gap:1rem;
  margin-bottom:1.25rem; align-items:stretch; }
.payt-tegel { display:flex; flex-direction:column; gap:.15rem; }
.payt-tegel .label { font-weight:700; color:var(--ink-soft); font-size:.8rem; }
.payt-tegel-rij { display:flex; align-items:baseline; gap:.6rem; flex-wrap:wrap; }
.payt-getal { font-family:"Fredoka",sans-serif; font-size:2rem; font-weight:700;
  line-height:1.1; color:var(--blue-d); font-variant-numeric:tabular-nums; }
.payt-getal-klein { font-size:1.6rem; }
.payt-getal-risico { color:var(--rood); }
.payt-tegel-sub { font-size:.78rem; color:var(--ink-soft); line-height:1.45; }
.payt-tegel-hoofd .payt-spark { margin-top:.35rem; }
/* De sparkline komt uit de gedeelde macro `mini_sparkline` (vaste px-maten); hier laten we
   hem meeschalen met de tegel. */
.payt-spark svg { width:100%; height:auto; display:block; }
/* Rode linkerrand op de achterstallig-kaart (artboard DB2). De bestaande `.kpi-risico`-regel
   zet 4px; hier het DB2-accent van 3px, alleen binnen de kerncijfer-rij. */
.payt-kern .kpi-risico.is-risico { border-left:3px solid var(--rood); }

/* Ouderdomsverdeling: één balk met de bedragen in de segmenten. */
.payt-verdeel { margin-bottom:1.25rem; }
.payt-verdeel-kop { display:flex; align-items:baseline; gap:.8rem; flex-wrap:wrap; }
.payt-verdeel-zin { font-size:.85rem; }
.payt-verdeel-uitleg { font-size:.85rem; margin:.3rem 0 .6rem; max-width:52rem; }
/* Oplopende reeks: grijs (nog niet vervallen) -> geel -> oranje -> rood. Alleen binnen
   `.payt-verdeel`, dus de oude kleurregels elders blijven werken. `--sun` bestond nog niet
   als token (er was geen geel); de andere drie zijn de bestaande tokens. */
.payt-verdeel { --sun:#f4c152; }
.payt-verdeel .seg.b0, .payt-verdeel .stip.b0 { background:var(--grijs); }
.payt-verdeel .seg.b1, .payt-verdeel .stip.b1 { background:var(--sun); }
.payt-verdeel .seg.b2, .payt-verdeel .stip.b2 { background:var(--oranje); }
.payt-verdeel .seg.b3, .payt-verdeel .stip.b3 { background:#c47a1f; }
.payt-verdeel .seg.b4, .payt-verdeel .stip.b4 { background:var(--rood); }
.payt-verdeel .payt-balk { height:24px; margin:.2rem 0 .8rem; }
.payt-verdeel .seg { display:flex; align-items:center; justify-content:center;
  overflow:hidden; }
.seg-bedrag { font-size:.7rem; font-weight:800; color:#fff; white-space:nowrap;
  padding:0 .2rem; }
/* Geel is te licht voor witte tekst. */
.payt-verdeel .seg.b1 .seg-bedrag { color:#6b5012; }
.payt-verdeel .payt-legenda { margin-bottom:0; row-gap:.5rem; }
.payt-verdeel .payt-legenda .li strong { margin-left:.15rem; }

/* Onderste rij: verloop (breed) naast incasso (smal), zoals artboard DB2. */
.payt-onder { display:grid; grid-template-columns:1.5fr 1fr; gap:1rem; align-items:start; }
.payt-verloop .payt-verloop-svg { margin-top:.4rem; }
.payt-verloop-nu { margin:.4rem 0 0; font-size:.9rem; color:var(--ink-soft); }
.payt-verloop-nu strong { color:var(--blue-d); font-size:1.05rem; }
/* Zonder verloopreeks staat de incassokaart alleen op de rij en mag hij de volle breedte. */
.payt-incasso-breed { grid-column:1 / -1; }
.payt-incasso-uitleg { font-size:.85rem; margin:.3rem 0 .6rem; }
.payt-dl { margin:0; display:flex; flex-direction:column; }
.payt-dl-rij { display:flex; justify-content:space-between; gap:1rem; align-items:baseline;
  padding:.45rem 0; border-bottom:1px solid var(--line-2); }
.payt-dl-rij:last-child { border-bottom:none; }
.payt-dl dt { color:var(--ink-soft); font-size:.85rem; }
.payt-dl dd { margin:0; font-weight:800; white-space:nowrap; }
.payt-incasso-voet { font-size:.78rem; margin:.7rem 0 0; line-height:1.5; }

@media (max-width:1100px) {
  .payt-kern { grid-template-columns:repeat(2, minmax(0, 1fr)); }
  .payt-onder { grid-template-columns:1fr; }
}
@media (max-width:640px) {
  .payt-kern { grid-template-columns:1fr; }
  .payt-peil { margin-left:0; }
}

/* --- Beheerpagina: tabbladen + uitleg-zijrail (B5.1, artboard BeheerB2) ------------------ */
/* Additief op de bestaande formulierstijlen hierboven. Alles is zo geschreven dat de pagina
   ZONDER static/beheer_tabs.js gewoon één lange formulierpagina blijft: de tabstrook is dan
   een rij ankerlinks, alle secties staan onder elkaar en de uitleg staat bij het blok zelf.
   De js-klassen (.js-tabs, .js-uitleg) worden pas door dat script gezet. */
.beheer-tabs { display:flex; flex-wrap:wrap; gap:2px; border-bottom:2px solid var(--line);
  margin-bottom:1rem; }
.beheer-tab { padding:.55rem 1.1rem; font-size:.9rem; font-weight:700; color:var(--ink-soft);
  text-decoration:none; border-bottom:3px solid transparent; margin-bottom:-2px;
  border-radius:10px 10px 0 0; }
.beheer-tab:hover { color:var(--blue-d); background:var(--blue-050); }
.beheer-tab.actief { color:var(--blue-d); font-weight:800; border-bottom-color:var(--blue); }
.beheer-tab:focus-visible { outline:2px solid var(--blue); outline-offset:-2px; }

/* Eén kolom zolang er geen rail is (geen JS): anders zou de 330px-kolom leeg gereserveerd
   blijven staan. */
.beheer-werkblad { display:grid; grid-template-columns:minmax(0,1fr); gap:1rem;
  align-items:start; }
.beheer-werkblad.js-uitleg { grid-template-columns:minmax(0,1fr) 330px; }
.beheer-form { min-width:0; }

.tabblad-kop { font-size:1.15rem; margin-bottom:.2rem; }
/* Met JS toont elk tabblad zijn eigen kop al in de tabstrook -- dan is de kop in de sectie
   dubbelop. Zonder JS blijft hij staan, want dan is het de enige scheiding tussen de
   secties. */
.js-tabs .tabblad-kop { position:absolute; width:1px; height:1px; overflow:hidden;
  clip-path:inset(50%); white-space:nowrap; }
.sectie-uitleg { font-size:.85rem; margin:.2rem 0 .6rem; }

.instelblok { padding:.9rem 0; border-bottom:1px solid var(--line-2); }
.instelblok:first-of-type { padding-top:.2rem; }
.instelblok:last-of-type { border-bottom:none; padding-bottom:.2rem; }
p.veld { margin:0 0 .35rem; font-weight:700; color:var(--ink-soft); }
.blok-uitleg { font-size:.85rem; margin:0 0 .5rem; }
/* Beschikbaarheidsmelding ("wordt actief na de eerstvolgende verversing"): GEEN uitleg maar
   een status, dus die blijft altijd bij het veld staan -- ook met de rail aan. */
.blok-melding { font-size:.78rem; margin:.35rem 0 0; }
.radio-row.radio-kolom { flex-direction:column; align-items:flex-start; gap:.45rem; }
/* Keuzes als knopkaarten (artboard BeheerB2), alleen op deze pagina: de kolom is smaller dan
   voorheen (de rail staat ernaast), dus de opties moeten kunnen terugvallen op een nieuwe
   regel in plaats van uit de kaart te lopen. Puur CSS -- de radio-row houdt exact dezelfde
   HTML (geen extra <div>, zie de blok-isolatie in tests/test_capaciteitsvraag_samenvoegen.py). */
.beheer-form .radio-row { flex-wrap:wrap; gap:.6rem; }
.beheer-form .radio-row > label { flex:1 1 240px; align-items:flex-start; gap:.55rem;
  border:1px solid var(--line); border-radius:var(--radius-s); padding:.6rem .8rem;
  font-size:.9rem; font-weight:600; cursor:pointer; }
.beheer-form .radio-row > label:hover { border-color:var(--blue); }
.beheer-form .radio-row > label:focus-within { border-color:var(--blue);
  box-shadow:0 0 0 3px var(--blue-050); }
.beheer-form .radio-row > label.uit { cursor:not-allowed; }
.beheer-form .radio-row > label > input { margin-top:.1rem; flex:none; }
.beheer-form .radio-kolom > label { flex:1 1 100%; }
/* Met de rail aan verhuist de uitleg ernaartoe; het blok met focus krijgt een streepje zodat
   zichtbaar is waar de uitleg bij hoort. */
.js-uitleg .blok-uitleg { display:none; }
.js-uitleg .instelblok { padding-left:.8rem; border-left:3px solid transparent;
  transition:border-color .12s ease; }
.js-uitleg .instelblok:focus-within { border-left-color:var(--blue); }

.opslaan-rij { display:flex; flex-wrap:wrap; align-items:center; gap:.9rem; margin-top:1.1rem; }
.opslaan-rij .btn { margin-top:0; }
.opslag-status { font-size:.85rem; font-weight:800; color:var(--groen); }

.beheer-uitleg { background:var(--paper); border:1px solid var(--line);
  border-radius:var(--radius); box-shadow:var(--shadow); padding:1.1rem 1.2rem;
  position:sticky; top:1rem; display:flex; flex-direction:column; gap:.5rem; }
.beheer-uitleg .uitleg-kop { font-size:1rem; }
.beheer-uitleg .uitleg-blokkop { font-family:"Fredoka",system-ui,sans-serif; font-size:.9rem;
  color:var(--blue-d); margin:0 0 .3rem; }
.beheer-uitleg .uitleg-tekst, .beheer-uitleg .uitleg-leeg { font-size:.85rem; margin:0;
  color:var(--ink); line-height:1.6; }
.beheer-uitleg .uitleg-leeg { color:var(--ink-soft); }
.beheer-uitleg .uitleg-voet { margin:.4rem 0 0; padding-top:.6rem; font-size:.78rem;
  color:var(--ink-soft); border-top:1px solid var(--line-2); }

/* Stapelen op smallere schermen: de rail onder het formulier, niet ernaast. */
@media (max-width:1000px) {
  .beheer-werkblad.js-uitleg { grid-template-columns:minmax(0,1fr); }
  .beheer-uitleg { position:static; }
}

/* fase 5: popovers (B5.4) */
.uitleg-info { display:inline-block; position:relative; vertical-align:middle; margin-left:6px; }
.uitleg-info summary { display:inline-flex; align-items:center; justify-content:center;
  width:18px; height:18px; border-radius:999px; border:1px solid var(--line);
  color:var(--ink-soft); background:var(--paper); cursor:pointer; list-style:none; }
.uitleg-info summary::-webkit-details-marker { display:none; }
.uitleg-info summary:hover, .uitleg-info summary:focus-visible { color:var(--blue-d);
  border-color:var(--blue); outline:none; }
.uitleg-info-kaart { position:absolute; z-index:20; top:calc(100% + 6px); right:0;
  width:max-content; max-width:min(280px, 80vw); background:var(--paper);
  border:1px solid var(--line); border-radius:var(--radius-s);
  box-shadow:0 8px 24px rgba(0,0,0,.12); padding:10px 12px; font-size:.82rem;
  color:var(--ink); line-height:1.4; }
.uitleg-info-kaart p { margin:0 0 6px; }
.uitleg-info-kaart a { font-size:.8rem; }
.uitleg-info-kaart a:last-child { margin-bottom:0; }
/* Op een smal scherm: rechts uitgelijnd voorkomt overloop over de linkerrand niet altijd bij
   een icoon dat zelf al dicht tegen de rechterkant staat -- klem daarom ook de breedte. */
@media (max-width:480px) { .uitleg-info-kaart { max-width:min(240px, 90vw); } }

/* fase 5: setup (B5.2) — vinkjes-rail, knopkaarten en gangbaar-label verfijnen */
.setup-vragenlijst { list-style:none; margin:.4rem 0 0; padding-left:0; }
.setup-vragenlijst li { display:flex; align-items:baseline; gap:.55rem;
  padding:.32rem 0; border-bottom:1px solid var(--line-2); }
.setup-vragenlijst li:last-child { border-bottom:none; }
.setup-vraagnr { flex:0 0 auto; width:1.35rem; height:1.35rem; border-radius:999px;
  background:var(--blue-050); color:var(--blue-d); font-size:.7rem; font-weight:800;
  display:inline-flex; align-items:center; justify-content:center; }

.setup-badge-gangbaar { display:inline-block; font-size:.66rem; font-weight:800;
  letter-spacing:.03em; text-transform:uppercase; color:var(--ink-soft);
  background:var(--vlak); border:1px solid var(--line); border-radius:999px;
  padding:.08rem .5rem; margin-left:.4rem; }

.setup-klaar-vink { color:var(--groen); font-weight:800; margin-right:.3rem; }

/* fase 5: feedback (B5.5) */
/* Kaartweergave voor templates/feedback_mijn.html (artboard HulpF2.dc.html): elk
   feedbackitem als eigen kaart i.p.v. tabelrij. Hergebruikt .card en .statuschip*
   (fase 0/2). */
.feedback-lijst { display:flex; flex-direction:column; gap:.75rem; }
.feedback-kaart { padding:1rem 1.25rem; }
.feedback-kaart-kop { display:flex; align-items:center; flex-wrap:wrap; gap:.6rem; }
.feedback-kaart-soort { font-weight:700; text-transform:capitalize; }
.feedback-kaart-meta { margin-left:auto; font-size:.85rem; white-space:nowrap; }
.feedback-kaart-bericht { margin:.5rem 0 0; line-height:1.5; }
.feedback-mijn-voettekst { margin-top:1.5rem; }

/* fase 5: hulpcentrum (B5.3) ---------------------------------------------------------- */
/* De handleiding opent als hulpcentrum: warme kop met zoekveld (crème mag hier -- geen
   datavlak), daaronder drie categoriekaarten als inhoudsopgave-laag boven de bestaande
   secties. Alles hieronder is puur presentatie; de h2-ankers zelf blijven ongemoeid, want
   support/handleiding.py leest die als kennisbron voor de supportbot. */
.hulp-hero {
  background:var(--cream); border:1px solid var(--line); border-radius:var(--radius);
  padding:2rem 1.5rem 1.6rem; text-align:center; margin-bottom:1.25rem;
}
.hulp-hero h1 { font-size:1.6rem; margin:0; }
.hulp-hero-kruimel {
  margin:0 0 .35rem; font-size:.72rem; font-weight:800; letter-spacing:.08em;
  text-transform:uppercase; color:var(--ink-soft);
}
.hulp-hero-sub {
  margin:.5rem auto 0; max-width:34rem; color:var(--ink-soft); font-size:.95rem;
}
.hulp-zoek { max-width:34rem; margin:1.1rem auto 0; }
.hulp-zoek input {
  width:100%; font-family:inherit; font-size:.95rem; color:var(--ink);
  background:var(--paper); border:1px solid var(--line); border-radius:14px;
  padding:.75rem 1rem; box-shadow:var(--shadow);
}
.hulp-zoek input::placeholder { color:var(--grijs); }
.hulp-zoek input:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
.hulp-veelgezocht { margin:.75rem 0 0; font-size:.82rem; color:var(--ink-soft); }
.hulp-veelgezocht a { font-weight:800; margin:0 .15rem; }
.hulp-veelgezocht a + a::before { content:"·"; color:var(--grijs); margin-right:.45rem; }

.hulp-categorieen {
  display:grid; grid-template-columns:repeat(3, minmax(0, 1fr)); gap:.9rem;
  margin-bottom:.5rem;
}
.hulp-cat {
  background:var(--paper); border:1px solid var(--line); border-radius:var(--radius);
  box-shadow:var(--shadow); padding:1.1rem 1.2rem;
}
.hulp-cat-tegel {
  display:flex; align-items:center; justify-content:center; width:40px; height:40px;
  border-radius:var(--radius-s); margin-bottom:.6rem;
  font-family:"Fredoka",system-ui,sans-serif; font-weight:600; font-size:1rem;
}
.hulp-cat-tegel-blauw { background:var(--blue-050); color:var(--blue); }
.hulp-cat-tegel-groen { background:var(--groen-bg); color:var(--groen); }
.hulp-cat-tegel-oranje { background:var(--oranje-bg); color:var(--oranje); }
.hulp-cat-titel { font-size:1rem; margin:0; }
.hulp-cat-sub { margin:.3rem 0 .6rem; font-size:.82rem; color:var(--ink-soft); line-height:1.5; }
.hulp-cat ul { margin:0; padding-left:1.05rem; font-size:.88rem; line-height:1.85; }

/* Zoekstatus: zonder JS blijft dit blok verborgen (hidden-attribuut in het template). */
.hulp-zoekstatus {
  margin:0 0 .5rem; padding:.7rem .9rem; font-size:.88rem; color:var(--ink-soft);
  background:var(--paper); border:1px solid var(--line); border-radius:var(--radius-s);
}

/* FAQ als accordion in artboard-stijl: rustige scheidingslijnen i.p.v. losse blokjes. */
.hulp-faq .hulp-faq-item { border-bottom:1px solid var(--line-2); padding:.7rem 0; }
.hulp-faq .hulp-faq-item:last-child { border-bottom:0; padding-bottom:0; }
.hulp-faq .hulp-faq-item:first-of-type { padding-top:0; }
.hulp-faq .hulp-faq-item > summary {
  cursor:pointer; list-style:none; display:flex; align-items:baseline; gap:.6rem;
  font-size:.92rem;
}
.hulp-faq .hulp-faq-item > summary::-webkit-details-marker { display:none; }
.hulp-faq .hulp-faq-item > summary::after {
  content:"+"; margin-left:auto; color:var(--blue); font-weight:800; flex-shrink:0;
}
.hulp-faq .hulp-faq-item[open] > summary::after { content:"\00d7"; }
.hulp-faq .hulp-faq-item > summary:hover { color:var(--blue-d); }
.hulp-faq .hulp-faq-item > summary:focus-visible { outline:2px solid var(--blue); outline-offset:3px; }
.hulp-faq .hulp-faq-antwoord { margin-top:.5rem; }

@media (max-width:900px) {
  .hulp-categorieen { grid-template-columns:minmax(0,1fr); }
  .hulp-hero { padding:1.5rem 1.1rem 1.2rem; }
}

/* fase 5: auth (B5.6) ----------------------------------------------------------------- */
/* Tweeluik voor alle schermen vóór het inloggen (templates/_auth.html): links een
   merkpaneel met de payoff en twee vertrouwenschips, rechts een crème vlak met de
   formulierkaart. De kaart houdt bewust de klasse .login-card, zodat de bestaande
   kaart-, label- en veldregels hierboven blijven gelden. Geen JS: de CSP laat geen
   inline script toe en deze schermen hebben het niet nodig. */
body.auth-page { display:block; background:var(--cream); }
.auth-tweeluik {
  display:grid; grid-template-columns:1fr 1fr; min-height:100vh;
}

/* --- Merkpaneel --- */
.auth-merk {
  position:relative; overflow:hidden; background:var(--blue-d); color:#fff;
  display:flex; flex-direction:column; padding:44px 46px;
}
.auth-merk-blob, .auth-merk-ring { position:absolute; pointer-events:none; }
.auth-merk-blob {
  width:300px; height:300px; top:-70px; right:-80px; background:var(--blue);
  border-radius:42% 58% 56% 44% / 56% 44% 56% 44%;
}
.auth-merk-ring {
  width:180px; height:180px; bottom:-40px; left:-40px; border-radius:999px;
  border:22px solid rgba(244,193,82,.25);
}
.auth-merk-logo {
  position:relative; margin:0; font-family:"Fredoka",system-ui,sans-serif;
  font-size:21px; font-weight:700; letter-spacing:.01em;
}
.auth-merk-logo span { opacity:.65; font-weight:600; }
.auth-merk-onder { position:relative; margin-top:auto; }
.auth-payoff {
  font-family:"Fredoka",system-ui,sans-serif; font-size:30px; font-weight:600;
  line-height:1.2; margin:0; color:#fff;
}
.auth-merk-regel {
  font-size:.87rem; opacity:.85; line-height:1.6; margin:12px 0 0; max-width:22rem;
}
.auth-chips {
  display:flex; flex-wrap:wrap; gap:10px; margin:22px 0 0; padding:0; list-style:none;
}
.auth-chips li {
  background:rgba(255,255,255,.12); border-radius:999px; padding:5px 12px;
  font-size:.72rem; font-weight:700; letter-spacing:.01em;
}

/* --- Formulierzijde --- */
.auth-vorm {
  background:var(--cream); display:flex; flex-direction:column;
  align-items:center; justify-content:center; padding:32px 24px;
}
.auth-vorm .login-card {
  max-width:400px; padding:28px 32px; border-radius:20px;
}
.auth-stap {
  margin:0; font-size:.68rem; font-weight:800; letter-spacing:.07em;
  text-transform:uppercase; color:var(--peach-d);
}
.auth-kop { font-size:1.3rem; margin:6px 0 10px; }
.auth-inleiding { margin:0 0 1rem; font-size:.85rem; line-height:1.55; }
.auth-vorm .login-uitleg { margin:1rem 0 0; }
.auth-onderkaart {
  max-width:400px; margin:14px 0 0; text-align:center; color:var(--ink-soft);
  font-size:.8rem; line-height:1.55;
}
/* Een <a> die er als hoofdknop uitziet (uitnodiging_ongeldig): .btn is inline-block, dus
   zonder deze regel staat de link links en onderstreept. */
.auth-knoplink { display:block; text-align:center; text-decoration:none; }
.auth-qr { text-align:center; margin:0 0 1rem; }
.auth-qr .qr {
  display:inline-block; background:#fff; padding:10px; border:1px solid var(--line);
  border-radius:var(--radius-s); max-width:100%; height:auto;
}

/* --- 2FA-code: één veld, visueel gesegmenteerd --- */
/* Zes losse vakjes zouden JS vragen (focus doorschuiven, plakken opsplitsen) en breken
   het plakken van een code. Daarom één veld met tekenafstand; text-indent compenseert de
   afstand ná het laatste teken, zodat de code optisch gecentreerd blijft. */
.auth-vorm .login-card input.auth-code {
  font-family:ui-monospace,"Cascadia Mono",Consolas,"Liberation Mono",monospace;
  font-size:1.5rem; font-weight:700; text-align:center;
  letter-spacing:.5em; text-indent:.5em;
  /* Witte achtergrond zoals elk ander invoerveld in het auth-tweeluik: de blauwe vulling
     was de enige gevulde input en oogde als een al ingevuld veld (ronde 1-bevinding). */
  color:var(--blue-d); background:var(--paper); border:1.5px solid var(--blue);
  border-radius:var(--radius-s); padding:.65rem .4rem;
}
.auth-vorm .login-card input.auth-code::placeholder {
  color:var(--grijs); font-weight:600;
}

/* --- Smal scherm: merkpaneel wordt een compacte kopstrook, niets valt weg --- */
@media (max-width:820px) {
  .auth-tweeluik { grid-template-columns:1fr; min-height:100vh; }
  .auth-merk { padding:20px 22px 22px; }
  .auth-merk-blob { width:190px; height:190px; top:-70px; right:-60px; }
  .auth-merk-ring { width:120px; height:120px; bottom:-60px; left:-40px; border-width:16px; }
  .auth-merk-onder { margin-top:12px; }
  .auth-payoff { font-size:22px; }
  .auth-merk-regel { font-size:.8rem; margin-top:8px; max-width:none; }
  .auth-chips { margin-top:12px; gap:8px; }
  .auth-vorm { padding:24px 16px 40px; justify-content:flex-start; }
  .auth-vorm .login-card { padding:24px 20px; }
}

/* fase 5: popovers (B5.4) — vervolg: tekstglyph i.p.v. svg-icoon (kruisbevinding andere
   bouwer: een svg hier verstoorde test_ui_structuur's svg-telling en de eerste-<circle>-regex
   in test_benchmark_pagina.py). Puur CSS, geen wijziging aan .uitleg-info/.uitleg-info-kaart. */
.uitleg-info-glyph { font-family:Georgia,'Times New Roman',serif; font-style:italic;
  font-weight:700; font-size:11px; line-height:1; }

/* fase 5 herstelronde: [hidden]-vangnet. Author-display-regels (zoals .beheer-uitleg met
   display:flex en .hulp-categorieen met display:grid) verslaan anders de UA-regel
   [hidden]{display:none}, waardoor "verborgen" elementen gewoon zichtbaar bleven --
   zonder JS stond de lege uitleg-rail op de beheerpagina, en tijdens het zoeken in het
   hulpcentrum bleven de categoriekaarten staan. */
[hidden] { display: none !important; }

/* fase 5 herstelronde: de auth-schil heet nu body.auth-page (_auth.html); de oude regel
   .login-page .flash mikt daardoor nergens meer op. Zelfde marge als voorheen. */
.auth-page .flash { margin-bottom: 1rem; }

/* B6.4: beheerder_planning.html als werklijst — kop per klant met kansen-teller. */
.pl-klant-kop { display:flex; align-items:center; justify-content:space-between;
  flex-wrap:wrap; gap:.5rem; margin-bottom:.3rem; }
.pl-klant-kop h3 { margin:0; }
.pl-chip-telling { background:var(--groen-bg); color:#1c6b45; white-space:nowrap; }

/* B6.6: beheerder-feedbacktriage -- kaartrij + inline statusactie voor de beheerder,
   in dezelfde kaarttaal als feedback_mijn.html (.feedback-lijst/.feedback-kaart, B5.5).
   Hergebruikt .card, .chip, .statuschip*, .filterbalk, .btn-ghost; geen nieuwe mechaniek. */
.triage-filterbalk { padding:.85rem 1rem; background:var(--paper); border:1px solid var(--line);
  border-radius:var(--radius); align-items:flex-end; }
.triage-filterveld { display:flex; flex-direction:column; gap:.2rem; }
.triage-filterveld label { font-weight:700; color:var(--ink-soft); font-size:.78rem; }
.triage-kaart { display:flex; flex-direction:column; gap:.5rem; }
.triage-scherm { font-size:.78rem; margin:0; }
.triage-actierij { display:flex; flex-wrap:wrap; align-items:center; gap:.5rem; margin-top:.25rem;
  padding-top:.6rem; border-top:1px solid var(--line); }
.triage-actierij select { width:auto; }
.triage-actierij input[type="text"] { flex:1 1 220px; min-width:160px; }

/* --- UI-overhaul B6.1+B6.2: werklijst-tabel klanten (templates/beheerder.html) -----------
   Twee kleine aanvullingen; alles verder hergebruikt table.beheer, .chip, .chip.uit, .dot,
   .sl-*, .intrek-bevestig(-inhoud), .module-bevestig en .tabel-scroll (fase 0-5). */
.dot-sm { width:10px; height:10px; box-shadow:none; display:inline-block; }
/* De module-chip is nu een klikbare knop i.p.v. een losse badge: reset de browserstijl van
   <button> zodat hij oogt als de bestaande .chip (span). */
button.chip { border:none; cursor:pointer; font-family:inherit; }
/* Summary van .uitnodig-paneel/.klant-detailrij oogt als knop, geen bullet (zelfde patroon
   als .intrek-bevestig/.module-bevestig summary hierboven). */
.uitnodig-paneel > summary, .klant-detailrij > summary { list-style:none; cursor:pointer; }
.uitnodig-paneel > summary::-webkit-details-marker,
.klant-detailrij > summary::-webkit-details-marker { display:none; }
.uitnodig-paneel[open] > summary { margin-bottom:.8rem; }
.klant-detailrij[open] > summary { margin-bottom:.6rem; }
.klant-detail-inhoud { display:flex; flex-direction:column; gap:.6rem; align-items:flex-start; }

/* B6.5: dagkop-rijen in het logboek (templates/beheerder_logboek.html) -- groepeert de
   bestaande table.beheer-rijen per kalenderdag zonder de rij-opmaak van de losse acties
   aan te raken (die blijft kaal <td> voor de bestaande logboek-tests). */
table.beheer.logboek-tabel tr.logboek-dagkop td { padding-top: 1.1rem; padding-bottom: .3rem;
  border-bottom: none; font-size: .72rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .03em; color: var(--ink-soft); }
table.beheer.logboek-tabel tr.logboek-dagkop:first-child td { padding-top: .55rem; }

/* B6.3: /beheerder/overzicht als monitor-tabel (i.p.v. kaartenrij) + kliksorteren op
   kolomkoppen. `.dot`, `.dot-sm`, `.sl-*`, `.num-r`, `.bullet*`, `.tabel-scroll`, `.beheer`,
   `.ov-naam-knop`, `.ov-grafiek` en `.ov-wachtlijst` bestaan al (fase 0-6); dit voegt alleen
   toe wat de tabelvorm en het sorteren specifiek nodig hebben. */
.ov-tabel th[data-sort] { cursor:pointer; user-select:none; white-space:nowrap; }
.ov-tabel th[data-sort]::after { content:'\2195'; opacity:.35; margin-left:.3rem; font-size:.8em; }
.ov-tabel th[data-sort].sort-op::after { content:'\2191'; opacity:1; }
.ov-tabel th[data-sort].sort-neer::after { content:'\2193'; opacity:1; }
.ov-tabel td { vertical-align:middle; }
.ov-graad-cel { display:flex; align-items:center; gap:.5rem; min-width:160px; }
.ov-graad-cel .bullet { flex:1 1 auto; min-width:80px; }
.ov-graad-cel .num-r { min-width:3.4em; }

/* Hero-fix (30-08): de bezettingskaart is geen <a> meer (de uitleg-popover mocht niet in een
   anker staan -- de browser knipte het anker door en de kaartinhoud viel eruit). De kaart
   blijft volledig klikbaar via een stretched-link op de titel; de popover ligt erboven. */
.hero-klik { position:relative; transition:transform .08s ease; }
.hero-klik:hover { transform:translateY(-2px); box-shadow:var(--shadow); }
.hero-klik .hero-link { color:inherit; text-decoration:none; }
.hero-klik .hero-link::after { content:""; position:absolute; inset:0; }
.hero-klik .hero-link:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
.hero-klik .uitleg-info { position:relative; z-index:1; }

/* Stijlwisselaar op het dashboard (30-08): compacte chip-rij, geen JS. */
.stijl-wisselaar { display:flex; align-items:center; gap:.35rem; flex-wrap:wrap;
  margin-top:.65rem; }
.stijl-wissel-label { font-size:.72rem; font-weight:700; letter-spacing:.06em;
  text-transform:uppercase; color:var(--grijs); margin-right:.15rem; }
.stijl-knop { border:1px solid var(--line); background:var(--paper); color:var(--ink-soft);
  border-radius:999px; padding:.28rem .8rem; font-family:inherit; font-size:.8rem;
  font-weight:600; cursor:pointer; }
.stijl-knop:hover { border-color:var(--blue); color:var(--blue); }
.stijl-knop.actief { background:var(--blue); border-color:var(--blue); color:#fff;
  cursor:default; }
.stijl-knop:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }

/* As-keuze bij de uitsplitsingskaart (besluit Wouter 30-08): de keuze die alleen deze tabel
   verandert staat IN de kaart, niet meer rechtsboven op de pagina. */
.kaart-kop-rij { display:flex; align-items:baseline; justify-content:space-between;
  gap:.8rem; flex-wrap:wrap; }
.kaart-kop-rij h2 { margin:0; }
.as-schakel { display:flex; gap:.3rem; }
a.as-chip { text-decoration:none; cursor:pointer; }
a.as-chip:hover { border-color:var(--blue); color:var(--blue); }
.as-chip.actief { background:var(--blue); border-color:var(--blue); color:#fff; }

/* Ronde 1: capaciteits- en streefbezettingsinvoer rechts uitgelijnd (cijferconventie). */
.beheer-form input[type="number"] { text-align:right; }

/* UI-consistentie ronde 1, bevinding 1 (B_C1): .btn-ghost is standaard wit-op-transparant
   ontworpen voor donkere balken -- .meekijk-balk en .setup-balk overschrijven color/border
   al specifiek voor hun eigen (lichte) achtergrond. De klant-detailrij op /beheerder
   (crème kaart, geen donkere achtergrond) miste zo'n overschrijving: de summary "Details"
   en de kale "Toegang intrekken"/"Toegang herstellen"-knoppen in de geneste
   gebruikers-tabel erfden wit-op-wit/crème (rgb(255,255,255)). .btn-danger (bv. de
   bevestig-summary "Toegang intrekken" erboven) heeft al een eigen kleur (regel 585) en
   blijft dus buiten :not(.btn-danger) hieronder. */
.klant-detailrij > summary,
.klant-detail-inhoud .btn-ghost:not(.btn-danger) { color:var(--ink); border-color:var(--line); }
.klant-detailrij > summary:hover,
.klant-detail-inhoud .btn-ghost:not(.btn-danger):hover { background:var(--vlak); }

/* UI-consistentie ronde 1, bevinding 2 (B_C2): "Klanten zonder kansen" op
   /beheerder/planning hergebruikt .ov-naam-knop zonder de <h3>-wrapper die de bestaande
   hover-regel (regel 613) target; deze knop staat kaal in de tekst, dus een eigen
   hover-stijl zodat "klikbaar" ook hier zichtbaar is. */
.pl-compact-rij .ov-naam-knop:hover { color:var(--blue); text-decoration:underline; }

/* Benchmark: locatienaam is nu een link; zelfde ingetogen stijl als tabelnamen elders. */
.bm-naam a { text-decoration:none; font-weight:inherit; }
.bm-naam a:hover { text-decoration:underline; }

/* Sluitkruisje op de hulppaneel-panelen (W4, ronde 2). JS-only progressive enhancement:
   het element bestaat alleen als static/hulppaneel.js het aanmaakt; zonder JS blijft sluiten
   werken zoals voorheen (nogmaals op de pil klikken). */
.hulppaneel-inhoud { position:relative; }
.hulppaneel-sluiten { position:absolute; top:.5rem; right:.6rem; background:transparent;
  border:none; color:var(--ink-soft); font-size:1.05rem; line-height:1; cursor:pointer;
  padding:.2rem .45rem; border-radius:8px; }
.hulppaneel-sluiten:hover, .hulppaneel-sluiten:focus-visible { background:var(--cream);
  color:var(--ink); }

/* B12/W3 bevinding 5: de Details-toggle in de klantenlijst sprong naar de bovenkant van de
   cel bij openklappen omdat table.beheer-cellen op de browserstandaard vertical-align:middle
   draaien -- bij een uitgeklapte rij groeit de celhoogte en verschuift de rest mee. Alleen
   deze tabel (#klanten-lijst) top-uitlijnen houdt de rest van table.beheer ongemoeid. */
#klanten-lijst > tbody > tr > td { vertical-align: top; }

/* --- Ronde 2, brok W2: STATUS-kolom afgekapt op 1280px (werklijst-dashboardstijl, bevinding 1)
   en "Komende maanden"-tabel afgesneden op de locatiepagina (bevinding 2). Append-only i.p.v.
   in-place bewerkt (parallelle bouwers werken tegelijk in dit bestand); deze regels staan later
   in het bestand en overschrijven daarmee de eerdere .werk-blad/.werk-tabel/.loc-maanden-regels
   op gelijke specificiteit. Lettergrootte van de werktabel blijft ongemoeid (bewust besluit:
   groter is leesbaarder), alleen kolombreedtes/-paddings en de chip zijn compacter gezet. */

/* Bevinding 1: KPI-kolom van 250px naar 225px. De KPI-tegels zijn korte tekstblokken met ruimte
   over op hun eigen breedte; de middelste kolom (de werktabel) heeft de 25px harder nodig. Geen
   wijziging aan de rail-kolom (290px): "Komende maanden" past daar al precies. */
.werk-blad { grid-template-columns:225px minmax(0, 1fr) 290px; }

.werk-tabel th, .werk-tabel td { padding-right:.4rem; }
/* Laatste kolom (Status) grenst al aan de eigen padding van .werk-paneel/.tabel-scroll; een
   extra rechterpadding daarbovenop was precies het randje dat de kolom op 1280px liet afkappen. */
.werk-tabel th:last-child, .werk-tabel td:last-child { padding-right:0; }
/* Compactere chip alleen in deze tabel (niet .statuschip zelf, die wordt breder elders gebruikt
   waar de ruimte geen probleem is): iets minder zijpadding zodat "oranje"/"groen" niet meer de
   randfactor is die de kolom laat overlopen op 1280px. */
.werk-tabel .statuschip { padding:.15rem .45rem; }

/* Bevinding 2: geen white-space:nowrap meer op de rijkoppen van de "Komende maanden"-tabel op
   de locatiepagina. "Aangekondigde opzeggingen" duwde als één regel de vier maandkolommen
   buiten de kaartrand (SEP afgesneden, geen scrollaffordance zichtbaar). Een max-breedte laat
   de rijkop over twee regels lopen; de tekst zelf blijft ongewijzigd (test_dashboard_kpi.py e.a.
   bewaken die tekst al). */
.loc-maanden tbody th { white-space:normal; max-width:7.5rem; }

/* Ronde 3: stabiele kolombreedtes in de planning-heatmap -- de augustus-tabel werd smaller
   gedrukt door een bredere kans-badge; met een vaste layout zijn alle maandtabellen gelijk. */
.pl-heat-tabel { table-layout:fixed; width:100%; min-width:560px; }
/* min-width (r11): op telefoonbreedte perste de vaste layout de weekdag-koppen op elkaar
   en braken locatienamen midden in het woord; met een minimumbreedte scrollt de tabel
   horizontaal binnen zijn .tabel-scroll (met mobiele fade-hint) en blijft alles leesbaar. */
.pl-heat-tabel th:first-child { width:24%; }
.pl-heat-loc a { text-decoration:none; }
.pl-heat-loc a:hover { text-decoration:underline; }

/* Ronde 3: actieknoppen in de beheerder-klantrij braken halverwege ("Bekijk / dashboard"). */
.klant-detail-inhoud .btn-ghost { white-space:nowrap; }

/* Ronde 4-fixes (hoofdsessie) --------------------------------------------------------- */
/* Badge 'eigen weergave-instelling' brak middenin de pil in twee losse stukken. */
.chip-weergave { white-space:nowrap; }
/* De meekijkbalk moet ALTIJD zichtbaar zijn (je mag nooit twijfelen wiens cijfers je
   ziet); op een lang klantdashboard scrolde hij uit beeld. */
.meekijk-balk { position:sticky; top:0; z-index:50; }
/* Klantnaam-kolom op /beheerder hield geen breedte bij het uitklappen van de
   gebruikers-subtabel, waardoor de naam ging afbreken. */
#klanten-lijst > tbody > tr > td:first-child { min-width:13rem; }

/* Vondst Wouter 31-08 (app-breed): kolomkoppen met .num-r bleven links staan terwijl de
   cellen rechts uitlijnen -- .dtab th en table.beheer th/td (element+klasse) wonnen de
   cascade van de kale .num-r-klasse. Deze regels staan bewust ONDERAAN: gelijke
   specificiteit, latere bronvolgorde wint overal. */
th.num-r, td.num-r { text-align:right; }

/* Trendkaart-ankerfix: zelfde stretched-link-patroon als .hero-klik, generiek. */
.blok-klik { position:relative; transition:transform .08s ease, box-shadow .12s ease; }
.blok-klik:hover { transform:translateY(-2px); box-shadow:var(--shadow); }
.blok-klik .blok-anker { color:inherit; text-decoration:none; }
.blok-klik .blok-anker::after { content:""; position:absolute; inset:0; }
.blok-klik .blok-anker:focus-visible { outline:2px solid var(--blue); outline-offset:2px; }
.blok-klik .lijn-cijfers a { position:relative; z-index:1; }

/* Ronde 5-fixes (hoofdsessie) --------------------------------------------------------- */
/* De info-flash ("periode omgedraaid") had geen eigen kleur en oogde als kale tekst. */
.flash-info { background:var(--blue-050); color:var(--blue-d); }
/* Locatienaam plakte tegen de eerste heatmap-cel bij lange namen (table-layout fixed). */
.pl-heat-tabel .pl-heat-loc { padding-right:.6rem; }

/* Ronde 6-fixes (hoofdsessie) --------------------------------------------------------- */
/* De zijbalk blijft in beeld bij het scrollen (ronde 6: hij scrolde weg terwijl de
   meekijkbalk juist bleef plakken -- rommelig gemengd gedrag). Eigen scroll bij weinig
   verticale ruimte, zodat de voet met het gebruikersblok bereikbaar blijft. */
.zijbalk { position:sticky; top:0; height:100vh; overflow-y:auto; }
/* Een uitgeschakelde keuze-optie (LRK-register) oogde als een gewone optie; nu duidelijk
   gedimd met een passende cursor. */
.beheer-form .radio-row label:has(input:disabled) { opacity:.55; cursor:not-allowed; }

/* Ronde 7-fixes (hoofdsessie) --------------------------------------------------------- */
/* REGRESSIEFIX: de sticky zijbalk (ronde 6) gold ook op smalle schermen waar de zijbalk
   bovenaan stapelt -- height:100vh liet daar een lege strook van schermhoogte achter.
   Sticky alleen op brede schermen; op smal het oude gedrag. */
@media (max-width:820px) {
  .zijbalk { position:relative; top:auto; height:auto; min-height:0; overflow-y:visible; }
}
/* Heatmap: lange locatienamen liepen over de eerste (donkere) cel heen; laten wrappen
   binnen de vaste kolom in plaats van nowrap. */
.pl-heat-tabel .pl-heat-loc { white-space:normal !important; overflow-wrap:anywhere; }
/* Beheerder-klantrij: de Details-summary rekte zich bij het openklappen uit tot de volle
   celbreedte; en de "Ja, uitzetten"-knop brak na de komma af. */
.klant-detailrij[open] > summary { width:max-content; }
.module-bevestig .btn-danger, .intrek-bevestig-inhoud .btn-danger { white-space:nowrap; }

/* Ronde 8-fixes (hoofdsessie) --------------------------------------------------------- */
/* Details-toggle op de klantenlijst kreeg geen open/dicht-indicator (de geneste
   "Gebruikers beheren" had die wel): zelfde chevron-patroon. */
.klant-detailrij > summary::before { content:"\25B8"; margin-right:.35rem; }
.klant-detailrij[open] > summary::before { content:"\25BE"; }
/* Keuzevakken in een radio-rij worden even hoog, ook als de toelichting korter is. */
.beheer-form .radio-row { align-items:stretch; }
/* Scrollbare tabellen: op smalle schermen een rechter-vervaging als hint dat er meer
   kolommen zijn (ronde 8). De eerdere gelaagde scroll-schaduw-truc parseerde niet
   betrouwbaar en tekende een grijze streep op desktop (vondst Wouter 31-08) -- deze
   simpele variant toont alleen op smal een fade, en desktop niets. */
@media (max-width:820px) {
  .tabel-scroll { position:relative; }
  .tabel-scroll::after { content:""; position:absolute; top:0; right:0; bottom:0;
    width:18px; background:linear-gradient(to left, rgba(31,41,55,.16), transparent);
    pointer-events:none; }
}

/* Debiteuren-werklijst */
/* templates/payt_werklijst.html: de openstaande posten zelf (bevat persoonsgegevens),
   filterbaar en met een uitklap per gezin. Hergebruikt bewust .card, .payt-kern,
   .payt-tegel*, .filterbalk, .chip, .btn, .btn-stil, .dtab, .tabel-scroll, .num-r,
   .muted, .demo-note, .payt-verouderd, .periode-pill en .payt-vers uit de debiteurentab en
   de rest van de app -- alleen wat daar niet bestaat (statuschips met een vijfde,
   "aanmaning"-tint, de gezinnen-uitklap en de exportknoppenrij) krijgt hier nieuwe klassen. */

.wl-filter select { width:auto; max-width:100%; }
.wl-check { display:inline-flex; align-items:center; gap:.4rem; font-weight:700;
  color:var(--ink-soft); font-size:.85rem; }
.wl-check input { margin:0; }

/* Statuschips en de weergaveschakelaar delen dezelfde rij op een breed scherm en breken
   netjes onder elkaar op smal (zelfde flex-wrap-aanpak als .filterbalk). */
.wl-subbalk { display:flex; justify-content:space-between; align-items:flex-start;
  flex-wrap:wrap; gap:.6rem 1.2rem; margin-bottom:.9rem; }
.wl-chips { margin:0; }
a.wl-chip { text-decoration:none; cursor:pointer; }
a.wl-chip:hover { border-color:var(--blue); color:var(--blue); background:var(--blue-050); }
.wl-chip.actief { background:var(--blue); border-color:var(--blue); color:#fff; }
/* .chip heeft van zichzelf geen rand; hier wel, zodat de actieve chip zich met een gevulde
   achtergrond kan onderscheiden van de niet-actieve (zelfde patroon als .as-chip). */
.wl-chip { border:1px solid transparent; }

.wl-export { display:flex; flex-wrap:wrap; gap:.6rem; margin-bottom:1.1rem; }
.wl-export .btn { margin-top:0; padding:.5rem 1rem; font-size:.85rem; }

/* Statusbadges, oplopend in urgentie. Zelfde kleurlijn als de ouderdomsbalk (.seg.b0-.b4):
   blauw voor "nog gewoon openstaand", dan geel/oranje/koraal/rood naarmate het traject
   verder komt. "Onbekend" krijgt de neutrale grijstint, net als .statuschip-grijs. */
.wl-status { display:inline-flex; align-items:center; white-space:nowrap;
  font-size:.72rem; font-weight:800; padding:.2rem .55rem; border-radius:999px; }
.wl-status-openstaand { background:var(--blue-050); color:var(--blue-d); }
.wl-status-herinnering { background:#fbf0d9; color:#6b5012; }
.wl-status-aanmaning { background:#fbe0d1; color:#96432a; }
.wl-status-incasso { background:var(--rood-bg); color:var(--rood); }
.wl-status-onbekend { background:var(--grijs-bg); color:var(--ink-soft); }

/* Gezinnenlijst: CSS-only <details> per gezin, geen tabel -- zo blijft de kop leesbaar op
   smalle schermen zonder dat een tabelrij met vijf kolommen moet gaan schuiven. */
.wl-groepen { list-style:none; margin:0 0 1.1rem; padding:0; display:flex;
  flex-direction:column; gap:.55rem; }
.wl-groep-item { background:var(--paper); border:1px solid var(--line);
  border-radius:var(--radius-s); overflow:hidden; }
.wl-groep-summary { display:flex; align-items:center; justify-content:space-between;
  flex-wrap:wrap; gap:.4rem 1rem; padding:.75rem .95rem; cursor:pointer; list-style:none; }
.wl-groep-summary::-webkit-details-marker { display:none; }
.wl-groep-summary::marker { content:""; }
.wl-groep-summary::after { content:"\25be"; margin-left:.5rem; color:var(--ink-soft);
  transition:transform .15s ease; flex-shrink:0; }
.wl-detail[open] .wl-groep-summary::after { transform:rotate(180deg); }
.wl-detail[open] .wl-groep-summary { border-bottom:1px solid var(--line); }
.wl-groep-hoofd { display:flex; align-items:center; gap:.6rem; }
.wl-groep-naam { font-weight:800; color:var(--blue-d); }
.wl-groep-cijfers { display:flex; align-items:baseline; gap:.7rem; flex-wrap:wrap;
  font-size:.85rem; }
.wl-bedrag { font-weight:800; color:var(--blue-d); font-variant-numeric:tabular-nums; }
.wl-groep-item .tabel-scroll { padding:0 .95rem .75rem; }
.wl-sub-tabel { font-size:.88rem; }
.wl-sub-tabel th, .wl-sub-tabel td { padding:.4rem .5rem .4rem 0; }

/* Creditnota- en deelbetalingsmarkering: subtiel, geen extra kolom. */
.wl-tag { display:inline-block; margin-left:.4rem; font-size:.68rem; font-weight:800;
  text-transform:uppercase; letter-spacing:.02em; padding:.1rem .4rem; border-radius:999px; }
.wl-tag-credit { background:var(--grijs-bg); color:var(--ink-soft); }
.wl-sub-tekst { display:block; font-size:.72rem; font-weight:400; color:var(--ink-soft);
  font-variant-numeric:tabular-nums; }

.wl-leeg { text-align:center; padding:1.4rem; margin-bottom:1.1rem; }

.wl-paginering { display:flex; align-items:center; justify-content:space-between;
  flex-wrap:wrap; gap:.6rem 1rem; margin-top:.4rem; }
.wl-pagi-knoppen { display:flex; align-items:center; gap:.8rem; flex-wrap:wrap; }
.wl-pagi-knoppen .btn { margin-top:0; padding:.5rem 1rem; font-size:.85rem; }

@media (max-width:640px) {
  .wl-subbalk { flex-direction:column; }
  .wl-groep-cijfers { width:100%; justify-content:space-between; }
}
