:root {
  color-scheme: dark;
  --bg: #0f1420;
  --panel: #171d2b;
  --border: #2a3244;
  --text: #eef1f7;
  --text-muted: #9aa4b8;
  --green: #33c481;
  --yellow: #e0b64a;
  --red: #e0574a;
  --blue: #4a8fe0;
  --orange: #e0813a;
  --yellow-orange: #e0a23a;
  --yellow-green: #a8c93a;
  --cool-gray: #9aa4b8;
  --tint-red-bg: #3a1414;
  --tint-orange-bg: #3a2414;
  --tint-yellow-orange-bg: #3a2c14;
  --tint-yellow-bg: #3a2f14;
  --tint-yellow-green-bg: #2c3a14;
  --tint-green-bg: #123324;
  --tint-blue-bg: #142c3a;
  --event-card-label-text: #fff;
}

/* Licht thema: expliciete opt-in via het thema-toggle-knopje dat nav.js
   injecteert (public/theme.js). Bewust GEEN prefers-color-scheme media
   query — zonder opgeslagen voorkeur blijft iedereen het huidige donkere
   thema zien, ongewijzigd. De voorkeur wordt vóór de eerste render
   toegepast door public/theme.js (synchroon, in <head>), zodat er geen
   flits van het verkeerde thema optreedt. */
:root[data-theme="light"] {
  color-scheme: light;
  --bg: #f3f5fa;
  --panel: #ffffff;
  --border: #d7dce6;
  --text: #171d2b;
  --text-muted: #5c6478;
  --green: #1f8f5c;
  --yellow: #a67818;
  --red: #c73e30;
  --blue: #2f6fc2;
  --orange: #b85f1f;
  --yellow-orange: #b8791f;
  --yellow-green: #6b8f1f;
  --cool-gray: #5c6478;
  --tint-red-bg: #fbe4e1;
  --tint-orange-bg: #fbe9d9;
  --tint-yellow-orange-bg: #fbeed3;
  --tint-yellow-bg: #fbf1d0;
  --tint-yellow-green-bg: #eef3d9;
  --tint-green-bg: #dcf3e8;
  --tint-blue-bg: #dce8f9;
  --event-card-label-text: #171d2b;
}

/* Groen palet: onafhankelijke toggle naast licht/donker (zelfde
   toggle-mechanisme, public/theme.js). Vervangt de volledige vormgeving
   (achtergrond, panelen, randen, tekst, accent) door het Sharpwaves
   Blauwdruk-kleurenpalet — niet alleen de accentkleur. Gecombineerde
   attribuutselectors geven vanzelf voorrang boven de losse :root- en
   :root[data-theme="light"]-blokken hierboven, ongeacht bronvolgorde. */
:root[data-accent="green"] {
  --bg: #0c1213;
  --panel: #131c1d;
  --border: #24312f;
  --text: #e7edec;
  --text-muted: #86999b;
  --blue: #46bfaf;
  --tint-blue-bg: #142c29;
}

:root[data-theme="light"][data-accent="green"] {
  --bg: #f6f8f8;
  --panel: #ffffff;
  --border: #d9e1e1;
  --text: #101819;
  --text-muted: #66797c;
  --blue: #0c6f66;
  --tint-blue-bg: #e0efed;
}

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 24px 32px 48px;
  background: var(--bg);
  color: var(--text);
  font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
}

.topbar {
  display: flex;
  align-items: flex-end;
  justify-content: flex-start;
  gap: 48px;
  position: relative;
  padding-bottom: 20px;
  margin-bottom: 24px;
  border-bottom: 1px solid var(--border);
}

.topbar h1 {
  font-size: 32px;
  margin: 0;
}

.topbar-title {
  display: flex;
  flex-direction: column;
}

/* Overkoepelend merklabel boven de paginatitel — klein en gedempt zodat de
   paginanaam zelf (bv. "Planning (working)") het primaire element blijft. */
.app-brand {
  font-size: 13px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--blue);
  margin-bottom: 2px;
}

.topbar-meta {
  display: flex;
  align-items: flex-start;
  flex-grow: 1;
  gap: 20px;
  color: var(--text-muted);
  font-size: 15px;
}

/* De navitems ernaast (Sales, Status, Licht, ...) reserveren onderaan een
   onzichtbare 6px (padding-bottom 4px + border-bottom 2px transparant, voor
   de actieve-onderstreping) waardoor hun tekst zelf 3px boven het midden
   van hun eigen box staat i.p.v. er precies in. Badge en tijdstip hebben
   die reservering niet, dus zonder correctie staan ze — ondanks
   align-self: center — 3px lager dan de rest van de rij. */
.topbar-meta > #mode-badge,
.topbar-meta > #updated-at,
.topbar-meta > .topbar-icon-button {
  align-self: center;
  position: relative;
  top: -3px;
}

/* Hoofdnavigatie als klik/hover-dropdowns: 6 vaste categorieën (Sales/
   Marketing/Projects/Support/Insight/Finance) i.p.v. alle paginalinks los
   naast elkaar. Groep-triggers zijn platte tekst (geen "pill"-vak meer).
   .nav-dropdown is een brede strook die van links tot rechts onder de hele
   .topbar doorloopt (left:0; right:0, tegen .topbar's position:relative),
   met de items daarbinnen links uitgelijnd (align-items: flex-start) op de
   positie van Sales — ongeacht welke categorie open staat, dus nooit onder
   de aangeklikte knop zelf. Open/dicht wordt gestuurd door de .open class
   op .nav-menu-item, gezet door nav.js (klik + hover-met-intent-to-leave-
   vertraging + toetsenbord), niet meer door een pure :hover-regel. */
.nav-menu {
  display: flex;
  align-items: center;
  flex-grow: 1;
  gap: 26px;
}

/* Sales t/m Finance blijven links gepakt; nav.js markeert met deze klasse
   welk item daadwerkelijk als eerste ná de dropdown-groepen staat (Status,
   of als een rol daar geen toegang toe heeft: Beheer/het thema-knopje) —
   margin-left: auto duwt dat item en alles erna in één keer naar de
   rechterkant van de navbalk. Bewust niet hardcoded aan Status gekoppeld
   (via [href="status.html"]), want die link ontbreekt voor rollen zonder
   status.html-toegang, waardoor er dan niets meer duwde. */
.nav-menu-trailing-start {
  margin-left: auto;
}

.nav-menu-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 0 0 4px;
  margin: 0;
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--text-muted);
  font: inherit;
  font-weight: 600;
  cursor: pointer;
  transition: color 0.15s ease, border-color 0.15s ease;
}

.nav-chevron {
  width: 9px;
  height: 6px;
  opacity: 0.7;
  transition: transform 0.15s ease;
}

.nav-menu-item:hover .nav-menu-label,
.nav-menu-item.open .nav-menu-label,
.nav-menu-item.current-group .nav-menu-label {
  color: var(--text);
  border-bottom-color: var(--blue);
}

.nav-menu-item.open .nav-chevron {
  transform: rotate(180deg);
}

.nav-dropdown {
  display: none;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  position: absolute;
  top: 100%;
  left: 0;
  right: 0;
  /* --nav-dropdown-inset wordt door nav.js gezet op de werkelijke
     x-positie van Sales (eerste nav-item) t.o.v. .topbar — dat verschilt
     per pagina door de wisselende breedte van de paginatitel ervoor. */
  padding: 16px 32px 16px var(--nav-dropdown-inset, 32px);
  background: var(--panel);
  border-bottom: 1px solid var(--border);
  z-index: 30;
}

.nav-menu-item.open .nav-dropdown {
  display: flex;
}

/* Operations bundelt sinds kort ook de vroegere Projects- en Support-groepen
   — te veel links voor één kolom, dus twee kolommen naast elkaar i.p.v. één
   lange lijst. */
.nav-dropdown-columns {
  flex-direction: row;
  gap: 40px;
}

.nav-dropdown-column {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
}

.nav-link {
  color: var(--blue);
  text-decoration: none;
  font-weight: 600;
  padding: 6px 14px;
  border-radius: 8px;
  background: var(--panel);
  border: 1px solid var(--border);
  transition: background 0.15s ease, border-color 0.15s ease;
}

.project-link {
  color: var(--text);
  text-decoration: none;
  border-bottom: 1px dotted var(--text-muted);
}

.project-link:hover {
  color: var(--blue);
  border-bottom-color: var(--blue);
}

.nav-link:hover {
  text-decoration: none;
  background: var(--border);
}

.nav-link.current {
  color: var(--text);
  cursor: default;
  pointer-events: none;
  background: var(--border);
  border-color: var(--blue);
}

.nav-link.current:hover {
  background: var(--border);
}

/* Dropdown-inhoud: verticale lijst i.p.v. de algemene .nav-link "pill". */
.nav-dropdown .nav-link {
  display: block;
  white-space: nowrap;
  /* Experimenteel: zelfde kleurgedrag als de groep-koppen (.nav-menu-label)
     i.p.v. blauwe linkkleur — ter beoordeling. */
  color: var(--text-muted);
  background: none;
  border: none;
  border-radius: 6px;
  padding: 8px 12px;
}

.nav-dropdown .nav-link:hover {
  color: var(--text);
  background: var(--bg);
}

.nav-dropdown .nav-link.current {
  color: var(--text);
  background: var(--border);
  border-color: transparent;
}

.nav-dropdown .nav-link.current:hover {
  background: var(--border);
}

/* Platte "Status"-link op het topniveau van de nav (rechtstreeks kind van
   .nav-menu, dus niet in een dropdown) krijgt dezelfde platte-tekstbehandeling
   als de groep-triggers, i.p.v. de algemene .nav-link "pill"-styling. */
.nav-menu > .nav-link {
  color: var(--text-muted);
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  border-radius: 0;
  padding: 0 0 4px;
}

.nav-menu > .nav-link:hover {
  color: var(--text);
  background: none;
  border-bottom-color: var(--blue);
}

.nav-menu > .nav-link.current {
  color: var(--text);
  background: none;
  border-bottom-color: var(--blue);
}

.nav-menu > .nav-link.current:hover {
  background: none;
}

/* "Uitloggen"/"Licht"/"Donker" zijn <button>s (semantisch een actie, geen
   navigatie), maar moeten er identiek uitzien aan de platte .nav-link-items
   ernaast ("Status", "Beheer") — reset de UA-button-chrome die
   .nav-menu > .nav-link hierboven nog niet dekt (font, cursor,
   outline-gedrag). white-space: nowrap voorkomt dat "☀ Licht"/"☾ Donker" op
   een smalle viewport naar twee regels wrapt (waardoor de knop opeens veel
   hoger wordt dan de andere navitems en zijn tekst niet meer op dezelfde
   lijn staat). */
.nav-link-button {
  font: inherit;
  cursor: pointer;
  outline-offset: 2px;
  white-space: nowrap;
}

/* Huisje-icoon (zie nav.js) — iets kleiner dan de tegel-iconen op de
   homepage zelf, past zo bij de compacte hoogte van de rest van de nav.
   .nav-link.nav-home-link (i.p.v. alleen .nav-home-link) om dezelfde
   specificiteit te hebben als .nav-menu > .nav-link hierboven — anders wint
   die regel z'n border-bottom/padding gewoon, ongeacht volgorde in dit
   bestand. Zelfde padding-bottom/border-bottom (transparant) als de tekst-
   navitems i.p.v. die te resetten naar 0/none — anders staat de tekst
   daarnaast bovenaan een 6px hogere onzichtbare bodemruimte (voor de
   actieve-onderstreping) en het icoon gecentreerd in een kortere box,
   waardoor het icoon zichtbaar lager uitkomt dan de rest van de nav. */
.nav-link.nav-home-link {
  display: inline-flex;
  align-items: center;
}

.nav-home-link svg {
  width: 18px;
  height: 18px;
}

/* Geen blauwe actieve-onderstreping bij hover op het huisje (i.t.t. de
   tekst-navitems) — alleen de border-bottom-kleur resetten, de transparante
   border-bottom zelf (voor de box-hoogte/uitlijning hierboven) laten staan. */
.nav-link.nav-home-link:hover {
  border-bottom-color: transparent;
}

/* Uitloggen-icoon, helemaal rechts in .topbar-meta (zie nav.js) — los van
   .nav-menu, dus geen van de nav-link-stijlen hierboven van toepassing. */
.topbar-icon-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  padding: 0;
  border: none;
  border-radius: 6px;
  background: none;
  color: var(--text-muted);
  cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease;
}

.topbar-icon-button:hover {
  background: var(--border);
  color: var(--text);
}

.topbar-icon-button svg {
  width: 18px;
  height: 18px;
}

.badge {
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  background: var(--border);
}

.badge.mock {
  background: var(--tint-yellow-bg);
  color: var(--yellow);
}

.badge.live {
  background: var(--tint-green-bg);
  color: var(--green);
}

.badge.static {
  background: var(--border);
  color: var(--text-muted);
}

.badge.stale {
  background: var(--tint-orange-bg);
  color: var(--orange);
}

.columns {
  display: grid;
  grid-template-columns: 3fr 2fr;
  gap: 24px;
}

.placeholder-panel {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 200px;
  color: var(--text-muted);
  font-size: 18px;
}

.panel {
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 20px 24px;
}

.panel + .panel {
  margin-top: 20px;
}

.panel-note {
  margin-top: -8px;
  margin-bottom: 16px;
  color: var(--text-muted);
  font-size: 14px;
}

/* Betaalmomenten/Betaalde momenten als aparte tabs i.p.v. onder elkaar. */
.tab-bar {
  display: flex;
  gap: 8px;
  margin-bottom: 20px;
}

/* Dagplanning Team: week-toggle en dag/week-toggle naast elkaar i.p.v.
   onder elkaar (elk los een .tab-bar, hier alleen de outer spacing). */
.dag-view-toggles {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 16px;
  margin-bottom: 20px;
}

.dag-view-toggles .tab-bar {
  margin-bottom: 0;
}

/* Dagplanning Team (Uren): Dag/Week-toggle onder Deze week/Volgende week
   i.p.v. ernaast (i.t.t. Dagplanning Team, die naast elkaar blijft). */
.dag-view-toggles.stacked {
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}

.tab-button {
  padding: 8px 16px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--panel);
  color: var(--text-muted);
  font-weight: 600;
  font-size: 14px;
  cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
}

.tab-button:hover {
  background: var(--border);
  color: var(--text);
}

.tab-button.active {
  background: var(--border);
  color: var(--text);
  border-color: var(--blue);
}

.panel h2 {
  margin-top: 0;
  font-size: 20px;
}

.panel-header-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 16px;
}

/* Op Deals staat de header-row los in main (geen omringend .panel) — iets
   meer ruimte tot de containers eronder, zowel bij de titel als het filter. */
main > .panel-header-row {
  margin-bottom: 20px;
}

.panel-header-row h2 {
  margin: 0;
}

.filter-control {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  color: var(--text-muted);
}

.filter-control select {
  background: var(--bg);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 10px;
  font-size: 14px;
}

/* Eigen, duidelijk herkenbaar filterblok (i.p.v. losse "Label: select"-
   paren weggestopt in de header-row) — geïnspireerd op Exact Online's
   filterpaneel: altijd zichtbaar, een vaste kop ("Filters") en elk veld
   met zijn eigen label duidelijk erboven i.p.v. ernaast. */
.filter-panel {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 18px;
  margin-bottom: 20px;
}

.filter-panel-title {
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  margin-bottom: 12px;
}

.filter-panel-fields {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.filter-field {
  display: flex;
  flex-direction: column;
  gap: 5px;
  min-width: 180px;
}

.filter-field label {
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  color: var(--text-muted);
}

.filter-field select {
  background: var(--panel);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px 10px;
  font-size: 14px;
}

/* Persoon-kiezer op Dagplanning Team: los .filter-panel onder de gewone
   filters (eigen "space", zie panel-header-row hierboven) i.p.v. een
   dropdown — kolom per team (uit de Personeel-sheet, zie
   build-personeel.js), knop per naam eronder. Voor overzicht/
   toegankelijkheid: alle namen in één oogopslag, niks hoeft eerst open. */
.person-picker-panel {
  margin-bottom: 20px;
}

.person-picker-columns {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 20px;
  align-items: start;
}

.person-picker-column-title {
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--text-muted);
  margin-bottom: 8px;
}

.person-picker-button {
  display: block;
  width: 100%;
  text-align: left;
  padding: 8px 12px;
  border-radius: 8px;
  border: 1px solid var(--border);
  background: var(--panel);
  color: var(--text-muted);
  font: inherit;
  font-weight: 600;
  cursor: pointer;
}

.person-picker-button + .person-picker-button {
  margin-top: 6px;
}

.person-picker-button:hover {
  background: var(--border);
  color: var(--text);
}

.person-picker-button.active {
  background: var(--border);
  color: var(--text);
  border-color: var(--blue);
}

.text-input {
  width: 100%;
  background: var(--bg);
  color: var(--text);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px 10px;
  font-size: 15px;
  box-sizing: border-box;
}

.button-primary {
  background: var(--blue);
  color: #fff;
  border: none;
  border-radius: 8px;
  padding: 8px 18px;
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
}

.button-primary:hover {
  opacity: 0.9;
}

.button-primary:disabled {
  opacity: 0.6;
  cursor: default;
}

/* Status-pagina: compacte knop per tabelrij i.p.v. de volle button-primary-
   afmeting, en losse rode foutmelding-tekst (geen pill-achtergrond nodig). */
.refresh-button {
  padding: 6px 14px;
  font-size: 13px;
  margin-top: 6px;
}

.error-text {
  color: var(--red);
}

/* Voor foutmeldingen die eigenlijk geen storing zijn (bv. een tijdelijke
   429 rate limit) — zelfde plek/opmaak als .error-text, maar groen i.p.v.
   rood zodat in één oogopslag duidelijk is dat dit geen actie vereist. */
.error-text-normal {
  color: var(--green);
}

/* Ronde nog bezig (bv. Exact-retries of Banktransacties' extra call per
   afschrift kan een paar minuten duren) — neutrale kleur, geen rood/groen,
   zodat dit niet als "geen fout" of "storing" oogt maar als "nog niet klaar". */
.status-progress-text {
  color: var(--blue);
  font-style: italic;
}

.nowrap-cell {
  white-space: nowrap;
}

/* width: 1% is een bekende truc om een kolom in een auto-layout tabel te
   laten meekrimpen naar zijn inhoud i.p.v. mee te stretchen met de overige
   (100%-brede) tabelbreedte — de browser interpreteert dit als "zo smal
   mogelijk", zodat de resterende ruimte naar de kolommen zonder width gaat
   (hier: Foutmelding/Limitaties, die die ruimte ook echt nodig hebben). */
.fit-cell {
  width: 1%;
  white-space: nowrap;
}

.status-limits-cell {
  max-width: 320px;
  color: var(--text);
  font-size: 13px;
}

/* Kolom bewust smal gehouden (i.p.v. breder maken/scrollbaar) — een lange
   Exact-URL zonder spaties in de foutmelding zou anders de hele tabel breder
   dan het paneel duwen. overflow-wrap breekt zo'n URL af, dus de rij wordt
   hoger i.p.v. de tabel breder. */
.status-error-cell {
  max-width: 240px;
  overflow-wrap: break-word;
}

.status-limits-list {
  margin: 0;
  padding-left: 16px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 15px;
}

.data-table th {
  text-align: left;
  color: var(--text-muted);
  font-weight: 600;
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  padding: 8px 10px;
  border-bottom: 1px solid var(--border);
}

.data-table td {
  padding: 10px;
  border-bottom: 1px solid var(--border);
}

/* Klikbare kolomkop — zelfde platte-tekstbehandeling als de rest van
   .data-table th (kleur/hoofdlettergebruik komen daarvandaan), alleen de
   UA-button-chrome resetten. De driehoekjes volgen dezelfde stijl als het
   uitklap-chevrontje elders in de app (unicode i.p.v. een los SVG-icoontje). */
.sortable-th {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  background: none;
  border: none;
  padding: 0;
  margin: 0;
  font: inherit;
  color: inherit;
  /* Browsers geven <button> standaard text-align: center — een specifiek
     opgegeven waarde wint altijd van de geërfde text-align: left van
     .data-table th, dus zonder deze regel staat elke kop hier gecentreerd
     i.p.v. links, met name zichtbaar zodra de tekst naar 2 regels wrapt. */
  text-align: left;
  text-transform: inherit;
  letter-spacing: inherit;
  cursor: pointer;
}

.sortable-th:hover {
  color: var(--text);
}

.sortable-th::after {
  content: "▾";
  font-size: 9px;
  opacity: 0.3;
}

.sortable-th.sort-asc::after {
  content: "▴";
  opacity: 1;
  color: var(--blue);
}

.sortable-th.sort-desc::after {
  content: "▾";
  opacity: 1;
  color: var(--blue);
}

.data-table .num-cell {
  text-align: right;
}

/* € en bedrag samen als één rechts uitgelijnd blok — met space-between (€
   tegen links, getal tegen rechts) leek de ruimte ertussen per rij anders
   groot, omdat de kolombreedte op het langste bedrag in de kolom afstemt en
   kortere bedragen dan met een grotere lege strook overbleven. */
.data-table .currency-cell {
  text-align: right;
}

.currency-symbol {
  color: var(--text-muted);
  margin-right: 4px;
}

.client-group-header td {
  padding: 10px 10px 6px;
  border-bottom: 1px solid var(--border);
  font-weight: 700;
  font-size: 15px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--blue);
  background: rgba(74, 143, 224, 0.08);
}

.client-group-header:not(:first-child) td {
  padding-top: 18px;
}

.project-row td:first-child {
  padding-left: 22px;
}

/* Zichtbaarheid-per-rol-grid (beheer.html): de standaard .data-table
   (width:100%, table-layout:auto) liet Pagina de hele resterende breedte
   opvullen. table-layout: fixed + expliciete kolombreedtes op de th's is
   de voorspelbare oplossing, MAAR alleen als de tabel zelf ook een
   expliciete (niet-auto) breedte heeft — bij width:auto negeert de browser
   de losse kolombreedtes alsnog en rekt de tabel naar bijna de volle
   beschikbare breedte, ongeacht rijaantal/inhoud. 480px = som van de 3
   kolombreedtes hieronder (280 + 100 + 100). */
.access-grid-table {
  width: 480px;
  max-width: 100%;
  table-layout: fixed;
}

.access-grid-table th:first-child {
  width: 280px;
}

.access-grid-table th.fit-cell {
  width: 100px;
}

/* Links uitgelijnd zoals de categorietitels erboven, maar met een inspring
   zodat pagina's duidelijk als "onderdeel van" de titel erboven ogen i.p.v.
   op dezelfde regel te beginnen. td.access-page-cell (i.p.v. alleen de
   klasse) om .data-table td's padding-shorthand te verslaan — die heeft
   door de td-typeselector anders hogere specificiteit. */
td.access-page-cell {
  text-align: left;
  padding-left: 22px;
}

.section-heading {
  font-weight: 700;
  font-size: 15px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--blue);
  margin: 28px 0 12px;
}

.section-heading:first-child {
  margin-top: 0;
}

/* Maand-subgroepen binnen een status-container (bv. Betaalmomenten "Open —
   met datum invoeging") — eigen kader per maand, zodat maanden duidelijk
   van elkaar te onderscheiden zijn i.p.v. alleen via de kop. */
.month-subgroup {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 18px 18px;
}

.month-subgroup + .month-subgroup {
  margin-top: 16px;
}

.month-subheading {
  font-weight: 700;
  font-size: 18px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--text);
  margin: 0 0 10px;
}

/* Alleen gebruikt op Planning (naast de gedeelde .month-subheading, die ook
   door Betaalmomenten wordt hergebruikt) — dagnaam links, taken/gepland/
   capaciteit rechts uitgelijnd i.p.v. los achter de tekst aan te lopen. */
.month-subheading.month-subheading-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
}

.month-subheading-badges {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: flex-end;
}

/* Taken-telling naast de maandkop, in dezelfde "vlak"-stijl als .detail-kpi-
   tile elders (achtergrond + rand), maar compact i.p.v. een volledige tegel. */
.month-count-badge {
  display: inline-block;
  margin-left: 8px;
  padding: 2px 10px;
  border-radius: 8px;
  background: var(--bg);
  border: 1px solid var(--border);
  font-size: 12px;
  font-weight: 700;
  text-transform: none;
  letter-spacing: normal;
  color: var(--text);
}

/* Gepland-badge op de Planning-pagina slaat om naar rood/oranje zodra de
   geschatte tijd voor een dag de dagcapaciteit (Personeel-sheet) overschrijdt. */
.month-count-badge.over-capacity {
  background: rgba(224, 87, 74, 0.12);
  border-color: var(--red);
  color: var(--red);
}

/* Werktijd/capaciteit-tekst in de dagkop zelf (Dagplanning Team) i.p.v. een
   losse badge — zelfde rood-signaal als .month-count-badge.over-capacity. */
.month-subheading-capacity.over-capacity {
  color: var(--red);
}

/* Inkoopfacturen: goedgekeurd/nog-goed-te-keuren naast elkaar per maand. */
.approval-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
  margin-top: 4px;
}

/* Beheer: onafhankelijke panelen naast elkaar i.p.v. onder elkaar, voor
   panelen die weinig verticale ruimte innemen (bv. Zichtbaarheid per rol +
   Gevoelige relaties). Panelen behouden hun eigen breedte/inhoud; deze
   wrapper regelt alleen de rij-layout. Geen align-items: standaard grid-
   gedrag (stretch) rekt beide panelen naar de hoogte van de langste, zodat
   de kortere niet los/onaf oogt naast de lange. */
.panel-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
}

/* .panel + .panel (hierboven) is bedoeld voor onder-elkaar-gestapelde
   panelen, maar treft via de sibling-combinator óók het tweede paneel hier
   naast-elkaar — de 20px margin-top duwde dat paneel dan verticaal uit het
   grid-rooster, terwijl align-items: stretch de onderkant alsnog gelijk
   trekt. Resultaat: paneel oogt korter/lager i.p.v. even hoog. */
.panel-columns > .panel + .panel {
  margin-top: 0;
}

/* .panel + .panel (elders in dit bestand) mist deze combinatie, omdat
   .panel-columns zelf geen .panel is — zonder deze regel staat er geen
   ruimte tussen een voorafgaand paneel (bv. Gebruikers op Beheer) en de
   naast-elkaar-rij eronder. */
.panel + .panel-columns {
  margin-top: 20px;
}

@media (max-width: 900px) {
  .panel-columns {
    grid-template-columns: 1fr;
  }
}

.approval-column-heading {
  font-weight: 700;
  font-size: 14px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--text-muted);
  margin: 0 0 8px;
}

.group-container {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 16px 20px 20px;
  margin-bottom: 20px;
}

.group-container:last-child {
  margin-bottom: 0;
}

.client-group-meta {
  margin-left: 12px;
  font-weight: 500;
  font-size: 13px;
  text-transform: none;
  letter-spacing: normal;
  color: var(--text-muted);
}

.cell-subtext {
  margin-top: 2px;
  color: var(--text-muted);
  font-size: 13px;
}

.filter-select {
  padding: 6px 12px;
  border-radius: 8px;
  background: var(--panel);
  border: 1px solid var(--border);
  color: var(--text);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
}

.filter-select:hover,
.filter-select:focus {
  border-color: var(--blue);
}

.status-pill {
  display: inline-block;
  max-width: 100%;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 13px;
  font-weight: 600;
  text-transform: none;
  letter-spacing: normal;
  overflow-wrap: break-word;
  word-break: break-word;
  white-space: normal;
}

/* Zeker/Onzeker-label onder de dagaanduiding op de Events-pagina. */
.certainty-label {
  margin-top: 4px;
  font-size: 11px;
  padding: 2px 8px;
}

/* Kalenderweergave van Events (events-kaarten.html) — een echte
   maandkalender: 7 kolommen, lege dagvakken voor dagen zonder events, met
   compacte kaarten in het dagvak van elke datum die wél events heeft. Een
   extra smalle kolom vooraan toont het ISO-weeknummer per weekrij. */
.calendar-grid {
  display: grid;
  grid-template-columns: auto repeat(7, 1fr);
  gap: 12px;
}

.calendar-weekday-header {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--text-muted);
  text-align: center;
  padding-bottom: 8px;
}

.calendar-week-number {
  display: flex;
  align-items: center;
  justify-content: center;
  min-width: 28px;
  font-size: 12px;
  font-weight: 700;
  color: var(--text-muted);
}

.calendar-day-cell {
  min-height: 130px;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  background: var(--bg);
}

.calendar-day-empty {
  border-color: transparent;
  background: transparent;
}

.calendar-day-today {
  border-color: var(--blue);
}

.calendar-day-number {
  font-size: 13px;
  font-weight: 700;
  color: var(--text-muted);
}

.calendar-day-today .calendar-day-number {
  color: var(--blue);
}

.calendar-event-card {
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 12px 14px;
  background: var(--panel);
  display: flex;
  flex-direction: column;
  gap: 8px;
  cursor: pointer;
}

/* Event-type-kleur op de kaart zelf i.p.v. alleen het kleine label —
   zelfde gedempte achtergrondtinten als de status-pill-varianten hierboven,
   nu als kaartachtergrond. Het label erin wordt daardoor gewoon witte tekst
   (zie de regel eronder) i.p.v. een eigen gekleurde badge. */
.calendar-event-card.event-color-red {
  background: var(--tint-red-bg);
}
.calendar-event-card.event-color-orange {
  background: var(--tint-orange-bg);
}
.calendar-event-card.event-color-yellow-orange {
  background: var(--tint-yellow-orange-bg);
}
.calendar-event-card.event-color-yellow {
  background: var(--tint-yellow-bg);
}
.calendar-event-card.event-color-yellow-green {
  background: var(--tint-yellow-green-bg);
}
.calendar-event-card.event-color-green {
  background: var(--tint-green-bg);
}
.calendar-event-card.event-color-blue {
  background: var(--tint-blue-bg);
}

/* Alleen het event-type-label (niet de zeker/onzeker-badge, die zijn eigen
   betekenisvolle kleur behoudt) — vandaar scoped op .calendar-event-type-row
   i.p.v. alle .status-pill's in de kaart. */
.calendar-event-card[class*="event-color-"] .calendar-event-type-row .status-pill {
  background: transparent;
  color: var(--event-card-label-text);
  /* Verticale padding behouden (i.p.v. volledig op 0) zodat deze regel
     even hoog blijft als een normale (niet-gekleurde) pill-kaart —
     anders werd de kaart als geheel merkbaar lager. */
  padding: 3px 0;
}

.calendar-event-header {
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
}

.calendar-event-time {
  font-size: 12px;
  color: var(--text-muted);
  font-weight: 700;
}

.calendar-event-name {
  font-size: 13px;
  font-weight: 700;
  line-height: 1.4;
}

.calendar-event-meta {
  font-size: 12px;
  color: var(--text-muted);
}

/* "Bevestigd" en "Aangemeld" horen prominenter te zijn dan de overige
   metadata (locatie e.d.) — eigen witte tekst i.p.v. gedempt grijs, met een
   vetgedrukt label ervoor. */
.calendar-event-highlight {
  font-size: 13px;
  color: var(--text);
}

.calendar-event-highlight-label {
  font-weight: 700;
  margin-right: 4px;
}

.calendar-event-type-row {
  display: flex;
}

/* Aangemeld/Bevestigd als eigen blok onder de aanmeld-knop, met duidelijke
   ruimte tussen de twee regels i.p.v. de standaard kaart-brede 8px. */
.calendar-event-status-group {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: 4px;
  padding-top: 8px;
  border-top: 1px solid var(--border);
}

.status-pill.on_track {
  background: var(--tint-green-bg);
  color: var(--green);
}

.status-pill.at_risk {
  background: var(--tint-yellow-bg);
  color: var(--yellow);
}

.status-pill.off_track {
  background: var(--tint-red-bg);
  color: var(--red);
}

.status-pill.unknown {
  background: var(--border);
  color: var(--text-muted);
}

/* Asana-statuskleuren (custom field "Status" op Support-tickets) */
.status-pill.status-color-red {
  background: var(--tint-red-bg);
  color: var(--red);
}

.status-pill.status-color-orange {
  background: var(--tint-orange-bg);
  color: var(--orange);
}

.status-pill.status-color-yellow-orange {
  background: var(--tint-yellow-orange-bg);
  color: var(--yellow-orange);
}

.status-pill.status-color-yellow {
  background: var(--tint-yellow-bg);
  color: var(--yellow);
}

.status-pill.status-color-yellow-green {
  background: var(--tint-yellow-green-bg);
  color: var(--yellow-green);
}

.status-pill.status-color-green {
  background: var(--tint-green-bg);
  color: var(--green);
}

.status-pill.status-color-blue {
  background: var(--tint-blue-bg);
  color: var(--blue);
}

.status-pill.status-color-cool-gray,
.status-pill.status-color-none {
  background: var(--border);
  color: var(--text-muted);
}

.count-overdue {
  color: var(--red);
  font-weight: 700;
}

.count-today {
  color: var(--yellow);
  font-weight: 700;
}

.people-grid {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.person-card {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 16px;
}

.person-card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 8px;
}

.person-card-header .person-name {
  font-weight: 700;
  font-size: 17px;
}

.person-card-counts {
  display: flex;
  gap: 12px;
  font-size: 14px;
  color: var(--text-muted);
}

.person-tasks {
  list-style: none;
  margin: 8px 0 0;
  padding: 0;
  font-size: 14px;
}

.person-tasks li {
  padding: 4px 0;
  border-top: 1px solid var(--border);
  display: flex;
  justify-content: space-between;
  gap: 12px;
}

.person-week-block {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 16px;
}

.person-week-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 12px;
}

.person-week-header.clickable {
  cursor: pointer;
}

.person-week-header .person-name {
  font-weight: 700;
  font-size: 17px;
}

/* Open/overdue/vandaag/gepland/capaciteit rechts op de Planning-headerbalk —
   elk item krijgt dezelfde breedte en rechts uitgelijnde tekst, zodat de
   kolommen bij elke persoon op dezelfde horizontale positie staan i.p.v. mee
   te bewegen met het aantal cijfers per rij. Los van .person-card-counts
   (dat blijft ongewijzigd voor de projectkaart-popups elders). */
.person-week-counts {
  display: flex;
  gap: 12px;
  font-size: 14px;
  color: var(--text-muted);
}

.person-week-counts span {
  min-width: 96px;
  text-align: right;
}

.person-week-detail {
  margin-top: 12px;
}

/* Twee weekblokken (deze week/volgende week) binnen dezelfde persoonskaart
   op de Planning-pagina — eigen kader per week (zelfde behandeling als
   .month-subgroup) i.p.v. los binnen het kader van de persoonskaart te
   zweven, zodat de weken duidelijk van elkaar te onderscheiden zijn. */
.week-block {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 18px 18px;
}

.week-block + .week-block {
  margin-top: 16px;
}

/* Dagplanning: huidige week links, volgende week rechts, met dezelfde dag
   steeds op één rij (Maandag naast Volgende maandag, enz. — zie
   renderWeekPairGrid in dagplanning.js). Grid i.p.v. twee losse kolommen,
   zodat elke rij vanzelf even hoog wordt als de langste kant, ongeacht
   hoeveel taken elke kant heeft. */
.week-pair-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}

.week-pair-column-header {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 18px 18px;
}

.week-pair-column-header .section-heading {
  margin-top: 0;
}

/* .month-subgroup + .month-subgroup (hierboven) is bedoeld voor onder-elkaar
   gestapelde dag-groepen, maar treft via de sibling-combinator óók de
   rechterkolom hier binnen .week-pair-grid — dezelfde valkuil als eerder bij
   .panel-columns. Zonder deze override komt de rechterkant 16px lager te
   staan dan de linkerkant op elke rij. */
.week-pair-grid > .month-subgroup + .month-subgroup {
  margin-top: 0;
}

/* Grid's align-items: stretch (default) zou dit vanzelf moeten regelen, maar
   Safari rekt grid-items met een <table>-nakomeling (zoals .dag-task-table
   hierin) niet altijd betrouwbaar mee — de kortere kant (bv. Volgende
   dinsdag zonder taken) bleef dan lager dan de langere kant op dezelfde
   rij. Expliciete height: 100% dwingt het af, ook in Safari. */
.week-pair-grid > .month-subgroup,
.week-pair-grid > .week-pair-empty {
  height: 100%;
}

/* Lege rechtercel voor Zaterdag/Zondag, die geen "Volgende"-tegenhanger
   hebben — houdt de grid-rij bezet zonder een zichtbaar leeg kader te
   tonen. */
.week-pair-empty {
  border: none;
  background: none;
  padding: 0;
}

@media (max-width: 900px) {
  .week-pair-grid {
    grid-template-columns: 1fr;
  }
}

.person-week-columns {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
}

.week-column {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px;
}

.week-column-header {
  margin-bottom: 8px;
}

.week-column-title {
  font-weight: 600;
  font-size: 13px;
  color: var(--blue);
}

.week-column-range {
  font-size: 11px;
  color: var(--text-muted);
}

.week-day {
  margin-top: 8px;
}

.week-day:first-of-type {
  margin-top: 0;
}

.week-day-label {
  font-size: 12px;
  font-weight: 600;
  color: var(--text-muted);
  border-top: 1px solid var(--border);
  padding-top: 6px;
}

.week-day:first-of-type .week-day-label {
  border-top: none;
  padding-top: 0;
}

.week-day-tasks {
  list-style: none;
  margin: 4px 0 0;
  padding: 0;
  font-size: 13px;
}

.week-day-tasks li {
  padding: 2px 0;
}

@media (max-width: 900px) {
  .person-week-columns {
    grid-template-columns: 1fr;
  }
}

.task-project {
  color: var(--text-muted);
  font-size: 12px;
}

.task-notes {
  white-space: pre-line;
}

.task-comment-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.task-comment {
  padding: 8px 10px;
  border-left: 2px solid var(--border);
}

.task-comment-meta {
  color: var(--text-muted);
  font-size: 11px;
  margin-bottom: 2px;
}

.task-comment-text {
  font-size: 13px;
  white-space: pre-line;
}

.task-attachment-list {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 13px;
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.task-attachment-list a {
  color: var(--blue);
}

.days-edit-green {
  color: var(--green);
  font-weight: 600;
}

.days-edit-orange {
  color: var(--yellow);
  font-weight: 600;
}

.days-edit-red {
  color: var(--red);
  font-weight: 600;
}

.error-banner {
  margin-top: 24px;
  padding: 12px 16px;
  border-radius: 8px;
  background: var(--tint-red-bg);
  color: var(--red);
}

/* Rustiger variant voor een herkende rate limit (zie isRateLimitError in
   dashboard-render.js) — dit is geen storing, dus geen alarmerend rood/
   dwingende technische foutmelding, alleen een neutrale toelichting. */
.error-banner.error-banner-notice {
  background: var(--tint-blue-bg);
  color: var(--text);
}

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

/* Elk venster (Plan aanbieden, Conversiefase, ...) in een eigen container
   zodat de fasegroepen visueel echt los van elkaar staan i.p.v. alleen een
   scheidingslijntje. */
.kanban-window {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 16px 20px 20px;
  margin-bottom: 20px;
}

.kanban-window:last-child {
  margin-bottom: 0;
}

.kanban-window-title {
  font-weight: 700;
  font-size: 16px;
  color: var(--text);
  margin-bottom: 10px;
}

.kanban-board {
  display: flex;
  gap: 16px;
  overflow-x: auto;
  padding-bottom: 8px;
}

.kanban-column {
  flex: 1 1 0;
  min-width: 0;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  max-height: 75vh;
}

.kanban-column-header {
  padding: 12px 14px;
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  background: var(--bg);
  border-radius: 10px 10px 0 0;
}

.kanban-column.stage-red {
  background: rgba(224, 87, 74, 0.1);
  border-color: rgba(224, 87, 74, 0.45);
}

.kanban-column.stage-red .kanban-column-header {
  background: rgba(224, 87, 74, 0.1);
}

.kanban-column.stage-orange {
  background: rgba(224, 129, 58, 0.1);
  border-color: rgba(224, 129, 58, 0.45);
}

.kanban-column.stage-orange .kanban-column-header {
  background: rgba(224, 129, 58, 0.1);
}

.kanban-column.stage-green {
  background: rgba(51, 196, 129, 0.1);
  border-color: rgba(51, 196, 129, 0.45);
}

.kanban-column.stage-green .kanban-column-header {
  background: rgba(51, 196, 129, 0.1);
}

.kanban-column-title {
  font-weight: 700;
  font-size: 14px;
  color: var(--blue);
}

.kanban-column-meta {
  margin-top: 4px;
  font-size: 12px;
  color: var(--text-muted);
}

.kanban-column-body {
  padding: 10px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.kanban-empty {
  color: var(--text-muted);
  font-size: 13px;
  padding: 8px 4px;
}

/* box-shadow i.p.v. alleen op de border/achtergrond leunen om de kaart van
   de (getinte) kolomachtergrond te onderscheiden — in het lichte thema
   liggen kolom-tint en kaartachtergrond kleurtechnisch zo dicht bij elkaar
   dat de kaarten er zonder duidelijke schaduw bijna in oplossen. */
.kanban-card {
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 10px 12px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.08);
}

.kanban-card.clickable {
  cursor: pointer;
}

.kanban-card.clickable:hover {
  border-color: var(--blue);
}

.kanban-card-title {
  font-weight: 600;
  font-size: 14px;
  margin-bottom: 4px;
}

.ticket-ref {
  display: inline-block;
  background: var(--border);
  color: var(--blue);
  font-size: 11px;
  font-weight: 700;
  padding: 1px 6px;
  border-radius: 4px;
}

.kanban-card-org {
  color: var(--text-muted);
  font-size: 13px;
  margin-bottom: 8px;
}

.kanban-card-rep {
  color: var(--blue);
  font-size: 12px;
  margin-bottom: 8px;
}

.kanban-card-team {
  margin-bottom: 8px;
}

.kanban-card-team .status-pill {
  font-size: 11px;
  padding: 2px 8px;
  margin-right: 4px;
}

.kanban-card-footer {
  display: flex;
  justify-content: space-between;
  font-size: 13px;
}

.kanban-card-date {
  margin-top: 6px;
  font-size: 12px;
  color: var(--yellow);
}

.kanban-card-activity {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--border);
  font-size: 12px;
  color: var(--text-muted);
}

.project-row.clickable {
  cursor: pointer;
}

.project-row.clickable:hover {
  background: rgba(74, 143, 224, 0.08);
}

.inline-status {
  margin-right: 10px;
}

/* Status-kolom en de kolom Activiteit dicht tegen elkaar aan i.p.v. de
   standaard tabel-padding ertussen. */
.data-table td.status-col {
  padding-right: 4px;
}

.data-table td.tight-left {
  padding-left: 4px;
}

/* Activiteitentabellen (Sales-leadkaarten, Deals-popup): vaste kolombreedtes
   zodat Status/Type/Datum/Eigenaar overal op dezelfde verticale positie
   staan, i.p.v. dat elke tabel zijn kolommen op eigen inhoud afstemt. */
.activity-table {
  table-layout: fixed;
}

.activity-table th:nth-child(1),
.activity-table td:nth-child(1) {
  width: 110px;
}

.activity-table th:nth-child(3),
.activity-table td:nth-child(3) {
  width: 190px;
}

.activity-table th:nth-child(4),
.activity-table td:nth-child(4) {
  width: 110px;
}

.activity-table th:nth-child(5),
.activity-table td:nth-child(5) {
  width: 160px;
}

/* Deal Activiteiten-tabel (per eigenaar-container): vaste kolombreedtes zodat
   elke eigenaar-groep dezelfde uitlijning heeft i.p.v. per tabel op eigen
   inhoud af te stemmen. */
.deal-activity-table {
  table-layout: fixed;
}

.deal-activity-table th,
.deal-activity-table td {
  overflow-wrap: break-word;
}

.deal-activity-table th:nth-child(1),
.deal-activity-table td:nth-child(1) {
  width: 9%;
}

.deal-activity-table th:nth-child(2),
.deal-activity-table td:nth-child(2) {
  width: 16%;
}

.deal-activity-table th:nth-child(3),
.deal-activity-table td:nth-child(3) {
  width: 25%;
}

.deal-activity-table th:nth-child(4),
.deal-activity-table td:nth-child(4) {
  width: 14%;
}

.deal-activity-table th:nth-child(5),
.deal-activity-table td:nth-child(5) {
  width: 14%;
}

.deal-activity-table th:nth-child(6),
.deal-activity-table td:nth-child(6) {
  width: 12%;
}

.deal-activity-table th:nth-child(7),
.deal-activity-table td:nth-child(7) {
  width: 10%;
}

/* Inhaakdagen-tabel (per maand-container): vaste kolombreedte voor de datum
   zodat elke maand dezelfde uitlijning heeft. */
.inhaakdagen-table {
  table-layout: fixed;
}

.inhaakdagen-table th:nth-child(1),
.inhaakdagen-table td:nth-child(1) {
  width: 15%;
}

.inhaakdagen-table th:nth-child(2),
.inhaakdagen-table td:nth-child(2) {
  width: 85%;
}

/* GA4-tabellen: vaste kolombreedtes i.p.v. auto-breedte op basis van inhoud. */
.ga4-channel-table,
.ga4-conversion-table,
.ga4-page-table {
  table-layout: fixed;
}

.ga4-channel-table th:nth-child(1),
.ga4-channel-table td:nth-child(1) {
  width: 40%;
}

.ga4-conversion-table th:nth-child(1),
.ga4-conversion-table td:nth-child(1) {
  width: 70%;
}

.ga4-page-table th:nth-child(1),
.ga4-page-table td:nth-child(1) {
  width: 55%;
}

.ga4-page-table th:nth-child(2),
.ga4-page-table td:nth-child(2),
.ga4-page-table th:nth-child(3),
.ga4-page-table td:nth-child(3),
.ga4-page-table th:nth-child(4),
.ga4-page-table td:nth-child(4) {
  width: 15%;
}

/* Betaalmomenten-tabel: 4 gelijke kolommen i.p.v. auto-breedte op basis van
   inhoud, voor uniforme uitlijning tussen de status-containers. */
.payment-table {
  table-layout: fixed;
}

.payment-table th,
.payment-table td {
  width: 25%;
  overflow-wrap: break-word;
}

/* Events-tabel (per maand-container): vaste kolombreedtes (in %, samen 100)
   zodat elke maand dezelfde uitlijning heeft i.p.v. per tabel op eigen inhoud
   af te stemmen. Alle 6 kolommen hebben hier bewust een breedte — één kolom
   zonder breedte trekt anders alle overige ruimte naar zich toe, wat een te
   grote sprong tussen die en de volgende kolom gaf. */
.events-table {
  table-layout: fixed;
}

.events-table th,
.events-table td {
  overflow-wrap: break-word;
}

/* Scheidingslijn vóór de aanmeld-gerelateerde kolommen (Interesse/Aangemeld/
   Aanmelden), los van de event-gegevens ervoor. */
.events-table-divider {
  border-left: 1px solid var(--border);
}

.events-table th:nth-child(1),
.events-table td:nth-child(1) {
  width: 7%;
}

.events-table th:nth-child(2),
.events-table td:nth-child(2) {
  width: 18%;
}

.events-table th:nth-child(3),
.events-table td:nth-child(3) {
  width: 10%;
}

.events-table th:nth-child(4),
.events-table td:nth-child(4) {
  width: 11%;
}

.events-table th:nth-child(5),
.events-table td:nth-child(5) {
  width: 5%;
}

.events-table th:nth-child(6),
.events-table td:nth-child(6) {
  width: 5%;
}

.events-table th:nth-child(7),
.events-table td:nth-child(7) {
  width: 8%;
}

.events-table th:nth-child(8),
.events-table td:nth-child(8) {
  width: 11%;
}

.events-table th:nth-child(9),
.events-table td:nth-child(9) {
  width: 7%;
}

.events-table th:nth-child(10),
.events-table td:nth-child(10) {
  width: 10%;
}

.events-table th:nth-child(11),
.events-table td:nth-child(11) {
  width: 8%;
}

/* Support-tickettabel (per status-container): vaste kolombreedtes zodat elke
   status dezelfde uitlijning heeft i.p.v. per tabel op eigen inhoud af te
   stemmen. */
.support-table {
  table-layout: fixed;
}

.support-table th:nth-child(2),
.support-table td:nth-child(2) {
  width: 150px;
}

.support-table th:nth-child(3),
.support-table td:nth-child(3) {
  width: 180px;
}

.support-table th:nth-child(4),
.support-table td:nth-child(4) {
  width: 110px;
}

.support-table th:nth-child(5),
.support-table td:nth-child(5) {
  width: 180px;
}

.support-table th:nth-child(6),
.support-table td:nth-child(6) {
  width: 110px;
}

.support-table th:nth-child(7),
.support-table td:nth-child(7) {
  width: 110px;
}

.note-icon {
  margin-left: 8px;
  font-size: 13px;
}

.note-detail-row td {
  padding: 8px 10px 14px 10px;
  background: rgba(255, 255, 255, 0.02);
  color: var(--text-muted);
  font-size: 14px;
}

/* Uitklap-chevron voor rijen die een .note-detail-row-sibling in-/uitklappen
   (Performance-per-persoon-tabellen) i.p.v. een popup te openen. */
.expand-chevron {
  display: inline-block;
  margin-right: 8px;
  color: var(--text-muted);
  transition: transform 0.2s ease;
}

.expand-chevron.expanded {
  transform: rotate(90deg);
}

.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 100;
  padding: 24px;
}

/* [hidden] alleen heeft geen voorrang op de eigen "display: flex" hierboven
   (auteur-CSS wint altijd van de default user-agent-regel) — zonder dit
   blijft de popup na sluiten zichtbaar hangen. */
.modal-overlay[hidden] {
  display: none;
}

.modal-box {
  position: relative;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 28px 32px;
  max-width: 860px;
  width: 100%;
  max-height: 80vh;
  overflow-y: auto;
}

.modal-close {
  position: absolute;
  top: 10px;
  right: 14px;
  background: none;
  border: none;
  color: var(--text-muted);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
}

.modal-close:hover {
  color: var(--text);
}

.apply-success {
  padding: 8px 0 4px;
}

.apply-success-message {
  color: var(--green);
  font-size: 18px;
  font-weight: 700;
  margin: 0 0 4px;
}

.modal-box h3 {
  margin: 0 24px 16px 0;
  font-size: 20px;
}

.modal-field {
  margin-bottom: 12px;
}

.modal-link-field {
  margin-top: 16px;
}

#event-detail-apply-button {
  margin-top: 16px;
}

.event-notes-textarea {
  resize: vertical;
  min-height: 160px;
  font-family: inherit;
  margin-bottom: 10px;
}

/* Velden links, Sales-notities rechts in de event-detailmodal — eigen
   klasse i.p.v. .detail-two-column hergebruikt, want die verwijdert de
   marge tussen .modal-field's (prima voor de bestaande 1-veld-per-kolom
   toepassingen elders, maar hier staan links juist meerdere velden onder
   elkaar die wél ruimte tussen elkaar nodig hebben). */
.event-detail-columns {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
  align-items: start;
}

.modal-field .modal-label {
  color: var(--text-muted);
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  margin-bottom: 3px;
}

.modal-field .modal-value {
  font-size: 15px;
  white-space: pre-wrap;
}

/* Uitgeklapte persoonsrij (Everhour/Terugverdienscore/Timesheets) — KPI's
   naast elkaar in vierkantjes i.p.v. onder elkaar zoals de modal-fields. */
.detail-kpi-row {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 16px;
}

.detail-kpi-tile {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 10px 14px;
  min-width: 120px;
}

.detail-kpi-tile .value {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.1;
}

.detail-kpi-tile .label {
  margin-top: 4px;
  color: var(--text-muted);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

/* Zelfde vlak-stijl als .detail-kpi-tile, hergebruikt voor "Verdeling naar
   project"/"Verdeling naar Artikel" zodat die net zo als afgebakende
   blokken ogen i.p.v. los tegen de achtergrond te staan. */
.detail-panel {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px 16px;
}

/* Binnen een afgebakend vlak (.detail-panel) mag de kv-table wél de volle
   breedte van dat vlak gebruiken, met de tijd rechts uitgelijnd tegen de
   rand — een normale twee-koloms lijst binnen een zichtbare grens, anders
   dan de niet-afgebakende varianten waar dat juist te ver van het label
   af zou staan. */
.detail-panel .detail-kv-table {
  width: 100%;
}

.detail-panel .detail-kv-table td:last-child {
  text-align: right;
}

/* "Verdeling naar project" gebruikt sinds de 3-koloms-uitsplitsing (Team/
   Project/Tijd) een .detail-time-table i.p.v. .detail-kv-table — die moet
   binnen het vlak dezelfde volle breedte krijgen. */
.detail-panel .detail-time-table {
  width: 100%;
}

/* "Verdeling naar project"/"Verdeling naar Artikel" op Planning worden
   gevolgd door de dag-groepen — zelfde tussenruimte als tussen twee
   .month-subgroup-blokken onderling. */
.detail-panel + .month-subgroup,
.detail-two-column + .month-subgroup {
  margin-top: 16px;
}

/* Tijden-tabel in de uitgeklapte persoonsrij — losse rij per taak, met een
   eigen projectkolom en declarabel/niet-declarabel-indicator. */
.detail-time-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  margin-top: 4px;
}

.detail-time-table th,
.detail-time-table td {
  padding: 6px 10px;
  text-align: left;
  border-top: 1px solid var(--border);
}

.detail-time-table th {
  border-top: none;
  color: var(--text-muted);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}

/* Uren-kolom in de Tijden-tabel (Timesheets) — rechts uitgelijnd en met
   minder padding tussen de cijfers en de Declarabel-kolom ernaast. */
.detail-time-table .num-cell {
  text-align: right;
  padding-right: 4px;
}

/* Dagplanning/Planning/Dagplanning Team: elke dag heeft zijn eigen
   .dag-task-table (los <table>-element), en zonder vaste kolombreedtes
   berekent de browser die per tabel apart op basis van de eigen inhoud —
   dan schuiven Team/Project/Artikel/etc. horizontaal tussen de dagen.
   table-layout: fixed + dezelfde percentages voor elke instantie houdt de
   kolommen overal (ook tussen dagen/weken onderling) op precies dezelfde
   x-positie. */
.dag-task-table {
  table-layout: fixed;
}

.dag-task-table th:nth-child(1),
.dag-task-table td:nth-child(1) {
  width: 20%;
}

.dag-task-table th:nth-child(2),
.dag-task-table td:nth-child(2) {
  width: 11%;
}

.dag-task-table th:nth-child(3),
.dag-task-table td:nth-child(3) {
  width: 18%;
}

.dag-task-table th:nth-child(4),
.dag-task-table td:nth-child(4) {
  width: 14%;
}

.dag-task-table th:nth-child(5),
.dag-task-table td:nth-child(5) {
  width: 9%;
}

.dag-task-table th:nth-child(6),
.dag-task-table td:nth-child(6) {
  width: 9%;
}

.dag-task-table th:nth-child(7),
.dag-task-table td:nth-child(7) {
  width: 10%;
}

.dag-task-table th:nth-child(8),
.dag-task-table td:nth-child(8) {
  width: 9%;
}

/* Dagplanning Team toont geen Team-kolom (elke persoon is al gefilterd op
   naam, dus overbodig) maar wel Status/Afspraak/Collaborators erbij — 10
   kolommen in de volgorde Status/Taak/Project/Artikel/Deadline/Afspraak/
   Work time/Actual time/Estimated Time/Collaborators, eigen breedtes los van
   de 8-koloms basis-percentages hierboven (die Dagplanning/Planning nog
   gebruiken). */
.dag-task-table-no-team th:nth-child(1),
.dag-task-table-no-team td:nth-child(1) {
  width: 10%;
}

.dag-task-table-no-team th:nth-child(2),
.dag-task-table-no-team td:nth-child(2) {
  width: 15%;
}

.dag-task-table-no-team th:nth-child(3),
.dag-task-table-no-team td:nth-child(3) {
  width: 13%;
}

.dag-task-table-no-team th:nth-child(4),
.dag-task-table-no-team td:nth-child(4) {
  width: 10%;
}

.dag-task-table-no-team th:nth-child(5),
.dag-task-table-no-team td:nth-child(5) {
  width: 9%;
}

.dag-task-table-no-team th:nth-child(6),
.dag-task-table-no-team td:nth-child(6) {
  width: 8%;
}

.dag-task-table-no-team th:nth-child(7),
.dag-task-table-no-team td:nth-child(7) {
  width: 8%;
}

.dag-task-table-no-team th:nth-child(8),
.dag-task-table-no-team td:nth-child(8) {
  width: 8%;
}

.dag-task-table-no-team th:nth-child(9),
.dag-task-table-no-team td:nth-child(9) {
  width: 8%;
}

.dag-task-table-no-team th:nth-child(10),
.dag-task-table-no-team td:nth-child(10) {
  width: 11%;
}

/* Dagplanning Team (Uren): geregistreerde tijd i.p.v. geplande taken, dus
   geen Status/Deadline/Afspraak/Work time/Estimated Time/Collaborators —
   alleen Taak/Project/Artikel/Notitie/Tijd, eigen 5-koloms breedteset. */
.dag-task-table-uren th:nth-child(1),
.dag-task-table-uren td:nth-child(1) {
  width: 28%;
}

.dag-task-table-uren th:nth-child(2),
.dag-task-table-uren td:nth-child(2) {
  width: 20%;
}

.dag-task-table-uren th:nth-child(3),
.dag-task-table-uren td:nth-child(3) {
  width: 16%;
}

.dag-task-table-uren th:nth-child(4),
.dag-task-table-uren td:nth-child(4) {
  width: 26%;
}

.dag-task-table-uren th:nth-child(5),
.dag-task-table-uren td:nth-child(5) {
  width: 10%;
}

/* Collaborators-kolom: kleine, licht overlappende ronde avatars (net als
   Asana zelf) — profielfoto indien geüpload, anders initialen op een
   effen achtergrond. Naam komt als title-tooltip bij hover. */
.collaborator-avatars {
  display: flex;
}

.collaborator-avatar {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 2px solid var(--panel);
  object-fit: cover;
  margin-left: -8px;
}

.collaborator-avatar:first-child {
  margin-left: 0;
}

.collaborator-avatar-initials {
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--border);
  color: var(--text);
  font-size: 10px;
  font-weight: 700;
}

/* Verdeling naar dienst/project/Artikel in de uitgeklapte persoonsrij —
   bewust géén width:100%: de uren horen dicht bij de naam i.p.v. helemaal
   rechts uitgelijnd. Een <table> is standaard net als een block-element
   ("width: auto" = volle beschikbare breedte), dus width:fit-content is nodig
   om 'm daadwerkelijk op de inhoud te laten passen i.p.v. te rekken. */
.detail-kv-table {
  width: fit-content;
  border-collapse: collapse;
  font-size: 13px;
  margin-top: 4px;
}

/* Verdeling naar project + Verdeling naar Artikel naast elkaar. */
.detail-two-column {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 24px;
  margin-top: 8px;
}

.detail-two-column .modal-field {
  margin-bottom: 0;
}

.detail-kv-table td {
  padding: 4px 8px 4px 0;
  border-top: 1px solid var(--border);
}

.detail-kv-table tr:first-child td {
  border-top: none;
}

.detail-kv-table td:last-child {
  padding-right: 0;
  font-weight: 600;
}

/* Everhour "Performance per persoon" — werkverdelingsbalk en trendtabel. */
.performance-table th:nth-child(1),
.performance-table td:nth-child(1) {
  width: 13%;
}

.performance-table th:nth-child(2),
.performance-table td:nth-child(2) {
  width: 7%;
}

.performance-table th:nth-child(3),
.performance-table td:nth-child(3) {
  width: 8%;
}

.performance-table th:nth-child(4),
.performance-table td:nth-child(4) {
  width: 14%;
}

.performance-table th:nth-child(5),
.performance-table td:nth-child(5) {
  width: 8%;
}

.performance-table th:nth-child(6),
.performance-table td:nth-child(6) {
  width: 14%;
}

.performance-table th:nth-child(7),
.performance-table td:nth-child(7) {
  width: 12%;
}

.performance-table th:nth-child(8),
.performance-table td:nth-child(8) {
  width: 12%;
}

.performance-table th:nth-child(9),
.performance-table td:nth-child(9) {
  width: 12%;
}

/* Terugverdienscore-pagina: zelfde soort tabel als .performance-table maar
   met 7 i.p.v. 9 kolommen (geen losse Kosten/Omzet/Marge-kolommen), dus
   eigen breedtes. */
.score-table {
  table-layout: fixed;
}

.score-table th:nth-child(1),
.score-table td:nth-child(1) {
  width: 16%;
}

.score-table th:nth-child(2),
.score-table td:nth-child(2) {
  width: 10%;
}

.score-table th:nth-child(3),
.score-table td:nth-child(3) {
  width: 10%;
}

.score-table th:nth-child(4),
.score-table td:nth-child(4) {
  width: 18%;
}

.score-table th:nth-child(5),
.score-table td:nth-child(5) {
  width: 11%;
}

.score-table th:nth-child(6),
.score-table td:nth-child(6) {
  width: 20%;
}

.score-table th:nth-child(7),
.score-table td:nth-child(7) {
  width: 15%;
}

/* Timesheets-pagina (Asana-tijdregistratie): zelfde soort tabel als
   .performance-table/.score-table maar met 6 kolommen (geen Kosten/Omzet/
   Marge en geen Terugverdienscore — die data bestaat niet in Asana), dus
   eigen breedtes. */
.timesheets-table {
  table-layout: fixed;
}

.timesheets-table th:nth-child(1),
.timesheets-table td:nth-child(1) {
  width: 18%;
}

.timesheets-table th:nth-child(2),
.timesheets-table td:nth-child(2) {
  width: 10%;
}

.timesheets-table th:nth-child(3),
.timesheets-table td:nth-child(3) {
  width: 11%;
}

.timesheets-table th:nth-child(4),
.timesheets-table td:nth-child(4) {
  width: 20%;
}

.timesheets-table th:nth-child(5),
.timesheets-table td:nth-child(5) {
  width: 11%;
}

.timesheets-table th:nth-child(6),
.timesheets-table td:nth-child(6) {
  width: 30%;
}

/* Projecttijden — zelfde soort tabel als .performance-table maar met andere
   kolomindeling (7 i.p.v. 5 kolommen), dus eigen breedtes. */
.project-performance-table th:nth-child(1),
.project-performance-table td:nth-child(1) {
  width: 16%;
}

.project-performance-table th:nth-child(2),
.project-performance-table td:nth-child(2) {
  width: 10%;
}

.project-performance-table th:nth-child(3),
.project-performance-table td:nth-child(3) {
  width: 8%;
}

.project-performance-table th:nth-child(4),
.project-performance-table td:nth-child(4) {
  width: 8%;
}

.project-performance-table th:nth-child(5),
.project-performance-table td:nth-child(5) {
  width: 14%;
}

.project-performance-table th:nth-child(6),
.project-performance-table td:nth-child(6) {
  width: 7%;
}

.project-performance-table th:nth-child(7),
.project-performance-table td:nth-child(7) {
  width: 13%;
}

.project-performance-table th:nth-child(8),
.project-performance-table td:nth-child(8) {
  width: 12%;
}

.project-performance-table th:nth-child(9),
.project-performance-table td:nth-child(9) {
  width: 12%;
}

/* Horizontale staafdiagrammen (Asana Dashboard) — label/balk/waarde als
   vaste kolommen zodat labels van wisselende lengte niet de balk laten
   verspringen. */
.bar-chart {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 20px;
}

.bar-chart-row {
  display: grid;
  grid-template-columns: 200px 1fr 170px;
  gap: 10px;
  align-items: center;
  font-size: 13px;
}

.bar-chart-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--text);
}

.bar-chart-track {
  display: flex;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 6px;
  height: 16px;
  overflow: hidden;
}

.bar-chart-fill {
  height: 100%;
}

.bar-chart-value {
  text-align: right;
  color: var(--text-muted);
  white-space: nowrap;
}

/* Legenda voor het gestapelde staafdiagram (kosten/marge) en het
   donutdiagram (declarabel/niet-declarabel). */
.chart-legend {
  display: flex;
  gap: 16px;
  font-size: 12px;
  color: var(--text-muted);
  margin-bottom: 20px;
}

.legend-swatch {
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 2px;
  margin-right: 6px;
  vertical-align: middle;
}

/* Uren-trend (lijndiagram) — SVG schaalt mee met de containerbreedte via
   preserveAspectRatio="none" op een vaste viewBox. */
.trend-chart {
  width: 100%;
  height: 180px;
  display: block;
}

.trend-chart-labels {
  display: flex;
  justify-content: space-between;
  font-size: 11px;
  color: var(--text-muted);
  margin-top: 4px;
}

.donut-chart {
  display: flex;
  align-items: center;
  gap: 24px;
  margin-bottom: 20px;
}

.donut-legend {
  display: flex;
  flex-direction: column;
  gap: 6px;
  font-size: 13px;
}

.donut-legend-row {
  display: flex;
  align-items: center;
}

.workload-bar-track {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 999px;
  height: 10px;
  width: 100%;
  overflow: hidden;
}

.workload-bar-fill {
  background: var(--blue);
  height: 100%;
  border-radius: 999px;
}

/* Asana-verbruiksbalkje (index.html) — zelfde soort track als
   .workload-bar-track maar iets hoger en met dynamische kleur (groen/geel/
   rood) via JS, afhankelijk van hoe dicht het bij de aangenomen limiet zit. */
.asana-usage-panel .usage-bar-track {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: 999px;
  height: 14px;
  width: 100%;
  overflow: hidden;
  margin-bottom: 12px;
}

.asana-usage-panel .usage-bar-fill {
  height: 100%;
  border-radius: 999px;
  width: 0%;
  transition: width 0.4s ease;
}

.asana-usage-panel .usage-details {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  font-size: 13px;
  color: var(--text-muted);
}

.trend-table th,
.trend-table td {
  text-align: center;
  font-size: 13px;
}

.trend-table th:first-child,
.trend-table td:first-child {
  text-align: left;
}

/* Homepage (/): tegel-grid per catalogus-groep, opgebouwd door home.js. */
#home-tiles section + section {
  margin-top: 28px;
}

#home-tiles h2 {
  margin: 0 0 16px;
  font-size: 20px;
}

.home-tile-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 16px;
}

/* Bij groepen met meerdere sub-categorie-rijen (bv. Operations, zie
   home.js) — dezelfde afstand als tussen twee groep-secties zou te veel
   zijn, dit blijft zichtbaar één groep. */
.home-tile-grid + .home-tile-grid {
  margin-top: 16px;
}

.home-tile {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  background: var(--panel);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: 24px 16px;
  text-decoration: none;
  color: var(--text);
  text-align: center;
  transition: border-color 0.15s ease, background 0.15s ease;
}

.home-tile:hover {
  border-color: var(--blue);
  background: var(--border);
}

/* Plat SVG-silhouet i.p.v. emoji (zie home.js) — currentColor volgt hier de
   gedempte tekstkleur, en wordt bij hover net als de rest van de kaart iets
   nadrukkelijker (zelfde blauwe accent als .home-tile:hover). */
.home-tile-icon {
  display: flex;
  color: var(--text-muted);
  transition: color 0.15s ease;
}

.home-tile-icon svg {
  width: 36px;
  height: 36px;
}

.home-tile:hover .home-tile-icon {
  color: var(--blue);
}

.home-tile-label {
  font-size: 16px;
  font-weight: 600;
}
