:root { color-scheme:light; --sans:-apple-system,BlinkMacSystemFont,'Helvetica Neue',Helvetica,Arial,sans-serif; --serif:'EB Garamond',ui-serif,serif; --control-height:42px; --nav-backdrop:rgba(255,255,255,.82); --ink:#24231f; --muted:#73716a; --paper:#f6f3e8; --surface:#eeeade; --rule:#d5d1c5; --shadow:#00000018; --tooltip-bg:#24231f; --dublin:#a65b37; --zurich:#47577d; --rail:#455975; --tram:#38805b; --bus:#b68b3b; --ferry:#59848b; }
:root[data-theme="dark"] { color-scheme:dark; --nav-backdrop:rgba(0,0,0,.82); --ink:#eee9d8; --muted:#aca89b; --paper:#1d1d1b; --surface:#272724; --rule:#44443d; --shadow:#00000030; --tooltip-bg:#10100f; --dublin:#e7a17a; --zurich:#a7b6d7; --rail:#a2bed9; --tram:#67ad87; --bus:#d8b263; --ferry:#8dc3cc; }
* { box-sizing:border-box; }
html { scroll-behavior:smooth; }
body { margin:0; background:var(--paper); color:var(--ink); font-family:var(--sans); }
button,a { font:inherit; }
.tiles,.route-layer { position:absolute; inset:0; }
.tiles { contain:strict; will-change:transform; opacity:.8; filter:grayscale(1) contrast(.9) brightness(1.08); }
.route-layer { z-index:2; contain:strict; }
.route-network { position:absolute; inset:0; width:100%; height:100%; z-index:1; pointer-events:none; contain:strict; opacity:1; transition:opacity .55s ease; will-change:opacity; }
.route-network.is-hidden { opacity:0; }
.map-overlay { position:absolute; inset:0; z-index:2; width:100%; height:100%; pointer-events:none; opacity:0; transition:opacity .55s ease; }
.map-overlay.active { opacity:1; }
.basemap-canvas { position:absolute; inset:0; width:100%; height:100%; pointer-events:none; }
.route-layer { width:100%; height:100%; overflow:hidden; pointer-events:none; opacity:1; transition:opacity .55s ease; }
.route-layer.is-hidden { opacity:0; }
.route-layer path { fill:none; stroke-linecap:round; stroke-linejoin:round; }
.route-layer .vehicle-marker { pointer-events:none; }
.route-layer .vehicle-disc { fill:#365a5a; stroke:#fff; stroke-width:2; transition:fill .45s ease,stroke-width .45s ease; }
.route-layer .vehicle-marker.estimated .vehicle-disc { stroke-dasharray:2 2; }
.route-layer .vehicle-marker.late .vehicle-disc { fill:#cf3d3d; stroke-width:2.5; }
.route-layer .vehicle-marker use { fill:none; stroke:#fff; stroke-width:2.1; stroke-linecap:round; stroke-linejoin:round; }
.route-layer .vehicle-hit { fill:transparent; stroke:none; pointer-events:auto; cursor:default; }
.vehicle-tooltip { position:absolute; z-index:6; min-width:120px; max-width:220px; padding:9px 12px; border-radius:7px; background:var(--tooltip-bg); color:#fff; box-shadow:0 6px 20px var(--shadow); font-size:12px; line-height:1.4; text-align:center; pointer-events:none; opacity:0; visibility:hidden; transform:translate(-50%,-100%); }
.vehicle-tooltip.visible { opacity:1; visibility:visible; }
.vehicle-tooltip.below { transform:translate(-50%,0); }
.vehicle-tooltip strong,.vehicle-tooltip span { display:block; }
.vehicle-tooltip strong { font-size:13px; }
.vehicle-tooltip span { color:var(--rule); }
.map-head { z-index:3; left:24px; top:24px; border-left:4px solid var(--dublin); pointer-events:none; }
.zurich .map-head { border-color:var(--zurich); }
.map-head span { font-size:11px; }
.map-attribution { position:absolute; z-index:3; bottom:0; right:0; padding:3px 5px; font-size:9px; }
.map-scale { position:absolute; z-index:3; display:flex; flex-direction:column; align-items:flex-end; gap:3px; padding:7px 9px; font-size:10px; font-weight:700; }
.scale-bar { display:block; height:7px; max-width:180px; border:2px solid var(--ink); border-top:0; }
.map-message { position:absolute; z-index:3; top:48%; left:50%; transform:translate(-50%,-50%); width:min(270px,75%); padding:20px; border:1px solid var(--rule); text-align:center; font-size:13px; line-height:1.5; }
.map-message.hidden { display:none; }
.map-key { z-index:4; bottom:20px; left:20px; }
.map-legend { display:flex; flex-wrap:wrap; gap:9px 17px; font-size:11px; }
.map-legend span { display:flex; align-items:center; gap:6px; white-space:nowrap; }
.map-legend span[hidden] { display:none; }
.import-notice { display:flex; flex-wrap:wrap; gap:3px 12px; margin-top:9px; color:var(--muted); text-transform:uppercase; letter-spacing:.07em; font-size:9px; }
.legend-line { width:17px; height:3px; border-radius:5px; }
.legend-line.rail { background:var(--rail); }
.legend-line.tram { background:var(--tram); }
.legend-line.ferry { background:var(--ferry); }
.legend-line.bus { background:var(--bus); }
.map-legend[hidden] { display:none; }
.map-colorbar[hidden] { display:none; }
.map-colorbar { width:min(270px,72vw); }
.map-colorbar strong { display:block; margin-bottom:7px; font-size:11px; }
.colorbar-ramp { height:11px; border:1px solid #8b9e98; background:linear-gradient(90deg,#000080 0%,#0000ff 12.5%,#0080ff 25%,#00ffff 37.5%,#80ff80 50%,#ffff00 62.5%,#ff8000 75%,#ff0000 87.5%,#800000 100%); }
.colorbar-ticks { display:flex; justify-content:space-between; margin-top:4px; color:var(--muted); font-size:9px; font-weight:700; }
.map-colorbar small { display:block; margin-top:6px; color:var(--muted); font-size:9px; line-height:1.3; }
.travel-legend { width:min(320px,72vw); }
.travel-ramp { height:11px; border:1px solid #8b9e98; background:linear-gradient(90deg,#175e84 0%,#4fc5b7 25%,#f3df86 50%,#ec9852 75%,#b84143 100%); }
.property-legend[hidden] { display:none; }
.property-legend { margin-top:8px; font-size:10px; }
.property-legend strong,.property-legend small { display:block; }
.property-legend small { margin-top:2px; color:var(--muted); }
.property-layer { position:absolute; inset:0; z-index:4; pointer-events:none; }
.property-pin { position:absolute; display:flex; flex-direction:column; align-items:center; min-width:53px; padding:4px 6px; border:1px solid var(--rule); border-radius:6px; background:var(--tooltip-bg); box-shadow:0 2px 8px var(--shadow); color:#f6f3e8; font-size:10px; line-height:1.15; transform:translate(-50%,-115%); }
.property-pin:after { content:''; position:absolute; top:100%; left:50%; width:5px; height:5px; border-radius:50%; background:var(--ink); border:1px solid white; transform:translate(-50%,2px); }
.property-pin span { margin-top:2px; color:#d8d5ca; font-size:9px; }
.legend-dot { display:inline-block; width:10px; height:10px; border-radius:50%; background:#cf3d3d; border:2px solid white; box-shadow:0 0 0 1px #cf3d3d; }
.legend-dot.estimated { background:#cf3d3d; border-style:dashed; box-shadow:0 0 0 1px #cf3d3d; }
.legend-dot.normal { background:var(--muted); box-shadow:0 0 0 1px var(--muted); }
.map-legend .normal .legend-dot { background:#365a5a; box-shadow:0 0 0 1px #365a5a; }

.quality-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:34px; margin-top:19px; }
.quality-city { min-width:0; }
.quality-city + .quality-city { padding-left:34px; border-left:1px solid var(--rule); }
.quality-city h3 { margin:0 0 13px; font:700 23px var(--sans); letter-spacing:-.04em; }
.quality-city h3.dublin { color:var(--dublin); }
.quality-city h3.zurich { color:var(--zurich); }
.quality-city h4 { margin:22px 0 10px; color:var(--ink); font-size:13px; }
.quality-score { display:flex; align-items:baseline; gap:10px; margin-bottom:14px; }
.quality-score strong { font:700 30px var(--sans); letter-spacing:-.05em; }
.quality-score span,.quality-scope { color:var(--muted); font-size:11px; line-height:1.5; }
.quality-features { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; }
.quality-feature { display:flex; align-items:flex-start; gap:9px; padding:10px 11px; border:1px solid var(--rule); border-radius:5px; background:var(--surface); }
.quality-status { flex:none; display:grid; place-items:center; width:21px; height:21px; border-radius:50%; background:var(--rule); color:var(--muted); font-size:12px; font-weight:700; }
.quality-status.available { background:var(--rule); color:var(--muted); }
.quality-status.untested { background:var(--rule); color:var(--muted); }
.quality-feature strong,.quality-feature small { display:block; }
.quality-feature strong { font-size:11px; }
.quality-feature small { margin-top:3px; color:var(--muted); font-size:10px; line-height:1.35; }
.quality-access-row { margin:0 0 13px; }
.quality-access-row > div:first-child { display:flex; flex-wrap:wrap; justify-content:space-between; gap:4px 10px; font-size:11px; }
.quality-access-row > div:first-child span,.quality-access-row small { color:var(--muted); }
.quality-access-track { margin:6px 0 4px; overflow:hidden; }
.quality-access-track i { display:block; height:100%; }
.quality-access-row small { font-size:10px; }
.quality-anomalies { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; }
.quality-anomalies div { padding:11px; border:1px solid var(--rule); border-radius:5px; background:var(--surface); }
.quality-anomalies strong,.quality-anomalies span { display:block; }
.quality-anomalies strong { font:700 20px var(--sans); }
.quality-anomalies span { margin-top:4px; color:var(--muted); font-size:10px; line-height:1.35; }
.quality-observation { margin-top:12px; padding:9px 11px; border-left:3px solid var(--muted); background:var(--surface); color:var(--muted); font-size:10px; line-height:1.4; }
.quality-scope { margin:13px 0 0; }

.accumulation-intro { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px 22px; margin:17px 0 8px; color:var(--muted); font-size:12px; }
.accumulation-direction { position:relative; display:flex; flex-wrap:wrap; align-items:center; gap:12px; color:var(--muted); font-size:11px; font-weight:700; }
.service-combobox { position:relative; flex:1; }
.service-combobox input { width:100%; padding:9px 32px 9px 11px; border:1px solid var(--muted); color:var(--ink); font:inherit; }
.service-combobox input::placeholder { color:var(--muted); opacity:1; }
.service-options { position:absolute; z-index:12; top:calc(100% + 3px); left:0; right:0; max-height:270px; overflow:auto; border:1px solid var(--muted); }
.service-options[hidden] { display:none; }
.service-options button,.service-no-match { display:block; width:100%; border:0; border-bottom:1px solid var(--rule); background:transparent; color:var(--ink); text-align:left; cursor:pointer; }
.service-options button { position:relative; }
.service-options button[aria-selected="true"] { font-weight:700; }
.service-options button[aria-selected="true"]:after { content:'✓'; position:absolute; right:12px; font-size:15px; }
.service-no-match { color:var(--muted); cursor:default; }
.accumulation-picker-hint { color:var(--muted); font-size:10px; }
.accumulation-cities { display:flex; flex-wrap:wrap; gap:8px 18px; font-weight:700; }
.accumulation-cities span { display:flex; align-items:center; gap:7px; }
.accumulation-cities i { display:inline-block; width:20px; height:3px; border-radius:3px; }
.accumulation-cities .dublin { background:var(--dublin); }
.accumulation-cities .zurich { background:var(--zurich); }
.accumulation-pair { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); }
.accumulation-pair > * { min-width:0; }
.accumulation-chart { padding:17px 0 11px; border-top:1px solid var(--rule); }
.accumulation-chart h3 { margin:0 0 8px; font-size:14px; font-weight:700; }
.accumulation-chart-body { position:relative; padding-left:46px; }
.plot-surface { position:relative; width:100%; height:160px; cursor:crosshair; }
.accumulation-pair .plot-surface { background:var(--surface); }
.weekday-chart .plot-surface { height:220px; }
.plot-surface svg { position:absolute; inset:0; display:block; width:100%; height:100%; }
.plot-surface svg { pointer-events:none; overflow:visible; }
.accumulation-chart .grid { stroke:var(--rule); stroke-width:1; vector-effect:non-scaling-stroke; }
.accumulation-chart .fine-grid { stroke:var(--rule); }
.accumulation-chart .zero { stroke:var(--muted); stroke-width:1.4; vector-effect:non-scaling-stroke; }
.accumulation-chart .trace { fill:none; stroke-width:2.6; stroke-linejoin:round; stroke-linecap:round; vector-effect:non-scaling-stroke; }
.accumulation-chart .trace.dublin { stroke:var(--dublin); }
.accumulation-chart .trace.zurich { stroke:var(--zurich); }
.accumulation-chart .deviation-band.dublin path { fill:var(--dublin); opacity:.15; }
.accumulation-chart .deviation-band.zurich path { fill:var(--zurich); opacity:.15; }
.accumulation-chart .trace-dot.dublin { fill:var(--dublin); }
.accumulation-chart .trace-dot.zurich { fill:var(--zurich); }
.weekday-bar.dublin rect { fill:var(--dublin); opacity:.8; }
.weekday-bar.zurich rect { fill:var(--zurich); opacity:.8; }
.weekday-whisker { stroke:var(--ink); stroke-width:1.4; vector-effect:non-scaling-stroke; }
.plot-guide { position:absolute; z-index:3; top:0; bottom:0; width:1px; border-left:1px dashed var(--ink); pointer-events:none; visibility:hidden; }
.plot-tooltip { position:absolute; z-index:4; top:5px; min-width:155px; max-width:min(260px,80vw); padding:7px 10px; border-radius:5px; background:var(--tooltip-bg); color:#fff; box-shadow:0 5px 16px var(--shadow); transform:translateX(-50%); pointer-events:none; visibility:hidden; font-size:10px; line-height:1.45; }
.plot-tooltip strong,.plot-tooltip span { display:block; }
.plot-tooltip span { color:var(--rule); }
.plot-surface.hovering .plot-guide,.plot-surface.hovering .plot-tooltip { visibility:visible; }
.accumulation-y { position:absolute; left:0; top:0; bottom:19px; display:flex; flex-direction:column; justify-content:space-between; color:var(--muted); font-size:10px; }
.accumulation-x { display:flex; justify-content:space-between; padding-top:3px; color:var(--muted); font-size:10px; }
.weekday-labels { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); text-align:center; }
.speed-periods { display:flex; flex-wrap:wrap; gap:5px; margin:17px 0 0; }
.speed-periods button,.delay-mode-buttons button { border:1px solid var(--muted); cursor:pointer; }
.speed-intro { color:var(--muted); font-size:12px; }
.speed-search-field { width:min(390px,100%); }
.speed-search-field label,.wait-service-field label { display:block; margin-bottom:5px; font-size:11px; font-weight:700; }
.speed-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:28px; }
.speed-city { min-width:0; }
.speed-city + .speed-city { border-left:1px solid var(--rule); padding-left:28px; }
.speed-city h3 { margin:0 0 4px; font:700 20px var(--sans); }
.speed-city h3.dublin { color:var(--dublin); }
.speed-city h3.zurich { color:var(--zurich); }
.speed-count { margin:0 0 14px; color:var(--muted); font-size:11px; }
.speed-group { margin:17px 0 0; }
.speed-group h4 { margin:0 0 6px; color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.12em; }
.speed-row { display:flex; justify-content:space-between; align-items:baseline; gap:14px; width:100%; padding:9px 0; border:0; border-top:1px solid var(--rule); background:transparent; color:inherit; text-align:left; cursor:pointer; }
.speed-route { min-width:0; font-size:14px; font-weight:700; overflow-wrap:anywhere; }
.speed-route small { display:block; margin-top:2px; color:var(--muted); font-size:10px; font-weight:500; }
.speed-row > strong { flex:none; font:700 20px var(--sans); white-space:nowrap; }
.speed-row > strong small { color:var(--muted); font:500 10px var(--sans); }
.speed-empty { padding:15px 0; color:var(--muted); font-size:12px; }
.speed-detail h3 { margin:0 0 4px; font:700 18px var(--sans); }
.speed-detail p { margin:0 0 13px; color:var(--muted); font-size:11px; }
.speed-chart { position:relative; height:68px; padding:0 0 20px 38px; }
.speed-chart svg { display:block; width:100%; height:100%; overflow:visible; background:var(--surface); }
.speed-chart .grid { stroke:var(--rule); stroke-width:1; vector-effect:non-scaling-stroke; }
.speed-chart .walking-reference line { stroke:var(--muted); stroke-width:1.5; stroke-dasharray:6 5; vector-effect:non-scaling-stroke; }
.speed-chart .speed-line { fill:none; stroke:var(--muted); stroke-width:3; vector-effect:non-scaling-stroke; stroke-linejoin:round; stroke-linecap:round; }
.speed-chart .speed-line.dublin { stroke:var(--dublin); }
.speed-chart .speed-line.zurich { stroke:var(--zurich); }
.speed-chart .axis-y { position:absolute; top:0; bottom:20px; left:0; display:flex; flex-direction:column; justify-content:space-between; color:var(--muted); font-size:10px; }
.speed-chart .axis-x { display:flex; justify-content:space-between; color:var(--muted); font-size:10px; }
.speed-chart .speed-hover { position:absolute; top:0; bottom:20px; left:38px; right:0; cursor:crosshair; }
.speed-chart .speed-guide { position:absolute; top:0; bottom:0; width:1px; border-left:1px dashed var(--ink); pointer-events:none; opacity:0; }
.speed-chart .speed-tooltip { position:absolute; top:8px; max-width:min(240px,70vw); padding:7px 10px; border-radius:5px; background:var(--tooltip-bg); color:#fff; font-size:11px; pointer-events:none; transform:translateX(-50%); opacity:0; }
.property-plots { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:24px; margin:18px 0 12px; }
.property-plot { min-width:0; }
.property-plot + .property-plot { padding-left:24px; border-left:1px solid var(--rule); }
.property-plot h3 { margin:0; font:700 20px var(--sans); }
.property-plot h3.dublin { color:var(--dublin); }
.property-plot h3.zurich { color:var(--zurich); }
.property-plot p,.property-axis-note { margin:4px 0 8px; color:var(--muted); font-size:11px; }
.property-plot-wrap { position:relative; }
.property-plot svg { display:block; width:100%; background:var(--surface); }
.property-trend { stroke:var(--ink); stroke-width:2.5; pointer-events:none; vector-effect:non-scaling-stroke; }
.property-trend.zurich { stroke:var(--zurich); }
.property-r2 { fill:var(--ink); font-size:12px; font-weight:800; paint-order:stroke; stroke-width:4px; pointer-events:none; }
.property-r2.zurich { fill:var(--zurich); }
.property-grid line { stroke:var(--rule); stroke-width:1; vector-effect:non-scaling-stroke; }
.property-grid text,.property-axis-title { fill:var(--muted); font-size:10px; }
.property-dot { stroke:white; stroke-width:1; fill-opacity:.64; cursor:crosshair; }
.property-dot.dublin { fill:var(--dublin); }
.property-dot.zurich { fill:var(--zurich); }
.property-dot:hover,.property-dot:focus { r:7; fill-opacity:1; stroke:var(--ink); outline:none; }
.property-chart-tooltip { position:absolute; z-index:3; max-width:min(260px,65vw); padding:7px 10px; border-radius:5px; background:var(--tooltip-bg); color:#fff; font-size:11px; line-height:1.3; transform:translateX(-50%); pointer-events:none; opacity:0; }
.property-chart-tooltip.visible { opacity:1; }
.speed-chart .speed-hover:hover .speed-guide,.speed-chart .speed-hover:hover .speed-tooltip { opacity:1; }
.network-speed-heading { display:flex; flex-wrap:wrap; align-items:baseline; justify-content:space-between; gap:8px; margin:24px 0 8px; }
.network-speed-heading h3 { margin:0; color:var(--ink); font-size:14px; }
.network-speed-heading span,.network-speed-legend { color:var(--muted); font-size:10px; }
.network-speed-chart { position:relative; padding:0 0 20px 48px; height:220px; }
.network-speed-chart svg { display:block; width:100%; height:100%; overflow:visible; background:var(--surface); }
.network-speed-grid line { stroke:var(--rule); stroke-width:1; vector-effect:non-scaling-stroke; }
.network-speed-series path { fill:none; stroke:currentColor; stroke-width:2.5; vector-effect:non-scaling-stroke; }
.network-speed-series circle { fill:currentColor; stroke:var(--surface); stroke-width:2; vector-effect:non-scaling-stroke; }
.network-speed-series.dublin { color:var(--dublin); }
.network-speed-series.zurich { color:var(--zurich); }
.network-speed-hover { position:absolute; top:0; bottom:20px; left:48px; right:0; cursor:crosshair; }
.network-speed-guide { position:absolute; top:0; bottom:0; border-left:1px dashed var(--muted); opacity:0; pointer-events:none; }
.network-speed-tooltip { position:absolute; top:9px; max-width:min(360px,75vw); padding:7px 10px; border-radius:5px; background:var(--tooltip-bg); color:var(--surface); font-size:11px; white-space:normal; pointer-events:none; transform:translateX(-50%); opacity:0; }
.network-speed-hover:hover .network-speed-guide,.network-speed-hover:hover .network-speed-tooltip { opacity:1; }
.network-speed-y { position:absolute; top:0; bottom:20px; left:0; display:flex; flex-direction:column; justify-content:space-between; color:var(--muted); font-size:10px; }
.network-speed-x { position:relative; height:16px; color:var(--muted); font-size:10px; }
.network-speed-x span { position:absolute; transform:translateX(-50%); }
.network-speed-x span:first-child { transform:none; }
.network-speed-x span:last-child { transform:translateX(-100%); }
.network-speed-legend { display:flex; flex-wrap:wrap; gap:18px; margin:9px 0 18px; }
.network-speed-legend i { display:inline-block; width:11px; height:3px; margin:0 5px 3px 0; vertical-align:middle; }
.network-speed-legend i.dublin { background:var(--dublin); }
.network-speed-legend i.zurich { background:var(--zurich); }
.stat-top { padding-bottom:15px; border-bottom:1px solid var(--rule); font-size:11px; font-weight:700; }
.stat-columns { display:grid; grid-template-columns:1fr 1fr; gap:25px; }
.city-stat { min-width:0; padding-top:16px; }
.city-stat+.city-stat { padding-left:25px; border-left:1px solid var(--rule); }
.stat-num { font:700 clamp(36px,4vw,58px)/1.15 var(--sans); letter-spacing:-.065em; white-space:nowrap; }
.stat-num.dublin { color:var(--dublin); }
.stat-num.zurich { color:var(--zurich); }
.stat-num small { font-weight:600; }
.fleet-symbols { position:absolute; width:0; height:0; overflow:hidden; }
.stat-meta { color:var(--muted); font-size:11px; line-height:1.5; }
.stat-source { margin-top:14px; color:var(--muted); font-size:11px; line-height:1.5; }
.stat-source a { color:var(--ink); text-decoration:underline; text-underline-offset:3px; }
.stat-note { margin-top:6px; }
.source-row { display:flex; margin-top:22px; }
.source-row a { font-size:11px; }

.fleet-head,.fleet-row { display:grid; grid-template-columns:96px minmax(0,1fr) minmax(0,1fr); gap:20px; }
.fleet-city { min-width:0; }
.fleet-summary { margin-top:19px; }
.fleet-summary-title { margin:0 22px; color:var(--muted); font-size:10px; font-weight:700; text-transform:uppercase; letter-spacing:.13em; }
.fleet-summary-values { display:grid; grid-template-columns:96px minmax(0,1fr) minmax(0,1fr); gap:20px; margin-top:12px; }
.fleet-summary-values::before { content:''; }
.fleet-summary-city { display:flex; flex-direction:column; align-items:flex-start; }
.fleet-summary-city + .fleet-summary-city { position:relative; }
.fleet-summary-city + .fleet-summary-city::before { content:''; position:absolute; left:-10px; top:0; bottom:0; border-left:1px solid var(--muted); }
.fleet-summary-city span { color:var(--muted); font-size:11px; font-weight:700; }
.fleet-summary-city strong { color:var(--dublin); font:700 clamp(35px,4.3vw,58px)/1.12 var(--sans); letter-spacing:-.07em; }
.fleet-summary-city.zurich strong { color:var(--zurich); }
.fleet-summary-city small { color:var(--muted); font-size:10px; text-transform:uppercase; letter-spacing:.09em; }
.fleet-summary-note { margin:13px 22px 0; color:var(--muted); font-size:10px; }
.fleet-head { margin:17px 0 0; color:var(--muted); font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:.1em; }
.fleet-icon-key { margin-top:5px; color:var(--muted); font-size:10px; }
.fleet-row { padding:18px 0; border-bottom:1px solid var(--rule); }
.fleet-row:last-of-type { border-bottom:0; }
.fleet-mode { display:flex; align-items:flex-start; gap:7px; padding-top:3px; color:var(--ink); font-size:12px; }
.fleet-mode svg { width:22px; height:22px; flex:none; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.fleet-count { color:var(--dublin); font:700 clamp(25px,3vw,37px)/1.2 var(--sans); }
.fleet-city.zurich .fleet-count { color:var(--zurich); }
.fleet-count small { color:var(--muted); font:600 11px/1.2 var(--sans); letter-spacing:0; }
.fleet-context { margin-top:2px; color:var(--muted); font-size:10px; line-height:1.35; }
.fleet-icon-grid { display:block; width:100%; margin:7px 0 11px; color:var(--dublin); }
.fleet-city.zurich .fleet-icon-grid { color:var(--zurich); }
.fleet-capacity { font-size:17px; font-weight:700; }
.fleet-capacity small { color:var(--muted); font-size:11px; font-weight:500; }
.fleet-example,.fleet-source,.fleet-foot { color:var(--muted); font-size:10px; line-height:1.45; }
.fleet-example { margin-top:2px; }
.fleet-types { margin-top:12px; border-top:1px solid var(--rule); }
.fleet-type { display:flex; justify-content:space-between; align-items:start; gap:8px; padding:8px 0; border-bottom:1px solid var(--rule); font-size:11px; line-height:1.3; }
.fleet-type a { color:var(--ink); text-decoration:underline; text-underline-offset:2px; }
.fleet-type small { display:block; margin-top:2px; color:var(--muted); font-size:9px; font-weight:400; }
.fleet-type strong { flex:none; color:var(--ink); font-size:13px; text-align:right; }
.fleet-type strong small { white-space:nowrap; }
.fleet-source { margin-top:7px; }
.fleet-source a { color:var(--ink); text-decoration:underline; text-underline-offset:2px; }
.fleet-foot a { color:var(--ink); text-decoration:underline; text-underline-offset:2px; }
.realtime-columns { display:grid; grid-template-columns:1fr 1fr; gap:22px; margin-top:18px; }
.realtime-city { min-width:0; }
.realtime-city + .realtime-city { padding-left:22px; border-left:1px solid var(--rule); }
.realtime-number { color:var(--dublin); font:700 clamp(34px,4vw,52px)/1.1 var(--sans); letter-spacing:-.06em; }
.realtime-city + .realtime-city .realtime-number { color:var(--zurich); }
.realtime-number small { display:block; color:var(--muted); font:600 11px/1.4 var(--sans); letter-spacing:0; }
.realtime-meta,.realtime-empty { color:var(--muted); font-size:11px; line-height:1.5; }
.realtime-empty { margin:12px 0 8px; font-size:14px; font-weight:400; }
.delay-toolbar { display:flex; flex-wrap:wrap; align-items:flex-end; gap:10px; margin:17px 0 4px; }
.delay-mode-buttons { display:flex; flex-wrap:wrap; gap:5px; }
.wait-service-field { width:min(390px,100%); margin-left:auto; color:var(--muted); }
.delay-city { min-width:0; }
.delay-city + .delay-city { padding-left:22px; border-left:1px solid var(--rule); }
.delay-values { display:grid; gap:12px; margin:13px 0 9px; }
.delay-values div { display:flex; flex-direction:column; }
.delay-values strong { color:var(--dublin); font:700 clamp(28px,3vw,43px)/1.1 var(--sans); letter-spacing:-.06em; }
.delay-city.zurich .delay-values strong { color:var(--zurich); }
.delay-values small { color:var(--muted); font-size:10px; }
.delay-distribution { margin:12px 0 10px; }
.delay-distribution-title { margin-bottom:4px; color:var(--muted); font-size:9px; text-transform:uppercase; letter-spacing:.08em; }
.delay-density-area { fill:currentColor; opacity:.18; }
.delay-density-line { fill:none; stroke:currentColor; stroke-width:2; vector-effect:non-scaling-stroke; }

.delay-distribution-axis { position:relative; display:flex; justify-content:space-between; color:var(--muted); font-size:8px; }
.delay-distribution-axis .zero { position:absolute; left:33.333%; transform:translateX(-50%); }

.delay-services { margin-top:19px; border-top:1px solid var(--rule); }
.delay-service { display:flex; flex-direction:column; gap:3px; padding:11px 0; border-bottom:1px solid var(--rule); color:var(--muted); font-size:10px; }
.delay-service strong { color:var(--ink); font-size:15px; }
.delay-service strong small { color:var(--muted); font-size:10px; font-weight:500; text-transform:capitalize; }
.delay-service em { font-style:normal; }

body { font-size:14px; line-height:1.5; }
main { width:min(1320px,calc(100% - 260px)); margin:0 auto 0 max(40px,calc((100vw - 1560px)/2)); }
.hero { padding:104px 0 48px; border-bottom:1px solid var(--ink); }
.hero h1 { max-width:1000px; margin:0; font:400 clamp(58px,6.3vw,100px)/.99 var(--serif); letter-spacing:-.035em; }
.hero-subtitle { width:fit-content; max-width:100%; margin:24px 0 0; color:var(--muted); font:400 12px/1.5 var(--sans); }
.scroll-cue { display:flex; gap:16px; align-items:center; margin-top:38px; color:var(--muted); font-size:11px; letter-spacing:.08em; text-transform:uppercase; }
.scroll-cue span { font-size:20px; }
.comparison { position:relative; background:transparent; }
.scroll-cards { padding:0; pointer-events:auto; }
.stat-grid { display:flex; flex-direction:column; gap:0; width:100%; margin:0; }
.stat-card,.stat-card:not(.fleet-card),.stat-card.accumulation-card,.stat-card.speed-card,.stat-card.property-card,.stat-card.api-quality-card { width:100%; margin:0; padding:42px 0; border:0; border-top:1px solid var(--ink); border-radius:0; background:transparent; box-shadow:none; }
.stat-grid > .stat-card:first-child { border-top:0; }
.stat-top { margin:0; padding:0 0 24px; border:0; color:var(--ink); font:400 clamp(30px,3vw,42px)/1.12 var(--serif); letter-spacing:-.025em; text-transform:none; }
.stat-columns,.realtime-columns,.quality-columns,.speed-columns,.property-plots { grid-template-columns:repeat(2,minmax(0,1fr)); gap:40px; }
.city-label { color:var(--muted); font-size:12px; font-weight:500; }
.stat-num,.realtime-number,.fleet-summary-city strong,.delay-values strong { font:400 clamp(42px,5vw,76px)/1.1 var(--sans); letter-spacing:-.065em; font-variant-numeric:tabular-nums; }
.stat-num { margin:18px 0 16px; }
.stat-num small { font-size:14px; letter-spacing:0; }
.stat-meta,.stat-source,.realtime-meta { font-size:12px; }
.stat-source { max-width:48ch; }
.fleet-foot { margin-top:24px; color:var(--muted); }
.fleet-summary { margin:0 0 28px; padding:20px 0; background:transparent; border:0; border-top:1px solid var(--rule); border-bottom:1px solid var(--rule); }
.fleet-summary-title,.fleet-summary-note { margin-left:0; margin-right:0; }
.fleet-summary-city+.fleet-summary-city::before { border-color:var(--rule); }
.fleet-summary-city strong { font-size:clamp(40px,4.8vw,68px); }
.fleet-count { font-weight:400; letter-spacing:-.04em; }
.fleet-type strong { font-weight:500; }
.quality-feature,.quality-anomalies div,.quality-observation { border-radius:0; background:transparent; }
.quality-status.available,.quality-status.untested,.quality-status { background:var(--surface); color:var(--ink); }
.quality-access-track { border-radius:0; height:3px; background:var(--rule); }
.quality-access-track i { background:var(--ink); }
.service-combobox { min-width:min(300px,100%); }
.service-combobox input { min-height:var(--control-height,42px); border-radius:0; background:var(--paper); border-color:var(--rule); font-size:12px; }
.service-combobox input:focus { outline:1px solid var(--ink); outline-offset:2px; }
.service-options { border-radius:0; background:var(--paper); border-color:var(--rule); box-shadow:0 8px 20px var(--shadow); }
.service-options button,.service-no-match { padding:12px; font-size:12px; }
.service-options button:hover,.service-options button.active { background:var(--surface); }
.service-options button[aria-selected="true"]:after { color:var(--ink); }
.speed-periods button,.delay-mode-buttons button { padding:8px 14px; border-radius:0; border-color:var(--rule); background:transparent; color:var(--muted); font-weight:500; font-size:12px; }
.speed-periods button[aria-pressed="true"],.delay-mode-buttons button[aria-pressed="true"] { background:var(--ink); border-color:var(--ink); color:var(--paper); }
.delay-toolbar,.speed-intro { gap:20px; margin:12px 0 24px; }
.wait-service-field,.speed-search-field { width:min(390px,100%); }
.accumulation-direction { margin:20px 0 28px; }
.accumulation-pair { gap:36px; }
.accumulation-pair .plot-surface { height:320px; }
.plot-surface,.accumulation-pair .plot-surface,.speed-chart svg,.network-speed-chart svg,.property-plot svg { background:transparent; }
.accumulation-chart h3,.network-speed-heading h3 { font-weight:500; }
.plot-tooltip,.speed-tooltip,.network-speed-tooltip,.property-chart-tooltip,.vehicle-tooltip { border-radius:0; background:var(--tooltip-bg); color:#f6f3e8; box-shadow:none; }
.plot-tooltip span,.vehicle-tooltip span { color:#d8d5ca; }
.speed-detail { padding:16px 0; background:transparent; border:0; }
.speed-row:hover,.speed-row[aria-pressed="true"] { background:var(--surface); }
.property-plot h3,.quality-city h3,.speed-city h3 { font-weight:500; letter-spacing:-.025em; }
.property-r2 { stroke:var(--paper); }
.inline-map { position:relative; width:100%; height:auto; margin:0; padding:32px 0; overflow:visible; background:transparent; pointer-events:auto; border-top:1px solid var(--rule); }
.maps { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:20px; height:auto; }
.map-panel { position:relative; display:flex; flex-direction:column; min-width:0; overflow:hidden; isolation:isolate; border:0; }
.map-head { position:static; order:-1; min-width:0; padding:0 0 14px; background:transparent; border:0; box-shadow:none; }
.map-head h2 { margin:0; font:400 30px/1.2 var(--serif); letter-spacing:-.02em; color:var(--ink); }
.map-head span { color:var(--muted); }
.map { position:relative; inset:auto; height:clamp(380px,42vw,620px); overflow:hidden; background:var(--surface); }
.map-key { position:static; max-width:100%; padding:16px 0 0; background:transparent; box-shadow:none; }
.map-key .import-notice { font-size:9px; text-transform:none; letter-spacing:0; }
.map-scale { right:12px; bottom:24px; background:var(--paper); color:var(--ink); box-shadow:none; }
.scale-bar { border-color:var(--ink); }
.map-attribution { background:var(--paper); color:var(--muted); }
.map-message { background:var(--paper); border-color:var(--rule); box-shadow:none; }
.accumulation-reveal-label { padding:0 0 24px; max-width:none; background:none; box-shadow:none; text-align:left; }
.accumulation-reveal-label strong { display:block; font:400 32px/1.15 var(--serif); letter-spacing:-.02em; }
.accumulation-reveal-label span { display:block; margin-top:8px; color:var(--muted); font-size:12px; }
:root[data-theme="dark"] .tiles { filter:grayscale(1) invert(1) brightness(.65); opacity:.8; }
:root[data-theme="dark"] .map-overlay.active { opacity:.88; }
.method-note { width:100%; margin:0; padding:42px 0 64px; border:0; border-top:1px solid var(--ink); background:transparent; box-shadow:none; color:var(--muted); font-size:12px; line-height:1.8; columns:2; column-gap:40px; }
.method-note p { margin:0 0 20px; }
.source-row { column-span:all; flex-wrap:wrap; padding-top:20px; border-top:1px solid var(--rule); gap:12px 24px; }
.source-row a { color:var(--ink); font-weight:500; text-transform:none; letter-spacing:0; }
.page-controls { position:fixed; z-index:30; top:28px; right:max(24px,calc((100vw - 1560px)/2)); display:flex; gap:8px; }
.page-controls button { display:flex; align-items:center; justify-content:center; gap:8px; min-width:40px; height:40px; padding:8px 12px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); cursor:pointer; font-size:12px; }
.page-controls svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; }
#nav-toggle { display:none; height:var(--control-height,42px); min-width:var(--control-height,42px); }
.progress-nav { position:fixed; z-index:25; top:130px; right:max(24px,calc((100vw - 1560px)/2)); width:158px; display:flex; flex-direction:column; gap:0; background:transparent; box-shadow:none; border:0; border-radius:0; transform:none; max-height:calc(100svh - 160px); overflow-y:auto; }
.progress-nav a { position:relative; z-index:1; display:block; padding:8px 0; color:var(--muted); text-decoration:none; font-size:11px; line-height:1.2; font-weight:400; text-transform:none; letter-spacing:0; }
.progress-nav a i { display:none; }
.progress-nav a.active { color:var(--ink); font-weight:600; }
.progress-nav a:hover { color:var(--ink); }
:focus-visible { outline:2px solid var(--ink); outline-offset:4px; }
[id] { scroll-margin-top:32px; }
[hidden] { display:none !important; }
@media(max-width:1000px) {
  main { width:auto; margin:0 20px; }
  .hero { padding-top:100px; }
  .hero h1 { font-size:clamp(58px,9vw,90px); }
  #nav-toggle { display:flex; }
  .page-controls { top:18px; right:20px; }
  .progress-nav { display:none; top:68px; right:20px; max-height:calc(100svh - 90px); background:var(--paper); border:1px solid var(--rule); box-shadow:0 12px 30px var(--shadow); }
  .navigation-open .progress-nav { display:flex; }
  .progress-nav a { padding:10px 0; font-size:13px; }
}
@media(max-width:680px) {
  main { margin:0 20px; }
  .hero { padding:100px 0 32px; }
  .hero h1 { font-size:clamp(48px,12vw,76px); max-width:620px; }
  .scroll-cue { margin-top:28px; }
  .stat-card,.stat-card:not(.fleet-card),.stat-card.accumulation-card,.stat-card.speed-card,.stat-card.property-card,.stat-card.api-quality-card { padding:32px 0; }
  .stat-top { padding-bottom:24px; font-size:32px; }
  .stat-columns,.realtime-columns,.quality-columns,.speed-columns,.property-plots,.accumulation-pair,.maps { grid-template-columns:1fr; gap:28px; }
  .city-stat+.city-stat,.realtime-city+.realtime-city,.delay-city+.delay-city,.quality-city+.quality-city,.speed-city+.speed-city,.property-plot+.property-plot { padding:24px 0 0; border-left:0; }
  .city-stat { padding-top:0; }
  .stat-num,.realtime-number { font-size:56px; }
  .delay-values strong { font-size:42px; }
  .stat-num small { font-size:13px; }
  .fleet-summary-values { grid-template-columns:1fr; gap:24px; }
  .fleet-summary-values::before,.fleet-summary-city+.fleet-summary-city::before,.fleet-head { display:none; }
  .fleet-summary-city strong { font-size:56px; }
  .fleet-row { grid-template-columns:1fr; gap:24px; padding:24px 0; }
  .fleet-mode { font-size:16px; }
  .fleet-city::before { content:'Dublin'; display:block; margin-bottom:8px; color:var(--muted); font-size:12px; }
  .fleet-city.zurich::before { content:'Zürich'; }
  .fleet-count { font-size:36px; }
  .delay-toolbar { align-items:stretch; }
  .wait-service-field,.speed-search-field { width:100%; margin-left:0; }
  .service-combobox { min-width:0; width:100%; flex-basis:100%; }
  .accumulation-direction { align-items:flex-start; }
  .accumulation-pair .plot-surface { height:290px; }
  .quality-features { grid-template-columns:1fr; }
  .map { height:420px; }
  .map-head h2 { font-size:28px; }
  .inline-map { padding:28px 0; }
  .map-legend { gap:9px 14px; font-size:10px; }
  .map-key { padding-top:14px; }
  .accumulation-reveal-label strong { font-size:30px; }
  .method-note { columns:1; padding:32px 0; }
  .source-row { gap:12px 18px; }
}
@media(prefers-reduced-motion:reduce) {
  html { scroll-behavior:auto; }
  *,*::before,*::after { transition:none !important; }
}

:root { --comparison-gap:40px; }
.stat-columns,.realtime-columns,.quality-columns,.speed-columns,.property-plots,.accumulation-pair,.maps { gap:var(--comparison-gap); }
.city-stat+.city-stat,.realtime-city+.realtime-city,.delay-city+.delay-city,.quality-city+.quality-city,.speed-city+.speed-city,.property-plot+.property-plot { padding-left:0; border-left:0; }
.fleet-head,.fleet-row,.fleet-summary-values { grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--comparison-gap); }
.fleet-mode { grid-column:1 / -1; }
.fleet-head > span:first-child,.fleet-summary-values::before { display:none; }
.fleet-summary-city+.fleet-summary-city::before { left:calc(var(--comparison-gap) / -2); }
.accuracy-toolbar { display:flex; flex-wrap:wrap; justify-content:space-between; gap:16px; margin-bottom:24px; }
.accuracy-legend { margin-bottom:12px; }
.prediction-card .plot-surface { height:300px; }
.position-status { display:block; font-size:10px; }
.position-status:empty { display:none; }
@media(max-width:680px) {
  :root { --comparison-gap:28px; }
  .fleet-head { display:none; }
  .fleet-row,.fleet-summary-values { grid-template-columns:1fr; }
  .city-stat+.city-stat,.realtime-city+.realtime-city,.delay-city+.delay-city,.quality-city+.quality-city,.speed-city+.speed-city,.property-plot+.property-plot { padding-top:24px; border-top:1px solid var(--rule); }
}

.combobox-action { position:absolute; right:1px; top:1px; display:grid; place-items:center; width:38px; height:40px; padding:0; border:0; background:transparent; color:var(--ink); font:400 22px/1 var(--sans); cursor:pointer; }
.combobox-action:hover { background:var(--surface); }
.map { cursor:grab; touch-action:none; }
.map.dragging { cursor:grabbing; user-select:none; }
.map.dragging .vehicle-hit { pointer-events:none; }

.map-home { position:absolute; top:12px; right:12px; z-index:6; display:grid; place-items:center; width:36px; height:36px; padding:8px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); cursor:pointer; }
.map-home:hover { background:var(--surface); }
.map-home svg { width:20px; height:20px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }
.speed-profile-legend { display:flex; flex-wrap:wrap; gap:8px 20px; margin:10px 0 0 38px; color:var(--muted); font-size:10px; line-height:1.4; }
.speed-profile-legend span { display:inline-flex; align-items:center; gap:7px; }
.speed-profile-legend i { display:inline-block; width:22px; height:0; border-top:2px solid; }
.speed-profile-legend .service-speed.dublin { border-color:var(--dublin); }
.speed-profile-legend .service-speed.zurich { border-color:var(--zurich); }
.speed-profile-legend .walking-speed { border-top:1.5px dashed var(--muted); }

.progress-nav { padding:0; }
.nav-stops { position:relative; flex:none; }
.progress-nav a { padding-left:46px; }
.nav-route { position:absolute; top:0; left:0; width:40px; height:100%; overflow:visible; pointer-events:none; }
.nav-route-base,.nav-route-travelled { fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.nav-route-base { stroke:var(--rule); }
.nav-route-travelled { stroke:var(--zurich); }
.nav-route-stop { fill:var(--paper); stroke:var(--muted); stroke-width:1.5; }
.nav-route-cursor circle { fill:var(--zurich); stroke:var(--paper); stroke-width:3; }
.nav-route-cursor use { fill:none; stroke:var(--paper); stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.nav-appearance { display:none; }
.nav-close-icon { display:none; }
.nav-backdrop { position:fixed; z-index:20; inset:0; background:var(--nav-backdrop); }
#theme-toggle { display:flex; align-items:center; justify-content:center; gap:8px; min-width:40px; height:40px; padding:8px 12px; border:1px solid var(--rule); border-radius:0; background:var(--paper); color:var(--ink); cursor:pointer; font:400 12px var(--sans); }
#theme-toggle svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; }
@media(max-width:1000px) {
  body.navigation-open { overflow:hidden; }
  .progress-nav { width:min(300px,calc(100vw - 40px)); padding:16px; }
  .progress-nav a { padding-left:46px; }
  .nav-appearance { display:flex; flex:none; align-items:center; justify-content:space-between; gap:16px; margin-top:16px; padding-top:16px; border-top:1px solid var(--rule); color:var(--muted); font-size:12px; }
  .navigation-open .nav-open-icon { display:none; }
  .navigation-open .nav-close-icon { display:block; }
}

.filter-scope { position:relative; }
#accumulation-content { display:contents; }
.filter-toolbar,.filter-toolbar .wait-service-field,.filter-toolbar .speed-search-field { display:contents; }
.filter-toolbar label { display:block; margin:12px 0 5px; font-size:11px; font-weight:600; }
.filter-toolbar .delay-mode-buttons { margin:12px 0; }
.filter-toolbar .service-combobox { display:block; width:min(390px,100%); min-width:0; margin:0 0 24px; }
.filter-toolbar .service-combobox.is-filtering { z-index:9; background:var(--paper); box-shadow:0 1px 0 var(--rule); }
@media(max-width:1000px) {
  .filter-toolbar .service-combobox.is-filtering { top:18px; max-width:100%; transition:max-width .18s ease; }
  .filter-toolbar .service-combobox.is-filtering.near-page-controls { max-width:calc(100% - 56px); }
}

.filter-scroll-anchor { display:block; height:1px; margin-bottom:-1px; pointer-events:none; }
.fleet-foot { max-width:82ch; font-size:12px; line-height:1.7; }
.method-details { margin-top:12px; font-size:12px; line-height:1.7; color:var(--muted); }
.method-details summary { cursor:pointer; color:var(--ink); text-decoration:underline; text-underline-offset:3px; }
.method-details p { margin:10px 0 0; }

.combobox-action svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; pointer-events:none; }

.travel-cursor-marker { position:absolute; z-index:5; width:14px; height:14px; border:2px solid var(--paper); border-radius:50%; background:var(--zurich); box-shadow:0 0 0 1px var(--ink); transform:translate(-50%,-50%); pointer-events:none; }
.delay-card[aria-busy="true"] .realtime-columns { opacity:.55; }

.chart-legend { display:flex; flex-wrap:wrap; align-items:center; gap:6px 16px; margin:10px 0 0; color:var(--muted); font:400 11px/1.5 var(--sans); }
.chart-legend span { display:inline-flex; align-items:center; gap:6px; }
.chart-legend i { display:inline-block; width:18px; height:2px; background:var(--ink); flex:none; }
.chart-legend i.dublin { background:var(--dublin); }
.chart-legend i.zurich { background:var(--zurich); }
.map-method { max-width:82ch; margin-top:18px; }

.property-plot .chart-legend i { width:6px; height:6px; border-radius:50%; }

.collection-progress { margin-top: 20px; padding-top: 12px; border-top: 1px solid var(--rule); font-size: 11px; }
.collection-progress p { margin: 0 0 12px; }
.collection-progress small { display: block; color: var(--muted); font-size: 10px; }
.collection-city { margin-bottom: 12px; }
.collection-city > div { display: flex; justify-content: space-between; margin-bottom: 5px; }
.collection-city svg { display: block; width: 100%; height: 8px; margin-bottom: 5px; fill: var(--rule); }
.collection-city.dublin .collected { fill: var(--dublin); }
.collection-city.zurich .collected { fill: var(--zurich); }

#commute-widget { margin:24px 0 36px; padding:24px 0; border-block:1px solid var(--rule); }
#commute-widget h3 { font-size:1.4rem; font-weight:500; margin:0 0 18px; }
.commute-controls,.commute-actions,.travel-controls { display:flex; align-items:end; flex-wrap:wrap; gap:12px; }
.commute-controls label { display:flex; flex-direction:column; gap:6px; font-size:12px; color:var(--muted); min-width:0; }
.commute-controls select,.commute-controls input { min-height:40px; border:1px solid var(--rule); background:var(--surface); color:var(--ink); padding:7px 10px; font:inherit; }
.commute-actions button { border:1px solid var(--rule); border-radius:0; background:transparent; color:var(--ink); cursor:pointer; padding:8px 12px; font:inherit; font-size:12px; }
.commute-actions button:last-of-type { border-color:var(--ink); }
#commute-widget[aria-busy=true] #commute-results,#commute-widget[aria-busy=true] #commute-budget-content { opacity:.5; }
.passenger-distribution { overflow:hidden; }
.wait-density { width:100%; height:90px; display:block; cursor:crosshair; }
.wait-tail-area { fill:currentColor; opacity:.25; }
.wait-threshold-line { stroke:currentColor; stroke-width:1; stroke-dasharray:3 3; vector-effect:non-scaling-stroke; }
.delay-city.dublin .passenger-distribution { color:var(--dublin); }
.delay-city.zurich .passenger-distribution { color:var(--zurich); }
.passenger-distribution .delay-density-line { stroke:currentColor; }
.wait-tail-control { display:flex; gap:12px; align-items:center; font-size:11px; color:var(--muted); }
.wait-tail-control input { flex:1; min-width:0; accent-color:var(--ink); }
.wait-tail-control output { min-width:110px; text-align:right; }
.travel-controls { justify-content:space-between; margin:0 0 12px; }
@media (max-width:700px) {
 .commute-controls { gap:10px; }
}
.property-brush { fill:var(--ink); fill-opacity:.08; stroke:var(--ink); stroke-width:1; pointer-events:none; }
.property-dot.is-selected { stroke:var(--ink); stroke-width:2; }
.property-plot svg { touch-action:pan-y; }
.commute-position-grid { display:grid; grid-template-columns:minmax(0,1fr) 36px minmax(0,1fr); gap:12px; align-items:end; margin:20px 0; }
.commute-position-grid label { display:flex; flex-direction:column; gap:6px; font-size:12px; color:var(--muted); min-width:0; }
.commute-position-field { display:flex; align-items:stretch; gap:6px; }
.commute-position-field .service-combobox { min-width:0; flex:1; width:auto; }
.commute-position-field input { width:100%; min-width:0; }
.commute-position-field>button { background:transparent; border:1px solid var(--rule); color:var(--ink); cursor:pointer; width:40px; flex-shrink:0; }
.commute-position-field>button svg { width:18px; height:18px; }
#commute-map-details { margin:0 0 16px; }
#commute-map-host { margin-top:12px; }

#commute-map-host .map-panel[hidden] { display:none; }
#commute-map-host .map { height:100%; }
#commute-map-host.picking .map { cursor:crosshair; }
.commute-plan-options { display:flex; flex-wrap:wrap; gap:6px; margin:12px 0; }
.commute-plan-options button { border-radius:8px; border:1px solid var(--rule); background:transparent; color:var(--ink); padding:8px 12px; font:inherit; font-size:12px; cursor:pointer; }
.commute-plan-options button[aria-pressed=true] { border-color:var(--ink); }

.property-dot.zurich:not(.is-selected) { fill:var(--surface); stroke:var(--zurich); stroke-width:1.5; }
.property-card .chart-legend i.dublin { width:8px; height:8px; border-radius:50%; background:var(--dublin); }
.property-card .chart-legend i.zurich { width:8px; height:8px; box-sizing:border-box; border-radius:50%; background:transparent; border:1.5px solid var(--zurich); }
.journey-steps-label { font-size:11px; font-weight:500; margin:20px 0 10px; }
.journey-steps { display:block; padding:0 0 0 10px; margin:0 0 24px; list-style:none; }
.journey-steps li { position:relative; border-left:2px solid var(--city,var(--ink)); padding:8px 0 8px 22px; font-size:12px; }
.journey-steps .journey-stop { padding-top:3px; padding-bottom:12px; }
.journey-stop::before { content:""; position:absolute; left:-6px; top:5px; width:10px; height:10px; border:2px solid var(--city,var(--ink)); border-radius:50%; background:var(--paper); box-sizing:border-box; }
.journey-stop strong { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; font-size:14px; font-weight:500; }
.journey-stop:last-child { border-color:transparent; padding-bottom:0; }
.journey-activity { display:flex; align-items:center; gap:8px; }
.journey-activity strong { font-weight:400; white-space:nowrap; color:var(--muted); }
.journey-icon { width:18px; height:18px; flex-shrink:0; fill:none; stroke:currentColor; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round; }
.journey-activity.wait,.journey-activity.change { color:var(--muted); }
.journey-activity.walk { border-left-style:dashed; border-left-color:var(--muted); color:var(--muted); }
#commute-map-host .map-panel.dublin { order:0; }
#commute-map-host .map-panel.zurich { order:1; }
.realtime-number .comparison-average { display:inline; color:var(--muted); font:400 14px/1.5 var(--sans); letter-spacing:0; }
.delay-values { grid-template-columns:minmax(0,2fr) minmax(0,1fr); }

.period-filter-label { color:var(--muted); font-size:11px; }
.commute-card #commute-widget { margin:0; padding:0; border:0; }
#commute-map-host .map-panel { height:600px; }
.travel-controls { margin-top:28px; }
.quality-position-counts { display:flex; flex-direction:column; gap:5px; margin:18px 0; font-size:12px; }
.quality-position-counts h4 { margin:0 0 4px; }
.quality-position-counts>strong { font-weight:500; }
.quality-position-counts>span { color:var(--muted); }
.accumulation-modes { flex-shrink:0; }
@media(min-width:701px) { .wait-tail-control input { display:none; } .wait-tail-control { justify-content:flex-end; } }

#commute-swap { display:flex; align-items:center; gap:8px; min-height:40px; border:1px solid var(--rule); color:var(--ink); background:transparent; font:inherit; font-size:12px; cursor:pointer; }
#commute-swap:disabled { opacity:.4; cursor:default; }
#commute-swap svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }
.commute-schedule-note { color:var(--muted); font-size:11px; margin:-2px 0 18px; }

.stat-card.commute-card { border:1px solid var(--rule); border-radius:18px; padding:28px; margin-bottom:28px; }
.commute-intro,.travel-measure-description { font-size:13px; line-height:1.6; color:var(--muted); }
.commute-intro { margin:-4px 0 24px; max-width:60ch; }
#delay-card .delay-toolbar { margin:28px 0; }
.fleet-row { row-gap:8px; }
.speed-stops.dublin,.speed-stops.zurich { fill:#888; stroke:var(--paper); stroke-width:1; }
.travel-measure-description { margin:0 0 20px; max-width:90ch; }
@media(max-width:700px) { .stat-card.commute-card { padding:18px; } }

#commute-swap { width:36px; padding:8px; justify-content:center; }
.commute-workspace { display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:var(--comparison-gap); align-items:start; margin-top:20px; }
.commute-workspace #commute-map-host { max-width:none; }
.commute-workspace #commute-results { min-width:0; }
.commute-risk { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin:4px 0 24px; font-size:12px; }
.commute-risk label { white-space:nowrap; min-width:100px; }
.commute-risk input { flex:1; min-width:0; accent-color:var(--ink); }
.commute-risk span { color:var(--muted); white-space:nowrap; }
.commute-scenario { --city:var(--dublin); padding:0 0 14px; }
.commute-scenario.zurich { --city:var(--zurich); }
.commute-scenario strong { font-size:32px; font-weight:400; color:var(--city); white-space:nowrap; }
.commute-scenario strong small { font-size:12px; color:var(--muted); }
.commute-scenario p { color:var(--muted); font-size:11px; line-height:1.5; padding:0 10px; margin:5px 0 0; }
@media(max-width:700px) {
 .commute-position-grid { grid-template-columns:1fr; gap:8px; }
 #commute-swap { justify-self:center; transform:rotate(90deg); }
 .commute-workspace { grid-template-columns:1fr; gap:20px; }
}

#delay-card .delay-toolbar { display:flex; flex-wrap:wrap; align-items:flex-end; gap:16px 20px; }
#delay-card .delay-toolbar .delay-mode-buttons { margin:0; }
#delay-card .wait-service-field { display:block; flex:1 1 240px; min-width:0; }
#delay-card .wait-time-field { flex:0 1 auto; }
#delay-card .wait-time-field>span { display:block; margin-bottom:5px; }
#delay-card .wait-service-field label { margin:0 0 5px; }
#delay-card .delay-toolbar .service-combobox { width:100%; margin:0; }

.filter-toolbar .filter-scroll-anchor { width:min(390px,100%); }
#delay-card .filter-scroll-anchor { width:100%; }
.filter-toolbar .service-combobox.is-filtering { position:relative; top:auto; }

.commute-scenario>button { border-radius:8px; display:flex; align-items:baseline; justify-content:space-between; gap:12px; width:100%; padding:10px; border:1px solid var(--rule); background:transparent; color:var(--ink); font:inherit; text-align:left; cursor:pointer; }
.commute-scenario>button[aria-pressed=true] { border-color:var(--city); background:var(--surface); }
.commute-scenario>button>span { font-size:16px; }
.commute-itinerary { --city:var(--dublin); margin-top:24px; }
.commute-itinerary.zurich { --city:var(--zurich); }
.commute-allowance { border-left:3px solid var(--muted); padding:8px 12px; font-size:12px; color:var(--muted); }

.section-subheading { margin:24px 0 18px; font-size:16px; font-weight:500; }
.section-heading { display:flex; align-items:baseline; flex-wrap:wrap; gap:8px 20px; margin:28px 0 18px; }
.section-heading .section-subheading { margin:0; }
.section-note,.control-note { color:var(--muted); font-size:12px; line-height:1.5; }
.control-note { margin:0 0 24px; }
.metric-label { display:block; margin:0 0 8px; font-size:12px; font-weight:500; line-height:1.5; }
.current-wait { margin-top:24px; }
.realtime-number { margin:8px 0; }
.measure-unit { font-size:16px; letter-spacing:0; }
.history-values { grid-template-columns:repeat(2,minmax(0,1fr)); gap:16px; }
.history-values strong { font-size:clamp(30px,4vw,44px); }
.history-values strong small { font-size:14px; }
input[type="range"] { appearance:none; -webkit-appearance:none; height:36px; margin:0; padding:0; background:transparent; color:var(--ink); cursor:pointer; }
input[type="range"]::-webkit-slider-runnable-track { height:2px; background:var(--rule); }
input[type="range"]::-moz-range-track { height:2px; background:var(--rule); }
input[type="range"]::-webkit-slider-thumb { appearance:none; -webkit-appearance:none; width:16px; height:16px; margin-top:-7px; border:2px solid var(--ink); border-radius:50%; background:var(--paper); }
input[type="range"]::-moz-range-thumb { width:12px; height:12px; border:2px solid var(--ink); border-radius:50%; background:var(--paper); }
input[type="range"]:hover::-webkit-slider-thumb { background:var(--surface); }
input[type="range"]:hover::-moz-range-thumb { background:var(--surface); }
input[type="range"]:disabled { opacity:.4; cursor:default; }

.delay-values strong small { letter-spacing:normal; }
.commute-risk .commute-odds { flex-basis:100%; min-width:0; white-space:normal; font-size:11px; color:var(--muted); }

.filter-toolbar.inline-filters { display:flex; flex-wrap:wrap; align-items:flex-end; gap:16px 24px; margin:24px 0; }
.speed-filters .speed-intro { display:block; margin:0; padding:0; }
.mode-speed { margin:20px 0; }
.mode-speed .realtime-number { font-size:clamp(30px,4vw,44px); }

.inline-filters .service-combobox { width:100%; margin:0; }
.inline-filters .speed-periods,.inline-filters .delay-mode-buttons { margin:0; }
.inline-filters .speed-periods button,.inline-filters .delay-mode-buttons button { min-height:var(--control-height); }
.inline-filters label { margin:0 0 5px; }

.service-coverage-note,.speed-detail .service-coverage-note { display:flex; align-items:flex-start; gap:8px; margin:32px 0 4px; color:var(--muted); font-size:12px; line-height:1.5; }
.service-coverage-note svg { width:16px; height:16px; flex:none; margin-top:1px; fill:none; stroke:currentColor; stroke-width:1.7; stroke-linecap:round; stroke-linejoin:round; }

.inline-filters .speed-intro,.inline-filters .filter-search-field { flex:1 1 460px; min-width:0; }
.inline-filters .speed-search-field { display:block; width:100%; }
.inline-filters .filter-scroll-anchor { width:100%; }
.journey-stop time { color:var(--muted); font-size:12px; font-weight:400; font-variant-numeric:tabular-nums; }

.experience-columns { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--comparison-gap); }
.experience-city { min-width:0; }
.experience-chart { position:relative; margin:16px 0; }
.experience-chart svg { display:block; width:100%; overflow:visible; }
.experience-chart text { font:11px var(--sans); fill:var(--muted); }
.experience-grid line { stroke:var(--rule); stroke-width:1; vector-effect:non-scaling-stroke; }
.experience-dot { fill:var(--muted); fill-opacity:.45; stroke:var(--paper); stroke-width:1; cursor:pointer; }
.experience-dot:hover,.experience-dot:focus,.experience-dot.is-selected { fill:var(--dublin); fill-opacity:1; stroke:var(--ink); stroke-width:2; }
.experience-city.zurich .experience-dot:hover,.experience-city.zurich .experience-dot:focus,.experience-city.zurich .experience-dot.is-selected { fill:var(--zurich); }
.experience-tooltip { position:absolute; top:0; left:48px; right:0; background:var(--tooltip-bg); color:#f6f3e8; padding:10px 12px; font-size:11px; line-height:1.5; pointer-events:none; }
.experience-tooltip strong,.experience-tooltip span { display:block; }
.experience-selection { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin:20px 0; font-size:12px; }
.experience-selection button { padding:8px 12px; border:1px solid var(--rule); background:transparent; color:var(--ink); cursor:pointer; }
.commute-budget { margin:20px 0; }
.commute-budget h4 { font-size:14px; font-weight:500; margin:0 0 12px; }
.commute-budget-scroll { overflow-x:auto; }
.commute-budget table { width:100%; border-collapse:collapse; font-size:11px; font-variant-numeric:tabular-nums; }
.commute-budget th,.commute-budget td { padding:8px 6px; text-align:right; border-bottom:1px solid var(--rule); font-weight:400; }
.commute-budget th:first-child { text-align:left; padding-left:0; }
.commute-budget thead { color:var(--muted); }
.commute-budget .budget-total th,.commute-budget .budget-total td { border-top:1px solid var(--ink); font-weight:500; }
@media(max-width:700px) { .experience-columns { grid-template-columns:1fr; gap:28px; } }

#commute-map-details { min-width:0; }
.commute-budget thead small { display:block; font-size:10px; font-weight:400; margin-top:4px; }
.wait-mapping-details { margin:12px 0 0; padding-left:18px; }
.wait-mapping-details li { margin-bottom:10px; }

.headway-distribution { margin-top:32px; padding-top:24px; border-top:1px solid var(--rule); }
.headway-distribution h3 { margin:0 0 20px; font-size:16px; font-weight:500; }
.headway-chart { position:relative; height:240px; padding:0 0 22px 42px; }
.headway-chart svg { display:block; width:100%; height:100%; }
.headway-grid line { stroke:var(--rule); stroke-width:1; vector-effect:non-scaling-stroke; }
.headway-line { fill:none; stroke-width:2; vector-effect:non-scaling-stroke; }
.headway-line.dublin,.headway-median.dublin { stroke:var(--dublin); }
.headway-line.zurich,.headway-median.zurich { stroke:var(--zurich); }
.headway-median { stroke-width:1.5; stroke-dasharray:4 4; opacity:.6; vector-effect:non-scaling-stroke; }
.headway-axis-y { position:absolute; left:0; top:0; bottom:22px; display:flex; flex-direction:column; justify-content:space-between; color:var(--muted); font-size:10px; }
.headway-axis-x { position:absolute; left:42px; right:0; bottom:0; height:16px; color:var(--muted); font-size:10px; }
.headway-axis-x span { position:absolute; transform:translateX(-50%); }
.headway-axis-x span:first-child { transform:none; }
.headway-axis-x span:last-child { transform:translateX(-100%); }
.headway-hover { position:absolute; left:42px; right:0; top:0; bottom:22px; cursor:crosshair; }
.headway-guide { position:absolute; top:0; bottom:0; border-left:1px dashed var(--ink); pointer-events:none; }
.headway-tooltip { position:absolute; top:8px; left:8px; max-width:calc(100% - 16px); padding:8px 10px; font-size:11px; background:var(--tooltip-bg); color:#f6f3e8; pointer-events:none; }
.headway-counts { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--comparison-gap); }
@media(max-width:700px) { .headway-counts { grid-template-columns:1fr; gap:0; } }

.hero h1 { display:flex; align-items:center; gap:.18em; }
.brand-fish { width:1em; height:1em; flex:none; }
.hero-comparison { margin:20px 0 0; font:400 clamp(20px,2.4vw,30px)/1.25 var(--serif); }
