/* OVspot Next V81: one presentation system; V80.23 station-marker CSS stays separate. */
:root{color-scheme:light;--surface:#fff;--canvas:#edf2f6;--ink:#162b42;--muted:#5d6f82;--border:#dce5ed;--accent:#086e78;--accent-soft:#eaf5f5;--soft:#f3f6f9;--good:#15704c;--danger:#ae273e;--shadow:0 12px 36px #17354c20;--radius:16px;--panel-width:360px;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;font-size:14px;color:var(--ink)}
body{color:var(--ink)}body.theme-night{color-scheme:dark;--surface:#192733;--canvas:#11202a;--ink:#eaf2f7;--muted:#afbfcb;--border:#354a5b;--accent:#82d8dc;--accent-soft:#243f47;--soft:#233540;--good:#8eddb5;--danger:#ffa1b2;--shadow:0 12px 36px #0005}
*{box-sizing:border-box}html,body,#map{width:100%;height:100%;margin:0}body{background:var(--canvas);overflow:hidden}button,input{font:inherit;color:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}button{border:1px solid var(--border);background:var(--surface);border-radius:9px;padding:8px 12px;min-height:36px;font-weight:550}button:hover{background:var(--soft)}button.primary{background:var(--accent);border-color:var(--accent);color:var(--surface)}button.primary:hover{filter:brightness(.94)}button[aria-pressed=true]:not(.primary),button.active{color:var(--accent);background:var(--accent-soft);border-color:var(--accent)}button[hidden],[hidden]{display:none}#map{position:absolute;inset:0;z-index:0}
.app-bar{position:absolute;z-index:10;top:18px;left:20px;right:20px;display:flex;align-items:center;gap:22px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);padding:9px 14px;box-shadow:0 4px 18px #17354c14;min-height:64px}
#ovspotStatus{display:flex;align-items:center;gap:20px;flex-shrink:0}.brand{display:flex;align-items:center;gap:9px;color:var(--ink);text-decoration:none;font-size:18px;font-weight:700;letter-spacing:-.6px}.brand-mark{display:grid;place-items:center;background:var(--accent);color:var(--surface);width:34px;height:34px;border-radius:11px;letter-spacing:-1px;font-size:19px}.brand small{font-size:12px;font-weight:500;color:var(--muted);letter-spacing:0}.connection{display:grid;gap:2px;font-size:11px}.connection>span:first-child{color:var(--good);font-weight:650}.connection>span:first-child:before{content:'';display:inline-block;width:6px;height:6px;background:currentColor;border-radius:50%;margin-right:5px}.connection .reconnecting{color:var(--danger)}.visible-count{color:var(--muted)}.preview-label{font-size:11px;color:var(--muted);white-space:nowrap;margin-left:auto}
#searchBox{position:relative;flex:1;max-width:520px;min-width:0}.search-icon{position:absolute;top:5px;left:12px;font-size:23px;color:var(--muted);pointer-events:none}#searchInput{display:block;background:var(--soft);width:100%;border:1px solid transparent;border-radius:10px;padding:10px 36px 10px 38px;min-height:42px;outline:none}#searchInput:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}#searchClear{position:absolute;right:4px;top:4px;border:0;background:transparent;padding:0;width:32px;min-height:32px;font-size:22px}#searchResults{display:none;position:absolute;top:calc(100% + 12px);left:0;right:0;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);max-height:65dvh;overflow:auto;overscroll-behavior:contain}#searchResults.open{display:block}.sSection,.favSection{font-size:11px;letter-spacing:.07em;text-transform:uppercase;color:var(--muted);font-weight:650;padding:12px 14px 6px}.sItem{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;border-bottom:1px solid var(--border);overflow:hidden;min-width:0}.sItem:hover,.sItem:focus{background:var(--soft)}.sBadge{background:var(--accent-soft);color:var(--accent);padding:5px;min-width:44px;width:44px;max-width:44px;flex:0 0 44px!important;flex-shrink:0!important;border-radius:8px;text-align:center;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sBody{min-width:0;max-width:100%;flex:1 1 auto;overflow:hidden}.sBody b,.sBody small{display:block;width:100%;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sBody b{font-size:13px}.sBody small{font-size:11px;margin-top:3px;color:var(--muted)}.sLive{display:none!important}
#mobileQuickBar{position:absolute;z-index:12;display:flex;gap:5px;bottom:22px;left:50%;transform:translateX(-50%);background:var(--surface);border:1px solid var(--border);padding:6px;border-radius:15px;box-shadow:var(--shadow)}#mobileQuickBar button{border-color:transparent;background:transparent;padding:9px 17px}#mobileQuickBar button:hover,#mobileQuickBar button[aria-expanded=true]{background:var(--accent-soft);color:var(--accent)}#mobileQuickBar span,#favoriteCount{font-size:11px;display:inline-block;border-radius:20px;background:var(--soft);padding:1px 6px;margin-left:3px}
#mapTools{display:none;position:absolute;z-index:14;bottom:88px;left:50%;transform:translateX(-50%);width:330px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px;box-shadow:var(--shadow)}#mapTools.mobile-open{display:block}.tools-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.tools-heading button{border:0;background:var(--soft);font-size:20px;padding:0;width:30px;min-height:30px}.mode-buttons{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.secondary-tools{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:14px;padding-top:14px;border-top:1px solid var(--border)}.secondary-tools button{font-size:12px}.secondary-tools #favoritesBtn{grid-column:1/-1}
.detail-panel{display:none;position:absolute;z-index:11;right:20px;top:98px;width:var(--panel-width);max-height:calc(100dvh - 120px);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;flex-direction:column}.detail-panel.open{display:flex}.detail-panel>header{display:flex;gap:8px;align-items:center;padding:15px 18px;border-bottom:1px solid var(--border);flex-shrink:0}.detail-panel>header>div{flex:1;min-width:0}.detail-panel>header small{display:block;font-size:10px;letter-spacing:.1em;color:var(--muted);font-weight:650;margin-bottom:4px}.detail-panel>header h1{font-size:19px;line-height:1.25;margin:0;letter-spacing:-.5px;overflow-wrap:anywhere}.detail-panel>header button{width:32px;min-height:32px;flex-shrink:0;padding:0;border:0;background:var(--soft);font-size:20px}.panel-body{padding:18px;overflow-y:auto;overscroll-behavior:contain;min-height:0}.sheet-handle{display:none}.line-badge{display:grid;place-items:center;min-width:38px;min-height:34px;padding:4px 8px;background:var(--accent);color:var(--surface);border-radius:8px;font-size:16px;font-weight:750;max-width:100px;overflow-wrap:anywhere}.muted{display:block;font-size:11px;color:var(--muted)}.punctuality{font-size:11px;color:var(--good);margin-left:auto;white-space:nowrap}.eyebrow{font-size:10px;letter-spacing:.08em;color:var(--muted);font-weight:650;margin:20px 0 5px;display:block}.destination{font-size:27px;line-height:1.12;letter-spacing:-.8px;font-weight:650;margin:0 0 20px;overflow-wrap:anywhere}.next-stop{display:flex;justify-content:space-between;align-items:center;gap:8px;border-left:3px solid var(--accent);padding:2px 0 2px 11px;margin:0 0 16px}.next-stop .eyebrow{margin:0 0 4px}.next-stop b{display:block;font-size:15px;font-weight:650;line-height:1.25}.next-stop time{font-variant-numeric:tabular-nums;font-size:13px;color:var(--accent);font-weight:650;white-space:nowrap}.vehicle-stats{display:flex;flex-wrap:wrap;gap:6px 14px;color:var(--muted);font-size:11px;margin-bottom:15px}.timeline{border-top:1px solid var(--border);padding-top:15px}.timeline h3{margin:0 0 14px;font-size:13px;font-weight:650}.timeline ol{list-style:none;padding:0;margin:0}.timeline li{display:grid;grid-template-columns:37px 13px minmax(0,1fr);gap:8px;min-height:43px;font-size:12px}.timeline time{color:var(--muted);font-variant-numeric:tabular-nums}.timeline li.next time{color:var(--accent)}.timeline-dot{position:relative}.timeline-dot:before{position:absolute;content:'';width:7px;height:7px;border:2px solid var(--accent);border-radius:50%;top:3px;left:1px;background:var(--surface);z-index:1}.timeline-dot:after{content:'';position:absolute;top:12px;bottom:-4px;left:4px;width:1px;background:var(--border)}.timeline li:last-child .timeline-dot:after{display:none}.timeline small{display:block;color:var(--muted);font-size:10px;margin-top:2px}.timeline li.next>div{font-weight:650}.timeline li.next small{font-weight:400}.empty-state,.stopEmpty{font-size:13px;color:var(--muted);padding:14px 0;line-height:1.5}
#stopPanel>header{padding-top:19px;padding-bottom:19px}#stopPanel>header h1{font-size:26px;letter-spacing:-.7px}#stopPanelBody{padding:0 16px 12px}.stopModes{font-size:11px;color:var(--muted);padding:12px 0;border-bottom:1px solid var(--border);line-height:1.5}.depRow{display:grid;grid-template-columns:39px 34px minmax(0,1fr) auto;gap:8px;padding:12px 0;border-bottom:1px solid var(--border);align-items:start}.depRow:last-child{border-bottom:0}.depTime{font-size:13px;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap}.departure-line{font-size:11px;font-weight:700;color:var(--accent);background:var(--accent-soft);border-radius:5px;padding:2px 4px;text-align:center;overflow-wrap:anywhere}.depMain{min-width:0}.depMain b{display:block;font-size:12px;line-height:1.35;font-weight:600;overflow-wrap:anywhere}.depMain small{display:block;font-size:10px;color:var(--muted);margin-top:3px;line-height:1.5}.depMeta{font-size:10px;color:var(--danger);text-align:right;max-width:48px}.depMeta:empty{display:none}.cancelled .depTime{text-decoration:line-through}.liveDot{display:inline-block;width:5px;height:5px;background:var(--good);border-radius:50%;margin-right:4px;vertical-align:1px}
.favRow{display:flex;gap:8px;align-items:center;padding:12px 0;border-bottom:1px solid var(--border)}.favOpen{flex:1;min-width:0;background:transparent;border:0;text-align:left;padding:0}.favOpen b{display:block;font-size:13px}.favOpen small{display:block;color:var(--muted);font-size:11px;margin-top:3px}.favRemove{width:30px;min-height:30px;padding:0}.favSection{padding-left:0}
#routeBar{display:none;position:absolute;z-index:10;bottom:87px;left:20px;max-width:calc(100vw - 420px);align-items:center;gap:9px;padding:9px 12px;background:var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}#routeBar.open{display:flex}#routeTitle{min-width:0;font-size:12px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}#routeBar button{font-size:11px;white-space:nowrap;min-height:30px;padding:5px 8px}#toast{position:absolute;z-index:30;left:50%;bottom:90px;transform:translateX(-50%);padding:10px 16px;background:var(--ink);color:var(--surface);border-radius:12px;font-size:12px;opacity:0;pointer-events:none;max-width:90vw}#toast.show{opacity:1}
@media(min-width:761px) and (max-width:1080px){.connection{display:none}.app-bar{gap:14px}.brand small{display:none}.preview-label{display:none}#searchBox{max-width:none}#routeBar{max-width:calc(100vw - 410px)}}
@media(max-width:760px){
 :root{--panel-width:100%}.app-bar{top:10px;left:10px;right:10px;gap:10px;padding:8px 10px;min-height:58px;border-radius:14px}.brand>span:last-child,.connection,.preview-label{display:none}.brand-mark{width:32px;height:32px;border-radius:10px}#searchBox{max-width:none}#searchInput{font-size:16px;padding-left:32px;padding-right:30px;min-height:40px}.search-icon{left:9px}#searchResults{position:fixed;left:10px;right:10px;top:76px;max-height:calc(100dvh - 155px)}
 #mobileQuickBar{left:10px;right:10px;bottom:calc(12px + env(safe-area-inset-bottom));transform:none;justify-content:center;padding:5px}#mobileQuickBar button{flex:1;padding:8px 5px;min-height:42px;font-size:12px}#mapTools{left:10px;right:10px;bottom:calc(77px + env(safe-area-inset-bottom));width:auto;transform:none;max-height:calc(100dvh - 155px);overflow:auto;padding:16px}#mapTools button{min-height:42px}
 .detail-panel{left:0;right:0;top:auto;bottom:0;width:100%;height:52dvh;max-height:calc(100dvh - 78px);border-radius:20px 20px 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom);box-shadow:0 -8px 32px #17354c24;z-index:20}.detail-panel.expanded{height:calc(100dvh - 78px)}.detail-panel>header{padding:6px 16px 10px}.detail-panel>header small{display:none}.detail-panel>header h1{font-size:16px}.detail-panel>header button{min-width:40px;min-height:40px}.panel-body{padding:16px}.sheet-handle{position:relative;display:block;width:100%;min-height:22px;flex-shrink:0;border:0;border-radius:0;background:none;padding:0;touch-action:none}.sheet-handle:before{content:'';display:block;position:absolute;top:8px;left:calc(50% - 20px);width:40px;height:4px;background:var(--border);border-radius:6px}.sheet-handle:hover{background:none}.destination{font-size:26px;margin-bottom:17px}.eyebrow{margin-top:16px}.timeline li{min-height:45px}#stopPanel>header{padding:6px 16px 12px}#stopPanel>header h1{font-size:24px}.depRow{padding:11px 0}.depMain b{font-size:13px}.depMain small{font-size:11px}.depTime{font-size:13px}.depMeta{font-size:11px}
 .panel-open #mobileQuickBar{visibility:hidden;pointer-events:none}#routeBar{left:10px;right:10px;bottom:80px;max-width:none}.panel-open #routeBar{bottom:calc(52dvh + 8px)}body:has(.detail-panel.expanded) #routeBar{display:none}#toast{bottom:calc(55dvh + 12px)}
}
@media(prefers-reduced-motion:no-preference){.detail-panel{transition:height .2s ease}.show{transition:opacity .15s}}

/* V81.1 — compact top shell + readable/clickable stops */
@media(min-width:761px){
 .app-bar{right:auto;width:min(720px,calc(100vw - 40px));min-height:54px;padding:7px 10px;gap:12px}
 #ovspotStatus{gap:13px}
 .brand{font-size:17px}.brand-mark{width:32px;height:32px;border-radius:10px}
 .connection{font-size:10px}
 #searchBox{flex:0 1 330px;max-width:330px}
 #searchInput{min-height:36px;padding:7px 32px 7px 33px;border-radius:9px;font-size:13px}
 .search-icon{top:3px;left:9px;font-size:21px}
 #searchClear{top:2px;right:2px;min-height:30px;width:30px}
 .preview-label{display:none}
}
.clickable-stop,.timeline li[data-stop-name]{cursor:pointer;border-radius:8px;transition:background .12s ease,box-shadow .12s ease}
.clickable-stop{padding:6px 8px 6px 11px;margin-left:-8px;margin-right:-4px}
.clickable-stop:hover,.timeline li[data-stop-name]:hover,.clickable-stop:focus-visible,.timeline li[data-stop-name]:focus-visible{background:var(--accent-soft);box-shadow:0 0 0 2px var(--accent-soft);outline:none}
.timeline li[data-stop-name]{padding:3px 4px}.timeline li[data-stop-name]>div:last-child{position:relative;padding-right:15px}
.stop-chevron{position:absolute;right:2px;top:-3px;color:var(--accent);font-size:18px;font-weight:700}
@media(max-width:760px){.timeline li[data-stop-name]{min-height:48px}.clickable-stop{margin-left:-6px;margin-right:-2px}}

@media(max-width:760px){
 .app-bar{right:auto;width:min(324px,calc(100vw - 20px));gap:8px;padding:8px 9px}
 #searchBox{flex:1 1 auto;max-width:250px}
 #searchInput{padding-left:31px;padding-right:28px;min-height:38px}
}

/* V81.5 — treinpaneel: spoor badge en treintype */
.platform-row{margin:-12px 0 16px}
.platform-badge{display:inline-flex;align-items:center;gap:5px;background:#f0f4ff;color:#3430a8;border:1px solid #d0d8ff;border-radius:7px;padding:4px 10px;font-size:12px;font-weight:700}
body.theme-night .platform-badge{background:#252565;color:#c5c9ff;border-color:#3a3a88}
.train-type{font-size:10px;font-weight:700;background:#eeedff;color:#3430a8;border-radius:4px;padding:1px 5px;vertical-align:middle;margin-left:4px}
body.theme-night .train-type{background:#252565;color:#c5c9ff}


/* V81.5 RC — Codex handoff + production parity */

/* V81.6.3 production consent */
#cookieBanner{
 position:fixed;left:50%;bottom:max(16px,env(safe-area-inset-bottom));
 transform:translateX(-50%);z-index:2147483000;
 width:min(680px,calc(100vw - 24px));box-sizing:border-box;
 display:flex;align-items:center;gap:14px;justify-content:space-between;
 padding:14px 16px;border:1px solid rgba(15,23,42,.14);border-radius:18px;
 background:rgba(255,255,255,.97);color:#10233f;
 box-shadow:0 20px 70px rgba(15,23,42,.24);backdrop-filter:blur(18px);
 font:14px/1.45 system-ui,-apple-system,Segoe UI,sans-serif;
 pointer-events:auto
}
#cookieBanner.hidden{display:none}
#cookieBanner p{margin:0;min-width:0}
#cookieBanner a{color:#1769b8;font-weight:800}
#cookieBanner .cookie-actions{display:flex;gap:8px;flex:0 0 auto}
#cookieBanner button{border:1px solid rgba(15,23,42,.14);border-radius:999px;padding:9px 13px;background:#fff;color:#10233f;font:800 13px/1 system-ui;cursor:pointer}
#cookieBanner button.primary{border-color:transparent;color:#fff;background:linear-gradient(135deg,#1877f2,#0db7d7)}
@media(max-width:560px){
 #cookieBanner{bottom:max(8px,env(safe-area-inset-bottom));display:block;padding:14px;border-radius:17px}
 #cookieBanner .cookie-actions{display:grid;grid-template-columns:1fr 1fr;margin-top:12px}
 #cookieBanner button{width:100%}
}

/* V81.6.34.9.4.12 — search dropdown may escape narrow filter dock */
#searchResults{
  position:absolute!important;
  left:0!important;
  right:auto!important;
  min-width:280px!important;
  width:clamp(360px,42vw,520px)!important;
  max-width:calc(100vw - 32px)!important;
  z-index:10050!important;
}
#searchResults .sItem{
  display:flex!important;
  align-items:center!important;
  min-width:0!important;
  overflow:hidden!important;
}
#searchResults .sBadge{
  width:48px!important;
  min-width:48px!important;
  max-width:48px!important;
  flex:0 0 48px!important;
  flex-shrink:0!important;
  overflow:hidden!important;
  text-overflow:ellipsis!important;
  white-space:nowrap!important;
}
#searchResults .sBody{
  flex:1 1 auto!important;
  min-width:0!important;
  overflow:hidden!important;
}
#searchResults .sBody b,
#searchResults .sBody small{
  display:block!important;
  width:100%!important;
  min-width:0!important;
  overflow:hidden!important;
  text-overflow:ellipsis!important;
  white-space:nowrap!important;
}
@media(max-width:760px){
  #searchResults{
    min-width:280px!important;
    width:calc(100vw - 24px)!important;
    max-width:calc(100vw - 24px)!important;
  }
}

/* V81.6.34.9.4.13 — bounded search dropdown */
#searchResults{width:min(360px,90vw)!important;min-width:min(280px,90vw)!important;max-width:90vw!important}
#searchResults>.sSection:empty,#searchResults>.sItem:empty{display:none!important}
@media(max-width:760px){#searchResults{position:fixed!important;left:12px!important;right:12px!important;width:auto!important;min-width:0!important;max-width:none!important;box-sizing:border-box!important}}
/* V81.6.34.9.4.13 mobile viewport final guard */
@media(max-width:760px){
  #searchResults{
    position:fixed!important;
    left:50%!important;
    right:auto!important;
    width:min(360px,90vw)!important;
    min-width:0!important;
    max-width:90vw!important;
    transform:translateX(-50%)!important;
    box-sizing:border-box!important;
  }
}

/* V81.6.34.9.4.14 — inline search results */
#searchResults,#searchResults.open{
 position:static!important;inset:auto!important;left:auto!important;right:auto!important;
 top:auto!important;bottom:auto!important;transform:none!important;z-index:auto!important;
 width:100%!important;min-width:0!important;max-width:100%!important;box-sizing:border-box!important;
 margin:8px 0 0!important;overflow-x:hidden!important;overflow-y:auto!important;box-shadow:none!important;
}
#searchResults:not(.open){display:none!important}
#searchResults .sItem,#searchResults .sSection{max-width:100%!important;box-sizing:border-box!important}
