/* Desktop: 56px rail + fluid map + 352px panel = viewport. Mobile: one full-width map + sheets. */
:root{color-scheme:dark;--ground:#171719;--surface:#131217;--raised:#212023;--border:#303034;--rule:#252529;--control:#49494f;--text:#f2f2f3;--muted:#aaabb2;--faint:#92939c;--accent:#00ff00;--positive:#00ff00;--negative:#ff3030;--warning:#ffdf00;--train:#00ff00;--bus:#00c8ff;--weather:#ffdf00;--incident:#ff5a00;--fire:#ff3030;--road:#d000ff;--font:'Public Sans',system-ui,sans-serif;--radius:6px}
*{box-sizing:border-box}body{margin:0;background:var(--ground);color:var(--text);font:13px/1.5 var(--font);font-variant-numeric:tabular-nums;height:100dvh;display:flex;flex-direction:column;overflow:hidden}button,input{font:inherit}button,a,input{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit;background:none;border:0}button:disabled{cursor:default;color:var(--muted)}a{color:inherit}button:hover{color:#fff}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button:active{transform:translateY(1px)}.icon{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.icon-button{height:36px;width:36px;display:grid;place-items:center;color:var(--muted);border-radius:var(--radius)}.icon-button:hover{background:var(--raised)}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.skip-link{position:fixed;z-index:3000;left:20px;top:-60px;padding:12px;background:var(--text);color:var(--surface)}.skip-link:focus{top:12px}.svg-library{position:absolute;width:0;height:0;overflow:hidden}.topbar{height:66px;flex-shrink:0;display:flex;align-items:center;justify-content:space-between;padding:0 24px;gap:24px;background:var(--surface);border-bottom:1px solid var(--border);z-index:700}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;flex-shrink:0}.brand>svg{width:30px;height:30px;fill:none;stroke:var(--accent);stroke-width:1.2}.brand .radar-center{fill:var(--accent);stroke:none}h1{font-size:21px;line-height:1;margin:0;letter-spacing:-.9px;font-weight:700}h1 span{font-weight:400;margin-left:4px;color:var(--muted)}h2,h3,p{margin:0}h2{font-size:16px;font-weight:500}h3{font-size:14px;font-weight:600}.search-wrap{width:340px;position:relative;height:36px;display:flex;align-items:center;gap:10px;padding:0 11px;border:1px solid var(--border);border-radius:var(--radius);color:var(--muted);background:var(--ground)}.search-wrap input{width:100%;min-width:0;background:none;border:0;color:var(--text);outline:none}.search-wrap input::placeholder{color:var(--faint)}kbd{border:1px solid var(--control);border-radius:3px;font:11px var(--font);width:17px;text-align:center}.search-results{position:absolute;top:43px;left:0;width:100%;padding:6px;background:var(--surface);border:1px solid var(--control);border-radius:var(--radius);box-shadow:0 12px 28px #0005;max-height:340px;overflow:auto}.search-result{display:flex;text-align:left;align-items:center;gap:12px;width:100%;min-height:48px;padding:8px}.search-result:hover{background:var(--raised)}.search-result small{display:block;color:var(--muted)}.search-empty{padding:16px}.header-end{display:flex;align-items:center;gap:24px}.demo-label{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--muted)}.demo-label .icon{width:15px}.demo-dot{width:6px;height:6px;border:1px solid var(--warning);border-radius:50%}.header-time{color:var(--muted);font-size:12px}.header-time b{font-weight:500;color:var(--text);margin:0 5px}.demo-strip{height:27px;background:#202020;color:#c4c4c7;display:flex;gap:9px;justify-content:center;align-items:center;font-size:11px;flex-shrink:0;border-bottom:1px solid var(--border)}.demo-strip button{text-decoration:underline;text-underline-offset:3px;font-size:11px;color:var(--muted)}.summary{height:87px;flex-shrink:0;display:grid;grid-template-columns:260px repeat(4,1fr);border-bottom:1px solid var(--border);padding:14px 24px;background:var(--ground)}.summary-intro{display:flex;align-items:center;gap:11px;font-size:14px}.summary-intro span:not(.status-dot){display:block;color:var(--faint);font-size:11px;margin-top:4px}.status-dot{width:6px;height:6px;background:var(--accent);border-radius:50%;display:inline-block;flex-shrink:0}.metric{border-left:1px solid var(--border);padding:0 24px;display:grid;grid-template-columns:auto 1fr;align-items:baseline;text-align:left;gap:0 10px;position:relative}.metric>span{grid-column:1/-1;font-size:11px;color:var(--muted)}.metric strong{font-size:25px;line-height:1.3;letter-spacing:-.7px;font-weight:500}.metric small{font-size:11px;color:var(--faint);align-self:center}.metric:hover:after{content:'';position:absolute;left:24px;right:24px;bottom:-14px;height:1px;background:var(--accent)}.workspace{overflow:hidden;display:grid;grid-template-columns:56px minmax(0,1fr) 352px;flex:1;min-height:0;position:relative}.rail{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:stretch;z-index:650;padding:12px 0;gap:8px}.rail-button{height:44px;color:var(--faint);display:grid;place-items:center;position:relative}.rail-button.active{color:var(--accent)}.rail-button.active:after{content:'';position:absolute;right:0;top:12px;bottom:12px;width:1px;background:var(--accent)}.rail-button:hover{background:var(--raised)}.rail-button span{display:none}.map-stage{min-width:0;position:relative;overflow:hidden;background:#191a1c}#map{position:absolute;inset:0;background:#191a1c;z-index:0}.leaflet-container{font-family:var(--font);background:#191a1c}.leaflet-control-attribution{display:none}.leaflet-tile-pane{opacity:.65;filter:invert(1) grayscale(1) brightness(.58) contrast(1.05)}.leaflet-control-container{display:none}.leaflet-marker-icon{outline:none}.leaflet-marker-icon:focus-visible{outline:2px solid white;outline-offset:5px}.leaflet-interactive:focus-visible{outline:none}.map-context{position:absolute;z-index:400;top:18px;left:262px;display:flex;align-items:center;gap:8px;color:#dedee1;font-size:12px;pointer-events:none}.context-note{color:var(--muted);padding-left:10px;border-left:1px solid var(--control)}.floating{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius)}.layers{position:absolute;top:18px;left:20px;width:216px;z-index:420;padding:16px}.floating-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:17px}.floating-heading h2{font-size:13px;font-weight:500}.floating-heading>.icon{width:15px;height:15px;color:var(--muted)}.layer-heading{font-size:11px;color:var(--faint);margin:16px 0 5px}.layer-row{display:grid;grid-template-columns:18px minmax(0,1fr) auto 24px;gap:8px;align-items:center;min-height:35px;cursor:pointer}.layer-row .icon{width:16px;height:16px;color:var(--muted)}.layer-row>span{font-size:12px}.layer-row .count{font-size:11px;color:var(--faint);text-align:right}.layer-row input{appearance:none;width:25px;height:16px;border-radius:9px;border:1px solid var(--control);position:relative;background:#27272b;cursor:pointer;margin:0}.layer-row input:before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;background:#9b9ba4;left:2px;top:2px}.layer-row input:checked{border-color:var(--muted)}.layer-row input:checked:before{left:11px;background:var(--text)}.layer-row:has(input:checked) .layer-name{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:8px;text-decoration-thickness:1px}.layer-foot{display:flex;align-items:center;font-size:11px;color:var(--faint);border-top:1px solid var(--border);padding-top:13px;margin-top:16px;gap:4px}.layer-foot button{margin-left:auto;font-size:11px;color:var(--muted);text-decoration:underline;text-underline-offset:3px}.map-tools{position:absolute;z-index:400;right:18px;top:18px;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.map-tool{width:36px;height:36px;display:grid;place-items:center;font-size:22px;color:#c4c4cc}.map-tool .icon{width:17px}.map-tool:hover{background:var(--raised)}.map-tools>span{height:1px;background:var(--border);margin:3px 7px}.regions{position:absolute;z-index:400;left:20px;bottom:56px;display:flex;gap:6px}.region{width:82px;height:70px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px;color:var(--muted);font-size:11px;position:relative}.region svg{height:28px;width:35px;fill:#929598;stroke:none}.region.active{color:var(--text)}.region.active:after{content:'';height:1px;position:absolute;left:15px;right:15px;bottom:0;background:var(--accent)}.region.active svg{fill:#d0d2d3}.map-key{position:absolute;bottom:28px;left:20px;display:flex;align-items:center;gap:15px;font-size:11px;color:var(--muted);z-index:400}.map-key>span{display:flex;align-items:center;gap:7px}.key-line{width:18px;height:2px;display:inline-block;background:var(--train)}.key-dot{width:6px;height:6px;background:var(--bus);border-radius:50%;display:inline-block}.key-diamond{width:6px;height:6px;background:var(--weather);transform:rotate(45deg);display:inline-block}.map-credit{position:absolute;right:16px;bottom:5px;left:16px;color:#b3b5bc;z-index:400;font-size:11px;text-align:right;pointer-events:none}.map-credit span{margin-left:15px}.city-label{background:none;border:0;pointer-events:none;color:#e6e8eb;font-size:13px;font-weight:600;white-space:nowrap;line-height:18px;text-shadow:-1px -1px 0 #101113,1px -1px 0 #101113,-1px 1px 0 #101113,1px 1px 0 #101113}.city-label.major{font-size:15px;font-weight:700;color:#fff}.country-label{font-size:12px;letter-spacing:0;color:#aaaeb4;pointer-events:none;white-space:nowrap}.ocean-label{font-size:11px;letter-spacing:0;color:#aaaeb4;pointer-events:none;white-space:nowrap;transform:rotate(-75deg);transform-origin:left}.vehicle-dot{background:none;border:0}.vehicle-chip{height:21px;min-width:30px;padding:0 5px;border:1px solid #e3aa9470;border-radius:4px;background:#312a28;color:var(--train);display:flex;align-items:center;justify-content:center;gap:3px;font-size:11px;font-weight:600;white-space:nowrap}.vehicle-chip.bus{min-width:11px;width:11px;height:11px;padding:0;background:var(--bus);border:2px solid #17242c;border-radius:3px}.vehicle-chip.metro{min-width:9px;width:9px;height:9px;border-radius:50%;padding:0;background:#d6d8da;border:2px solid #222}.vehicle-chip .icon{width:11px;height:11px;stroke-width:2}.vehicle-dot.selected .vehicle-chip{background:var(--train);color:#241a15;border-color:#fff;outline:3px solid #e3aa9440}.event-marker{display:grid;place-items:center;width:27px;height:27px;border-radius:50%;border:1px solid #e3bb72;background:#332d22;color:var(--warning)}.event-marker .icon{width:15px;height:15px}.event-marker.fire,.event-marker.road{color:var(--incident);border-color:var(--incident);background:#302324}.event-marker.quake{color:#c3c5cb;border-color:#8c8f98;background:#272930}.side-panel{background:var(--surface);border-left:1px solid var(--border);min-height:0;display:flex;flex-direction:column;z-index:600;min-width:0}.panel-top{height:65px;display:flex;justify-content:space-between;align-items:center;padding:0 20px}.panel-top h2{font-size:17px;font-weight:500;letter-spacing:-.4px}.panel-top>.icon-button{color:var(--faint)}.panel-tabs{display:flex;gap:20px;border-bottom:1px solid var(--border);padding:0 20px;flex-shrink:0}.panel-tabs button{height:42px;font-size:12px;color:var(--muted);padding:0;position:relative}.panel-tabs button[aria-selected=true]{color:var(--text)}.panel-tabs button[aria-selected=true]:after{position:absolute;content:'';height:1px;background:var(--accent);left:0;right:0;bottom:-1px}.panel-tabs span{font-size:11px;color:var(--faint);margin-left:4px}.panel-content{overflow-y:auto;flex:1;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#434349 transparent;padding:18px 20px}.section-line{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:13px;color:var(--muted);font-size:11px}.section-line button{font-size:11px;color:var(--muted);text-decoration:underline;text-underline-offset:3px}.event-row{display:block;width:100%;text-align:left;border-bottom:1px solid var(--border);padding:16px 0;color:var(--text)}.event-row:first-of-type{padding-top:7px}.event-row:hover .event-name{text-decoration:underline;text-underline-offset:3px}.event-top{display:flex;align-items:center;justify-content:space-between;gap:8px;color:var(--muted);font-size:11px;margin-bottom:7px}.event-top>span{display:flex;align-items:center;gap:6px}.event-top .icon{width:14px;height:14px}.event-level{color:var(--warning);font-size:11px}.event-level.normal{color:var(--muted)}.event-name{display:block;font-size:14px;line-height:1.45;font-weight:500;letter-spacing:-.1px}.event-description{display:block;font-size:12px;color:var(--muted);margin-top:6px;line-height:1.6}.event-meta{display:flex;justify-content:space-between;gap:12px;margin-top:10px;font-size:11px;color:var(--faint)}.panel-footer{border-top:1px solid var(--border);padding:12px 20px;color:var(--muted);font-size:11px;display:flex;align-items:center;gap:7px;flex-shrink:0}.panel-footer>span:last-child{margin-left:auto;color:var(--faint);font-size:11px}.transport-row{display:flex;align-items:center;gap:10px;width:100%;min-height:66px;border-bottom:1px solid var(--border);text-align:left;padding:9px 0}.line-badge{border:1px solid var(--control);border-radius:4px;min-width:42px;padding:3px 5px;text-align:center;font-size:11px;color:var(--train);flex-shrink:0}.line-badge.bus{color:var(--bus)}.line-badge.metro{color:#c3c5cb}.transport-row strong{display:block;font-size:12px;font-weight:500}.transport-row small{display:block;font-size:11px;color:var(--muted);margin-top:3px}.transport-row .trailing{margin-left:auto;font-size:11px;white-space:nowrap;color:var(--faint)}.transport-row:hover strong{text-decoration:underline}.filter-row{display:flex;gap:15px;padding-bottom:13px;margin-bottom:6px;border-bottom:1px solid var(--border)}.filter-row button{padding:0 0 5px;font-size:12px;color:var(--muted)}.filter-row button.active{border-bottom:1px solid var(--accent);color:var(--text)}.empty{padding:35px 0;color:var(--muted);font-size:13px}.selection{position:absolute;z-index:430;bottom:55px;right:18px;width:300px;box-shadow:0 10px 30px #0003}.selection-header{padding:15px 16px;display:flex;justify-content:space-between;align-items:flex-start;gap:10px;border-bottom:1px solid var(--border)}.selection-header h3{font-size:15px}.selection-header small{display:block;font-size:11px;color:var(--muted);margin-top:5px}.selection-header .icon-button{height:26px;width:26px}.selection-inner{padding:15px 16px}.journey{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:16px}.journey strong{display:block;font-size:14px;font-weight:500}.journey small{font-size:11px;color:var(--faint)}.journey>.icon{margin-top:4px;width:16px;color:var(--muted)}.journey-progress{height:3px;background:var(--control);position:relative;margin:0 2px 8px}.journey-progress span{display:block;height:100%;width:var(--progress);background:var(--train)}.journey-progress:before,.journey-progress:after{content:'';position:absolute;width:7px;height:7px;border:1px solid var(--train);background:var(--surface);border-radius:50%;top:-2px}.journey-progress:before{left:0}.journey-progress:after{right:0}.journey-caption{display:flex;justify-content:space-between;gap:10px;font-size:11px;color:var(--muted)}.selection-bottom{padding:10px 16px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--muted)}.selection-bottom button{color:var(--text);display:flex;align-items:center;gap:5px;font-size:11px}.selection-bottom .icon{width:14px}.detail-copy{font-size:12px;color:var(--muted);line-height:1.75}.detail-tag{color:var(--warning);font-size:11px;margin-top:12px}.simulation{height:58px;flex-shrink:0;display:flex;align-items:center;padding:0 20px;gap:16px;background:var(--surface);border-top:1px solid var(--border);z-index:650}.play-button{width:32px;height:32px;display:grid;place-items:center;color:var(--text);background:var(--raised);border:1px solid var(--control);border-radius:50%}.play-button .icon{width:15px}.simulation-name{font-size:12px;min-width:85px}.simulation-name span{display:block;font-size:11px;color:var(--faint)}.timeline-time{font-size:11px;color:var(--muted)}#timeline{flex:1;max-width:650px;min-width:40px;height:3px;accent-color:var(--accent);cursor:pointer}.speed{font-size:12px;border:1px solid var(--control);border-radius:4px;padding:3px 9px;min-width:38px}.simulation-note{margin-left:auto;display:flex;align-items:center;gap:7px;color:var(--faint);font-size:11px}.sheet-handle,.layer-toggle,.mobile-search{display:none}dialog{width:min(480px,calc(100vw - 32px));background:var(--surface);color:var(--text);border:1px solid var(--control);border-radius:8px;padding:24px;box-shadow:0 20px 80px #0006}dialog::backdrop{background:#0009}.dialog-top{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}.dialog-top h2{font-size:20px;line-height:1.4;max-width:300px}.dialog-top button{flex-shrink:0}dialog p{font-size:13px;color:var(--muted);line-height:1.8;margin-bottom:14px}.primary{padding:10px 16px;min-height:44px;background:#eee;color:#111;border-radius:4px;margin-top:6px}.primary:hover{color:#111;background:#fff}[hidden]{display:none!important}
@media(min-width:1700px){.workspace{grid-template-columns:56px minmax(0,1fr) 390px}.selection{width:320px}.panel-content{padding-left:24px;padding-right:24px}}
@media(max-width:1200px){.summary{grid-template-columns:200px repeat(4,1fr)}.metric{padding:0 16px}.metric small{display:none}.workspace{grid-template-columns:50px minmax(0,1fr) 320px}.layers{width:190px;left:14px;padding:12px}.map-context{left:225px}.context-note{display:none}.selection{width:265px}.regions{left:14px;bottom:57px}.region{width:64px}.map-key{gap:10px;left:14px}.map-key>span:nth-child(2){display:none}.header-end{gap:15px}.search-wrap{width:290px}.simulation-note{display:none}}
@media(max-width:1000px){.workspace{grid-template-columns:50px minmax(0,1fr)}.side-panel{position:absolute;right:0;top:0;bottom:0;width:340px;box-shadow:-15px 0 35px #0004;transform:translateX(100%);transition:transform .2s ease}.side-panel.open{transform:translateX(0)}.layers{width:202px}.selection{width:285px}.summary{grid-template-columns:180px repeat(4,1fr)}.metric{padding-left:16px}.metric>span{font-size:11px}.header-time{display:none}.map-stage{grid-column:2}.map-context{left:240px}.search-wrap{width:300px}.map-credit span{display:none}}
@media(max-width:640px){body{font-size:14px}.topbar{height:58px;padding:0 16px;gap:10px;padding-top:env(safe-area-inset-top)}.brand{gap:8px}.brand>svg{width:27px;height:27px}h1{font-size:19px}.header-end{gap:2px}.demo-label{font-size:11px;min-height:44px;gap:5px}.demo-label>.icon{display:none}.mobile-search{display:grid;width:36px;height:44px}.search-wrap{display:none;position:absolute;top:59px;left:12px;right:12px;width:auto;height:44px;z-index:850}.topbar.search-open .search-wrap{display:flex}.search-results{top:48px}.demo-strip{height:25px;font-size:11px;gap:5px;white-space:nowrap}.demo-strip button{display:none}.summary{height:69px;padding:8px 10px;grid-template-columns:repeat(4,1fr);gap:0}.summary-intro{display:none}.metric{padding:0 10px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:3px}.metric:first-of-type{border-left:0}.metric>span{font-size:11px;line-height:1.2}.metric:nth-of-type(3)>span{max-width:65px}.metric strong{font-size:22px;line-height:1.1}.workspace{display:block}.map-stage{height:100%;width:100%}.rail{position:fixed;left:0;right:0;bottom:0;height:calc(62px + env(safe-area-inset-bottom));padding:0 4px env(safe-area-inset-bottom);border:0;border-top:1px solid var(--border);display:grid;grid-template-columns:repeat(4,1fr);gap:0;z-index:900}.rail-button{height:62px;display:flex;flex-direction:column;justify-content:center;gap:5px;min-width:0}.rail-button .icon{width:20px;height:20px}.rail-button span{display:block;font-size:11px;white-space:nowrap}.rail-button.active:after{top:0;left:22px;right:22px;width:auto;height:1px;bottom:auto}.simulation{height:48px;gap:10px;padding:0 13px;margin-bottom:calc(62px + env(safe-area-inset-bottom))}.simulation-name{font-size:11px;min-width:60px}.simulation-name span{display:none}.timeline-time{display:none}.simulation .speed{font-size:11px}.play-button{width:32px;height:32px;flex-shrink:0}.simulation input[type=range]{min-height:44px}.simulation .speed{min-height:44px;border:0}.map-context{left:16px;top:14px;font-size:11px;gap:6px}.context-note{display:inline;border:0;padding:0;font-size:11px;margin-left:4px}.map-tools{top:43px;right:12px}.map-tool{width:40px;height:40px}.layers{display:none;position:fixed;left:12px;right:12px;bottom:calc(122px + env(safe-area-inset-bottom));top:auto;width:auto;padding:17px 20px;max-height:calc(100dvh - 210px);overflow:auto;z-index:820}.layers.open{display:block}.floating-heading{margin-bottom:6px}.layer-toggle{display:grid}.desktop-only{display:none}.layer-heading{margin-top:14px;font-size:12px}.layer-row{min-height:44px;grid-template-columns:22px minmax(0,1fr) auto 34px}.layer-row>span{font-size:14px}.layer-row .count{font-size:12px}.layer-row input{width:32px;height:20px}.layer-row input:before{width:12px;height:12px;left:3px;top:3px}.layer-row input:checked:before{left:16px}.regions{left:12px;bottom:47px;gap:5px}.region{width:67px;height:56px;font-size:11px;gap:3px}.region svg{height:22px}.map-key{left:12px;bottom:22px;font-size:11px;gap:12px}.map-key>span:nth-child(2){display:none}.map-credit{font-size:11px;bottom:4px}.map-credit span{display:none}.side-panel{position:fixed;top:auto;bottom:calc(110px + env(safe-area-inset-bottom));left:0;right:0;width:100%;height:min(64dvh,580px);border-radius:14px 14px 0 0;border:1px solid var(--border);border-bottom:0;transform:translateY(calc(100% + 130px));transition:transform .2s ease;z-index:800;box-shadow:0 -12px 40px #0005}.side-panel.open{transform:translateY(0)}.sheet-handle{display:flex;align-items:center;justify-content:center;width:100%;height:19px;flex-shrink:0}.sheet-handle>span{height:3px;width:32px;background:var(--control);border-radius:5px}.panel-top{height:42px;padding:0 20px}.panel-tabs{gap:24px}.panel-tabs button{height:44px;font-size:13px}.panel-tabs span{font-size:12px}.panel-content{padding:17px 20px}.event-row{padding:17px 0}.event-name{font-size:15px}.event-description{font-size:13px}.event-meta,.event-top,.section-line{font-size:12px}.panel-footer{font-size:11px}.panel-footer>span:last-child{font-size:11px}.selection{position:fixed;left:12px;right:12px;bottom:calc(122px + env(safe-area-inset-bottom));width:auto;z-index:820}.selection-header{padding:13px 16px}.selection-header .icon-button{min-height:32px;min-width:32px}.selection-inner{padding:13px 16px}.selection-bottom button{min-height:28px}.selection small,.journey-caption,.selection-bottom{font-size:12px}.transport-row{min-height:72px}.transport-row strong{font-size:13px}.transport-row small{font-size:12px}.filter-row button{min-height:36px;font-size:13px}.search-result{min-height:54px}}
@media(max-width:360px){h1{font-size:17px}.demo-label{font-size:11px}.brand>svg{width:24px}.topbar{padding:0 12px}.metric{padding:0 7px}.rail-button span{font-size:11px}.context-note{display:none}.map-key>span:first-child{font-size:11px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation:none!important;transition:none!important}}

.vehicle-chip.compact{min-width:17px;width:17px;height:17px;padding:2px;border-radius:4px;margin-left:15px;margin-top:2px}.vehicle-chip.compact .icon{width:12px;height:12px}.vehicle-chip.named{font-size:11px}
@media(max-width:360px){.demo-label{display:none}}

@media(max-width:640px){.ocean-label{display:none}.demo-strip{font-size:11px}.simulation-name span{font-size:11px}}
.map-credit{pointer-events:auto}.map-credit a{text-decoration:none}.map-credit a:hover{text-decoration:underline}

/* Live data: preserve the responsive shell, replace simulation-only controls. */
.live-toolbar{gap:12px}.refresh-button{border:1px solid var(--control);border-radius:4px;padding:6px 12px;min-height:34px}.live-coverage{margin-left:auto;color:var(--muted);font-size:11px}.live-strip{justify-content:space-between;padding:0 24px}.live-strip button{flex-shrink:0}.key-station{display:inline-block;width:6px;height:6px;background:var(--train);border:1px solid #fff}.event-level.red{color:#ff3030}.event-level.orange{color:#ff7900}.event-level.yellow{color:var(--weather)}.event-marker.red{background:#462526;border-color:#ff3030;color:#ff3030}.event-marker.orange{background:#3a2b20;border-color:#ff7900;color:#ff7900}.event-marker.yellow{background:#302e20;border-color:var(--weather);color:var(--weather)}.vehicle-chip.stale{opacity:.6}.live-error{color:var(--warning)}.selection-info{display:grid;grid-template-columns:1fr auto;gap:6px;margin-top:12px;font-size:12px;color:var(--muted)}.selection-info dd{margin:0;text-align:right;color:var(--text)}.selection-info dt{margin:0}.stop-list{margin:12px 0 0;padding-left:18px;font-size:12px;line-height:1.8;color:var(--muted);max-height:180px;overflow:auto}.stop-list li{padding-left:4px}.stop-list time{float:right;margin-left:12px}.more-results{width:100%;min-height:44px;border:1px solid var(--control);border-radius:4px;margin-top:14px;font-size:12px}.layer-row:has(input:disabled){cursor:default}.layer-row input:disabled{opacity:.5;cursor:default}.railway-station{color:var(--train)}.panel-notice{font-size:12px;color:var(--muted);padding:10px 0 14px}.live-selection-wide{max-height:calc(100% - 100px);overflow:auto}
@media(max-width:640px){.live-toolbar{height:48px;font-size:11px;gap:8px}.live-toolbar .status-dot{display:none}.live-toolbar .refresh-button{margin-left:auto;min-height:44px;border:0;padding:5px 4px}.live-toolbar .live-coverage{display:none}.live-strip{padding:0 12px;justify-content:center}.live-strip #connection-message{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px}.event-description{overflow-wrap:anywhere}.live-selection-wide{max-height:60dvh}.layer-row .count{white-space:nowrap}.metric:nth-of-type(1)>span{max-width:65px}.selection-info{font-size:12px}}

.quake-small{display:block;width:7px;height:7px;margin:10px;border-radius:50%;border:1px solid #c3c5cb;background:#35373c}.vehicle-dot.stale .vehicle-chip{opacity:.55}

@media(max-width:640px){.live-toolbar{padding-left:16px;padding-right:16px}}

/* Map-first revision: one compact header, full-window workspace, semantic data colours. */
html,body{width:100%;max-width:none;min-width:0;min-height:0}
body{height:100dvh;padding-top:env(safe-area-inset-top,0px)}
.topbar{height:64px;display:grid;grid-template-columns:200px minmax(160px,260px) minmax(380px,1fr) auto;gap:20px;padding:0 16px}
.topbar>.search-wrap{width:100%}
.topbar>.summary{height:100%;padding:8px 0;grid-template-columns:repeat(4,minmax(0,1fr));border:0;background:none;min-width:0}
.summary-intro{display:none}
.metric{padding:0 18px;min-width:0;display:flex;flex-direction:column;justify-content:center;gap:1px}
.metric>span{font-size:11px;line-height:1.25;white-space:nowrap}
.metric>span:before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:6px;background:var(--metric-color)}
.metric strong{font-size:22px;line-height:1.2;font-weight:600;letter-spacing:-.4px}
.metric small{display:none}
.metric[data-metric="train"]{--metric-color:var(--train)}
.metric[data-metric="bus"],.metric[data-metric="incidents"]{--metric-color:var(--bus)}
.metric[data-metric="weather"]{--metric-color:var(--weather)}
.metric:hover:after{bottom:-8px;left:18px;right:18px;background:var(--metric-color)}
.header-end{gap:14px}.header-time{font-size:11px;white-space:nowrap}.demo-label{white-space:nowrap}
.live-strip{display:none}
body.feed-problem .live-strip{display:flex;min-height:26px}
.workspace{grid-template-columns:minmax(0,1fr) 352px;width:100%;min-width:0}
.map-stage{grid-column:1}
.map-tools{right:14px;top:14px}.map-tool{width:34px;height:34px}
:root{--layers-width:300px}
.layers{left:14px;top:14px;width:var(--layers-width);padding:14px}
.map-context{left:calc(var(--layers-width) + 34px);top:16px}
.regions{left:14px;bottom:54px}.region{height:58px;width:76px}
.map-key{left:14px;bottom:28px;gap:16px}
.map-key>span:nth-child(2){display:flex}
.map-key i{flex-shrink:0}
.key-station{width:7px;height:7px;border-radius:50%;border:1px solid var(--train);background:var(--train)}
.key-dot.bus{width:7px;height:7px;border-radius:2px;background:var(--bus)}
.key-diamond.weather{background:var(--weather)}
.key-fire{width:7px;height:7px;background:var(--fire)}
.key-road{width:7px;height:7px;background:var(--road)}
.key-quake{width:8px;height:8px;display:inline-block;border:1px solid var(--incident);border-radius:50%}
.live-toolbar{height:30px;padding:0 16px;gap:9px;font-size:11px}
.live-toolbar .refresh-button{min-height:24px;padding:2px 9px;font-size:11px;border-color:#45464c}
.live-coverage{font-size:11px}
.panel-top{height:43px;padding:0 16px;flex-shrink:0}
.panel-top h2{font-size:15px}.panel-tabs{padding:0 16px;gap:24px}.panel-tabs button{height:38px}
.panel-content{padding:12px 14px}
.panel-content>.filter-row{margin-bottom:10px;padding-bottom:8px}
.panel-footer{padding:8px 16px}
.event-row{position:relative;border:1px solid #34363b;border-left:3px solid var(--event-color);border-radius:5px;background:#1b1c1f;padding:12px;margin-bottom:9px;--event-color:#aaadb6}
.event-row:first-of-type{padding-top:12px}
.event-row:hover{background:#222428;border-color:var(--event-color)}
.event-row[data-kind="transit"]{--event-color:var(--bus)}
.event-row[data-kind="quake"]{--event-color:var(--incident)}
.event-row[data-kind="weather"]{--event-color:var(--weather)}
.event-row[data-kind="fire"]{--event-color:var(--fire)}
.event-row[data-kind="road"]{--event-color:var(--road)}
.event-row[data-severity="red"]{--event-color:#ff3030}
.event-row[data-severity="orange"]{--event-color:#ff7900}
.event-top>span:first-child{color:var(--event-color)}
.event-description{margin-top:4px}.event-meta{margin-top:8px}.event-name{font-size:13px;line-height:1.45}
.layer-row{--layer-color:var(--accent)}
.layer-row[data-kind="train"]{--layer-color:var(--train)}
.layer-row[data-kind="bus"],.layer-row[data-kind="transit"]{--layer-color:var(--bus)}
.layer-row[data-kind="weather"]{--layer-color:var(--weather)}
.layer-row[data-kind="quake"]{--layer-color:var(--incident)}
.layer-row[data-kind="fire"]{--layer-color:var(--fire)}
.layer-row[data-kind="road"]{--layer-color:var(--road)}
.layer-row:has(input:checked)>.icon{color:var(--layer-color)}
.layer-row:has(input:checked) .layer-name{text-decoration:none;color:var(--text)}
.layer-row input:checked{background:color-mix(in srgb,var(--layer-color) 23%,#1c1e22);border-color:var(--layer-color)}
.layer-row input:checked:before{background:var(--layer-color)}
.layer-row:has(input:checked)>.count{color:var(--layer-color)}
.vehicle-chip.bus{width:18px;height:18px;min-width:18px;border:1px solid var(--bus);background:#002b3d;border-radius:4px;color:var(--bus);display:grid;place-items:center}
.vehicle-chip.bus .icon{width:12px;height:12px}
.vehicle-dot.selected .vehicle-chip.bus{background:var(--bus);color:#082735;border:1px solid #fff;outline:2px solid #e7f8ff}
.event-marker{border-color:var(--weather);color:var(--weather);background:#3a2e14}
.event-marker.quake{color:var(--incident);border-color:var(--incident);background:#38241f}
.quake-small{background:var(--incident);border-color:var(--incident)}
.event-marker.fire{color:var(--fire);border-color:var(--fire);background:#350909}
.event-marker.road{color:var(--road);border-color:var(--road);background:#260d3d;width:17px;height:17px;margin:5px}
.event-marker.road .icon{width:11px;height:11px}
.event-dot.stale .event-marker{border-style:dashed}
.event-filters{gap:20px}
.map-stage.event-focused .event-dot:not(.selected),.map-stage.event-focused .vehicle-dot:not(.selected){opacity:.22}
.event-dot.selected{opacity:1}
.event-dot.selected:after{box-sizing:border-box;content:'';position:absolute;left:50%;top:50%;width:48px;height:48px;margin:-24px;border:2px solid #fff;border-radius:50%;pointer-events:none;animation:event-pulse 1.6s ease-out infinite}
@keyframes event-pulse{from{transform:scale(.75);opacity:.9}to{transform:scale(1.65);opacity:0}}
@media(prefers-reduced-motion:reduce){.event-dot.selected:after{animation:none;display:none}}
.event-dot.selected .event-marker{transform:scale(1.65);background:currentColor;border:2px solid #fff;outline:3px solid #101214;box-shadow:0 0 0 5px #fff}
.event-dot.selected .event-marker .icon{color:#101214;stroke-width:2.5}
.event-dot.selected .quake-small{transform:scale(2);box-shadow:0 0 0 2px #101214,0 0 0 4px #fff}
.event-row.selected{outline:2px solid #fff;outline-offset:-2px;background:#303238;border-color:var(--event-color)}
.event-row.selected .event-name{color:#fff;font-weight:700}
.line-badge{color:var(--train);border-color:var(--train);background:#002b00}
.line-badge.bus{color:var(--bus);border-color:var(--bus);background:#002b3d}
.selection{bottom:48px}
@media(min-width:641px){.rail{display:none}}
@media(min-width:1700px){.workspace{grid-template-columns:minmax(0,1fr) 360px}.panel-content{padding-left:14px;padding-right:14px}}
@media(min-width:1101px){.workspace.panel-collapsed{grid-template-columns:minmax(0,1fr) 0}.workspace.panel-collapsed .side-panel{display:none}}
@media(min-width:641px) and (max-width:1100px){
 .topbar{height:104px;grid-template-columns:200px minmax(160px,1fr) auto;grid-template-rows:56px 48px;gap:0 20px}
 .topbar>.summary{grid-column:1/-1;grid-row:2;padding:4px 0 8px}
 .header-end{grid-column:3;grid-row:1}.header-time{display:none}
 .metric{padding:0 16px}.metric strong{font-size:21px}.metric:hover:after{bottom:-8px}
 .workspace{grid-template-columns:minmax(0,1fr)}
 .side-panel{position:absolute;right:0;top:0;bottom:0;width:340px;transform:translateX(100%);box-shadow:-10px 0 30px #0004}
 .side-panel.open{display:flex;transform:translateX(0)}
 :root{--layers-width:280px}.live-coverage{display:none}
}
@media(max-width:640px){
 .topbar{height:112px;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:56px 56px;gap:0;padding:0 16px}
 .brand{grid-column:1;grid-row:1}.header-end{grid-column:2;grid-row:1;gap:2px}
 .topbar>.search-wrap{width:auto;left:12px;right:12px;top:calc(57px + env(safe-area-inset-top,0px))}
 .topbar>.summary{grid-column:1/-1;grid-row:2;padding:5px 0 8px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}
 .metric{padding:0 9px;gap:2px}.metric>span{white-space:normal;font-size:11px;line-height:1.15}.metric>span:before{display:none}.metric strong{font-size:21px;color:var(--metric-color)}
 .metric:first-of-type{padding-left:0}.metric:last-of-type{padding-right:0}
 .workspace{display:block;grid-template-columns:none}
 .rail{display:grid}.rail-button{color:#b6b9c0}.rail-button.active{color:var(--accent)}
 .layers{position:fixed;top:auto;left:12px;right:12px;bottom:calc(110px + env(safe-area-inset-bottom));width:auto;padding:16px 20px}
 .layer-row{min-height:44px}.layer-heading{margin-top:12px}
 .side-panel{position:fixed;top:auto;bottom:calc(98px + env(safe-area-inset-bottom));width:100%;height:min(66dvh,580px)}
 .panel-top{height:42px}.panel-top h2{font-size:17px}.panel-content{padding:14px 16px}.panel-tabs button{height:44px}.event-name{font-size:14px}
 .live-toolbar{height:36px;min-height:36px;padding:0 16px;margin-bottom:calc(62px + env(safe-area-inset-bottom))}
 .live-toolbar .refresh-button{min-height:36px;padding:0 4px;border:0}.live-coverage{display:none}
 .map-context{left:16px;top:12px}.map-tools{top:40px;right:12px}.map-tool{width:40px;height:40px}
 #toggle-panel,#toggle-layers{display:none}.map-tools>span:last-of-type{display:none}
 .regions{left:12px;bottom:68px;gap:5px}.region{width:65px;height:51px}
 .map-key{left:12px;bottom:23px;gap:7px 11px;font-size:11px;flex-wrap:wrap;max-width:calc(100% - 24px)}.map-key>span:nth-child(2){display:none}.map-key>span{gap:5px}
 .map-credit{font-size:11px;bottom:3px}.map-credit span{display:none}
 .selection{bottom:calc(110px + env(safe-area-inset-bottom));left:12px;right:12px;width:auto;max-height:55dvh}
 .context-note{display:none}
}

/* Device position is requested only by the location button. */
#locate-me{color:var(--bus)}
#locate-me.located{background:#00364b;color:#fff}
#locate-me:disabled{opacity:.6;cursor:wait}
.location-status{position:absolute;z-index:430;top:44px;left:calc(var(--layers-width) + 34px);max-width:340px;padding:8px 12px;font-size:12px;color:var(--text);pointer-events:none}
@media(min-width:641px) and (max-width:1100px){.location-status{max-width:calc(100% - var(--layers-width) - 96px)}}
@media(max-width:640px){.location-status{top:40px;left:12px;max-width:calc(100% - 76px);font-size:12px}}

.layer-note{margin:3px 0 10px;padding-left:26px;color:var(--muted);font-size:11px;line-height:1.5}
.layer-note button{padding:4px 0;color:var(--weather);text-align:left;text-decoration:underline;text-underline-offset:3px}
@media(max-width:640px){.layer-note{font-size:12px;padding-left:30px}.layer-note button{min-height:44px}.event-filters{gap:12px;flex-wrap:wrap}}

/* Public service layers: bounded, grouped controls and dense canvas geography. */
.layers{display:flex;flex-direction:column;max-height:calc(100% - 154px)}

#layer-options{overflow:auto;min-height:0;scrollbar-width:thin;scrollbar-gutter:stable;padding:0 12px}
.floating-heading,.layer-foot{flex-shrink:0}
.layer-toggle{display:grid}
.map-stage.layers-hidden .map-context{left:16px;top:72px}
.map-stage.layers-hidden .location-status{left:16px;top:98px}
@media(max-width:640px){.map-stage.layers-hidden .map-context{left:12px;top:70px}.map-stage.layers-hidden .location-status{left:12px;top:96px}}
.layer-group{border-bottom:1px solid var(--rule);padding:5px 0}
.layer-group summary{display:flex;align-items:center;gap:6px;min-height:34px;cursor:pointer;font-size:12px;color:var(--muted);list-style:none}
.layer-group summary:before{content:'›';font-size:18px;transform:rotate(0deg)}
.layer-group[open] summary:before{transform:rotate(90deg)}
.layer-group summary span{margin-left:auto;font-size:11px;color:var(--faint)}
.layer-group summary:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.layer-row[style]>.icon,.place-row .event-top>.icon,.place-row .event-top>span:first-child{color:var(--layer-color)}
.panel-tabs{gap:0;justify-content:space-between;padding-left:16px;padding-right:16px}
.panel-tabs button{font-size:12px;white-space:nowrap}
.service-controls{display:grid;gap:7px;margin-bottom:12px}
.service-controls label{font-size:12px;color:var(--muted)}
.service-controls select{width:100%;min-width:0;min-height:40px;padding:7px 10px;background:var(--raised);border:1px solid var(--control);border-radius:4px;color:var(--text);font:inherit}
.place-value{display:block;color:var(--layer-color,var(--text));font-size:16px;font-weight:600;margin:4px 0 6px}
.place-row .event-top{gap:6px}.place-row .event-top>span:last-child{font-size:11px;text-align:right}
.fuel-prices{width:100%;margin-top:16px;border-collapse:collapse;font-size:12px}
.fuel-prices caption{text-align:left;color:var(--muted);padding-bottom:7px}
.fuel-prices th,.fuel-prices td{padding:7px 4px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;overflow-wrap:anywhere}
.fuel-prices tbody th{font-weight:400}.fuel-prices td:last-child{color:var(--muted)}
.service-selected{color:#fff}
@media(max-width:640px){
 .layers{display:none;max-height:calc(100dvh - 250px);overflow:hidden}
 .layers.open{display:flex}.layer-group summary{min-height:44px}
 .panel-tabs{padding:0 16px;gap:6px}.panel-tabs button{font-size:12px}
 .layer-group summary span{font-size:12px}.service-controls select{min-height:44px}
}

/* Keep the road symbol vivid while metadata stays readable. */
.event-row[data-kind="road"] .event-top>span:first-child,.map-key>span{color:var(--text)}

/* Regional transport explorer reuses the mobile sheet and selection card. */
.bus-modes{gap:12px;flex-wrap:wrap}
.bus-modes button{white-space:normal}
.service-controls input[type=date]{width:100%;min-width:0;min-height:40px;padding:7px 10px;background:var(--raised);border:1px solid var(--control);border-radius:4px;color:var(--text);font:inherit}
.selection-inner h4{font-size:13px;margin:18px 0 6px;color:var(--text)}
.selection-inner .transport-row{gap:10px;padding:9px 0;min-width:0;width:100%;text-align:left}
.selection-inner .transport-row>span:first-child:not(.line-badge){min-width:0;flex:1}
.selection-inner .transport-row strong{overflow-wrap:anywhere}
.selection-inner .service-controls{margin-top:14px}
[data-kind="bus-network"]>.icon{color:var(--bus)}
@media(max-width:640px){.service-controls input[type=date]{min-height:44px}.bus-modes button{min-height:44px}}
.bus-stop-list{margin-top:12px;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.bus-stop-list summary{min-height:44px;padding:10px 0;cursor:pointer;color:var(--bus);font-size:13px}

/* Priority messages stay readable above the mobile navigation. */
:root{--ticker-height:0px}
.has-priority-alerts{--ticker-height:60px}
.alert-ticker{height:60px;min-height:60px;flex-shrink:0;display:flex;align-items:center;gap:12px;padding:0 16px 0 12px;background:#111214;border-left:4px solid var(--ticker-color);color:#fff;--ticker-color:#ffdf00;z-index:660}
.alert-ticker[data-severity=red]{--ticker-color:#ff5353}.alert-ticker[data-severity=orange]{--ticker-color:#ff9500}
.alert-ticker.is-idle{--ticker-color:#b6bdc8}
.alert-ticker.is-idle .ticker-item{padding:2px 0}
.alert-ticker.is-idle #ticker-text{width:auto;white-space:normal;font-size:14px;line-height:20px}
.alert-ticker.is-idle .ticker-track{display:block;width:auto}
.ticker-item:disabled{color:#e8eaee;cursor:default}
.ticker-heading{font-size:14px;font-weight:700;color:var(--ticker-color);padding-right:8px}
.ticker-item{flex:1;min-width:0;overflow:hidden;text-align:left;display:flex;flex-direction:column;justify-content:center;gap:1px;height:100%;padding:3px 0;color:#fff}
.ticker-meta{font-size:12px;line-height:18px;font-weight:600;color:var(--ticker-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ticker-viewport{display:block;width:100%;overflow:hidden}
.ticker-track{display:flex;gap:48px;width:max-content;will-change:transform}
#ticker-text,.ticker-copy{display:block;flex-shrink:0;width:max-content;max-width:none;white-space:nowrap;font-size:15px;line-height:23px}
.ticker-control{width:44px;min-width:44px;height:44px;display:grid;place-items:center;font-size:22px;padding:0;background:#26282c;border-radius:4px;color:#fff}
.ticker-control:hover{background:#36393e}.ticker-item:focus-visible{outline-offset:-2px}
@media(max-width:640px){
 .has-priority-alerts{--ticker-height:64px}
 .alert-ticker{height:64px;min-height:64px;padding:0 8px;gap:6px}
 .ticker-heading{display:none}.ticker-control{height:44px}.ticker-meta{font-size:12px}
 .side-panel{bottom:calc(98px + var(--ticker-height) + env(safe-area-inset-bottom));height:min(66dvh,calc(100dvh - 98px - var(--ticker-height) - env(safe-area-inset-bottom)))}
 .selection,.layers{bottom:calc(110px + var(--ticker-height) + env(safe-area-inset-bottom))}
 .selection{max-height:min(55dvh,calc(100dvh - 122px - var(--ticker-height) - env(safe-area-inset-bottom)))}
 .layers{max-height:calc(100dvh - 134px - var(--ticker-height) - env(safe-area-inset-bottom))}
}
@media(prefers-reduced-motion:reduce){
 .ticker-item{overflow:auto}.ticker-viewport{overflow:visible}.ticker-track{display:block;width:auto;transform:none!important;will-change:auto}#ticker-text{white-space:normal;width:auto;font-size:14px;line-height:19px}
 .ticker-meta{flex-shrink:0}.alert-ticker{height:86px;min-height:86px}.has-priority-alerts{--ticker-height:86px}
}

/* Dense optional layers use counts; priority events retain individual symbols. */
.map-cluster{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;border:2px solid var(--cluster-color);border-radius:50%;background:#11171d;color:var(--cluster-color);--cluster-color:#00c8ff}
.map-cluster strong{font-size:13px;line-height:1;font-weight:700}
.map-cluster .icon{width:11px;height:11px;stroke-width:2}
.cluster-symbol{display:flex;align-items:center}.cluster-train{--cluster-color:#00ff00}.cluster-fuel{--cluster-color:#ffdf00}
.map-cluster:hover{background:#30353c}.map-cluster:focus-visible{outline:3px solid #fff;outline-offset:3px}
.map-stage.event-focused .map-cluster{opacity:.22}
@media(prefers-reduced-motion:reduce){.leaflet-cluster-anim .leaflet-marker-icon,.leaflet-cluster-spider-leg{transition:none}}
.map-cluster.selected{border-color:#fff;outline:2px solid #fff;outline-offset:2px;opacity:1}

/* Short language codes keep the selector available on narrow phones. */
.language-select{width:56px;min-width:56px;height:36px;padding:0 5px;border:1px solid var(--control);border-radius:4px;background:var(--surface);color:var(--text);font:inherit;cursor:pointer}
.header-end{gap:12px}
.metric>span,.layer-name{overflow-wrap:anywhere}
@media(max-width:640px){
 .header-end{gap:4px}.language-select{height:44px;width:54px;min-width:54px;font-size:13px}
 .demo-label #connection-label{display:none}.demo-label{min-width:20px;justify-content:center;padding:0 3px}
 .metric>span{hyphens:auto}.filter-row{flex-wrap:wrap;gap:8px 14px}.panel-tabs{gap:6px}
}
.original-language{font-size:12px;color:var(--muted);margin-top:8px}
@media(min-width:1101px) and (max-width:1280px){
 .header-time{display:none}.topbar>.summary{padding:4px 0}
 .metric{padding:0 10px}.metric>span{white-space:normal}
}
.language-picker{position:relative;flex-shrink:0;width:56px;height:36px}
.language-picker #language-code{position:absolute;left:9px;top:50%;transform:translateY(-50%);font-size:13px;pointer-events:none}
.language-picker:after{content:'';position:absolute;right:10px;top:calc(50% - 4px);width:6px;height:6px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);transform:rotate(45deg);pointer-events:none}
.language-picker .language-select{appearance:none;color:transparent;width:100%;height:100%}
.language-select option{color:var(--text);background:var(--surface)}
.language-picker:has(select:disabled){opacity:.6}
@media(max-width:640px){.language-picker{width:54px;height:44px}}

/* Public utility notices and scheduled interruption windows. */
.outage-window{padding:12px 0;border-bottom:1px solid var(--border)}.outage-window>strong{color:#ffb800}.outage-window .selection-info{margin-top:8px}.outage-window dd{overflow-wrap:anywhere}.utility-description{white-space:pre-line;padding:12px 0;border-top:1px solid var(--border)}
.utility-marker .event-marker{color:var(--utility-color);border:1px solid currentColor;background:#111214;box-shadow:0 0 8px #0008}

.satellite-credit{font-size:11px;color:var(--muted);margin:8px 0}.utility-marker .event-marker{width:27px;height:27px}

.layer-row[data-kind="fertagus"]{--layer-color:#ff00da}

.layer-row[data-kind="metro-lisboa"]{--layer-color:#00c8ff}

.station-connections{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}

/* The map controls switch appearance without rebuilding the map or its data. */
.theme-toggle{min-height:44px}
.line-badge[style]{color:var(--route-color);border-color:var(--route-color);background:color-mix(in srgb,var(--route-color) 8%,transparent)}
html[data-theme="light"]{color-scheme:light;--ground:#edf1f4;--surface:#ffffff;--raised:#e8eef2;--border:#cbd4dc;--rule:#e1e6eb;--control:#82909e;--text:#17212b;--muted:#4c5967;--faint:#596675;--accent:#00821d;--positive:#00821d;--negative:#cf2020;--warning:#946200;--train:#00821d;--bus:#00769e;--weather:#946200;--incident:#bf4b00;--fire:#cf2020;--road:#a800cc;--map-ground:#dce5e8;--map-land:#f3f4f1;--map-outline:#64727e}
html[data-theme="light"] button:hover{color:var(--text)}
html[data-theme="light"] .demo-strip{background:var(--raised);color:var(--muted)}
html[data-theme="light"] .map-stage,html[data-theme="light"] #map,html[data-theme="light"] .leaflet-container{background:var(--map-ground)}
html[data-theme="light"] .leaflet-tile-pane{opacity:.9;filter:grayscale(1)}
html[data-theme="light"] .leaflet-fallback-pane .map-land{fill:var(--map-land);stroke:var(--border)}
html[data-theme="light"] .leaflet-fallback-pane .map-portugal{fill:var(--surface)}
html[data-theme="light"] .country-outline{stroke:var(--map-outline)}
html[data-theme="light"] .map-context,html[data-theme="light"] .map-tool{color:var(--text)}
html[data-theme="light"] .map-credit{color:var(--muted);text-shadow:0 0 3px var(--surface),0 0 3px var(--surface)}
html[data-theme="light"] .city-label{color:var(--text);text-shadow:-1px -1px 0 var(--surface),1px -1px 0 var(--surface),-1px 1px 0 var(--surface),1px 1px 0 var(--surface)}
html[data-theme="light"] .city-label.major{color:var(--text)}
html[data-theme="light"] .country-label,html[data-theme="light"] .ocean-label{color:var(--muted)}
html[data-theme="light"] .region svg{fill:var(--faint)}
html[data-theme="light"] .region.active svg{fill:var(--text)}
html[data-theme="light"] .rail-button{color:var(--muted)}
html[data-theme="light"] .rail-button.active{color:var(--accent)}
html[data-theme="light"] .event-row{background:var(--surface);border-color:var(--border);border-left-color:var(--event-color)}
html[data-theme="light"] .event-row:hover{background:var(--raised);border-color:var(--event-color)}
html[data-theme="light"] .event-row.selected{outline-color:var(--text);background:var(--raised)}
html[data-theme="light"] .event-row.selected .event-name{color:var(--text)}
html[data-theme="light"] .event-row[data-severity="red"]{--event-color:var(--negative)}
html[data-theme="light"] .event-level.red{color:var(--negative)}
html[data-theme="light"] .event-level.orange{color:var(--incident)}
html[data-theme="light"] .event-row[data-severity="orange"]{--event-color:var(--incident)}
html[data-theme="light"] .layer-row{--layer-ink:var(--layer-color)}
html[data-theme="light"] .layer-row[style],html[data-theme="light"] .layer-row[data-kind="fertagus"],html[data-theme="light"] .layer-row[data-kind="metro-lisboa"]{--layer-ink:color-mix(in srgb,var(--layer-color) 50%,#000)}
html[data-theme="light"] .layer-row[style]>.icon,html[data-theme="light"] .layer-row:has(input:checked)>.icon,html[data-theme="light"] .layer-row:has(input:checked)>.count{color:var(--layer-ink)}
html[data-theme="light"] .layer-row input{background:var(--raised)}
html[data-theme="light"] .layer-row input:checked{background:color-mix(in srgb,var(--layer-color) 18%,var(--surface));border-color:var(--layer-ink)}
html[data-theme="light"] .layer-row input:checked:before{background:var(--layer-ink)}
html[data-theme="light"] .place-value,html[data-theme="light"] .place-row .event-top>.icon,html[data-theme="light"] .place-row .event-top>span:first-child{color:color-mix(in srgb,var(--layer-color,var(--text)) 50%,#000)}
html[data-theme="light"] .line-badge{background:var(--surface)}
html[data-theme="light"] .line-badge[style]{color:color-mix(in srgb,var(--route-color) 50%,#000);border-color:currentColor}
html[data-theme="light"] .event-marker,html[data-theme="light"] .event-marker.fire,html[data-theme="light"] .event-marker.road,html[data-theme="light"] .event-marker.quake{background:var(--surface)}
html[data-theme="light"] .utility-marker .event-marker{background:#111214}
html[data-theme="light"] .vehicle-chip.bus{background:var(--surface)}
html[data-theme="light"] .event-dot.selected .event-marker{background:currentColor;border-color:var(--surface);outline-color:var(--text)}
html[data-theme="light"] .event-dot.selected:after{border-color:var(--text)}
html[data-theme="light"] .alert-ticker{background:var(--surface);color:var(--text);--ticker-color:var(--warning)}
html[data-theme="light"] .alert-ticker[data-severity="red"]{--ticker-color:var(--negative)}
html[data-theme="light"] .alert-ticker[data-severity="orange"]{--ticker-color:var(--incident)}
html[data-theme="light"] .alert-ticker.is-idle{--ticker-color:var(--muted)}
html[data-theme="light"] .ticker-item,html[data-theme="light"] .ticker-item:disabled{color:var(--text)}
html[data-theme="light"] .ticker-control{background:var(--raised);color:var(--text)}
html[data-theme="light"] .ticker-control:hover{background:var(--border)}
html[data-theme="light"] .primary{background:var(--text);color:var(--surface)}
html[data-theme="light"] .primary:hover{background:var(--muted);color:var(--surface)}
html[data-theme="light"] .outage-window>strong{color:var(--warning)}

/* A failed collection disables the service without erasing the saved choice. */
.layer-row.is-unavailable{cursor:not-allowed;color:var(--faint);--layer-color:var(--faint);--layer-ink:var(--faint)}
.layer-row.is-unavailable>.icon,.layer-row.is-unavailable>.count{color:var(--faint)!important}
.layer-row.is-unavailable input:disabled{cursor:not-allowed;border-color:var(--control);background:var(--raised)}
.layer-row.is-unavailable input:disabled:before{background:var(--faint)}
.layer-unavailable{font-size:11px;color:var(--muted);margin:0 0 8px 26px}
.filter-row button:disabled{cursor:not-allowed;color:var(--faint);opacity:.65}
.metric:disabled strong{color:var(--faint)}
.metric:disabled:hover:after{display:none}
.alert-ticker[data-severity="status"]{--ticker-color:var(--muted)}
html[data-theme="light"] .alert-ticker[data-severity="status"]{--ticker-color:var(--muted)}

/* Keep the map explorer heading available while its contents are folded. */
.layers[data-expanded="false"]{display:flex;width:max-content;max-width:calc(100% - 76px);right:auto;max-height:none;padding:4px 8px}
.layers[data-expanded="false"] #layer-options,.layers[data-expanded="false"] .layer-foot{display:none}
.layers[data-expanded="false"] .floating-heading{margin-bottom:0;gap:12px}
.layer-toggle .icon{transform:rotate(-90deg)}
.layer-toggle[aria-expanded="true"] .icon{transform:rotate(90deg)}
@media(max-width:640px){
 .layers{position:absolute;top:12px;bottom:auto;max-height:calc(100% - 24px)}
}
