/* ============================================================
   ezelsbrug.nl — design-tokens
   ------------------------------------------------------------
   Dit blok is de plek om het hele uiterlijk van de site bij te
   sturen. Verander een waarde hier en het werkt overal door.

   Kleur: elk vak (categorie) krijgt automatisch een eigen
   accentkleur. Dat gebeurt door een "hue" (kleurtoon, 0-360) die
   per pagina wordt meegegeven via --accent-hue (zie base.njk).
   Hoe FEL of DONKER die kleur wordt, bepaal je hieronder met
   --accent-sat (verzadiging) en --accent-light (helderheid).
   Wil je bijvoorbeeld alle kleuren rustiger/pasteller? Verlaag
   --accent-sat. Donkerder voor betere leesbaarheid? Verlaag
   --accent-light. De paginaAchtergrond krijgt zelf ook een hele
   lichte wash van diezelfde vak-kleur (--color-accent-soft, zie
   de body-regel verderop) — wil je dat subtieler/sterker? Pas het
   lightness-percentage (94%) bij --color-accent-soft aan.
   ============================================================ */
:root {
  /* --- Typografie --- */
  --font-heading: "Poppins", system-ui, -apple-system, sans-serif; /* fris, geometrisch, niet kinderachtig */
  --font-body: "Inter", system-ui, -apple-system, sans-serif;      /* rustig en goed leesbaar, ook lange teksten */
  --text-base-size: 1.0625rem;   /* iets groter dan de meeste sites: leesbaar voor alle leeftijden */
  --line-height-body: 1.65;
  --measure: 68ch;               /* max. regellengte voor leesbare tekst */

  /* --- Basiskleuren (niet vak-gebonden) --- */
  --color-surface: #ffffff;
  --color-surface-muted: #f6f3ec;
  --color-text: #22262b;
  --color-text-muted: #5b6470;
  --color-border: #e7e2d8;

  /* --- Accentkleur: automatisch per vak, hier bij te sturen --- */
  --accent-hue: 32;               /* wordt per pagina overschreven, dit is de fallback */
  --accent-sat: 68%;              /* verzadiging: lager = rustiger/pasteller */
  --accent-light: 42%;            /* helderheid: lager = donkerder, beter contrast */
  --color-accent: hsl(var(--accent-hue) var(--accent-sat) var(--accent-light));
  --color-accent-soft: hsl(var(--accent-hue) var(--accent-sat) 94%);
  --color-accent-contrast: #ffffff;

  /* --- Vorm & ruimte --- */
  --radius-sm: 8px;
  --radius-md: 14px;
  --space-1: 0.5rem;
  --space-2: 1rem;
  --space-3: 1.5rem;
  --space-4: 2.5rem;
  --shadow-card: 0 1px 2px rgba(20, 20, 10, 0.04), 0 4px 16px rgba(20, 20, 10, 0.05);
}

/* --accent-hue wordt per pagina overschreven via een inline style op <body>
   (zie base.njk). --color-accent zelf staat hierboven alleen op :root
   gedefinieerd; een var()-verwijzing binnen een custom property wordt
   ge-resolved op het element waar die property gedeclareerd is, niet op het
   element waar hij later gebruikt wordt — dus zonder deze regel blijft
   --color-accent overal de :root-fallback tonen, ongeacht de hue van het
   vak. Door --color-accent hier op body opnieuw te declareren, wordt hij
   opnieuw berekend mét body's eigen --accent-hue, en die versie erft
   correct door naar de rest van de pagina. */
body {
  --color-accent: hsl(var(--accent-hue) var(--accent-sat) var(--accent-light));
  --color-accent-soft: hsl(var(--accent-hue) var(--accent-sat) 94%);
}

/* ============================================================
   Basis
   ============================================================ */
* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--color-accent-soft); /* lichte, per-vak getinte achtergrond */
  color: var(--color-text);
  font-family: var(--font-body);
  font-size: var(--text-base-size);
  line-height: var(--line-height-body);
}

/* Prettige, opvallende tekstselectie — belangrijk, want knippen/plakken
   van ezelsbruggetjes is een kernfunctie van de site. Let op: de volle
   --color-accent (niet de -soft variant), anders valt de selectie precies
   weg tegen de paginabachtergrond, die zelf ook --color-accent-soft is. */
::selection { background: var(--color-accent); color: var(--color-accent-contrast); }

img { max-width: 100%; height: auto; border-radius: var(--radius-sm); }

a { color: var(--color-accent); text-decoration-thickness: 1.5px; }
a:hover { text-decoration-thickness: 2px; }
a:focus-visible, button:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 2px; }

h1, h2, h3 {
  font-family: var(--font-heading);
  line-height: 1.25;
  margin: 0 0 var(--space-2);
}
h1 { font-size: 1.9rem; }
h2 { font-size: 1.2rem; }
h3 { font-size: 1.05rem; }

/* ============================================================
   Header
   ============================================================ */
.site-header {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 0.15rem;
  padding: var(--space-4) var(--space-3) var(--space-3);
  border-bottom: 1px solid var(--color-border);
}
.site-header .logo {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: clamp(1.4rem, 6vw, 2rem);
  text-decoration: none;
  color: var(--color-text);
}
.site-header .tagline {
  margin: 0;
  color: var(--color-text-muted);
  font-size: 0.95rem;
  /* Voorkomt een lelijke, ongelijke afbreking (bijv. één weeswoord op de
     laatste regel) op smalle schermen door de regels evenwichtiger te
     verdelen i.p.v. simpelweg zoveel mogelijk woorden op regel 1 te
     proppen. Browsers zonder ondersteuning vallen terug op normaal
     afbreken -- geen probleem. */
  text-wrap: balance;
}

/* Hamburgermenu: alleen op mobiel. Op desktop doet de gewone zijbalk
   (Menu-widget + zoekveld) al hetzelfde, dus daar blijft dit verborgen
   (zie de @media (min-width: 800px)-regel bij Layout hieronder). Om
   dezelfde reden vervallen op mobiel de Menu-widget en de Zoeken-kaart in
   de zijbalk -- "Willekeurige ezelsbrug" is daardoor het enige dat nog
   bovenaan de zijbalk staat. */
.hamburger-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  position: absolute;
  top: var(--space-3);
  right: var(--space-3);
  width: 40px;
  height: 40px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  color: var(--color-text);
  cursor: pointer;
}
.hamburger-btn svg {
  width: 22px;
  height: 22px;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  fill: none;
}
.mobiel-menu {
  position: absolute;
  top: calc(var(--space-3) + 44px);
  right: var(--space-3);
  z-index: 20;
  min-width: 190px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
  padding: 0.3rem;
}
.mobiel-menu[hidden] { display: none; }
.mobiel-menu ul { list-style: none; margin: 0; padding: 0; }
.mobiel-menu li + li { border-top: 1px dashed var(--color-border); }
.mobiel-menu a {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.6rem 0.7rem;
  border-radius: var(--radius-sm);
  color: var(--color-text);
  text-decoration: none;
  font-weight: 500;
}
.mobiel-menu a:hover,
.mobiel-menu a:focus-visible {
  background: var(--color-accent-soft);
  color: var(--color-accent);
}
.widget--menu, .widget--zoeken { display: none; }

/* ============================================================
   Layout
   ============================================================ */
.layout {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  padding: var(--space-3);
  max-width: 1080px;
  margin: 0 auto;
}
@media (min-width: 800px) {
  /* .sidebar--top (menu/zoeken/willekeurig) en .sidebar--bottom
     (uitgelicht/vakken) staan in de brontekst na main, met een JS'je
     (zie base.njk) dat sidebar--top op mobiel ervoor plaatst. Op desktop
     blijven ze gewoon in brontekst-volgorde binnen één .sidebar-kolom.
     Bewust GEEN CSS Grid meer: sidebar-top+main als grid-areas in
     dezelfde rij (met main overspannend over 2 rijen) gaf onbetrouwbaar
     position: sticky-gedrag. Bewust ook GEEN position: sticky (meer) op
     sidebar--top zelf: dat hield het blok veel te lang "vastgeplakt"
     terwijl sidebar--bottom (Vakken) er gewoon normaal onderdoor bleef
     scrollen -- en zolang iets vastgeplakt is, wordt wat eronder doorscrolt
     er zichtbaar door bedekt. Op verzoek (19/20 augustus) simpelweg
     losgelaten: de hele zijbalk scrolt nu gewoon normaal mee, geen
     overlap meer mogelijk. */
  .layout {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    padding: var(--space-4) var(--space-3);
  }
  main { flex: 2.2; min-width: 0; }
  .sidebar {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: var(--space-4);
    min-width: 300px;
  }

  /* Hamburgermenu is mobiel-only; op desktop doen de Menu-widget en het
     zoekveld in de zijbalk hetzelfde. */
  .hamburger-btn, .mobiel-menu { display: none; }
  .widget--menu, .widget--zoeken { display: block; }
}

.breadcrumb { margin: 0 0 var(--space-3); }
.breadcrumb a {
  display: inline-block;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 1.3rem;
  color: var(--color-accent-contrast);
  background: var(--color-accent);
  padding: 0.5rem 1.3rem;
  border-radius: var(--radius-sm);
  text-decoration: none;
  box-shadow: var(--shadow-card);
}
.breadcrumb a:hover { text-decoration: underline; }

.page-title { color: var(--color-text); max-width: var(--measure); }

/* Titel als "button" (zelfde pil-stijl als de vak-badge hierboven), voor
   pagina's zonder vak/catSlug — bijv. /categorieen/ en /insturen/ */
.title-badge {
  display: inline-block;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 1.3rem;
  color: var(--color-accent-contrast);
  background: var(--color-accent);
  padding: 0.5rem 1.3rem;
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-card);
}

/* De content zelf: ruime regellengte, comfortabel om te lezen én te selecteren */
.content { max-width: var(--measure); }
.content p, .content ul, .content ol { margin: 0 0 var(--space-2); }
.content h2, .content h3, .content h4, .content h5, .content h6 {
  font-size: 1rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--color-accent);
  margin: var(--space-3) 0 0.15rem;
}
.content strong { color: var(--color-text); }

/* Ezelsbrugpagina's: elke ##-kop (Uitleg/Alternatieven/Let op) wordt door
   de groupInCards-filter (.eleventy.js) in een eigen <section
   class="content-card"> gezet -- hier de kaart-opmaak zelf. Alleen de
   kop bovenin een kaart hoeft geen extra ruimte erboven (die zit al in
   de padding van de kaart), vandaar de :first-child-uitzondering op de
   algemene .content h2-regel hierboven. */
.content-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-3);
  margin: 0 0 var(--space-3);
  box-shadow: var(--shadow-card);
}
.content-card:last-child { margin-bottom: 0; }
.content-card > h2:first-child,
.content-card > h3:first-child {
  margin-top: 0;
}

/* Losse kopjes als "Uitleg:" (een paragraaf die alleen uit vet bestaat):
   ruimte erboven (afstand tot wat ervoor stond), krap eronder (sluit
   direct aan op de bijbehorende tekst). */
.content p:has(> strong:only-child) {
  margin-top: var(--space-3);
  margin-bottom: 0.15rem;
}

/* Ingesloten YouTube-video (voorheen een kale, onaanklikbare link) */
.video-embed {
  position: relative;
  width: 100%;
  max-width: var(--measure);
  aspect-ratio: 16 / 9;
  margin: var(--space-3) 0;
  border-radius: var(--radius-md);
  overflow: hidden;
  background: var(--color-surface-muted);
  box-shadow: var(--shadow-card);
}
.video-embed iframe {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  border: 0;
}

/* Plaatje + onderschrift (voorheen naast elkaar geplakt door de conversie) */
.post-image {
  margin: var(--space-3) 0;
  text-align: center;
}
.post-image img {
  display: block;
  margin: 0 auto;
  max-width: 100%;
}
.post-image figcaption {
  margin-top: 0.5rem;
  font-size: 0.9rem;
  font-style: italic;
  color: var(--color-text-muted);
}

/* ============================================================
   Categorie-overzicht (post-list)
   ============================================================ */
.post-list { list-style: none; padding: 0; margin: var(--space-2) 0 0; display: grid; gap: var(--space-1); }
.post-list li {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
}
.post-list a {
  display: block;
  padding: 0.75rem 1rem;
  text-decoration: none;
  color: var(--color-text);
  font-weight: 500;
}
.post-list a:hover { color: var(--color-accent); }

/* Zoekresultaten (/zoeken/) in dezelfde stijl als een vakpagina: platte
   lijst van titels, geen excerpt/thumbnail (die laatste staat overigens
   al uit via showImages: false in zoeken.njk). */
#search .pagefind-ui__results {
  list-style: none;
  padding: 0;
  margin: var(--space-2) 0 0;
  display: grid;
  gap: var(--space-1);
}
#search .pagefind-ui__result {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  /* Pagefind's eigen CSS geeft de <li> zelf nog 24px/32px padding erbij
     (los van onze .pagefind-ui__result-link-padding hieronder) -- die
     veroorzaakte de extra witruimte, dus resetten. */
  padding: 0;
}
#search .pagefind-ui__result-inner { padding: 0; margin: 0; }
#search .pagefind-ui__result-excerpt { display: none; }
#search .pagefind-ui__result-title { margin: 0; font-weight: normal; }
#search .pagefind-ui__result-link {
  display: block;
  padding: 0.75rem 1rem;
  text-decoration: none;
  color: var(--color-text);
  font-weight: 500;
}
#search .pagefind-ui__result-link:hover { color: var(--color-accent); }

/* Categorieën-overzicht (/categorieen/): zelfde post-list, plus aantal rechts */
.vakken-overzicht a { display: flex; justify-content: space-between; gap: 0.5rem; }
.vakken-overzicht a span { color: var(--color-text-muted); font-variant-numeric: tabular-nums; font-weight: 400; }

/* ============================================================
   Gerelateerd
   ============================================================ */
.share-ezelsbrug {
  display: flex;
  justify-content: flex-end;
  max-width: var(--measure);
  margin: var(--space-3) 0;
}
.share-widget {
  position: relative;
}
.share-menu {
  position: absolute;
  top: calc(100% + 0.4rem);
  right: 0;
  z-index: 10;
  display: flex;
  flex-direction: column;
  min-width: 180px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
  padding: 0.3rem;
}
.share-menu[hidden] {
  /* Zonder deze regel wint onze eigen "display: flex" hierboven het van
     het ingebouwde hidden-gedrag van de browser (auteur-CSS gaat altijd
     vóór de user-agent-stylesheet, ook bij gelijke specificiteit) --
     daardoor bleef het menu altijd zichtbaar, ook als share.js
     hidden=true zette. */
  display: none;
}
.share-menu__item {
  display: flex;
  align-items: center;
  gap: 0.55rem;
  width: 100%;
  text-align: left;
  background: none;
  border: none;
  border-radius: var(--radius-sm);
  padding: 0.5rem 0.6rem;
  font: inherit;
  font-size: 0.9rem;
  color: var(--color-text);
  text-decoration: none;
  cursor: pointer;
}
.share-icon {
  width: 1.3em;
  height: 1.3em;
  flex-shrink: 0;
}
.share-menu__item:hover,
.share-menu__item:focus-visible {
  background: var(--color-accent-soft);
}
.share-btn {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  background: none;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  padding: 0.4rem 0.85rem;
  font: inherit;
  font-size: 0.9rem;
  font-weight: 500;
  color: var(--color-text);
  cursor: pointer;
  transition: border-color 0.15s ease, color 0.15s ease;
}
.share-btn:hover,
.share-btn:focus-visible {
  border-color: var(--color-accent);
  color: var(--color-accent);
}
.share-btn svg {
  width: 1.1em;
  height: 1.1em;
  fill: currentColor;
  flex-shrink: 0;
}
.share-btn--klaar {
  border-color: var(--color-accent);
  color: var(--color-accent);
}

/* .related is nu ook een .content-card (achtergrond/rand/padding komt
   daarvandaan) -- hier alleen de eigen opmaak nog. */
.related { max-width: var(--measure); }
.related h2 { text-transform: none; font-size: 1.1rem; }
.related ul { list-style: none; padding: 0; margin: 0; display: grid; gap: 0.4rem; }
.related a { text-decoration: none; font-weight: 500; }
.related a::before { content: "→ "; color: var(--color-accent); }

/* ============================================================
   Sidebar
   ============================================================ */
.sidebar .widget {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-2);
  margin-bottom: var(--space-2);
}
.sidebar h2, .sidebar summary {
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--color-text-muted);
}
/* Alleen <summary> (Menu/Vakken) is daadwerkelijk klikbaar/uitklapbaar —
   gewone h2-koppen (Uitgelicht, Zoeken) zijn dat niet en verdienen dus ook
   geen pointer-cursor, anders lijkt hoveren er ten onrechte iets te doen. */
.sidebar summary { font-weight: 600; cursor: pointer; }

/* De "Uitgelicht"-widget mag opvallender zijn dan de rest van de sidebar */
.widget--uitgelicht h2 {
  font-size: 1.05rem;
  font-family: var(--font-heading);
  color: var(--color-accent);
  letter-spacing: 0.02em;
}

/* "Vakken" krijgt dezelfde stijl als de "Uitgelicht"-kop hierboven */
.widget--vakken > summary {
  font-size: 1.05rem;
  font-family: var(--font-heading);
  color: var(--color-accent);
  letter-spacing: 0.02em;
}

/* "Menu" (Home/Categorieën/Insturen/About) krijgt dezelfde stijl als "Vakken" */
.widget--menu > summary {
  font-size: 1.05rem;
  font-family: var(--font-heading);
  color: var(--color-accent);
  letter-spacing: 0.02em;
}

/* "Zoeken"-widget: titel (🔍 + Zoeken) links uitgelijnd, zoals de andere widget-koppen */
.widget--zoeken h2 {
  font-size: 1.05rem;
  font-family: var(--font-heading);
  color: var(--color-accent);
  letter-spacing: 0.02em;
  margin: 0 0 var(--space-1);
}
/* Zoekformulier in de zijbalk: simpele GET naar /zoeken/ (?q=...), geen
   eigen live resultaten meer hier — die worden op /zoeken/ zelf getoond
   (zie zoeken.njk, dat de ?q=-parameter overneemt). */
.zoek-form { display: flex; gap: 0.4rem; }
.zoek-form input[type="search"] {
  flex: 1;
  min-width: 0;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-sm);
  font-family: var(--font-body);
  font-size: 0.95rem;
  background: var(--color-surface);
  color: var(--color-text);
}
.zoek-form input[type="search"]:focus-visible {
  outline: 2px solid var(--color-accent);
  outline-offset: 1px;
}
.zoek-form button {
  flex: none;
  border: 0;
  cursor: pointer;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 0.9rem;
  padding: 0.5rem 1rem;
  border-radius: var(--radius-sm);
  background: var(--color-accent);
  color: var(--color-accent-contrast);
}
.zoek-form button:hover { filter: brightness(1.08); }
.sidebar summary::-webkit-details-marker { color: var(--color-accent); }
.sidebar details[open] summary { margin-bottom: var(--space-1); }
.sidebar .category-list { margin-top: var(--space-1); }
.sidebar ul { list-style: none; padding: 0; margin: 0; }
.sidebar li + li { border-top: 1px dashed var(--color-border); }
.sidebar a {
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
  padding: 0.45rem 0;
  text-decoration: none;
  color: var(--color-text);
  font-size: 0.95rem;
}
.sidebar a:hover { color: var(--color-accent); }
.category-list span {
  color: var(--color-text-muted);
  font-variant-numeric: tabular-nums;
  font-size: 0.85rem;
}
/* Bewust GEEN .sidebar-voorouder in de selector (was: ".sidebar
   a.random-link"): op mobiel verplaatst base.njk .sidebar--top (met
   deze link erin) buiten <aside class="sidebar"> naar vóór main, waardoor
   die eis niet meer klopte en de knop zijn achtergrond/opmaak verloor. */
a.random-link {
  display: flex;
  justify-content: center;
  text-align: center;
  padding: 0.6rem;
  border-radius: var(--radius-sm);
  background: var(--color-accent);
  color: var(--color-accent-contrast) !important;
  text-decoration: none;
  font-weight: 600;
}

/* ============================================================
   Footer
   ============================================================ */
.site-footer {
  text-align: center;
  padding: var(--space-4) var(--space-3);
  color: var(--color-text-muted);
  font-size: 0.85rem;
}

.site-footer .disclaimer {
  max-width: 40rem;
  margin: 0 auto var(--space-2);
  font-size: 0.8rem;
  opacity: 0.85;
}

/* ============================================================
   Cookiemelding
   ============================================================ */
.cookie-banner {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 100;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-3);
  background: var(--color-text);
  color: #fff;
  box-shadow: 0 -2px 12px rgba(0, 0, 0, 0.15);
}
.cookie-banner p { margin: 0; max-width: 48rem; font-size: 0.9rem; }
.cookie-banner a { color: #fff; text-decoration: underline; }
.cookie-banner button {
  flex: none;
  border: 0;
  cursor: pointer;
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 0.9rem;
  padding: 0.55rem 1.4rem;
  border-radius: 999px;
  background: var(--color-accent);
  color: var(--color-accent-contrast);
}
.cookie-banner button:hover { filter: brightness(1.08); }
.cookie-banner[hidden] { display: none; }

/* ============================================================
   Zoekpagina (Pagefind) — accentkleur meegeven aan de widget
   ============================================================ */
.pagefind-ui { --pagefind-ui-primary: var(--color-accent); --pagefind-ui-font: var(--font-body); }
