﻿/* ============================================================
   Groenveld Hoveniers — fotografisch & direct

   Het werk spreekt: grote foto's, geen kaarten, geen schaduwen.
   Wat deze versie strak trekt:

   - TYPOGRAFIE. Eén koplettertype (Geist) en één bodylettertype (de
     systeem-sans), met één schaal (--tekst-*). Elke kop pakte eerder zijn
     eigen clamp met eigen weight 800; dat gaf de willekeurig grote koppen.
   - RITME. Alle secties gebruiken dezelfde verticale maten (--ruimte-*) en
     dezelfde zijmarge (--rand). Geen losse 4.5rem / 5rem / 3.25rem meer.
   - KLEUR. Het groen is het enige accent; de rest is inkt op papier.
   ============================================================ */

/* Geist staat al op dit domein voor de portfoliosite; hergebruiken kost dus
   geen extra download. Alleen voor de koppen — de body blijft systeemtekst,
   zodat de pagina leesbaar is voordat het font binnen is. */
@font-face {
  font-family: "Geist";
  src: url("/fonts/Geist-Variable.woff2") format("woff2");
  font-weight: 100 900;
  font-display: swap;
}

:root{
  --groen:#2a5d33;
  --groen-diep:#1c3a22;
  --groen-licht:#bcd3bf;
  --nacht:#101b12;
  --papier:#f6f3ec;
  --papier-2:#efeade;
  /* Warme neutrale tint naast het groen: zand, geen grijs. Draagt de balk
     bovenaan en de knop in de slotband, zodat die twee bij elkaar horen. */
  --zand:#e4d8bd;
  --zand-lijn:#cdbc99;
  --inkt:#1b1813;
  --inkt-zacht:#4c463c;
  --wit:#ffffff;
  --lijn:rgba(27,24,19,.14);

  --kop:"Geist",system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --tekst:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;

  /* Eén schaal voor de hele site. Koppen pakken hier hun maat, niet elk hun
     eigen clamp. */
  --tekst-xs:  .8125rem;
  --tekst-s:   .9375rem;
  --tekst-m:   1.0625rem;
  --tekst-l:   clamp(1.125rem, 1.1rem + .4vw, 1.3rem);
  --tekst-xl:  clamp(1.35rem, 1.2rem + 1vw, 1.75rem);
  --tekst-2xl: clamp(1.75rem, 1.4rem + 1.9vw, 2.5rem);
  --tekst-3xl: clamp(2.25rem, 1.6rem + 3.2vw, 3.5rem);

  /* Eén verticaal ritme. Compacter gezet: de sectiemarge stond op 6rem, wat
     tussen twee secties 12rem (192px) wit gaf. Nu 4rem, dus 8rem ertussen. */
  --ruimte-sectie: clamp(2.5rem, 1.8rem + 2.6vw, 4rem);
  --ruimte-blok:   clamp(1.25rem, 1rem + 1.1vw, 1.75rem);
  --ruimte-regel:  .85rem;
  --rand:          clamp(1.25rem, 4vw, 3rem);

  /* ── Breedtes ────────────────────────────────────────────────────────
     Er was er maar één: 44rem. Daardoor stond álles — koppen, intro's,
     cijfers, CTA — in een smal kolommetje midden op het scherm, terwijl de
     fotorasters 72rem breed waren. Dat verschil is precies wat een site op
     een sjabloon laat lijken. Nu drie: de sectiebreedte is de standaard, de
     leesbreedte alleen voor lopende tekst, en beeld mag volle breedte. */
  --breedte:      84rem;   /* 1344px — het raster waar alles op uitlijnt */
  --breedte-lees: 46rem;   /* alleen voor doorlopende tekstblokken */

  /* Hoogte van de balk. Die staat vast bovenaan over de volle breedte, dus er
     is verder geen marge of afronding: geen zwevend element. */
  --balk:        74px;
}

*,
*::before,
*::after{
  box-sizing:border-box;
  margin:0;
  padding:0;
}

html{
  scroll-behavior:smooth;
  /* iOS Safari toont bij de overscroll-bounce voorbij de footer de
     canvas-kleur van <html>. Stond die op niets, dan was dat wit. Nu is
     het de kleur van de eigen voet, dus je veert in de site door.
     overscroll-behavior alleen op html, niet op body. */
  background: var(--nacht);
  overscroll-behavior-y: none;
  -webkit-text-size-adjust:100%;
}

@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
}

body{
  font-family:var(--tekst);
  font-size:var(--tekst-m);
  line-height:1.65;
  color:var(--inkt);
  background:var(--papier);
  -webkit-tap-highlight-color:transparent;
  overflow-wrap:break-word;
}

a,
button,
input,
select,
textarea{
  touch-action:manipulation;
}

a{color:inherit}

img{
  display:block;
  max-width:100%;
  height:auto;
}

/* Alle koppen in het koplettertype, één weight, één letterspatiëring.
   Eerder stond overal font-weight 800 met per kop een eigen clamp. */
h1,h2,h3{
  font-family:var(--kop);
  font-weight:650;
  line-height:1.1;
  letter-spacing:-0.02em;
  text-wrap:balance;
}

h1{ font-size:var(--tekst-3xl); }
h2{ font-size:var(--tekst-2xl); }
h3{ font-size:var(--tekst-xl); }

/* ---------- Toegankelijkheid ---------- */

.skip,
.skip-link{
  position:absolute;
  left:-999rem;
}

.skip:focus,
.skip-link:focus{
  left:1rem;
  top:1rem;
  z-index:100;
  background:var(--inkt);
  color:var(--wit);
  padding:.9rem 1.4rem;
  font-weight:700;
  text-decoration:none;
}

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

/* Op de donkere vlakken is het groene accent te donker om als focusring te
   zien; daar een lichte ring. LET OP: deze lijst eindigde eerder op een komma
   vóór een commentaarblok, waardoor .disclaimer erin werd gezogen en de hele
   regel iets anders deed dan bedoeld. */
/* .contact stond in deze lijst toen die sectie nog een donker groen vlak was.
   De pagina is nu licht, dus daar hoort de gewone groene focusring weer. */
.hero :focus-visible,
.slotcta :focus-visible,
.voet :focus-visible,
.disclaimer :focus-visible{
  outline-color:var(--wit);
}

/* ---------- Portfolio-disclaimer ---------- */

.disclaimer{
  background:var(--inkt);
  color:var(--papier);
}

.disclaimer__inner{
  max-width:var(--breedte);
  margin:0 auto;
  padding:.55rem var(--rand);
  font-size:var(--tekst-xs);
  line-height:1.5;
}

.disclaimer a{
  color:var(--papier);
  font-weight:700;
  display:inline-block;
  padding:.2rem 0;
}

/* ---------- Kop: een vaste plaat over de volle breedte ----------
   Bewust GEEN zwevende balk met marge en ronde hoeken: dat is de taal van een
   digitaal bureau, niet van een hovenier. Dit is een stevige plaat in zandtint
   die vastzit aan de bovenrand, met een dikke groene onderrand als fundament.
   Op de donkere hero eronder leest dat als een plank op een tuin; op de lichte
   subpagina's zorgt diezelfde rand voor de scheiding.
   De wikkel blijft nodig omdat balk en uitklapmenu samen moeten plakken. */

.topwrap{
  position:sticky;
  top:0;
  z-index:60;
}

.top{
  background:var(--zand);
  display:flex;
  align-items:center;
  gap:.5rem clamp(.75rem,2vw,2rem);
  min-height:var(--balk);
  /* Geen verticale padding: de menu-items zijn zelf zo hoog als de balk, zodat
     de streep van de actieve pagina precies op de groene onderrand landt.
     Padding erbij zou die hoogtes optellen en de balk 93px maken. */
  padding:0 max(var(--rand), calc((100% - var(--breedte)) / 2));
  color:var(--inkt);
  border-bottom:3px solid var(--groen-diep);
}

/* Naam ruim genoeg om te lezen, met de plaatsbepaling eronder — dat is voor een
   lokaal bedrijf het halve verhaal. */
.top__brand{
  font-family:var(--kop);
  font-weight:650;
  font-size:clamp(1.15rem,1rem + .6vw,1.4rem);
  line-height:1.15;
  letter-spacing:-0.015em;
  text-decoration:none;
  color:var(--groen-diep);
  /* Mag krimpen op een smal scherm; met flex:none liep de rij op 320px over de
     rand omdat de belknop en de hamburger hun ruimte opeisen. */
  flex:0 1 auto;
  min-width:0;
  padding:.2rem 0;
  margin-right:auto;
}

.top__brand:hover .top__plaats{ color:var(--groen); }

.top__plaats{
  display:block;
  font-family:var(--tekst);
  font-weight:600;
  font-size:.7rem;
  text-transform:uppercase;
  letter-spacing:.16em;
  color:var(--inkt-zacht);
  margin-top:.2rem;
}

/* Bellen is voor een hovenier de belangrijkste actie, dus dit is het enige
   gevulde vlak in de balk: het accentgroen op zand, en vierkant zoals alle
   knoppen op deze site. */
.top__cta{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:46px;
  padding:.6rem 1.35rem;
  background:var(--groen);
  color:var(--wit);
  font-family:var(--kop);
  font-weight:650;
  font-size:var(--tekst-s);
  letter-spacing:-0.01em;
  text-decoration:none;
  white-space:nowrap;
  transition:background .2s ease;
}

.top__cta:hover,
.top__cta:focus-visible{ background:var(--groen-diep); }

/* ---------- Hoofdnavigatie ---------- */

/* Het menu staat rechts, tegen de belknop aan, in plaats van los in het midden
   te zweven. Dat leest als één geheel: naam links, navigatie plus actie rechts. */
.hoofdnav{ margin-left:auto; }

.hoofdnav ul{
  list-style:none;
  display:flex;
  flex-wrap:wrap;
  gap:.15rem .35rem;
}

.hoofdnav a{
  position:relative;
  display:inline-flex;
  align-items:center;
  min-height:var(--balk);
  padding:0 clamp(.6rem,1vw,.9rem);
  font-size:var(--tekst-s);
  font-weight:600;
  color:var(--groen-diep);
  text-decoration:none;
  transition:background-color .18s ease;
}

/* Twee rustige staten, allebei zonder kleurwissel van de tekst: hover legt een
   lichte zandtint achter het item, de huidige pagina krijgt een stevige streep
   die op de groene onderrand van de balk staat. Dat kan hier weer, want de
   balk heeft rechte hoeken en zit vast aan de bovenrand. */
.hoofdnav a:hover{ background:rgba(27,24,19,.07); }

.hoofdnav a[aria-current="page"]{ font-weight:700; }

.hoofdnav a[aria-current="page"]::after{
  content:"";
  position:absolute;
  left:0;
  right:0;
  bottom:-3px;
  height:3px;
  background:var(--groen);
}

/* Hamburger — twee lijnen die naar een kruis draaien. */
.menuknop{
  display:none;
  /* Een kale <button> erft het lettertype niet; zonder deze regel stond hij op
     de UA-default (Arial) en was er een derde lettertype op de pagina. */
  font:inherit;
  flex-direction:column;
  justify-content:center;
  gap:6px;
  width:44px;
  height:44px;
  padding:0;
  background:none;
  border:0;
  cursor:pointer;
}

.menuknop span{
  display:block;
  width:26px;
  height:2px;
  background:var(--groen-diep);
  transition:transform .25s ease;
}

.menuknop[aria-expanded="true"] span:first-child{ transform:translateY(4px) rotate(45deg); }
.menuknop[aria-expanded="true"] span:last-child{ transform:translateY(-4px) rotate(-45deg); }

/* Uitklapmenu: een compact paneel dat direct onder de balk aansluit, in dezelfde
   zandtint. Geen schermvullend overlay, geen zwevende kaart. */
.mobielmenu{
  background:var(--zand);
  padding:.25rem max(var(--rand), calc((100% - var(--breedte)) / 2)) .9rem;
  border-bottom:3px solid var(--groen-diep);
}

.mobielmenu[hidden]{ display:none; }

.mobielmenu ul{
  list-style:none;
  display:grid;
  gap:0;
  padding-top:.25rem;
}

.mobielmenu a{
  display:flex;
  align-items:center;
  min-height:46px;
  color:var(--groen-diep);
  font-size:var(--tekst-m);
  font-weight:600;
  text-decoration:none;
  border-bottom:1px solid var(--zand-lijn);
}

.mobielmenu li:last-child a{ border-bottom:0; }

.mobielmenu a[aria-current="page"]{
  font-weight:700;
  box-shadow:inset 3px 0 0 var(--groen);
  padding-left:.7rem;
}

.mobielmenu .knop{ margin-top:.9rem; }

@media (max-width:960px){
  .hoofdnav{ display:none; }
  .menuknop{ display:flex; }
  .top{ gap:.5rem .75rem; }
}

/* De belknop blijft ook op een telefoon staan; hij wordt alleen compacter door
   het woord "Bel" weg te laten. Hem verbergen zou de belangrijkste actie van
   een hoveniersbedrijf juist op het drukste apparaat onzichtbaar maken. */
@media (max-width:560px){
  :root{ --balk:64px; }
  .top__cta-woord{ display:none; }
  .top__cta{ padding:.5rem .8rem; font-size:.85rem; min-height:44px; }
  .top__brand{ font-size:1rem; }
  .top__plaats{ font-size:.62rem; letter-spacing:.12em; }
}

/* Op de smalste telefoons blijft alles staan door de zijmarge en de knop nog
   iets terug te nemen; de merknaam breekt dan over twee regels. */
@media (max-width:400px){
  .top{ padding-inline:14px; gap:.35rem .5rem; }
  .top__cta{ padding:.45rem .65rem; font-size:.8rem; }
  .mobielmenu{ padding-inline:14px; }
}

/* ---------- Kruimelpad ---------- */

.kruimels ol{
  list-style:none;
  display:flex;
  flex-wrap:wrap;
  gap:.35rem .55rem;
  font-size:var(--tekst-s);
  color:var(--inkt-zacht);
  margin-bottom:var(--ruimte-regel);
}

.kruimels li + li::before{
  content:"/";
  margin-right:.55rem;
  color:var(--lijn);
}

.kruimels a{ color:var(--groen); text-underline-offset:3px; }

/* ---------- Paginakop (subpagina's) ---------- */

/* De balk staat weer in de flow, dus hier is geen extra ruimte meer nodig. */
.paginakop{
  padding-top:var(--ruimte-sectie);
  padding-bottom:var(--ruimte-blok);
}

/* Kruimelpad, titel, intro: drie regels onder elkaar in dezelfde kolom. Zie de
   toelichting bij .sectiekop — de tweekoloms variant is hier ook vervallen. */
.paginakop__intro{
  margin-top:var(--ruimte-regel);
  font-size:var(--tekst-l);
  color:var(--inkt-zacht);
  max-width:62ch;
}

/* ---------- Diensten-teasers (home) ---------- */

/* Onderruimte bewust kleiner dan een volle sectiemarge: de vólgende sectie
   begint met een sectiekop die zelf al ruimte-sectie meebrengt. Stond dit ook
   op ruimte-sectie, dan stapelden twee marges tot ~124px boven de volgende kop. */
.teasers{ padding-bottom:var(--ruimte-blok); }

.teasers__grid{
  display:grid;
  gap:var(--ruimte-blok);
  max-width:var(--breedte);
  margin:0 auto;
  padding:0 var(--rand);
}

@media (min-width:800px){
  .teasers__grid{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}

.teaser__foto img{
  width:100%;
  height:min(30svh,15rem);
  object-fit:cover;
}

.teaser h3{
  margin-top:var(--ruimte-regel);
  padding-top:.8rem;
  border-top:3px solid var(--groen);
  display:inline-block;
}

.teaser p{
  margin-top:.6rem;
  color:var(--inkt-zacht);
}

.teaser__link{
  display:inline-flex;
  align-items:center;
  min-height:44px;
  margin-top:.4rem;
  font-weight:600;
  color:var(--groen);
  text-underline-offset:3px;
}

/* ---------- Werk-teaser (home) ---------- */

.werkteaser{ padding-bottom:var(--ruimte-blok); }

/* De strip stond van schermrand tot schermrand, waardoor de buitenste twee
   foto's tegen de rand liepen en het als een half afgesneden carrousel las.
   Nu binnen de contentbreedte: drie foto's volledig zichtbaar, gelijke hoogte,
   met marge links en rechts. Geen carrousel, dus ook geen bediening nodig. */
.werkteaser__strip{
  display:grid;
  gap:.6rem;
  max-width:var(--breedte);
  margin-inline:auto;
  padding-inline:var(--rand);
}

@media (min-width:800px){
  .werkteaser__strip{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}

.werkteaser__strip .foto img{ height:clamp(150px,22vw,15rem); }

.werkteaser__actie{ padding-top:var(--ruimte-blok); }

.knop--lijn{
  background:none;
  color:var(--groen-diep);
  border:2px solid var(--groen);
}

.knop--lijn:hover,
.knop--lijn:focus-visible{ background:var(--groen); color:var(--wit); }

/* ---------- Cijferblok ----------
   Was één lange regel losse woorden in een zandbalk. Het zijn verkoopfeiten, dus
   nu een echt bewijsblok: per feit het getal groot en het label eronder, met
   lucht eromheen. Zelfde blok op de homepage en op Over ons. */
.cijfers{
  background:var(--papier-2);
  padding:var(--ruimte-sectie) 0;
}

.cijfers__grid{
  max-width:var(--breedte);
  margin-inline:auto;
  padding-inline:var(--rand);
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:clamp(1.5rem,3vw,2.25rem) clamp(1.25rem,3vw,2.5rem);
}

/* Vanaf 720px alles op één rij: auto-fit legt drie of vier items even breed
   neer, afhankelijk van hoeveel er staan (home 3, Over ons 4). */
@media (min-width:720px){
  .cijfers__grid{ grid-template-columns:repeat(auto-fit,minmax(140px,1fr)); }
}

.cijfer__getal{
  display:block;
  font-family:var(--kop);
  font-weight:650;
  font-size:clamp(2rem,1.3rem + 2.6vw,3rem);
  line-height:1;
  letter-spacing:-0.02em;
  color:var(--groen-diep);
}

.cijfer__label{
  display:block;
  margin-top:.5rem;
  font-size:var(--tekst-s);
  line-height:1.35;
  color:var(--inkt-zacht);
}

/* ---------- Slot-CTA ---------- */

/* ── Slotband: een stevige band over de volle breedte ──────────────────
   Geen zwevende kaart. Een tuinfoto van rand tot rand met een donkergroene
   laag eroverheen: dat past bij het vak en het maakt de afsluiting minder kaal
   dan een vlakke kleur. De laag is één effen dekkende kleur, geen verloop.
   isolation + negatieve z-index houden foto en laag achter de tekst zonder dat
   er een extra wikkel-div in zes bestanden hoeft. */
.slotcta{
  position:relative;
  isolation:isolate;
  background:var(--groen-diep);
  color:var(--wit);
  padding:calc(var(--ruimte-sectie) * 1.4) 0;
}

.slotcta__foto{
  position:absolute;
  inset:0;
  z-index:-2;
  width:100%;
  height:100%;
  object-fit:cover;
}

.slotcta::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  background:rgba(21,44,26,.88);
}

.slotcta h2{ max-width:20ch; font-size:var(--tekst-3xl); }

/* Zand op donkergroen: de knop springt er meteen uit, en hij hoort bij dezelfde
   zandtint als de balk bovenaan. Groen op groen zou wegvallen. */
.slotcta .knop{ background:var(--zand); color:var(--groen-diep); }
.slotcta .knop:hover,
.slotcta .knop:focus-visible{ background:var(--wit); color:var(--nacht); }

/* Kop, één regel eronder, dan pas de acties. Bewust onder elkaar en niet in
   twee kolommen: dat leest rustiger en geeft de band het gewicht van een
   afsluiting in plaats van een strookje. */
.slotcta p{
  margin-top:var(--ruimte-regel);
  color:rgba(255,255,255,.92);
  font-size:var(--tekst-l);
  max-width:56ch;
}

.slotcta__acties{
  margin-top:calc(var(--ruimte-blok) * 1.2);
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.9rem 1.75rem;
}

.slotcta__tel{
  display:inline-flex;
  align-items:center;
  min-height:44px;
  font-family:var(--kop);
  font-size:var(--tekst-l);
  font-weight:650;
  color:var(--wit);
  text-decoration:none;
}

.slotcta__tel:hover{ text-decoration:underline; text-underline-offset:.2em; }

/* ---------- Ons werk ---------- */

.voorna__tekst{
  padding-top:var(--ruimte-blok);
  padding-bottom:var(--ruimte-blok);
}

.voorna__tekst p{ margin-top:var(--ruimte-regel); color:var(--inkt-zacht); }

.galerij{ padding-bottom:var(--ruimte-sectie); }

.galerij__grid{
  display:grid;
  gap:var(--ruimte-blok);
  max-width:var(--breedte);
  margin:0 auto;
  padding:0 var(--rand);
}

@media (min-width:800px){
  .galerij__grid{ grid-template-columns:repeat(2,minmax(0,1fr)); }
}

.project .foto img{ height:min(42svh,22rem); }

.project h3{
  margin-top:var(--ruimte-regel);
  padding-top:.8rem;
  border-top:3px solid var(--groen);
  display:inline-block;
}

.project p{ margin-top:.6rem; color:var(--inkt-zacht); }

/* Teamfoto op Over ons: ondersteunt het verhaal in plaats van het weg te
   drukken. Binnen de contentkolom en fors lager dan de vroegere volle-breedte
   band (was 28rem, van rand tot rand). De uitsnede is bewust op de twee mensen
   gezet, niet automatisch. */
/* De foto vult de volle contentkolom, net als de dienstenfoto's, zodat hij op
   dezelfde lijnen ligt als de tekst en niet los in het midden zweeft. Zelfde
   bandverhouding (5:2) als op de dienstenpagina; uitsnede bewust op de twee
   mensen (iets omhoog), zodat de gezichten in beeld blijven. */
.overteam{
  max-width:var(--breedte);
  margin:0 auto;
  padding-inline:var(--rand);
}
.overteam img{
  width:100%;
  aspect-ratio:5 / 2;
  height:auto;
  object-fit:cover;
  object-position:center 26%;
}

/* Het verhaal is de kern van Over ons, dus lopende-tekstformaat en niet de
   bijschriftmaat waarop het stond (het erfde de body-grootte). --tekst-l met een
   leesmaat van 64ch: prominent en toch prettig leesbaar, meeschalend. */
.verhaal{ padding:var(--ruimte-sectie) 0 var(--ruimte-blok); }
.verhaal p{
  font-size:var(--tekst-l);
  line-height:1.7;
  max-width:64ch;
  color:var(--inkt-zacht);
}
.verhaal p + p{ margin-top:var(--ruimte-regel); }

.werkwijze{ padding-bottom:var(--ruimte-blok); }

.werkwijze__grid{
  display:grid;
  gap:var(--ruimte-blok);
}

@media (min-width:760px){
  .werkwijze__grid{ grid-template-columns:repeat(3,minmax(0,1fr)); }
}

/* De streep stond op de h3 en kromp mee met de koptekst, dus hij was maar zo
   breed als de tekst. Nu op het hele blok: een lijn over de volle kolombreedte,
   bij alle drie hetzelfde. */
.werkwijze__punt{
  padding-top:.9rem;
  border-top:2px solid var(--groen);
}

.werkwijze__punt p{ margin-top:.6rem; color:var(--inkt-zacht); }

/* ---------- Veelgestelde vragen ---------- */

.vragen{ padding-bottom:var(--ruimte-sectie); }

/* Het vlak van een vraag loopt via de negatieve marge net buiten de tekstkolom,
   zodat de vraag zelf op de linkerlijn van de pagina blijft staan. De open- en
   hoverkleur staan op de <details> en niet op de <summary>: dan is het één vlak
   om kop en antwoord heen in plaats van twee losse. */
.vraag{
  border-top:1px solid var(--lijn);
  padding-inline:clamp(.7rem,1.4vw,1rem);
  margin-inline:calc(-1 * clamp(.7rem,1.4vw,1rem));
  transition:background-color .18s ease;
}

.vraag:last-of-type{ border-bottom:1px solid var(--lijn); }

.vraag:not([open]):hover{ background:rgba(27,24,19,.05); }
.vraag[open]{ background:var(--zand); }

/* De rij was alleen tekst tussen twee hairlines, zonder dat je zag dat er iets
   te klikken viel. Nu is de hele regel een blok van 60px hoog, met het zandvlak
   dat op deze site "samenvatting" betekent zodra hij openstaat. */
.vraag summary{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:1rem;
  min-height:60px;
  padding:.9rem 0;
  font-family:var(--kop);
  font-size:var(--tekst-l);
  font-weight:650;
  letter-spacing:-0.015em;
  cursor:pointer;
  list-style:none;
}

.vraag[open] summary{ color:var(--groen-diep); }

.vraag summary::-webkit-details-marker{ display:none; }

.vraag summary::after{
  content:"";
  flex:none;
  width:12px;
  height:12px;
  border-right:2px solid var(--groen);
  border-bottom:2px solid var(--groen);
  transform:rotate(45deg) translate(-2px,-2px);
  transition:transform .2s ease;
}

.vraag[open] summary::after{ transform:rotate(-135deg) translate(-3px,-3px); }

/* Gesloten antwoord expliciet verbergen. Chrome 148 klapt de inhoud van een
   dichte <details> niet meer weg (de content rendert en loopt onder de sectie
   uit — op de FAQ verdween de laatste zo achter de CTA-band). display:none op
   het gesloten antwoord dwingt het inklappen af, in élke browser. */
.vraag:not([open]) .vraag__antwoord{ display:none; }
.vraag__antwoord{ padding-bottom:var(--ruimte-blok); }
.vraag__antwoord p{ color:var(--inkt-zacht); max-width:64ch; }

/* ---------- Contact ---------- */


/* Honeypot: onbereikbaar voor mens en autofill. */
.form__hp{
  position:absolute;
  left:-999rem;
  width:1px;
  height:1px;
  overflow:hidden;
}

/* ---------- Hero ---------- */

.hero{
  position:relative;
  isolation:isolate;
  min-height:min(88svh,44rem);
  display:flex;
  align-items:flex-end;
}

.hero img{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  object-fit:cover;
  z-index:-2;
}

/* Eén donkere laag over de HELE hero, geleidelijk donkerder naar onderen, zonder
   naad. De donkere laag zat eerder als gradient op de scrim, en die dekte alleen
   het onderste tekstblok af — precies daar ontstond de harde horizontale rand
   dwars door de foto. Nu ligt de laag over de volledige hoogte. */
.hero::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:-1;
  background:linear-gradient(180deg,
    rgba(16,27,18,.30) 0%,
    rgba(16,27,18,.40) 48%,
    rgba(16,27,18,.84) 100%);
}

.hero__scrim{
  position:relative;
  width:100%;
  background:none;
  padding:7rem var(--rand) var(--ruimte-sectie);
  color:var(--wit);
}

/* De herotekst hangt op hetzelfde raster als de rest van de site, anders begint
   de pagina links op een andere lijn dan hij verdergaat. */
.hero__tekst{
  max-width:var(--breedte);
  margin-inline:auto;
  width:100%;
}

.hero__kicker{
  font-size:var(--tekst-xs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.18em;
  color:var(--groen-licht);
  margin-bottom:var(--ruimte-regel);
}

.hero h1{ max-width:18ch; }

.hero__lead{
  margin-top:var(--ruimte-regel);
  font-size:var(--tekst-l);
  max-width:46ch;
  color:rgba(255,255,255,.92);
}

.hero__acties{
  margin-top:var(--ruimte-blok);
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.75rem 1.5rem;
}

.hero__werklink{
  display:inline-flex;
  align-items:center;
  min-height:44px;
  font-weight:700;
  text-decoration:underline;
  text-underline-offset:.25em;
  text-decoration-thickness:2px;
  text-decoration-color:var(--groen-licht);
}

.hero__werklink:hover{ text-decoration-color:var(--wit); }

/* ---------- Knop ---------- */

.knop{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:48px;
  padding:.85rem 1.75rem;
  background:var(--groen);
  color:var(--wit);
  font-family:var(--kop);
  font-weight:650;
  font-size:var(--tekst-m);
  letter-spacing:-0.01em;
  text-decoration:none;
  border:0;
  cursor:pointer;
  transition:background .2s ease;
}

.knop:hover,
.knop:focus-visible{ background:var(--groen-diep); }

.knop--breed{ width:100%; }

/* ---------- Kolom ----------
   De container van de site. Was 44rem (704px) en daarmee een smalle streep in
   het midden; nu de volle sectiebreedte, zodat kop, tekst en fotoraster op
   dezelfde lijnen staan. Lopende tekst houdt zijn leesmaat via een max-width
   op de alinea zelf, niet door de hele sectie te versmallen. */

.kolom{
  max-width:var(--breedte);
  margin:0 auto;
  padding-left:var(--rand);
  padding-right:var(--rand);
}

/* Blokken die écht alleen lopende tekst zijn, houden hun leesmaat binnen de
   brede container: links uitgelijnd op de kolomlijn, met lucht ernaast. Dat is
   iets anders dan de hele sectie versmallen en centreren. */
.voorna__tekst > *,
.vragen .kolom > *{ max-width:var(--breedte-lees); }

.kolom p + p{ margin-top:var(--ruimte-regel); }

/* Kopje boven een sectie: titel met de toelichting eronder, in dezelfde kolom
   en op dezelfde linkerlijn. Hier stond even een tweekoloms variant (titel
   links, toelichting rechts); die laat een leeg gat onder de titel vallen en
   oogt scheef, dus die is eruit. */
.sectiekop{
  padding-top:var(--ruimte-sectie);
  padding-bottom:var(--ruimte-blok);
}

.sectiekop p{
  margin-top:.85rem;
  color:var(--inkt-zacht);
  font-size:var(--tekst-l);
  max-width:62ch;
}

/* ---------- Intro ----------
   De uitspraak boven, de onderbouwing eronder, in dezelfde kolom en op dezelfde
   linkerlijn. Dit stond hier als laatste nog tweekoloms; dat is hetzelfde
   scheve patroon als bij de sectiekoppen en is nu ook hier weg. */

.intro{ padding:var(--ruimte-sectie) 0 var(--ruimte-blok); }

.intro__groot{
  font-family:var(--kop);
  font-size:var(--tekst-2xl);
  font-weight:650;
  line-height:1.2;
  letter-spacing:-0.02em;
  text-wrap:balance;
  max-width:30ch;
}

.intro__sub{
  margin-top:var(--ruimte-regel);
  color:var(--inkt-zacht);
  font-size:var(--tekst-l);
  max-width:62ch;
}

/* ---------- Full-bleed foto's ---------- */

.foto{ position:relative; }

.foto img{
  width:100%;
  height:min(66svh,36rem);
  object-fit:cover;
}

.foto__label{
  position:absolute;
  left:0;
  right:0;
  top:0;
  background:linear-gradient(180deg,rgba(16,27,18,.72) 0%,rgba(16,27,18,0) 100%);
  padding:1.1rem var(--rand) 3rem;
  color:var(--wit);
  font-family:var(--kop);
  font-size:var(--tekst-l);
  font-weight:650;
  text-transform:uppercase;
  letter-spacing:.14em;
  line-height:1;
}

/* ---------- Diensten ----------
   Hier stond een zigzag: foto links, foto rechts, foto links. Dat is precies
   het patroon dat een sitebouwer standaard uitspuugt, en het leest als een
   sjabloon. Nu krijgt elke dienst dezelfde behandeling: een brede foto over de
   volle breedte, daaronder de titel en de tekst in een leeskolom, met een
   hairline als scheiding tussen de diensten. Redactioneel in plaats van
   blokkerig, en het patroon springt niet meer heen en weer. */

/* De dienst is de contentkolom: foto én tekst staan op dezelfde linkerlijn en
   dezelfde breedte, ingesprongen van de schermrand. Eerder liep de foto van
   rand tot rand terwijl de tekst binnen de kolom stond; dat oogde toevallig.
   Nu is alles bewust binnen de kolom uitgelijnd, bij alle drie de diensten
   hetzelfde. */
.dienst{
  max-width:var(--breedte);
  margin-inline:auto;
  padding-inline:var(--rand);
  position:relative;
}
/* De .kolom-klasse op de tekst mag zijn eigen breedte/padding niet meer
   opleggen, anders sprong die dubbel in. */
.dienst .kolom{ max-width:none; margin-inline:0; padding-inline:0; }

/* De foto is een brede band, maar niet zo plat als eerst (was ~5:1 door een
   vaste px-hoogte). Een vaste verhouding van 8:3 houdt hem op elke breedte even
   hoog in verhouding, zodat je weer ziet waar de dienst over gaat. */
.dienst .foto img{
  width:100%;
  aspect-ratio:5 / 2;
  height:auto;
  object-fit:cover;
}
/* De uitsnede is per foto gekozen, niet automatisch: bij onderhoud iets omhoog
   zodat de heggenschaar, de armen en het hoofd in beeld blijven, bij het terras
   iets omlaag zodat de bestrating zelf de boventoon voert. */
#onderhoud .foto img{ object-position:50% 30%; }
#bestrating .foto img{ object-position:50% 62%; }

/* Scheiding tussen de diensten: een hairline die exact zo breed is als de foto
   en de tekst (links/rechts op --rand), zodat ook de lijn binnen de kolom valt
   en niet doorloopt tot de bredere articlerand. */
.dienst + .dienst{ margin-top:var(--ruimte-sectie); padding-top:var(--ruimte-sectie); }
.dienst + .dienst::before{
  content:"";
  position:absolute;
  top:0; left:var(--rand); right:var(--rand);
  border-top:1px solid var(--lijn);
}

.dienst__tekst{
  padding-top:var(--ruimte-blok);
  padding-bottom:0;
}
/* De laatste dienst plakte tegen de CTA-band. Nu evenveel lucht naar de band
   als de andere paginas (cijfers/galerij brengen daar ruimte-sectie mee). */
.dienst:last-of-type{ padding-bottom:var(--ruimte-sectie); }

.dienst__tekst h2{ max-width:26ch; }

.dienst__tekst p{
  margin-top:var(--ruimte-regel);
  font-size:var(--tekst-m);
  line-height:1.65;
  max-width:64ch;
  color:var(--inkt-zacht);
}

/* Vanaf 800px: de lopende tekst in één kolom die natuurlijk doorloopt (geen
   twee gelijk afgebroken kolommen meer), met het verwachtingsblok ernaast als
   samenvatting. Het blok lijnt bovenaan uit met de eerste alinea en sluit om
   zijn eigen inhoud in plaats van mee te rekken. */
@media (min-width:800px){
  .dienst__tekst{
    display:grid;
    grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);
    column-gap:clamp(2rem,4vw,3.5rem);
    align-items:start;
  }
  .dienst__tekst h2{ grid-column:1 / -1; }
  .dienst__tekst p:not(.dienst__verwachting){ grid-column:1; max-width:none; }
  .dienst__verwachting{ grid-column:2; grid-row:2 / span 2; align-self:start; margin-top:0; }
}

/* De verwachtingsregel is de samenvatting van de dienst en moet er als zodanig
   uitspringen: een zandvlak met een groene kantlijn, en het label als klein
   kapitaal erboven in plaats van cursief middenin de zin. */
.dienst__verwachting{
  margin-top:var(--ruimte-blok);
  padding:clamp(1rem,2vw,1.4rem) clamp(1.1rem,2.2vw,1.6rem);
  background:var(--zand);
  border-left:4px solid var(--groen);
  max-width:64ch;
  font-size:var(--tekst-m);
  line-height:1.6;
  color:var(--inkt);
}

.dienst__verwachting em{
  display:block;
  margin-bottom:.4rem;
  font-style:normal;
  font-family:var(--tekst);
  font-weight:700;
  font-size:var(--tekst-xs);
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--groen-diep);
}

/* ---------- Werk / voor-na ---------- */

.vergelijk{
  display:flex;
  flex-direction:column;
  gap:.5rem;
}

@media (min-width:800px){
  .vergelijk{ flex-direction:row; }
}

.foto--half{ flex:1 1 50%; }
.foto--half img{ height:min(54svh,32rem); }

/* ---------- Contact ---------- */

/* ---------- Contact ----------
   Was één groot gevuld groen vlak — dat oogde als een site uit 2010. Nu de
   lichte papierkleur van de rest van de site, met groen alleen als accent: de
   iconen, de kantlijn langs de gegevens en de knop. Gegevens links, formulier
   rechts; onder elkaar op mobiel. */
.contact{
  background:var(--papier);
  color:var(--inkt);
  padding:0 0 var(--ruimte-sectie);
}

.contact__grid{
  max-width:var(--breedte);
  margin:0 auto;
  padding:0 var(--rand);
  display:grid;
  gap:var(--ruimte-blok);
}

/* De gegevens staan in een zandvlak met een groene kantlijn: hetzelfde motief
   als het verwachtingsblok op de dienstenpagina, zodat de site één taal spreekt.
   Het vlak sluit om zijn eigen inhoud. Even proberen we het mee te rekken met
   het formulier ernaast, maar dan moesten vijf regels een hoogte van bijna 800px
   vullen en stond er honderd pixels tussen; dat oogde opgevuld. De kolommen
   lijnen nu bovenaan uit en de linker mag korter zijn. */
.contact__links{
  background:var(--zand);
  border-left:4px solid var(--groen);
  padding:clamp(1.4rem,2.6vw,2rem);
  align-self:start;
}

@media (min-width:880px){
  .contact__grid{
    grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);
    gap:clamp(2rem,4vw,3.5rem);
    align-items:start;
  }
}

.contact__kop{ font-size:var(--tekst-xl); margin-bottom:var(--ruimte-blok); }

.contact__info{
  display:grid;
  gap:1.35rem;
}

.contact__item{ min-width:0; }

.contact__info dt{
  display:flex;
  align-items:center;
  gap:.6rem;
  font-size:var(--tekst-xs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.14em;
  color:var(--inkt-zacht);
  margin-bottom:.2rem;
}

.contact__icoon{
  width:20px;
  height:20px;
  flex:none;
  color:var(--groen);
}

.contact__info dd{
  margin:0;
  padding-left:calc(20px + .6rem);
  min-width:0;
  font-size:var(--tekst-m);
  line-height:1.55;
  overflow-wrap:break-word;
}

.contact__info a{
  color:var(--groen-diep);
  font-weight:600;
  max-width:100%;
  overflow-wrap:anywhere;
  text-underline-offset:3px;
}

.contact__info a:hover{ color:var(--groen); text-decoration:underline; }

/* ---------- Formulier ---------- */

/* Het formulier stond op een doorzichtig wit vlak omdat de sectie donker was.
   Op de lichte pagina is het een wit paneel met een hairline. */
.form{
  background:var(--wit);
  border:1px solid var(--lijn);
  padding:clamp(1.5rem,3vw,2.25rem);
}

.form__titel{ font-size:var(--tekst-xl); }

.form__uitleg{
  margin-top:.5rem;
  font-size:var(--tekst-s);
  color:var(--inkt-zacht);
}

.veld{ margin-top:var(--ruimte-regel); }

.veld label{
  display:block;
  font-weight:600;
  font-size:var(--tekst-s);
  margin-bottom:.35rem;
}

input,
select,
textarea{
  width:100%;
  min-height:48px;
  padding:.75rem .9rem;
  font-size:16px;
  font-family:inherit;
  line-height:1.5;
  color:var(--inkt);
  background:var(--wit);
  /* Op een wit paneel moet de rand van een veld zichtbaar zijn; die stond op
     transparent omdat het formulier eerst op een donker vlak lag. */
  border:1px solid var(--zand-lijn);
}

input:focus,
select:focus,
textarea:focus{ border-color:var(--groen); }

textarea{
  min-height:7rem;
  resize:vertical;
}

.form .knop{ margin-top:var(--ruimte-blok); }

.form__note{
  margin-top:var(--ruimte-regel);
  padding:.7rem .85rem;
  background:var(--zand);
  border-left:3px solid var(--groen);
  font-weight:600;
  font-size:var(--tekst-s);
  color:var(--groen-diep);
}

.form__fineprint{
  margin-top:.75rem;
  font-size:var(--tekst-s);
  color:var(--inkt-zacht);
}

/* ---------- Footer ---------- */

/* De voet viel uiteen in rijen: vier blokken in drie kolommen (dus een
   omgeslagen vierde), plus een losse werkgebied-regel, plus een slotregel.
   Nu één rij van vijf kolommen op desktop en één dunne slotregel eronder. */
.voet{
  background:var(--nacht);
  color:var(--papier);
  padding:1.4rem 0 .9rem;
}

.voet__in{
  max-width:var(--breedte);
  margin:0 auto;
  padding:0 var(--rand);
}

.voet__blokken{
  display:grid;
  gap:1.35rem;
}

@media (min-width:640px){
  .voet__blokken{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:1.5rem 2rem; }
}

@media (min-width:1000px){
  .voet__blokken{
    grid-template-columns:1.5fr repeat(4,minmax(0,1fr));
    gap:0 clamp(1.5rem,3vw,2.5rem);
    align-items:start;
  }
}

.voet__naam{
  font-family:var(--kop);
  font-weight:650;
  font-size:var(--tekst-l);
  letter-spacing:-0.015em;
}

.voet__claim{
  margin-top:.35rem;
  font-size:var(--tekst-s);
  color:#a7b3a6;
  max-width:30ch;
}

.voet__kop{
  font-size:var(--tekst-xs);
  font-weight:700;
  text-transform:uppercase;
  letter-spacing:.16em;
  color:var(--groen-licht);
  margin-bottom:.4rem;
}

.voet__lijst{
  list-style:none;
  display:grid;
  gap:.1rem;
  font-size:var(--tekst-s);
  color:#cdd6cc;
  line-height:1.5;
}

.voet__lijst a{
  display:inline-block;
  padding:.1rem 0;
  overflow-wrap:anywhere;
}

.voet__lijst a:hover{ text-decoration:underline; text-underline-offset:.2em; }

/* Eén slotregel: naam, jaartal en de portfoliomelding naast elkaar. */
.voet__note{
  margin-top:1.25rem;
  padding-top:.85rem;
  border-top:1px solid rgba(247,243,236,.14);
  font-size:var(--tekst-xs);
  color:#a7b3a6;
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:.35rem 1.1rem;
}

.voet__note a{
  color:var(--papier);
  display:inline-block;
  padding:.2rem 0;
}
