/* Layout: full-screen 3D view, dashboard bottom-left, controls card top-left, touch pedals bottom-right */
:root{
  --panel: rgba(18,24,32,.82);
  --panel-line: rgba(255,255,255,.12);
  --ink: #eef2f5;
  --ink-dim: #9aa8b4;
  --signal: #ff8a1f;
  --bad: #ff5a4e;
  --good: #7fd88f;
  --font-display: "Barlow Condensed", "Arial Narrow", sans-serif;
  --font-body: "Barlow", system-ui, sans-serif;
  color-scheme: dark;
}
html,body{height:100%;margin:0;background:#0d1217;color:var(--ink);font-family:var(--font-body);overflow:hidden}
#map{position:absolute;inset:0}
.cesium-viewer-bottom{display:none}
.panel{position:absolute;background:var(--panel);border:1px solid var(--panel-line);border-radius:10px;backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
#controls{top:max(12px,env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left));padding:12px 14px;width:270px;max-width:calc(100vw - 24px);box-sizing:border-box;display:grid;gap:10px;font-size:13px;max-height:calc(100vh - 24px);overflow-y:auto;overscroll-behavior:contain}
#controls .appNaam{margin:0 0 -8px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.12em;color:var(--signal)}
#controls h1{margin:0;padding-right:28px;font-family:var(--font-display);font-weight:700;font-size:22px;letter-spacing:.02em;text-transform:uppercase}
#controls label{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-dim)}
select,button{font:inherit;color:var(--ink);background:rgba(255,255,255,.07);border:1px solid var(--panel-line);border-radius:6px;padding:6px 8px}
select option,select optgroup{background:#1b232c;color:#eef2f5}
select:focus-visible,button:focus-visible{outline:2px solid var(--signal);outline-offset:1px}
button{cursor:pointer}
button:hover{background:rgba(255,255,255,.14)}
.row{display:flex;gap:6px;flex-wrap:wrap}
.keys{display:grid;grid-template-columns:auto 1fr;gap:3px 10px;color:var(--ink-dim)}
.keys kbd{font-family:var(--font-display);font-weight:700;color:var(--ink);background:rgba(255,255,255,.1);border-radius:4px;padding:0 5px;text-align:center}
#toggleHelp{position:absolute;top:10px;right:10px;padding:2px 8px}
/* navigatie: onderin het midden */
#nav{left:50%;transform:translateX(-50%);bottom:max(12px,env(safe-area-inset-bottom));display:flex;align-items:center;gap:14px;padding:10px 12px 10px 16px;min-width:280px;max-width:calc(100vw - 24px);box-sizing:border-box;z-index:4}
#nav[hidden]{display:none}
.navPijl{font-size:44px;line-height:1;color:#7cc4ff;width:48px;text-align:center}
.navAfst{font:700 26px/1 var(--font-display);letter-spacing:.02em}
.navStraat{font-size:14px;font-weight:600;margin-top:2px}
.navRest{font-size:12px;color:var(--ink-dim);margin-top:2px}
.navTekst{flex:1;min-width:0}
#navStop{align-self:flex-start;padding:0 8px;font-size:18px;line-height:1.4}
body:has(#nav:not([hidden])) #hint{display:none}
@media (max-width:560px){#nav{bottom:auto;top:max(12px,env(safe-area-inset-top));min-width:0;width:calc(100vw - 24px)}}
/* 2D-kaart (start en bestemming) */
#kaart2d{position:fixed;inset:0;z-index:40;background:#0d1217}
#kaart2d[hidden]{display:none}
.k2Kaart{position:absolute;inset:0}
.k2Paneel{top:max(12px,env(safe-area-inset-top));left:max(12px,env(safe-area-inset-left));width:330px;max-width:calc(100vw - 24px);box-sizing:border-box;padding:14px;display:grid;gap:10px;z-index:1000;font-size:13px}
.k2Paneel h2{margin:0;font:700 20px var(--font-display);text-transform:uppercase;letter-spacing:.02em}
.k2Modus{display:flex;gap:6px}
.k2Modus button{flex:1;display:flex;align-items:center;gap:8px;justify-content:center}
.k2Modus button[aria-checked="true"]{border-color:var(--signal);background:rgba(255,138,31,.16)}
.k2Modus i{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;color:#fff;font:700 12px var(--font-body);font-style:normal}
.k2Uitleg{margin:0;color:var(--ink-dim);line-height:1.45}
.k2Vink{display:flex;gap:8px;align-items:center;color:var(--ink-dim);font-size:12px}
#kaart2d button.primary,#controls button.primary{background:var(--signal);color:#111;border-color:var(--signal);font-weight:600}
.k2Punt span{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;border:2px solid #fff;color:#fff;font:700 13px var(--font-body);box-shadow:0 1px 4px rgba(0,0,0,.5)}
.leaflet-container{background:#dfe3e6;font-family:var(--font-body)}
@media (max-width:560px){.k2Paneel{right:max(12px,env(safe-area-inset-right));width:auto}}
#controls select{width:100%;min-width:0;box-sizing:border-box;text-overflow:ellipsis}
#status{font-size:12px;color:var(--ink-dim);line-height:1.45;margin-top:6px}
/* uitklapvakken in het paneel (besturing, data en bronnen) */
details.vak summary{cursor:pointer;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-dim);list-style:none;display:flex;align-items:center;gap:6px}
details.vak summary::-webkit-details-marker{display:none}
details.vak summary::before{content:"▸";color:var(--ink);font-size:12px;transition:transform .15s}
details.vak[open] summary::before{transform:rotate(90deg)}
details.vak summary:focus-visible{outline:2px solid var(--signal);outline-offset:2px;border-radius:3px}
details.vak .keys{margin-top:6px}
#statusTel{text-transform:none;letter-spacing:0;font-size:12px}
#statusTel .ok{color:var(--good)}#statusTel .err{color:var(--bad)}
@media (pointer:coarse){details.keysVak{display:none}}
@media (prefers-reduced-motion:reduce){details.vak summary::before{transition:none}}
#status .ok{color:var(--good)}#status .err{color:var(--bad)}
#dash{left:max(12px,env(safe-area-inset-left));bottom:max(12px,env(safe-area-inset-bottom));padding:10px 16px 12px;display:grid;gap:4px;pointer-events:none}
.dashMain{display:flex;gap:16px;align-items:flex-end;justify-content:center}
.dashRoad{font-size:12px;font-weight:600;color:var(--ink);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* op de achterruit: vaste maat, de vorm komt uit een perspectief-transform die elke frame wordt berekend */
#dash.onCar{left:0;top:0;bottom:auto;width:320px;height:112px;box-sizing:border-box;padding:8px 14px 6px;background:transparent;border:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none;transform-origin:0 0;will-change:transform;align-content:center;text-shadow:0 0 8px rgba(120,200,255,.35)}
#dash.onCar .speed{font-size:62px;color:#eaf6ff}
#dash.onCar .unit{color:#8fb3c9}
#dash.onCar .dashRoad{color:#bcd3e2;font-size:14px}
#dash .limit{width:52px;height:52px;border-width:6px;font-size:24px}
#dash.onCar .limit{width:70px;height:70px;border-width:8px;font-size:32px;margin-bottom:0}
#meta{font-size:12px;color:var(--ink-dim);font-variant-numeric:tabular-nums;line-height:1.45}
#meta b{color:var(--ink);font-weight:600}
.speed{font-family:var(--font-display);font-weight:700;font-size:64px;line-height:.9;font-variant-numeric:tabular-nums;min-width:2.2ch;text-align:right}
.unit{font-family:var(--font-display);font-size:14px;color:var(--ink-dim);letter-spacing:.1em}
.meta{display:grid;gap:2px;font-size:12px;color:var(--ink-dim);font-variant-numeric:tabular-nums;padding-bottom:4px}
.meta b{color:var(--ink);font-weight:600}
.gear{font-family:var(--font-display);font-weight:700;font-size:26px;color:var(--signal);padding-bottom:4px}
.limit{width:38px;height:38px;border-radius:50%;background:#fff;border:5px solid #d2231c;color:#111;display:grid;place-items:center;font-family:var(--font-display);font-weight:700;font-size:18px;margin-bottom:4px;box-sizing:border-box}
.limit[hidden]{display:none}
#hint{left:50%;bottom:max(24px,env(safe-area-inset-bottom));transform:translateX(-50%);padding:10px 16px;font-size:15px;white-space:nowrap}
@media (max-width:560px){#hint{bottom:auto;top:40%;white-space:normal;text-align:center}}
#touch{position:absolute;right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));display:none;gap:8px;grid-template-columns:repeat(3,64px);grid-template-rows:64px 64px}
#touch button{font-family:var(--font-display);font-size:22px;font-weight:700;background:var(--panel);touch-action:none;user-select:none;-webkit-user-select:none}
@media (pointer:coarse){#touch{display:grid}#controls .keys{display:none}}
@media (max-width:560px){#controls{width:auto;right:max(12px,env(safe-area-inset-right))}.speed{font-size:48px}}
.collapsed .hideable{display:none!important}
#blocked{top:50%;left:50%;transform:translate(-50%,-50%);width:min(440px,calc(100vw - 32px));box-sizing:border-box;padding:20px 22px;z-index:20;font-size:14px;line-height:1.5;border-color:var(--signal)}
#blocked h2{margin:0 0 8px;font-family:var(--font-display);font-size:24px;text-transform:uppercase;letter-spacing:.02em;color:var(--signal)}
#blocked p{margin:0 0 10px;color:var(--ink-dim)}
#blocked ol{margin:0 0 14px;padding-left:20px;display:grid;gap:4px}
#bronnen{position:absolute;right:max(12px,env(safe-area-inset-right));top:max(8px,env(safe-area-inset-top));font-size:11px;color:var(--ink-dim);background:var(--panel);padding:3px 8px;border-radius:6px;max-width:50vw}
@media (max-width:560px){#bronnen{display:none}}
/* bronvermelding van Google (verplicht zolang de fotorealistische laag aan staat) */
#credits{display:none;position:absolute;right:max(8px,env(safe-area-inset-right));bottom:max(8px,env(safe-area-inset-bottom));z-index:5;font-size:11px;background:rgba(255,255,255,.85);color:#222;border-radius:6px;padding:2px 6px;max-width:60vw}
body.google #credits{display:block}
body.google #touch{bottom:calc(max(12px,env(safe-area-inset-bottom)) + 34px)}
#credits a{color:#222}
#ionVak:not([hidden]){display:grid;gap:6px}
#ionVak .ionUitleg{margin:0;color:var(--ink-dim);font-size:12px;line-height:1.4}
#ionVak .ionUitleg a{color:var(--signal)}
#ionVak input{font:inherit;color:var(--ink);background:rgba(255,255,255,.07);border:1px solid var(--panel-line);border-radius:6px;padding:6px 8px;min-width:0}

/* Meldingen bovenin: kaartjes met een pictogram in verkeersbordstijl */
:root{ --warn:#ffb020; --danger:#ff5a4e; --info:#6fa8ff }
#toasts{position:absolute;top:max(14px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);display:grid;gap:8px;z-index:15;pointer-events:none;width:min(420px,calc(100vw - 32px))}
.toast{display:flex;align-items:center;gap:12px;padding:10px 14px 10px 10px;background:rgba(16,21,28,.92);border:1px solid var(--panel-line);border-left:4px solid var(--info);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.35);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);opacity:0;transform:translateY(-10px);transition:opacity .25s ease,transform .25s ease}
.toast.in{opacity:1;transform:none}
.toast.warn{border-left-color:var(--warn)}
.toast.danger{border-left-color:var(--danger)}
.toast-icon{flex:0 0 44px;height:40px;display:grid;place-items:center}
.toast-icon svg{width:40px;height:40px}
.toast-title{font-family:var(--font-display);font-weight:700;font-size:20px;line-height:1.1;text-transform:uppercase;letter-spacing:.02em}
.toast.warn .toast-title{color:var(--warn)}
.toast.danger .toast-title{color:var(--danger)}
.toast-text{font-size:13px;color:var(--ink-dim);margin-top:2px}
@media (prefers-reduced-motion:reduce){.toast{transition:none;transform:none}}

/* Menu verkeersdrukte, rechtsboven */
#drukte{top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));width:320px;max-width:calc(100vw - 24px);max-height:calc(100vh - 24px);overflow:auto;box-sizing:border-box;padding:12px 14px;display:grid;gap:8px;font-size:13px;z-index:5}
#drukte[hidden]{display:none}
#drukte header{display:flex;justify-content:space-between;align-items:center}
#drukte h2{margin:0;font-family:var(--font-display);font-weight:700;font-size:20px;text-transform:uppercase;letter-spacing:.02em}
#drukte header button{padding:0 8px;font-size:18px;line-height:1.4}
#drukte .row{display:flex;flex-wrap:wrap;gap:6px}
.dkRow{display:flex;justify-content:space-between;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-dim)}
.dkRow b{color:var(--ink);font-size:13px;letter-spacing:0}
#dkFactor{width:100%;accent-color:var(--signal)}
.dkHelp{margin:0;font-size:12px;color:var(--ink-dim);line-height:1.4}
.dkHelp b{color:var(--ink);font-weight:600}
.dkName{font-weight:600;font-size:15px}
.dkCheck{display:flex;gap:6px;align-items:center;font-size:12px;color:var(--ink-dim);margin:6px 0}
.dkGrid{display:grid;grid-template-columns:1fr 92px;gap:6px 10px;align-items:center;margin:6px 0}
.dkGrid input{font:inherit;color:var(--ink);background:rgba(255,255,255,.07);border:1px solid var(--panel-line);border-radius:6px;padding:5px 8px;width:100%;box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums}
.dkGrid input::placeholder{color:var(--ink-dim);opacity:.7}
.dkGrid input:focus-visible{outline:2px solid var(--signal);outline-offset:1px}
#drukte button.primary{background:var(--signal);color:#111;border-color:var(--signal);font-weight:600}
#drukte button.on{border-color:var(--signal);color:var(--signal)}
@media (max-width:560px){#drukte{left:max(12px,env(safe-area-inset-left));width:auto;top:auto;bottom:max(12px,env(safe-area-inset-bottom));max-height:60vh}}
#legend:not([hidden]){display:grid;grid-template-columns:1fr 1fr;gap:3px 10px;font-size:11px;color:var(--ink-dim)}
#legend[hidden]{display:none}
#legend span{display:flex;align-items:center;gap:6px}
#legend i{width:12px;height:12px;border-radius:3px;flex:none;border:1px solid rgba(255,255,255,.25)}
