.diagram-scroll{scrollbar-width:thin;scrollbar-color:#3b5146 transparent;flex:1;min-height:0;overflow:auto}.line-legend{color:#8fa69b;border-bottom:1px solid #253a302e;justify-content:space-between;align-items:center;gap:6px;min-height:30px;padding:2px 14px;font-size:9px;display:flex}.line-navigation{z-index:6;background:var(--bg);border-bottom:1px solid #263c302e;justify-content:flex-end;gap:12px;padding:5px 14px;display:flex;position:sticky;top:0}.line-navigation button{color:var(--accent);background:0 0;border:0;padding:4px 0;font-size:9px}.line-navigation button:disabled{color:var(--muted);opacity:.5}.line-legend>span{white-space:nowrap;align-items:center;gap:3px;display:flex}.line-legend svg{width:22px;height:20px;overflow:visible}.optional-key svg{width:17px}.pass-key{color:#72877d}.line-diagram{isolation:isolate;width:100%;max-width:540px;margin:0 auto;position:relative}.diagram-track{z-index:1;pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.track-base,.track-commute,.track-progress,.track-continuation,.optional-tick,.train-connector path{fill:none;stroke-linecap:round}.commute-halo{fill:#b7ef7b08}.track-base{stroke:#344b41;stroke-width:3px}.track-commute{stroke:#6a9361;stroke-width:3px}.track-progress{stroke:#a7d97b;stroke-width:3px;opacity:.8}.track-progress.old{stroke:#be985d}.track-continuation{stroke:#466052;stroke-width:2px;stroke-dasharray:2 5;opacity:.65}.optional-tick,.optional-key path{stroke:#50695b;stroke-width:1px}.stop-glyph{stroke:#9aaa99;stroke-width:1.8px;fill:var(--bg)}.call-glyph{fill:#9aaa99}.pass-glyph,.skipped .stop-glyph{fill:var(--bg);stroke:#52685b;stroke-width:1.3px}.minor-stop .stop-glyph{stroke-width:1.2px}.track-station.outside-commute .stop-glyph{opacity:.75}.track-station.timing-on_time .call-glyph,.track-station.timing-early .call-glyph{fill:var(--accent);stroke:var(--accent)}.track-station.timing-late .call-glyph{fill:var(--warning);stroke:var(--warning)}.track-station.timing-uncertain .call-glyph{fill:#c4a77c;stroke:#c4a77c}.commute-glyph>circle:first-child{fill:var(--bg);stroke:var(--accent);stroke-width:2px}.commute-glyph .glyph-core{fill:var(--accent);stroke:none}.track-station.timing-late .glyph-core{fill:var(--warning)}.boarding-arrow{fill:none;stroke:var(--accent);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.arrival-check{fill:none;stroke:var(--bg);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.station-row{align-items:center;gap:6px;width:100%;padding-right:14px;display:flex;position:absolute;left:0;transform:translateY(-50%)}.station-name{text-align:left;color:#d5dfd3;letter-spacing:-.015em;z-index:2;background:0 0;border:0;flex:1;align-items:center;gap:5px;min-width:0;margin-left:116px;padding:6px 0;font-size:12px;font-weight:650;display:flex;position:relative}.station-name>span:first-child{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.minor-stop .station-name{color:#a0b2a4;margin-left:128px;font-size:10.5px;font-weight:400}.commute-stop .station-name{color:#eff5e7;font-size:14px;font-weight:750}.outside-commute:not(.commute-stop) .station-name{color:#93a89a}.skipped .station-name{color:#61776a}.next:not(.skipped) .station-name{color:var(--accent)}.next-indicator{background:var(--accent);border-radius:50%;flex-shrink:0;width:4px;height:4px;display:inline-block;box-shadow:0 0 0 3px #b7ef7b12}.station-time{color:#8b9f90;font-variant-numeric:tabular-nums;flex-shrink:0;align-items:center;gap:3px;font-size:10px;display:flex}.station-time>small{color:#718779;font-size:7px}.station-time .pass-time{color:#52685b;margin-right:13px;font-size:12px}.minor-stop .station-time{font-size:9px}.train-connector path{stroke:#56715f;stroke-width:1px;opacity:.75}.train-connector circle{fill:#7f9a80;stroke:var(--bg);stroke-width:2px}.train-connector.active path{stroke:var(--accent);stroke-width:1.5px;opacity:1}.train-connector.active circle{fill:var(--accent)}.train-connector.old path{stroke:#a38559;stroke-dasharray:2 2}.train-connector.old circle{fill:#b08a58}.diagram-train{color:#c7d9c5;font-variant-numeric:tabular-nums;z-index:3;background:#1b3025;border:1px solid #3c5846;border-radius:6px;justify-content:center;align-items:center;gap:4px;width:71px;height:29px;padding:3px 4px;font-size:9px;font-weight:750;transition:top .6s;display:flex;position:absolute;top:0;left:7px;transform:translateY(-50%)}.diagram-train .service-badge{padding:2px 3px;font-size:6px}.diagram-train.selected{color:#173118;z-index:4;background:#b7ef7b;border-color:#d2f7ac;box-shadow:0 0 0 3px #b7ef7b12,0 2px 8px #0003}.diagram-train.old{color:#d3b07b;background:#30291f;border-style:dashed}.diagram-train.old.selected{color:#2e2415;background:#e1b778;border-color:#f2d4a8}.diagram-train.outside-line{border-style:dashed}.diagram-train .continuation-arrow{background:var(--bg);color:#a5b69d;border-radius:4px;padding:0 2px;font-size:8px;position:absolute;top:-8px;right:-2px}.station-details-title{align-items:center;gap:8px;min-width:0;display:flex}.station-details-title svg{flex-shrink:0;width:30px;height:26px}.station-details-role{color:var(--accent);margin:0;font-size:12px}.station-details-timing{border-top:1px solid #304338;justify-content:space-between;align-items:center;padding:14px 0;font-size:12px;display:flex}.journey-visual.line-visual{height:auto;display:block}.line-visual .diagram-scroll{overflow:visible}@media (width<=350px){.line-legend{gap:2px;padding-left:9px;padding-right:9px;font-size:8px}.station-row{padding-right:10px}.station-name{font-size:11px}.minor-stop .station-name{font-size:10px}.commute-stop .station-name{font-size:12px}}:root{color:#e8efeb;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--bg:#0e1919;--surface:#162322;--muted:#8a9e97;--line:#293d36;--accent:#b7ef7b;--warning:#e7b369;background:#0a1212;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{margin:0}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}a{color:inherit;-webkit-tap-highlight-color:transparent;text-decoration:none}a:focus-visible,input:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button:disabled{cursor:default}.app-shell{background:var(--bg);flex-direction:column;max-width:660px;height:100dvh;margin:0 auto;display:flex;overflow:hidden}.toolbar{border-bottom:1px solid #24362f;flex-shrink:0;align-items:center;gap:10px;height:52px;padding:0 14px;display:flex}.line-badge{background:var(--accent);color:#172a19;letter-spacing:.02em;border-radius:6px;padding:5px 8px;font-size:12px;font-weight:850}.direction-button{text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:14px;padding:8px 0;font-size:13px;font-weight:650;display:flex}.direction-button>span{align-items:center;gap:9px;display:flex}.direction-button b{color:var(--muted);font-weight:400}.direction-button>svg{color:var(--muted)}.connection-button{color:var(--muted);background:0 0;border:0;align-items:center;gap:5px;padding:10px 0;font-size:10px;display:flex}.connection-button i{background:var(--warning);border-radius:50%;width:5px;height:5px;display:inline-block}.connection-button i.connected{background:var(--accent);box-shadow:0 0 7px #b7ef7b40}.workspace{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.route-caption{letter-spacing:.08em;color:var(--muted);flex-shrink:0;justify-content:space-between;align-items:center;gap:10px;padding:11px 16px 7px;font-size:9px;display:flex}.route-caption>span+span{letter-spacing:0}.train-strip{scrollbar-width:none;border-top:1px solid #20332a;flex-shrink:0;gap:6px;padding:8px 12px 7px;display:flex;overflow-x:auto}.train-strip::-webkit-scrollbar{display:none}.train-chip{color:#99ac9d;background:0 0;border:1px solid #30473a;border-radius:6px;flex-shrink:0;align-items:center;gap:5px;min-height:31px;padding:6px 8px;font-size:11px;font-weight:650;display:flex}.train-chip.active{color:var(--accent);background:#b7ef7b14;border-color:#b7ef7b70}.train-chip.old{border-style:dashed}.train-chip small{color:var(--warning);font-size:9px}.train-card{background:#192923;border:1px solid #314435;border-radius:10px;flex-shrink:0;margin:0 10px 8px;padding:10px 12px}.train-card-top{justify-content:space-between;align-items:center;gap:8px;display:flex}.train-identity{align-items:center;gap:7px;display:flex}.train-identity>svg{color:var(--accent)}.train-identity strong{letter-spacing:.02em;font-size:15px;font-weight:750}.train-identity>span{color:#a3b49f;font-size:9px}.delay-badge{color:#b9d3a7;white-space:nowrap;background:#a7d88a16;border-radius:4px;padding:4px 6px;font-size:9px}.delay-badge.late{color:var(--warning);background:#e7b3691a}.train-location{color:#c2cfc0;justify-content:space-between;gap:8px;margin:7px 0 9px;font-size:11px;display:flex}.train-location>span{color:#859f87;white-space:nowrap;font-size:8px}.train-location>span.warning{color:var(--warning)}.train-card-bottom{color:#8fa78f;border-top:1px solid #314234;justify-content:space-between;align-items:center;gap:8px;padding-top:8px;font-size:10px;display:flex}.train-card-bottom strong{color:#d6e5cf;font-weight:600}.train-card-bottom small{font-size:9px}.arrival-estimate{white-space:nowrap}.arrival-estimate strong{color:var(--accent);font-variant-numeric:tabular-nums;margin-left:4px;font-size:15px}.arrival-estimate small{margin-left:3px}.view-tabs{height:calc(54px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:#0d1816;border-top:1px solid #283a30;flex-shrink:0;justify-content:space-around;display:flex}.view-tabs button,.view-tabs a{color:#7f9484;background:0 0;border:0;flex:1;justify-content:center;align-items:center;gap:8px;font-size:11px;font-weight:600;display:flex;position:relative}.view-tabs button[aria-pressed=true],.view-tabs a[aria-current=page]{color:var(--accent)}.view-tabs button[aria-pressed=true]:before,.view-tabs a[aria-current=page]:before{content:"";background:var(--accent);border-radius:0 0 4px 4px;width:30px;height:2px;position:absolute;top:-1px}.loading-state{min-height:180px;color:var(--muted);text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:25px;font-size:12px;display:flex}.loading-state small{max-width:230px;font-size:10px;line-height:1.6}.no-trains{color:#cedbc7;align-items:center;gap:12px;padding:4px;font-size:12px;display:flex}.no-trains svg{color:var(--muted)}.no-trains small{color:var(--muted);margin-top:5px;font-size:10px;display:block}.departures-workspace{overflow:auto}.departures-heading{color:var(--muted);justify-content:space-between;padding:13px 15px 9px;font-size:10px;display:flex}.departure-row{text-align:left;background:0 0;border:0;border-bottom:1px solid #22362c;align-items:center;gap:14px;width:100%;padding:14px;display:flex}.departure-service{color:var(--accent);text-align:center;background:#a9dd751a;border:1px solid #4d6743;border-radius:5px;min-width:29px;padding:5px;font-size:11px;font-weight:750}.departure-service.regional{color:#e7c08b;background:#e0ad6e15;border-color:#80613e}.departure-row strong{font-variant-numeric:tabular-nums;font-size:17px;font-weight:600}.departure-row small{color:var(--muted);margin-top:4px;font-size:9px;display:block}.departure-arrow{text-align:center;color:#50675b;flex:1}.departure-arrival{text-align:right}.schedule-note{color:var(--muted);padding:12px 16px;font-size:10px;line-height:1.6}.connection-notice{color:var(--warning);background:#60401f55;flex-shrink:0;justify-content:space-between;align-items:center;padding:6px 12px;font-size:10px;display:flex}.connection-notice button{background:0 0;border:0;display:flex}.sheet-backdrop{z-index:30;background:#0009;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.details-sheet{color:inherit;background:#192824;border:1px solid #304338;border-radius:18px 18px 0 0;width:100%;max-width:660px;max-height:80dvh;margin:auto auto 0;padding:16px 20px 24px;overflow:auto;box-shadow:0 -12px 50px #0005}.details-sheet::backdrop{background:#0009}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.action-button{color:var(--accent);cursor:pointer;background:#22372b;border:1px solid #4c6550;border-radius:6px;padding:8px 10px;font-size:11px;display:inline-block}.view-actions{color:var(--accent);border-top:1px solid #20332a;flex-shrink:0;justify-content:space-between;gap:10px;padding:7px 14px;font-size:10px;display:flex}.day-tools{border-bottom:1px solid var(--line);color:var(--muted);justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;font-size:10px;display:flex}.day-tools input{color:#e8efeb;width:145px;font:inherit;background:#14231d;border:1px solid #3b5243;border-radius:6px;padding:9px 10px;font-size:12px}.departure-row:hover{background:#182a21}.departure-row .positive{color:var(--accent)}.journey-workspace{display:block;overflow:auto}.journey-heading{justify-content:space-between;align-items:center;gap:12px;padding:14px;font-size:12px;display:flex}.journey-heading a{color:var(--accent);font-size:11px}.journey-heading>span{color:var(--muted);font-size:10px}.journey-summary{justify-content:space-between;padding:0 14px 12px;font-size:12px;display:flex}.journey-summary small{color:var(--muted);margin-top:5px;font-size:9px;display:block}.journey-summary>span:last-child{text-align:right}.history-notice{color:#ceb88d;background:#69502c25;margin:0;padding:9px 14px;font-size:10px;line-height:1.6}.journey-view-tabs{gap:6px;padding:10px 14px;display:flex}.journey-view-tabs button{color:var(--muted);background:0 0;border:1px solid #3c5142;border-radius:5px;padding:7px 12px;font-size:11px}.journey-view-tabs button[aria-pressed=true]{color:var(--accent);background:#b7ef7b12;border-color:#a0ca7580}.journey-visual{flex-direction:column;height:540px;display:flex}.journey-visual .geographic-map{min-height:300px}.signal-row{border-bottom:1px solid #22362c;align-items:center;gap:16px;padding:10px 14px;font-size:11px;display:flex}.signal-row small{color:var(--muted);margin-top:4px;font-size:9px;display:block}.signal-row>span:last-child{color:var(--muted);margin-left:auto;font-size:9px}.sheet-heading{justify-content:space-between;align-items:center;padding-bottom:12px;font-size:15px;display:flex}.icon-button{background:0 0;border:0;place-items:center;padding:6px;display:grid}.feed-row{text-transform:capitalize;border-bottom:1px solid #304338;justify-content:space-between;gap:10px;padding:11px 0;font-size:11px;display:flex}.positive{color:var(--accent)}.warning{color:var(--warning)}.details-note{color:var(--muted);margin-top:16px;font-size:10px;line-height:1.7}.geographic-map{flex:1;min-height:0;position:relative}.geographic-map>.map-canvas{background:#dce3d4;position:absolute;inset:0}.map-fit{color:#263b2a;background:#fff;border-radius:5px;width:30px;height:30px;position:absolute;top:85px;right:10px;box-shadow:0 1px 5px #0004}.map-error{color:#654d2c;background:#fff6dcee;border-radius:5px;padding:8px;font-size:10px;line-height:1.5;position:absolute;top:5px;left:8px;right:50px}.map-station{background:0 0;border:0;width:12px;height:12px;padding:0;display:block;overflow:visible}.map-station-dot{background:#fff;border:2px solid #4d7056;border-radius:50%;width:11px;height:11px;display:block;box-shadow:0 0 0 1px #fff}.map-station.endpoint .map-station-dot{border:3px solid #21734e;width:15px;height:15px}.map-station-name{white-space:nowrap;color:#243b2e;background:#fffdf7dd;border-radius:3px;padding:2px 4px;font-size:10px;font-weight:600;display:none;position:absolute;top:-1px;left:17px;box-shadow:0 1px 3px #0002}.map-station.endpoint .map-station-name,[data-detailed=true] .map-station-name{display:block}.map-train{color:#fff;background:#3f6654;border:2px solid #fff;border-radius:7px;padding:5px 7px;font-size:10px;font-weight:750;box-shadow:0 2px 6px #0005}.map-train.selected{color:#18351d;z-index:4;background:#b7ef7b;border:2px solid #235b37}.map-train.old{color:#fff;background:#ae8453;border-style:dashed}.map-train.selected:after{content:"";border-top:5px solid #235b37;border-left:4px solid #0000;border-right:4px solid #0000;position:absolute;bottom:-6px;left:calc(50% - 4px)}.maplibregl-popup-content{color:#18321f;font-size:12px}.maplibregl-ctrl-attrib{font-size:10px!important}.maplibregl-canvas:focus{outline:none}@media (width>=700px){.app-shell{border-left:1px solid #263a2f;border-right:1px solid #263a2f}.toolbar{height:55px}.train-card{margin:0 14px 10px}.train-strip{padding-left:16px}.train-card-bottom{font-size:11px}}@media (width<=350px){.toolbar{gap:7px;padding:0 10px}.direction-button{gap:9px;font-size:12px}.arrival-estimate strong{font-size:13px}.train-card{padding:10px}.train-card-bottom{font-size:9px}}@media (prefers-reduced-motion:reduce){*{transition:none!important}}.service-badge{letter-spacing:.02em;white-space:nowrap;border-radius:3px;padding:2px 4px;font-size:8px;font-weight:800;line-height:1.2;display:inline-block}.service-c6{color:#b7ef7b;background:#32572a}.service-regional{color:#ffd59a;background:#63462b}.service-express{color:#bbe6ff;background:#244e71}.train-pattern{color:var(--muted);margin-top:3px;font-size:8px;display:block}.map-train{align-items:center;gap:4px;display:flex}.map-train .service-badge{font-size:7px}.map-station.commute-station .map-station-dot{background:#d3ff9e;border-color:#198552;width:14px;height:14px}.map-station.commute-station .map-station-name{display:block}.map-geometry-note{color:#354b3c;background:#ffffffe6;border-radius:3px;padding:4px 6px;font-size:8px;position:absolute;bottom:28px;left:6px}.stop-timing{align-items:center;gap:5px;display:flex}.stop-clock{font-variant-numeric:tabular-nums;flex-direction:column;align-items:flex-end;gap:2px;display:flex}.stop-clock .stop-plan{color:#7e9288;font-size:7px}.stop-clock>span{color:#d6e3d4;font-size:10px}.stop-clock>span>small{color:#9cae9d;font-size:7px}.stop-delay{text-align:center;color:#b1bfae;background:#899c8812;border-radius:3px;min-width:35px;padding:4px 3px;font-size:8px;font-weight:600}.punctuality-on_time .stop-delay,.punctuality-early .stop-delay{color:var(--accent);background:#b7ef7b18}.punctuality-late .stop-delay{color:var(--warning);background:#e7b36920}.punctuality-uncertain .stop-delay{color:#d8bc8a;border:1px dashed #b99965}.journey-heading strong{align-items:center;gap:6px;display:flex}.journey-endpoints{color:#d2dfd0;padding:0 14px 12px;font-size:11px}.journey-endpoints>span{color:var(--muted);margin-top:5px;font-size:9px;display:block}.journey-view-tabs .debug-tab{color:var(--muted);border-color:#33473b;margin-left:auto}
