:root{--background:#fbf8eb;--foreground:#1f2730;--panel:#fffdf5e0;--panel-strong:#fffdf5;--stroke:#24303a29;--shadow:0 20px 60px #1f273029}*{box-sizing:border-box}html,body{background:var(--background);width:100%;height:100%;color:var(--foreground);margin:0;font-family:Arial,Helvetica,sans-serif;overflow:hidden}button{font:inherit}.appShell{background:var(--background);width:100vw;height:100vh;min-height:620px;position:relative;overflow:hidden}.appShell.dark{--background:#101419;--foreground:#f6f1df;--panel:#141a21e6;--panel-strong:#141a21;--stroke:#f6f1df29;--shadow:0 22px 70px #0000005c}.transitCanvas{touch-action:none;cursor:grab;width:100%;height:100%;position:absolute;inset:0}.transitCanvas:active{cursor:grabbing}.toolStack,.detailPanel,.lineDock,.routeSidebar,.stationInfoLauncher,.stationInfoPanel,.networkStatusPanel{-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:var(--panel);border:1px solid var(--stroke);box-shadow:var(--shadow);pointer-events:auto}.routeSidebar{z-index:5;border-radius:8px;width:min(430px,100vw - 36px);padding:14px;position:absolute;top:96px;bottom:96px;left:18px;overflow:auto}.routeSidebar.collapsed{width:48px;height:48px;padding:5px;bottom:auto;overflow:hidden}.routeSidebar.collapsed.withStationInfo{left:72px}.routeSidebarToggle{color:#25303b;cursor:pointer;background:#ffffffc7;border:1px solid #24303a1f;border-radius:8px;place-items:center;width:36px;height:36px;display:grid}.routeSidebar.open>.routeSidebarToggle{position:absolute;top:9px;right:9px}.stationInfoLauncher{z-index:6;color:#25303b;cursor:pointer;border-radius:8px;place-items:center;width:48px;height:48px;display:grid;position:absolute;top:96px;left:18px}.stationInfoPanel{z-index:6;border-radius:8px;gap:12px;width:min(380px,100vw - 96px);max-height:calc(100vh - 192px);padding:14px;display:grid;position:absolute;top:96px;left:18px;overflow:auto}.stationInfoClose{z-index:2;color:#25303b;cursor:pointer;background:#ffffffc2;border:1px solid #24303a1f;border-radius:8px;place-items:center;width:32px;height:32px;display:grid;position:absolute;top:10px;right:10px}.stationHero{background:linear-gradient(135deg,#fffdf5,#dbe9e7);border-radius:8px;min-height:138px;position:relative;overflow:hidden}.stationHero.rail{background:linear-gradient(135deg,#f7f0de,#cfd9df)}.stationHero.central,.stationHero.place{background:linear-gradient(135deg,#fff4c7,#cbe7e0)}.stationHero.business{background:linear-gradient(135deg,#d7edf8,#e9e4cf)}.stationHero.monument,.stationHero.heritage{background:linear-gradient(135deg,#f6dfc8,#d7e7dc)}.stationHeroImage{object-fit:cover;filter:saturate(.95)contrast(1.02);width:100%;height:138px;display:block}.stationInfoHeader{color:#25303b;align-items:center;gap:9px;display:flex}.stationInfoHeader div{gap:2px;min-width:0;display:grid}.stationInfoHeader strong{font-size:18px;font-weight:950}.stationInfoHeader span{color:#25303ba6;font-size:12px;font-weight:800}.stationInfoMetrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:7px;display:grid}.stationInfoMetrics div{background:#ffffff9e;border:1px solid #24303a1a;border-radius:8px;gap:4px;min-height:58px;padding:9px;display:grid}.stationInfoMetrics span,.stationHistory span{color:#25303b94;text-transform:uppercase;font-size:11px;font-weight:850}.stationInfoMetrics strong{color:#25303b;font-size:15px;font-weight:950}.stationOpeningList{gap:6px;display:grid}.stationOpeningList a{color:#25303b;background:#ffffff94;border:1px solid #24303a1a;border-radius:8px;justify-content:space-between;align-items:center;gap:10px;min-height:34px;padding:7px 9px;text-decoration:none;display:flex}.stationOpeningList span{color:#25303b9e;font-size:11px;font-weight:850}.stationOpeningList strong{font-size:13px;font-weight:950}.stationDataNotice{color:#25303bad;background:#ffffff80;border:1px solid #24303a1a;border-radius:8px;margin:0;padding:8px 9px;font-size:12px;font-weight:750}.stationLineList{flex-wrap:wrap;gap:5px;display:flex}.stationHistory{gap:6px;display:grid}.stationHistory p{color:#25303bc2;margin:0;font-size:13px;font-weight:720;line-height:1.42}.stationSourceLink{color:#25303b;background:#ffffffa3;border:1px solid #24303a1f;border-radius:8px;justify-self:start;align-items:center;min-height:30px;padding:0 9px;font-size:12px;font-weight:850;text-decoration:none;display:inline-flex}.routeForm{background:#fffdf570;border:1px solid #24303a1a;border-radius:8px;gap:12px;padding:12px;display:grid}.stationSearchForm{background:#fffdf580;border:1px solid #24303a1a;border-radius:8px;gap:10px;margin-bottom:12px;padding:12px;display:grid}.favoriteGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;display:grid}.favoriteGrid button,.routeOptions label{color:#25303b;background:#ffffffa3;border:1px solid #24303a1f;border-radius:8px;align-items:center;gap:7px;min-height:32px;font-size:12px;font-weight:800;display:flex}.favoriteGrid button{cursor:pointer;justify-content:center}.favoriteGrid button:disabled{opacity:.45;cursor:not-allowed}.routeOptions{gap:6px;display:grid}.savedChips{flex-wrap:wrap;gap:6px;display:flex}.savedChips button{color:#25303b;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;background:#ffffffa8;border:1px solid #24303a1f;border-radius:999px;align-items:center;gap:5px;max-width:100%;min-height:28px;padding:0 8px;font-size:11px;font-weight:850;display:inline-flex;overflow:hidden}.stationWaitCard{color:#25303b;background:#31a8ff1a;border:1px solid #24303a1a;border-radius:8px;align-items:center;gap:7px;min-height:34px;padding:8px 9px;font-size:12px;font-weight:850;display:flex}.stationWaitCard strong{margin-left:auto;font-size:15px}.routeAvoidPanel{background:#fffdf570;border:1px solid #24303a1a;border-radius:8px;gap:8px;padding:10px;display:grid}.routeSectionTitle{color:#25303b;font-size:12px;font-weight:900}.avoidLineGrid{flex-wrap:wrap;gap:5px;max-height:92px;display:flex;overflow:auto}.avoidLineButton{cursor:pointer;background:#ffffffa8;border:1px solid #24303a1f;border-radius:8px;place-items:center;min-width:30px;height:28px;padding:0 5px;display:grid}.avoidLineButton.active{background:#25303b;border-color:#25303b}.avoidLineButton.active .lineBadge{box-shadow:0 0 0 1px #fffdf5b3}.routeOptions label{cursor:pointer;padding:0 9px}.routeOptions input{accent-color:#25303b}.routeFormHeader,.routeStepTitle,.routeTotal,.routeEndpoint{align-items:center;gap:8px;display:flex}.routeFormHeader{color:#25303b;min-height:32px;padding-right:42px;font-weight:800}.routeClearButton,.routeSwapButton{color:#25303b;cursor:pointer;background:#ffffffbd;border:1px solid #24303a1f;border-radius:8px;place-items:center;display:grid}.routeClearButton{width:30px;height:30px;margin-left:auto}.routeClearButton.inline{justify-self:start;width:auto;height:30px;margin-left:0;padding:0 10px;font-size:12px;font-weight:850}.routeSwapButton{justify-self:center;width:34px;height:30px}.routeField{color:#1f2730b8;gap:5px;font-size:12px;font-weight:800;display:grid}.routeField input{color:#25303b;background:#ffffffc7;border:1px solid #24303a29;border-radius:8px;outline:none;width:100%;min-height:38px;padding:0 10px;font-size:14px}.routeField input:focus{border-color:#31a8ffc7;box-shadow:0 0 0 3px #31a8ff29}.stationPicker{z-index:1;position:relative}.stationPicker:focus-within{z-index:30}.stationPickerInput{padding-right:34px}.stationPicker:after{content:"";pointer-events:none;border-bottom:2px solid #25303b7a;border-right:2px solid #25303b7a;width:7px;height:7px;position:absolute;bottom:13px;right:12px;transform:rotate(45deg)}.stationOptionMenu{z-index:40;color:#25303b;background:#fffdf5;border:1px solid #24303a29;border-radius:8px;max-height:280px;padding:6px;position:absolute;top:calc(100% + 7px);left:0;right:0;overflow-y:auto;box-shadow:0 18px 50px #1f273033}.stationOption{color:#25303b;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:7px;gap:5px;width:100%;min-height:54px;padding:8px 9px;display:grid}.stationOption:hover,.stationOption.active{background:#31a8ff1f}.stationOptionName{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:850;line-height:1.2;display:block;overflow:hidden}.stationOptionLines{flex-wrap:wrap;gap:4px;min-height:20px;display:flex}.stationOptionLines .lineBadge{border-radius:5px;min-width:22px;height:20px;padding:0 5px;font-size:10px}.stationOptionMore{color:#25303bc7;background:#24303a1a;border-radius:999px;place-items:center;min-width:22px;height:20px;padding:0 5px;font-size:10px;font-weight:850;display:inline-grid}.stationOptionEmpty{color:#25303b9e;padding:14px 10px;font-size:12px;font-weight:750}.routeSubmitButton{color:#fffdf5;cursor:pointer;background:#25303b;border:0;border-radius:8px;min-height:38px;font-weight:800}.routeError{color:#a13a2b;margin:0;font-size:13px;font-weight:700}.routeResult{border-top:1px solid #24303a21;margin-top:14px;padding-top:12px}.routeTotal{color:#25303b;margin-bottom:12px;font-size:20px;font-weight:900}.routeModeTags{flex-wrap:wrap;gap:6px;margin:-4px 0 10px;display:flex}.routeModeTags span{color:#1b6696;background:#31a8ff21;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:850}.routeVariantList{gap:7px;margin-bottom:12px;display:grid}.routeVariantList button{color:#25303b;cursor:pointer;text-align:left;background:#ffffffa3;border:1px solid #24303a1f;border-radius:8px;gap:3px;padding:9px 10px;display:grid}.routeVariantList button.active{background:#31a8ff1f;border-color:#31a8ff7a}.routeVariantList strong{font-size:13px;font-weight:900}.routeVariantList span,.routeVariantList small{color:#25303ba8;font-size:11px;font-weight:750}.routeExportButton{color:#25303b;cursor:pointer;background:#ffffffb8;border:1px solid #24303a1f;border-radius:8px;justify-content:center;align-items:center;gap:6px;min-height:32px;margin-bottom:12px;padding:0 10px;font-size:12px;font-weight:850;display:inline-flex}.routeServiceList{gap:6px;margin-bottom:12px;display:grid}.routeServiceStatus{color:#1f2730b8;align-items:center;gap:7px;min-width:0;font-size:12px;font-weight:750;display:flex}.routeServiceStatus span:last-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.routeServiceStatus.ok svg{color:#24714a}.routeServiceStatus.warning svg{color:#a96800}.routeEndpoint{color:#25303b;min-height:34px;font-size:14px}.routeEndpoint.arrival{margin-top:2px}.routeTimeline{gap:0;display:grid}.routeStep{grid-template-columns:54px 22px 1fr;min-height:96px;display:grid}.routeStepTime{color:#25303b;text-align:right;padding-top:9px;font-size:13px;font-weight:800}.routeStepTrack{min-height:96px;position:relative}.routeStepTrack:before{background:var(--step-color);content:"";border-radius:999px;width:6px;position:absolute;top:7px;bottom:7px;left:9px}.routeStep.transfer .routeStepTrack:before{background:0 0;border-left:5px dotted #31a8ff;width:0}.routeStepTrack:after{content:"";background:#fffdf5;border:2px solid #25303b;border-radius:50%;width:12px;height:12px;position:absolute;top:6px;left:5px}.routeStepBody{border-bottom:1px solid #24303a1a;min-width:0;padding:7px 0 14px 10px}.routeStepTitle{color:#25303b;min-height:30px;font-size:15px;font-weight:850}.routeStepBody strong{color:#25303b;font-size:15px;line-height:1.25;display:block}.routeStepBody p{color:#1f2730a8;margin:7px 0 0;font-size:13px}.routeStepBody .routeStepMeta{color:#1f273094;margin-top:4px;font-size:12px}.toolStack{z-index:5;border-radius:8px;gap:8px;padding:8px;display:grid;position:absolute;top:96px;right:18px}.networkStatusPanel{z-index:5;color:#25303b;border-radius:8px;gap:10px;width:min(360px,100vw - 170px);max-height:calc(100vh - 210px);padding:12px;display:grid;position:absolute;top:96px;right:76px;overflow:auto}.networkStatusHeader,.trackedLineHeader,.lineIncidentSummary{align-items:center;gap:8px;display:flex}.networkStatusHeader{font-size:13px;font-weight:900}.networkModeTags{flex-wrap:wrap;gap:6px;display:flex}.networkModeTags span{color:#1b6696;background:#31a8ff21;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:850}.trackedLineHeader strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.trackedLineHeader button{color:#25303b;cursor:pointer;background:#ffffffb3;border:1px solid #24303a1f;border-radius:999px;align-items:center;gap:5px;min-height:28px;font-size:11px;font-weight:850;display:inline-flex}.lineMetricGrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;display:grid}.lineMetricGrid div{background:#ffffff85;border:1px solid #24303a1a;border-radius:8px;gap:2px;min-height:50px;padding:8px;display:grid}.lineMetricGrid span,.networkHint,.incidentHistory,.favoriteAlerts span{color:#1f2730a3;font-size:11px;font-weight:750}.lineMetricGrid strong{font-size:16px;font-weight:900}.lineIncidentSummary{color:#1f2730bd;font-size:12px;font-weight:800}.lineIncidentSummary.warning svg{color:#a96800}.incidentHistory{gap:4px;margin:0;padding-left:18px;display:grid}.favoriteAlerts{border-top:1px solid #24303a1a;gap:4px;padding-top:8px;display:grid}.favoriteAlerts strong{font-size:12px}.iconButton{color:#25303b;cursor:pointer;background:#ffffffb8;border:1px solid #24303a1f;border-radius:8px;place-items:center;width:38px;height:38px;padding:0;display:grid}.iconButton:hover,.iconButton.active{color:#fffdf5;background:#25303b}.lineBadge{border-radius:8px;place-items:center;min-width:34px;height:34px;padding:0 8px;font-weight:800;line-height:1;display:inline-grid}.lineBadge.rer,.lineBadge.train{border-radius:7px}.lineBadge.compact{min-width:30px;height:30px;font-size:13px}.detailPanel{z-index:6;border-radius:8px;flex-direction:column;width:auto;max-height:min(560px,100vh - 210px);display:flex;position:absolute;bottom:18px;left:18px;right:18px;overflow:hidden}.detailCollapseButton{z-index:9;color:#25303b;cursor:pointer;background:#fffdf5eb;border:1px solid #24303a24;border-radius:8px;place-items:center;width:32px;height:32px;display:grid;position:absolute;top:10px;right:10px;box-shadow:0 8px 24px #1f27301f}.detailCollapseButton:hover{color:#fffdf5;background:#25303b}.detailPanel.collapsed{width:auto;min-width:188px;min-height:52px;max-height:none;padding:8px 48px 8px 10px;left:50%;right:auto;overflow:visible;transform:translate(-50%)}.detailPanel.collapsed .detailCollapseButton{top:50%;right:8px;transform:translateY(-50%)}.detailCollapsedContent{color:#25303b;white-space:nowrap;align-items:center;gap:9px;font-size:13px;font-weight:900;display:flex}.lineRealtimeHeader{border-bottom:1px solid #24303a1a;justify-content:space-between;align-items:center;gap:12px;padding:12px 54px 10px 12px;display:flex}.lineRealtimeTitle{align-items:center;gap:10px;min-width:0;display:flex}.lineRealtimeTitle div{gap:2px;min-width:0;display:grid}.lineRealtimeTitle strong{color:#25303b;text-overflow:ellipsis;white-space:nowrap;font-size:14px;font-weight:900;overflow:hidden}.lineRealtimeTitle span,.lineRealtimeCount span,.lineTrainCard span,.lineTrainCard small,.detailCollapsedContent small{color:#1f27309e;font-size:11px;font-weight:760}.lineRealtimeCount{flex:none;justify-items:end;gap:1px;display:grid}.lineRealtimeCount strong{color:#25303b;font-size:20px;font-weight:950;line-height:1}.lineTrainStrip{border-bottom:1px solid #24303a14;gap:8px;padding:10px 12px;display:flex;overflow-x:auto}.lineTrainStrip p{color:#1f2730a3;margin:0;font-size:12px;font-weight:780}.lineTrainCard{border:1px solid #24303a1a;border-left:4px solid var(--line-color);background:#ffffff8a;border-radius:8px;flex:0 0 190px;gap:3px;min-height:62px;padding:8px 9px;display:grid}.lineTrainCard strong{color:#25303b;font-size:12px;font-weight:900}.lineTrainCard.realtime{background:#31a8ff1c}.schematicTrainMarker{pointer-events:none}.schematicTrainMarker circle{fill:var(--line-color);stroke:#fffdf5;stroke-width:4px;filter:drop-shadow(0 4px 8px #1f27303d)}.schematicTrainMarker path{fill:#fffdf5}.schematicViewport{background:linear-gradient(90deg,#fffdf5f2,#fffdf5b8),repeating-linear-gradient(90deg,#24303a0f 0 1px,#0000 1px 96px);flex:none;min-height:0;max-height:min(560px,100vh - 210px);padding:12px 16px;position:relative;overflow:auto}.schematicCanvas{margin:0 auto;display:block}.schematicZoomControls{z-index:2;pointer-events:auto;justify-content:flex-end;gap:5px;width:max-content;margin:0 0 -36px auto;display:flex;position:sticky;top:0;right:0}.schematicZoomButton{color:#25303b;cursor:pointer;background:#fffdf5e6;border:1px solid #24303a24;border-radius:8px;place-items:center;width:30px;height:30px;display:grid}.lineSchematic{width:100%;height:100%;display:block}.schematicRail{fill:none;stroke-width:13px;stroke-linecap:round;stroke-linejoin:round}.schematicStation{cursor:pointer;outline:none}.schematicStation:focus-visible .schematicDot,.schematicStation.selected .schematicDot{stroke-width:4px}.schematicStem{stroke:#1f27308a;stroke-width:1.4px}.schematicDot{fill:#fffdf5;stroke:#25303b;stroke-width:2px}.schematicStation.transfer .schematicDot{stroke:var(--line-color);stroke-width:3px}.schematicLabel{fill:#25303b;letter-spacing:0;paint-order:stroke;pointer-events:none;stroke:#fffdf5db;stroke-width:4px;stroke-linejoin:round;font-size:12px;font-weight:800}.lineDock{z-index:5;border-radius:8px;align-items:center;gap:10px;min-height:66px;padding:10px;display:flex;position:absolute;top:18px;left:18px;right:18px}.lineGroup{align-items:center;gap:6px;min-width:0;display:flex;overflow-x:auto}.rerGroup,.trainGroup{border-left:1px solid #24303a24;padding-left:10px}.lineButton,.allLinesButton{cursor:pointer;background:#ffffffb8;border:1px solid #24303a1f;border-radius:8px;flex:none;min-height:42px}.lineButton{place-items:center;width:44px;padding:4px;display:grid}.allLinesButton{color:#25303b;padding:0 14px;font-weight:800}.lineButton:hover,.lineButton.active,.allLinesButton:hover,.allLinesButton.active{background:#fffdf5;border-color:#25303b}.appShell.dark .stationInfoLauncher,.appShell.dark .stationInfoClose,.appShell.dark .stationInfoMetrics div,.appShell.dark .stationOpeningList a,.appShell.dark .stationDataNotice,.appShell.dark .stationSourceLink{color:#f6f1df;background:#f6f1df14;border-color:#f6f1df26}.appShell.dark .stationInfoHeader,.appShell.dark .stationInfoHeader strong,.appShell.dark .stationInfoMetrics strong{color:#f6f1df}.appShell.dark .stationInfoHeader span,.appShell.dark .stationInfoMetrics span,.appShell.dark .stationOpeningList span,.appShell.dark .stationHistory span,.appShell.dark .stationHistory p,.appShell.dark .stationDataNotice{color:#f6f1dfad}.appShell.dark .stationHero{color:#f6f1df;background:linear-gradient(135deg,#1f2933,#364238)}.appShell.dark .lineRealtimeHeader,.appShell.dark .lineTrainStrip{border-color:#f6f1df1f}.appShell.dark .lineRealtimeTitle strong,.appShell.dark .lineRealtimeCount strong,.appShell.dark .lineTrainCard strong{color:#f6f1df}.appShell.dark .lineRealtimeTitle span,.appShell.dark .lineRealtimeCount span,.appShell.dark .lineTrainCard span,.appShell.dark .lineTrainCard small,.appShell.dark .detailCollapsedContent small,.appShell.dark .lineTrainStrip p{color:#f6f1dfa8}.appShell.dark .lineTrainCard{background:#f6f1df14;border-color:#f6f1df24}.appShell.dark .lineTrainCard.realtime{background:#31a8ff29}.appShell.dark .schematicTrainMarker circle{stroke:#101419}.appShell.dark .detailCollapseButton{color:#f6f1df;background:#f6f1df1a;border-color:#f6f1df26}.appShell.dark .detailCollapseButton:hover{color:#101419;background:#f6f1df}.appShell.dark .detailCollapsedContent{color:#f6f1df}.appShell.dark .stationSearchForm,.appShell.dark .routeForm{background:#141a2180}.appShell.dark .stationOptionMenu,.appShell.dark .stationOption,.appShell.dark .stationOptionEmpty{color:#25303b;background:#fffdf5}.appShell.dark .stationOption:hover,.appShell.dark .stationOption.active{background:#31a8ff1f}.appShell.dark .routeFormHeader,.appShell.dark .routeStepTitle,.appShell.dark .routeStepBody strong,.appShell.dark .routeEndpoint,.appShell.dark .routeTotal,.appShell.dark .stationWaitCard,.appShell.dark .routeSectionTitle,.appShell.dark .routeVariantList strong,.appShell.dark .routeExportButton,.appShell.dark .routeStepTime,.appShell.dark .allLinesButton{color:#f6f1df}.appShell.dark .routeField,.appShell.dark .routeStepBody p,.appShell.dark .routeStepBody .routeStepMeta,.appShell.dark .routeVariantList span,.appShell.dark .routeVariantList small,.appShell.dark .routeServiceStatus{color:#f6f1dfad}.appShell.dark .routeField input,.appShell.dark .routeSidebarToggle,.appShell.dark .routeClearButton,.appShell.dark .routeSwapButton,.appShell.dark .favoriteGrid button,.appShell.dark .savedChips button,.appShell.dark .stationWaitCard,.appShell.dark .routeVariantList button,.appShell.dark .routeExportButton,.appShell.dark .avoidLineButton,.appShell.dark .trackedLineHeader button,.appShell.dark .lineMetricGrid div,.appShell.dark .routeOptions label,.appShell.dark .iconButton,.appShell.dark .lineButton,.appShell.dark .allLinesButton,.appShell.dark .schematicZoomButton{color:#f6f1df;background:#f6f1df14;border-color:#f6f1df26}.appShell.dark .routeSubmitButton,.appShell.dark .iconButton:hover,.appShell.dark .iconButton.active{color:#101419;background:#f6f1df}.appShell.dark .avoidLineButton.active{background:#f6f1df}.appShell.dark .routeResult,.appShell.dark .stationSearchForm,.appShell.dark .routeAvoidPanel,.appShell.dark .routeStepBody,.appShell.dark .rerGroup,.appShell.dark .trainGroup{border-color:#f6f1df21}.appShell.dark .routeStepTrack:after{background:#101419;border-color:#f6f1df}.appShell.dark .routeModeTags span,.appShell.dark .networkModeTags span{color:#8ed0ff;background:#31a8ff33}.appShell.dark .networkStatusPanel,.appShell.dark .trackedLineHeader button,.appShell.dark .lineMetricGrid strong,.appShell.dark .favoriteAlerts strong{color:#f6f1df}.appShell.dark .lineMetricGrid span,.appShell.dark .networkHint,.appShell.dark .incidentHistory,.appShell.dark .favoriteAlerts span,.appShell.dark .lineIncidentSummary{color:#f6f1dfad}.appShell.dark .schematicViewport{background:linear-gradient(90deg,#141a21f5,#141a21c7),repeating-linear-gradient(90deg,#f6f1df0f 0 1px,#0000 1px 96px)}.appShell.dark .schematicDot{fill:#101419;stroke:#f6f1df}.appShell.dark .schematicStem{stroke:#f6f1df6b}.appShell.dark .schematicLabel{fill:#f6f1df;stroke:#101419e6}@media (max-width:760px){.appShell{min-height:100vh}.toolStack{top:86px;right:10px}.networkStatusPanel{width:auto;max-height:34vh;top:144px;left:10px;right:58px}.routeSidebar{width:auto;max-height:48vh;inset:86px 58px auto 10px}.routeSidebar.collapsed{width:48px;max-height:none;right:auto}.routeSidebar.collapsed.withStationInfo{left:64px}.stationInfoLauncher{top:86px;left:10px}.stationInfoPanel{width:auto;max-height:calc(100vh - 150px);top:140px;left:10px;right:10px}.stationInfoMetrics{grid-template-columns:1fr}.detailPanel{width:auto;max-height:46vh;inset:auto 10px 10px}.lineRealtimeHeader{padding:10px 48px 8px 10px}.lineTrainCard{flex-basis:168px}.detailPanel.collapsed{max-width:calc(100vw - 20px);bottom:10px;left:50%;right:auto}.schematicViewport{max-height:46vh}.lineDock{min-height:66px;top:10px;left:10px;right:10px}}@supports (height:100dvh){.appShell{height:100dvh}}html,body{overscroll-behavior:none;-webkit-text-size-adjust:100%}.lineDock,.lineGroup,.lineTrainStrip,.toolStack,.schematicViewport,.routeSidebar,.stationInfoPanel,.networkStatusPanel{scrollbar-width:thin;overscroll-behavior:contain}.lineDock,.lineTrainStrip,.toolStack{-webkit-overflow-scrolling:touch}@media (max-width:1180px){.routeSidebar{width:min(380px,50vw - 26px)}.networkStatusPanel{width:min(320px,50vw - 84px)}.detailPanel{max-height:min(520px,100dvh - 192px)}}@media (max-width:920px){.lineDock{gap:8px;min-height:62px;overflow:auto hidden}.lineGroup{flex:none}.routeSidebar.open{z-index:10;width:min(360px,100vw - 96px)}.networkStatusPanel{max-height:min(300px,100dvh - 194px)}}@media (max-width:760px){:root{--mobile-gap:8px;--mobile-safe-top:env(safe-area-inset-top,0px);--mobile-safe-bottom:env(safe-area-inset-bottom,0px)}body{position:fixed;inset:0}.appShell{height:100svh;min-height:0}@supports (height:100dvh){.appShell{height:100dvh}}.lineDock{top:calc(var(--mobile-safe-top) + var(--mobile-gap));left:var(--mobile-gap);right:var(--mobile-gap);scroll-snap-type:x proximity;gap:7px;min-height:56px;padding:7px;overflow:auto hidden}.lineDock::-webkit-scrollbar{display:none}.lineGroup::-webkit-scrollbar{display:none}.lineTrainStrip::-webkit-scrollbar{display:none}.toolStack::-webkit-scrollbar{display:none}.lineGroup{scroll-snap-align:start;gap:5px}.rerGroup,.trainGroup{padding-left:7px}.lineButton,.allLinesButton{min-height:40px}.lineButton{width:40px;padding:4px}.allLinesButton{padding:0 10px;font-size:13px}.lineBadge.compact{border-radius:7px;min-width:28px;height:28px;padding:0 6px;font-size:12px}.toolStack{top:calc(var(--mobile-safe-top) + 74px);right:var(--mobile-gap);bottom:calc(var(--mobile-safe-bottom) + 12px);align-content:start;gap:6px;max-height:none;padding:6px;display:grid;overflow-y:auto}.appShell.hasLineDetail .toolStack,.appShell.hasStationPanel .toolStack,.appShell.hasRoutePlan .toolStack{bottom:calc(var(--mobile-safe-bottom) + 54dvh + 14px)}.iconButton{border-radius:8px;width:38px;height:38px}.networkStatusPanel{top:calc(var(--mobile-safe-top) + 74px);left:var(--mobile-gap);z-index:4;gap:7px;width:auto;max-height:126px;padding:9px;right:58px;overflow:hidden}.networkStatusPanel .lineMetricGrid,.networkStatusPanel .incidentHistory,.networkStatusPanel .favoriteAlerts,.networkStatusPanel .networkHint{display:none}.networkModeTags span{padding:3px 7px;font-size:10px}.trackedLineHeader button{min-width:38px;padding:0 8px}.routeSidebar.collapsed{top:calc(var(--mobile-safe-top) + 74px);left:var(--mobile-gap);z-index:8;width:48px;height:48px;padding:5px;right:auto}.routeSidebar.collapsed.withStationInfo{left:64px}.routeSidebar.open{top:auto;left:var(--mobile-gap);right:64px;bottom:max(var(--mobile-gap), var(--mobile-safe-bottom));z-index:12;border-radius:8px 8px 0 0;width:auto;max-height:min(76dvh,640px);padding:12px}.routeSidebar.open>.routeSidebarToggle{top:8px;right:8px}.stationOptionMenu{max-height:min(260px,38dvh)}.stationInfoLauncher{top:calc(var(--mobile-safe-top) + 74px);left:var(--mobile-gap);z-index:9}.stationInfoPanel{top:auto;left:var(--mobile-gap);right:var(--mobile-gap);bottom:max(var(--mobile-gap), var(--mobile-safe-bottom));z-index:13;border-radius:8px 8px 0 0;width:auto;max-height:min(78dvh,680px);padding:12px}.stationHero,.stationHeroImage{height:116px;min-height:116px}.stationInfoMetrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.stationInfoMetrics div{min-height:54px;padding:7px}.stationInfoMetrics strong{font-size:13px}.detailPanel{z-index:11;border-bottom:0;border-left:0;border-right:0;border-radius:8px 8px 0 0;width:auto;max-height:min(56dvh,440px);inset:auto 0 0}.detailPanel.collapsed{left:50%;right:auto;bottom:max(var(--mobile-gap), var(--mobile-safe-bottom));border:1px solid var(--stroke);border-radius:8px;min-width:min(220px,100vw - 16px);max-width:calc(100vw - 16px)}.lineRealtimeHeader{gap:8px;padding:10px 48px 9px 10px}.lineRealtimeTitle strong{font-size:13px}.lineRealtimeCount strong{font-size:18px}.lineTrainStrip{scroll-snap-type:x proximity;gap:7px;padding:9px 10px}.lineTrainCard{scroll-snap-align:start;flex-basis:min(190px,72vw);min-height:60px}.schematicViewport{max-height:calc(min(56dvh,440px) - 118px);padding:10px 10px calc(14px + var(--mobile-safe-bottom))}.schematicZoomControls{margin-bottom:-32px}}@media (max-width:420px){.networkStatusPanel{max-height:104px}.networkModeTags,.lineIncidentSummary{display:none}.routeForm,.stationSearchForm{padding:10px}.routeStep{grid-template-columns:42px 20px 1fr}.routeStepTime{font-size:12px}.stationInfoMetrics{grid-template-columns:1fr}.lineRealtimeTitle span,.lineTrainCard span,.lineTrainCard small{font-size:10px}}@media (max-width:920px) and (max-height:560px) and (orientation:landscape){.lineDock{width:min(374px,50vw - 28px);right:auto}.networkStatusPanel{display:none}.toolStack{top:calc(var(--mobile-safe-top) + 8px);bottom:calc(var(--mobile-safe-bottom) + 8px)}.routeSidebar.collapsed,.stationInfoLauncher{top:calc(var(--mobile-safe-top) + 70px)}.routeSidebar.open,.stationInfoPanel,.detailPanel{top:calc(var(--mobile-safe-top) + 8px);right:var(--mobile-gap);bottom:max(var(--mobile-gap), var(--mobile-safe-bottom));border:1px solid var(--stroke);border-radius:8px;width:min(430px,48vw);max-height:none;left:auto}.detailPanel.collapsed{width:auto;top:auto;left:50%;right:auto}.schematicViewport{max-height:calc(100dvh - 132px)}}.appShell.hasLineDetail .detailPanel{right:86px}@media (max-width:760px){.networkStatusPanel{width:auto;left:64px}.appShell.hasLineDetail .detailPanel{right:0}}@media (max-width:920px) and (max-height:560px) and (orientation:landscape){.appShell{height:100svh;min-height:0}@supports (height:100dvh){.appShell{height:100dvh}}.lineDock{width:min(374px,50vw - 28px);min-height:56px;padding:7px;top:8px;left:8px;right:auto;overflow:auto hidden}.toolStack{height:auto;max-height:calc(100svh - 16px);top:8px;bottom:8px;right:8px;overflow-y:auto}.routeSidebar.collapsed,.stationInfoLauncher{top:72px;left:8px;right:auto}.routeSidebar.open,.stationInfoPanel,.detailPanel{border:1px solid var(--stroke);border-radius:8px;width:min(430px,52vw - 80px);max-height:none;inset:8px 72px 8px auto}.detailPanel.collapsed{width:auto;inset:auto auto 8px 50%}.schematicViewport{max-height:calc(100svh - 128px)}}.appShell.hasStationPanel .routeSidebar.collapsed{display:none}@media (max-width:760px){.stationInfoPanel{right:64px}}@media (max-width:760px) and (orientation:portrait){.appShell{--mobile-panel-height:0px;--mobile-panel-bottom:max(var(--mobile-gap), var(--mobile-safe-bottom))}.appShell.hasLineDetail{--mobile-panel-height:min(52dvh, 430px)}.appShell.hasRouteSidebar,.appShell.hasStationPanel{--mobile-panel-height:min(72dvh, 620px)}.toolStack{top:auto;left:var(--mobile-gap);right:var(--mobile-gap);bottom:calc(var(--mobile-panel-bottom) + var(--mobile-panel-height) + 8px);z-index:10;flex-direction:row;align-content:center;align-items:center;gap:6px;height:52px;min-height:52px;max-height:52px;padding:6px;display:flex;overflow:auto hidden}.iconButton{flex:0 0 40px;width:40px;height:40px}.networkStatusPanel{top:calc(var(--mobile-safe-top) + 74px);left:64px;right:var(--mobile-gap);z-index:5;min-height:48px;max-height:48px;overflow:hidden}.appShell.hasLineDetail .networkStatusPanel,.appShell.hasRouteSidebar .networkStatusPanel,.appShell.hasStationPanel .networkStatusPanel{display:none}.routeSidebar.open,.stationInfoPanel,.detailPanel{top:auto;left:var(--mobile-gap);right:var(--mobile-gap);bottom:var(--mobile-panel-bottom);width:auto;height:var(--mobile-panel-height);max-height:var(--mobile-panel-height);border:1px solid var(--stroke);z-index:12;border-bottom:0;border-radius:8px 8px 0 0}.routeSidebar.open,.stationInfoPanel{overflow:auto}.detailPanel{overflow:hidden}.detailPanel.collapsed{left:50%;right:auto;bottom:calc(var(--mobile-panel-bottom) + 60px);border:1px solid var(--stroke);border-radius:8px;width:auto;min-width:min(228px,100vw - 16px);height:auto;max-height:none}.lineRealtimeHeader{min-height:58px}.lineTrainStrip{max-height:86px}.schematicViewport{max-height:calc(var(--mobile-panel-height) - 136px)}.stationInfoPanel{padding:12px}.stationHero,.stationHeroImage{height:112px;min-height:112px}.routeSidebar.open>.routeSidebarToggle,.stationInfoClose,.detailCollapseButton{top:8px;right:8px}}@media (max-width:420px) and (orientation:portrait){.appShell.hasLineDetail{--mobile-panel-height:min(50dvh, 380px)}.appShell.hasRouteSidebar,.appShell.hasStationPanel{--mobile-panel-height:min(74dvh, 560px)}.stationHero,.stationHeroImage{height:96px;min-height:96px}}@media (max-width:760px) and (orientation:portrait){.appShell.hasStationPanel .toolStack{display:none}}
