/* 3D-weergave (drie_d.js): eigen kaart boven de 2D-kaart, bediening rechtsonder zoals Vision10. */
.kaart3d { position: absolute; inset: 0; z-index: 2; background: linear-gradient(#DADADA, #F0F0F0 45%); overflow: hidden; }
.d3-kaart { position: absolute; inset: 0; }
.d3-kaart .maplibregl-canvas-container, .d3-kaart canvas { touch-action: none; }
.d3-kaart .maplibregl-canvas-container { cursor: grab; }
.d3-kaart .maplibregl-canvas-container.sleept { cursor: grabbing; }
.kaart-wrap.is-3d .legenda-noot { display: none; }
/* de 2D-kaart (met zijn markers en knoppen) staat in 3D niet in beeld; de legenda (z-index 3) blijft erboven */
.kaart-wrap.is-3d #kaart { visibility: hidden; }

/* 2D/3D-schakelaar: in de knoppenhoek rechtsboven van de kaart die in beeld is */
.d3-schakel { display: flex; overflow: hidden; }
.maplibregl-ctrl-group.d3-schakel button {
  width: auto; min-width: 40px; height: 32px; padding: 0 10px; font: 700 13px/1 var(--font); color: var(--nh-black);
  border: 0; background: var(--nh-white); cursor: pointer; transition: background var(--transition), color var(--transition);
}
.maplibregl-ctrl-group.d3-schakel button + button { border-top: 0; border-left: 1px solid var(--nh-border); }
.maplibregl-ctrl-group.d3-schakel button:hover { background: var(--nh-bg); }
.maplibregl-ctrl-group.d3-schakel button[aria-pressed="true"] { background: var(--nh-green); color: var(--nh-on-green); }
.maplibregl-ctrl-group.d3-schakel button[aria-pressed="true"]:hover { background: var(--nh-green-dark); }
.maplibregl-ctrl-group.d3-schakel button:focus-visible { outline: 2px solid var(--nh-black); outline-offset: -2px; }

/* labels boven de 3D: vlaknummers (zelfde stijl als op de kaart) en randlengtes */
.d3-labels { position: absolute; inset: 0; pointer-events: none; overflow: hidden; z-index: 1; }
.d3-labels .d3-vlak { position: absolute; left: 0; top: 0; pointer-events: auto; will-change: transform; }
.d3-labels .d3-vlak.niet-mee { opacity: .6; }
/* kort: alleen het nummer, als het volle label zijn vlak op het scherm grotendeels zou bedekken */
.d3-labels .d3-vlak.kort { gap: 0; padding: 0 6px; }
.d3-labels .d3-vlak.kort span { display: none; }
.d3-maat {
  position: absolute; left: 0; top: 0; white-space: nowrap; will-change: transform;
  font: 600 11px/1 var(--font); padding: 3px 5px; border-radius: 3px;
  background: rgba(13,13,13,.78); box-shadow: 0 0 0 1px rgba(13,13,13,.9);
}

.d3-melding {
  position: absolute; left: 50%; top: 12px; transform: translateX(-50%); z-index: 2; max-width: min(460px, calc(100% - 32px));
  font-size: 13px; line-height: 1.45; padding: 9px 12px; border-radius: var(--radius-sm);
  background: var(--nh-white); color: var(--nh-gray); box-shadow: var(--shadow-md); border-left: 3px solid var(--nh-green);
}
.d3-melding.fout { background: var(--nh-error-bg); color: var(--nh-error); border-left-color: var(--nh-error); }
.d3-laden {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 2;
  display: flex; align-items: center; gap: 10px; font-size: 14px; font-weight: 600; color: var(--nh-black);
  background: var(--nh-white); padding: 10px 14px; border-radius: var(--radius-sm); box-shadow: var(--shadow-md);
}

/* bediening rechtsonder */
.d3-bediening {
  position: absolute; right: 14px; bottom: 26px; z-index: 2; display: flex; flex-direction: column; align-items: center; gap: 8px;
  user-select: none; -webkit-user-select: none;
}
.d3-rij { display: flex; gap: 6px; }
.d3-knop {
  width: 36px; height: 36px; border-radius: 50%; border: 0; display: inline-flex; align-items: center; justify-content: center;
  background: var(--nh-white); color: var(--nh-black); box-shadow: 0 1px 4px rgba(0,0,0,.28); cursor: pointer;
  transition: background var(--transition), color var(--transition);
}
.d3-knop:hover { background: var(--nh-green); color: var(--nh-on-green); }
.d3-knop:focus-visible, .d3-zoom:focus-visible, .d3-ondergrond:focus-visible { outline: 2px solid var(--nh-black); outline-offset: 2px; }
.d3-noordknop { color: var(--nh-green-dark); }
.d3-noordknop.uit { color: var(--nh-gray-light); }

.d3-ring {
  position: relative; width: 120px; height: 120px; border-radius: 50%; touch-action: none; cursor: grab;
  filter: drop-shadow(0 1px 3px rgba(0,0,0,.3));
}
.d3-ring:active { cursor: grabbing; }
.d3-ring:focus-visible { outline: 2px solid var(--nh-black); outline-offset: 3px; }
.d3-ring svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.d3-ring-baan { fill: rgba(255,255,255,.92); stroke: var(--nh-white); stroke-width: 16; }
.d3-ring-boog { fill: none; stroke: var(--nh-green); stroke-width: 7; stroke-linecap: round; }
.d3-pijl { fill: var(--nh-green); stroke: var(--nh-white); stroke-width: 1.5; stroke-linejoin: round; cursor: pointer; }
.d3-n { font: 800 9px/1 var(--font); fill: var(--nh-black); text-anchor: middle; pointer-events: none; }
.d3-zoom {
  position: absolute; left: 22px; right: 22px; height: 37px; border: 0; padding: 0; cursor: pointer;
  font: 600 26px/1 var(--font); color: var(--nh-green-dark); background: var(--nh-white);
  display: flex; align-items: center; justify-content: center; transition: background var(--transition), color var(--transition);
}
.d3-in { top: 22px; border-radius: 38px 38px 0 0; border-bottom: 2px solid var(--nh-bg); }
.d3-uit { bottom: 22px; border-radius: 0 0 38px 38px; }
.d3-zoom:hover { background: var(--nh-green); color: var(--nh-on-green); }
.d3-stand {
  font: 600 11px/1.2 var(--font); color: var(--nh-gray); background: rgba(255,255,255,.9); padding: 3px 7px; border-radius: 10px;
  white-space: nowrap;
}
.d3-ondergrond {
  font: 600 11px/1 var(--font); color: var(--nh-black); background: var(--nh-white); border: 1px solid var(--nh-border);
  border-radius: 12px; padding: 5px 9px; cursor: pointer; box-shadow: 0 1px 3px rgba(0,0,0,.18);
}
.d3-ondergrond[aria-pressed="true"] { background: var(--nh-black); color: var(--nh-white); border-color: var(--nh-black); }
.kaart3d .maplibregl-ctrl-bottom-left .maplibregl-ctrl-attrib { font-family: var(--font); font-size: 11px; }

/* ronde 6 (besluit 3D-bediening mobiel, E1-E15): compacte rij, meer-paneel en hint bestaan alleen op een smal scherm */
.d3-compact, .d3-meer-paneel, .d3-hint { display: none; }
/* het 3D-kaartvlak is te bedienen met het toetsenbord (E13): zichtbare focusrand */
.d3-kaart:focus { outline: none; }
.d3-kaart:focus-visible { outline: 3px solid var(--nh-black); outline-offset: -3px; }
/* werkruimte: label bij de groene strook (straatzijde, achter) */
.d3-maat.d3-maatlabel.werk { background: var(--nh-green); color: var(--nh-on-green); box-shadow: 0 0 0 1px var(--nh-green-dark); }
.d3-maten-rij.d3-werk b { color: var(--nh-green-tekst); }
.d3-maten .d3-kort { display: none; }

/* ronde 4: tooltip bij een dakvlak (hover met de muis, tik op touch): vlaknummer, m², helling, oriëntatie */
.d3-tip {
  position: absolute; left: 0; top: 0; z-index: 3; pointer-events: none; will-change: transform;
  background: var(--nh-black); color: var(--nh-white); border-radius: var(--radius-sm); padding: 7px 10px;
  box-shadow: 0 2px 10px rgba(0,0,0,.3); font: 500 12px/1.35 var(--font); white-space: nowrap; max-width: calc(100% - 16px);
}
.d3-tip-kop { display: flex; gap: 10px; align-items: baseline; font-size: 14px; }
.d3-tip-kop b { font-weight: 700; }
.d3-tip-kop span { font-weight: 700; color: var(--nh-green-light); }
.d3-tip-sub { color: #D9D9D9; }
.d3-tip-sub.uit { color: #BDBDBD; font-style: italic; }

/* ronde 4: kaartje met goot- en nokhoogte en de afstand tot de buren (linksonder; op een smal scherm bovenin) */
.d3-maten {
  position: absolute; left: 12px; bottom: 34px; z-index: 2; max-width: min(420px, calc(100% - 200px));
  background: rgba(255,255,255,.95); color: var(--nh-black); border-radius: var(--radius-sm); box-shadow: var(--shadow-md);
  padding: 7px 10px; font: 500 12px/1.45 var(--font); border-left: 3px solid var(--nh-green);
}
.d3-maten-rij { display: flex; gap: 8px; }
.d3-maten-k { color: var(--nh-gray); min-width: 98px; font-weight: 600; }
.d3-maten b { font-weight: 700; }
.d3-maten .nw { white-space: nowrap; }
/* maatlabels in 3D: zwart met wit, zoals een maat op een tekening (geen randkleur) */
.d3-maat.d3-maatlabel { color: var(--nh-white); background: rgba(13,13,13,.86); font-weight: 700; }
.d3-maat.d3-maatlabel.afstand { background: var(--nh-white); color: var(--nh-black); box-shadow: 0 0 0 1px var(--nh-black); }
/* ronde 9: in- en uitklapknop van het kaartje met de maten bestaat alleen op een smal scherm */
.d3-maten-knop, .d3-ingeklapt-knel { display: none; }

@media (max-width: 820px) {
  .kaart3d { inset: 0 0 auto 0; height: 50vh; min-height: 300px; }
  /* smal scherm (ronde 2, critic): alle knoppen blijven (45° draaien, beginbeeld, luchtfoto), compact naast de ring;
     de ring staat ver genoeg van de rand dat de noordpijl in elke stand binnen het scherm blijft.
     Ronde 3 (critic, 390 px): geen verkleining meer; elke knop minstens 44 x 44 px (vinger), ruimte tussen de knoppen
     en de ring (de noordpijlgroep overlapte '45° rechtsom'), en de kijkrichting blijft zichtbaar. Luchtfoto en
     kijkrichting staan linksboven, zodat de bediening onderin laag blijft; drie_d.js houdt het huis erboven (padding). */
  .d3-bediening { position: static; right: 16px; }
  .d3-bediening > * { position: absolute; z-index: 2; }
  .d3-bediening > .d3-ring { right: 16px; bottom: 8px; width: 136px; height: 136px; }
  /* ronde 5 (critic: de zes knoppen stonden onderin in het midden, over de gevel van het huis): twee kolommen van drie
     knoppen boven de ring, rechtsonder zoals de lat; het huis staat links ervan (drie_d.js: padding rechts) */
  .d3-bediening > .d3-rij { flex-direction: column; }
  .d3-bediening > .d3-rij:first-child { right: 86px; bottom: 154px; }
  .d3-bediening > .d3-rij:nth-child(3) { right: 36px; bottom: 154px; }
  /* tooltip na een tik: vast bovenin, over het kaartje met de maten (dat komt terug zodra de tooltip dicht is), niet
     over het dak, de nok of een maatlabel */
  .d3-tip.vast { left: 16px; right: 16px; top: 88px; transform: none; max-width: none; white-space: normal; padding: 9px 12px; }
  .d3-bediening > .d3-ondergrond { left: 16px; top: 12px; min-height: 44px; padding: 0 16px; font-size: 13px; border-radius: 22px; }
  .d3-bediening > .d3-stand { left: 16px; top: 62px; display: block; font-size: 11px; }
  .d3-rij { gap: 6px; }
  .d3-knop { width: 44px; height: 44px; }
  .d3-zoom { left: 24px; right: 24px; height: 44px; }
  .d3-in { top: 24px; }
  .d3-uit { bottom: 24px; }
  /* ronde 4 (judge, 390 px: dak ~12% van de breedte): in 3D is het beeld hoger, zodat het huis boven de bediening
     ruimte heeft; het kaartje met de maten staat bovenin onder de kijkrichting */
  .kaart-wrap.is-3d #kaart { height: 64vh; }
  .kaart3d { height: 64vh; }
  .d3-maten { left: 16px; right: 16px; top: 88px; bottom: auto; max-width: none; padding: 5px 9px; font-size: 12px; }
  .d3-maten-k { min-width: 92px; }
  /* ronde 6: één regel per soort (korte sleutels, details alleen op desktop), zodat het huis groter in beeld komt */
  .d3-maten .d3-lang, .d3-maten .d3-detail { display: none; }
  .d3-maten .d3-kort { display: inline; }
  .d3-maten-k { min-width: 74px; }
  /* ronde 9 (critic, E8: kaartje 80 px hoog, padding boven 176, beginzoom 18,65 op 390 x 844): het kaartje staat direct
     onder de bovenste rij en is standaard ingeklapt tot één regel (hoogtes en een eventueel knelpunt); de knop rechts
     klapt werkruimte en buren uit. De kijkrichting staat op een smal scherm in het kompas (draait mee, aria-label). */
  .d3-bediening > .d3-stand { display: none; }
  .d3-maten { top: 62px; padding-right: 46px; min-height: 28px; box-sizing: border-box; }
  .d3-maten.ingeklapt .d3-maten-rij + .d3-maten-rij { display: none; }
  .d3-maten.ingeklapt .d3-maten-k { display: none; }
  /* goothoogte per zijde: op een smal scherm alleen uitgeklapt */
  .d3-maten.ingeklapt .d3-perzijde { display: none; }
  .d3-maten.ingeklapt .d3-ingeklapt-knel { display: inline; color: var(--nh-error); font-weight: 600; }
  .d3-maten-knop {
    display: flex; position: absolute; top: 0; right: 0; bottom: 0; width: 44px; min-height: 28px; padding: 0; border: 0;
    border-radius: 0 var(--radius-sm) var(--radius-sm) 0; background: transparent; color: var(--nh-black);
    align-items: center; justify-content: center; cursor: pointer;
  }
  .d3-maten-knop:hover { background: var(--nh-green); color: var(--nh-on-green); }
  .d3-maten-knop:focus-visible { outline: 2px solid var(--nh-black); outline-offset: -2px; }
  .d3-maten:not(.ingeklapt) .d3-maten-knop svg { transform: rotate(180deg); }

  /* ronde 6 (besluit 22 okt): de ring met zes knoppen verdwijnt op een smal scherm (E2: geen raakvlak, geen focusplek);
     rechtsonder een compacte rij [Meer bediening] [Beginbeeld] [Kompas] van 44 px, 8 px ertussen, 16 px van rechts en
     12 px van onder (E3). 'Meer bediening' klapt twee rijen van drie knoppen uit, direct links ernaast, onderkant
     gelijk (E6). */
  .d3-bediening > .d3-ring, .d3-bediening > .d3-rij { display: none; }
  .d3-bediening > .d3-compact { display: flex; gap: 8px; right: 16px; bottom: 12px; }
  .d3-bediening > .d3-meer-paneel:not([hidden]) {
    display: grid; grid-template-columns: repeat(3, 44px); grid-auto-rows: 44px; gap: 8px; right: 172px; bottom: 12px;
  }
  .d3-compact .d3-knop, .d3-meer-paneel .d3-knop { width: 44px; height: 44px; flex: none; }
  /* E3 (critic ronde 7: open werd de knop zwart gevuld): ook open wit met schaduw zoals .d3-knop; de open stand zie je
     aan een groene ring en een groen pictogram */
  .d3-meer[aria-expanded="true"] { background: var(--nh-white); color: var(--nh-green-dark); box-shadow: 0 0 0 2px var(--nh-green), 0 1px 4px rgba(0,0,0,.28); }
  .d3-meer[aria-expanded="true"]:hover { background: var(--nh-green); color: var(--nh-on-green); }
  .d3-compact .d3-knop:focus-visible, .d3-meer-paneel .d3-knop:focus-visible { outline: 2px solid var(--nh-black); outline-offset: 2px; }
  .d3-meer-paneel .d3-plusmin { font: 600 26px/1 var(--font); color: var(--nh-green-dark); }
  .d3-meer-paneel .d3-plusmin:hover { color: var(--nh-on-green); }
  .d3-kompas-pijl { display: inline-flex; transition: transform 60ms linear; }
  .d3-kompas-pijl svg { width: 22px; height: 22px; }
  /* eenmalige hint (E11): linksonder, boven de bronvermelding en boven de hoogte van de compacte rij */
  .d3-hint:not([hidden]) {
    display: block; position: absolute; z-index: 2; left: 16px; bottom: 64px; max-width: calc(100% - 32px);
    font: 600 12px/1.3 var(--font); color: var(--nh-white); background: rgba(13,13,13,.86); padding: 7px 10px;
    border-radius: var(--radius-sm); box-shadow: 0 1px 4px rgba(0,0,0,.28); pointer-events: none;
  }
  /* meer-paneel open: de ingeklapte pil 'Maten' (paneel, linksonder) ligt onder de zes knoppen. Ronde 7 (critic,
     ernstig): boven het paneel (116 px) maakte paneel.js van de pil een strook van 168 px onderin en verschoof het de
     camera (E5, E7, E8, E12). Nu gaat de pil naar de bovenste rij, naast Luchtfoto en even hoog (44 px): daar valt hij
     binnen de padding boven (kijkrichting en het kaartje met de maten), dus de camera blijft staan. */
  /* ronde 8 (critic: 'een knop die van plek wisselt als je een andere knop indrukt'): de pil staat in 3D op een smal
     scherm altijd in de bovenste rij, ook met het meer-paneel dicht; open- of dichtklappen verplaatst niets meer */
  .kaart-wrap.is-3d #kaart3d:not([hidden]) ~ .legenda.dicht { top: 12px; bottom: auto; left: 124px; }
  /* de eenmalige hint schuift boven het open paneel (E11 en E9: geen overlap met de knoppen) */
  #kaart3d.d3-meer-open .d3-hint:not([hidden]) { bottom: 116px; }
}
/* Paneel ronde 8 (critic paneel r7: 'liggend 844 x 390 loopt het kaartje met de maten over zijn rechterrand,
   scrollWidth 366 tegen 221'). Alleen de opmaak van het kaartje: een liggende telefoon breder dan 820 px houdt de
   desktopbediening (ring rechts, vanaf 100% - 136 px) in een kaart van ongeveer 424 x 390 px. Het kaartje loopt tot 8 px
   voor die kolom, de waarden breken binnen het kaartje af en het krijgt de korte opmaak van een smal scherm (korte
   sleutels, geen details): zo blijft het laag (88 px in plaats van 118 tot 136) en valt het huis in het beginbeeld er
   niet op. De scène, de camera en de bediening blijven ongewijzigd. */
@media (min-width: 821px) and (max-height: 500px) and (pointer: coarse) {
  .d3-maten { max-width: calc(100% - 160px); padding: 5px 9px; font-size: 12px; line-height: 1.35; }
  .d3-maten-rij > span:last-child { min-width: 0; }
  .d3-maten .nw { white-space: normal; }
  .d3-maten .d3-lang, .d3-maten .d3-detail { display: none; }
  .d3-maten .d3-kort { display: inline; }
  .d3-maten-k { min-width: 74px; }
}
/* ronde 7 (judge: 'je ziet niet of een getal een hoogte of een lengte is'): hoogtelabels met een pijl omhoog */
.d3-maat.d3-maatlabel.hoogte::before {
  content: ''; display: inline-block; width: 7px; height: 10px; margin-right: 4px; vertical-align: -1px;
  background: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7 10'%3E%3Cpath d='M3.5 0L7 3.6H4.4V10H2.6V3.6H0z'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7 10'%3E%3Cpath d='M3.5 0L7 3.6H4.4V10H2.6V3.6H0z'/%3E%3C/svg%3E") center / contain no-repeat;
}
/* knelpunt: stuk gevel zonder ruimte voor een steiger (foutkleur, zoals een melding) */
.d3-maat.d3-maatlabel.knel { background: var(--nh-error-bg, #FEF2F2); color: var(--nh-error, #DC3545); box-shadow: 0 0 0 1px var(--nh-error, #DC3545); }
.d3-maten .d3-knel { color: var(--nh-error, #DC3545); font-weight: 600; }
