@layer features{.network-map__filters button{background:var(--chrome);border:1px solid var(--line);color:var(--ink);cursor:pointer;letter-spacing:.04em;text-transform:uppercase;justify-content:center;align-items:center;gap:6px;min-height:30px;padding:0 9px;font-size:10px;font-weight:800;display:inline-flex}.network-map__filters button.active{background:var(--ink);border-color:var(--ink);color:var(--surface)}.network-map__zoom button{background:var(--chrome);border:1px solid var(--line);color:var(--ink);cursor:pointer;justify-content:center;align-items:center;width:36px;height:36px;font-size:18px;font-weight:800;line-height:1;display:inline-flex}.network-map__zoom button:disabled{color:var(--subtle);cursor:not-allowed;opacity:.58}.network-map__attribution a{color:var(--ink);text-underline-offset:2px;text-decoration:underline}.map-results{overflow:hidden}.map-dashboard{grid-template-columns:minmax(210px,1.35fr) repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px;display:grid}.map-dashboard-card{background:linear-gradient(180deg, color-mix(in srgb, var(--surface) 86%, transparent), color-mix(in srgb, var(--panel) 96%, transparent)), var(--surface);border:1px solid var(--line);gap:8px;min-height:118px;padding:14px;display:grid;position:relative;overflow:hidden}.map-dashboard-card:before{background:linear-gradient(90deg, var(--blue), var(--green), var(--yellow), var(--red));content:"";opacity:.74;height:2px;position:absolute;top:0;left:0;right:0}.map-dashboard-card--primary{background:linear-gradient(135deg, color-mix(in srgb, var(--ink) 7%, transparent), transparent 58%), var(--surface);border-color:var(--line-strong)}.map-dashboard-card--wide{grid-column:1/-1;min-height:0}.map-dashboard-card__top{justify-content:space-between;align-items:center;gap:12px;display:flex}.map-dashboard-card__label,.map-dashboard-card__meta{color:var(--subtle);letter-spacing:.06em;text-transform:uppercase;font-size:10px;font-weight:800;line-height:1.35}.map-dashboard-card strong{color:var(--ink);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;letter-spacing:0;align-self:end;font-size:44px;font-weight:800;line-height:.95}.map-dashboard-card__meta{color:var(--muted);align-self:end}.map-frequency-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.map-frequency-pill{background:var(--panel);border:1px solid var(--line);grid-template-columns:auto 1fr auto;align-items:center;gap:6px;min-height:58px;padding:10px;display:grid}.map-frequency-pill .selected-line{grid-row:span 2}.map-frequency-pill strong{justify-self:end;font-size:22px}.map-frequency-pill small{color:var(--muted);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-transform:uppercase;grid-column:2/-1;font-size:10px;font-weight:800}.network-map{background:var(--panel);border:1px solid var(--line);min-height:560px;position:relative}.network-map__scroller{cursor:grab;overscroll-behavior:contain;touch-action:none;-webkit-user-select:none;user-select:none;height:min(68vh,720px);padding:10px;overflow:auto}.network-map__scroller.is-dragging{cursor:grabbing}.network-map__scroller:focus-visible{outline:3px solid color-mix(in srgb, var(--blue) 72%, white);outline-offset:-3px}.map-diagram-loading{color:var(--muted);cursor:progress;justify-content:center;align-items:center;font-size:13px;font-weight:700;display:flex}.network-map__svg{min-width:0;display:block}.network-map__background{fill:#e8edf0}.network-map__tiles{opacity:.82}.network-map__tile{pointer-events:none}.metro-map-line{filter:drop-shadow(0 1px 2px #0b121557);fill:none;opacity:.92;stroke:var(--line-strong);stroke-linecap:round;stroke-linejoin:round;stroke-width:8px}.metro-map-line.blue{stroke:var(--blue)}.metro-map-line.yellow{stroke:var(--yellow)}.metro-map-line.green{stroke:var(--green)}.metro-map-line.red{stroke:var(--red)}.metro-map-line.porto-a{stroke:#199fda}.metro-map-line.porto-b{stroke:#c63920}.metro-map-line.porto-c{stroke:#a3be31}.metro-map-line.porto-d{stroke:#ebbc14}.metro-map-line.porto-e{stroke:#736eb0}.metro-map-line.porto-f{stroke:#ee731c}.metro-map-station{cursor:pointer;outline:0}.metro-map-station__roof{fill:var(--active);stroke:var(--surface);stroke-linejoin:round;stroke-width:1.4px}.metro-map-station__building{fill:var(--surface);stroke:var(--ink);stroke-width:2px}.metro-map-station__door{fill:var(--line-strong)}.metro-map-station.interchange .metro-map-station__building{stroke-width:3px}.metro-map-station__label{fill:var(--ink);opacity:0;pointer-events:none;paint-order:stroke;stroke:var(--surface);stroke-linejoin:round;stroke-width:4px;font-size:12px;font-weight:800;transition:opacity .15s}.metro-map-station .map-hitbox{fill:#0000;pointer-events:all}.metro-map-station:hover .metro-map-station__building,.metro-map-station:focus .metro-map-station__building,.metro-map-station.active .metro-map-station__building{fill:var(--active);stroke:var(--active)}.metro-map-station:hover .metro-map-station__door,.metro-map-station:focus .metro-map-station__door,.metro-map-station.active .metro-map-station__door{fill:var(--on-active)}.metro-map-station:hover .metro-map-station__label,.metro-map-station:focus .metro-map-station__label,.metro-map-station.active .metro-map-station__label{fill:var(--active);opacity:1;text-decoration:underline}.network-map__status{background:var(--chrome);border:1px solid var(--line);color:var(--muted);letter-spacing:.04em;text-transform:uppercase;z-index:2;padding:8px 10px;font-size:11px;font-weight:800;position:absolute;top:18px;left:18px}.network-map__filters{z-index:2;flex-wrap:wrap;gap:6px;max-width:calc(100% - 92px);display:flex;position:absolute;top:58px;left:18px}.network-map__filter-dot{border-radius:999px;width:8px;height:8px;display:inline-block}.network-map__filter-dot.blue{background:var(--blue)}.network-map__filter-dot.yellow{background:var(--yellow)}.network-map__filter-dot.green{background:var(--green)}.network-map__filter-dot.red{background:var(--red)}.network-map__zoom{z-index:2;gap:6px;display:grid;position:absolute;top:18px;right:18px}.live-train-layer{pointer-events:all}.metro-map-train{cursor:pointer;outline:0}.metro-map-train__shadow{fill:#0b12152e}.metro-map-train__body{fill:var(--ink);stroke:var(--surface);stroke-width:2.4px}.metro-map-train.blue .metro-map-train__body{fill:var(--blue)}.metro-map-train.yellow .metro-map-train__body{fill:var(--yellow)}.metro-map-train.green .metro-map-train__body{fill:var(--green)}.metro-map-train.red .metro-map-train__body{fill:var(--red)}.metro-map-train__window{fill:#ffffffc7}.metro-map-train__light{fill:#fff;stroke:var(--ink);stroke-width:1px}.metro-map-train:hover .metro-map-train__body,.metro-map-train:focus .metro-map-train__body,.metro-map-train.selected .metro-map-train__body{stroke:var(--active);stroke-width:3.2px}.metro-map-train.stopped .metro-map-train__body{stroke-width:3.6px}.metro-map-train.stopped .metro-map-train__light{fill:var(--warn)}.network-map__attribution{background:var(--chrome);border:1px solid var(--line);color:var(--muted);z-index:2;margin:0;padding:5px 7px;font-size:10px;font-weight:800;position:absolute;bottom:18px;left:18px}.live-train-details{background:var(--chrome);border:1px solid var(--line);color:var(--ink);z-index:3;max-width:min(320px,100% - 36px);padding:14px;position:absolute;bottom:18px;right:18px;box-shadow:0 18px 50px #0b121529}.live-train-details[hidden]{display:none}.live-train-details__top{justify-content:space-between;align-items:center;gap:10px;display:flex}.live-train-details__top strong{font-size:13px;font-weight:800}.live-train-details__close{background:var(--surface);border:1px solid var(--line);color:var(--ink);cursor:pointer;justify-content:center;align-items:center;width:28px;height:28px;line-height:1;display:inline-flex}.live-train-details dl{gap:10px;margin:12px 0 0;display:grid}.live-train-details dl div{gap:3px;display:grid}.live-train-details dt{color:var(--muted);letter-spacing:.05em;text-transform:uppercase;font-size:10px;font-weight:800}.live-train-details dd{align-items:center;gap:8px;margin:0;font-size:13px;font-weight:800;display:flex}.map-empty{color:var(--muted);text-transform:uppercase;padding:18px;font-size:13px;font-weight:800}}@layer responsive{@media (max-width:520px){.network-map__filters button{min-height:28px;padding:0 8px;font-size:9px}.network-map__zoom button{width:34px;height:34px}.network-map{min-height:480px}.network-map__scroller{height:62vh}.network-map__status{top:12px;left:12px;right:58px}.network-map__filters{max-width:calc(100% - 58px);top:54px;left:12px}.network-map__zoom{top:12px;right:12px}.live-train-details{max-width:none;bottom:12px;left:12px;right:12px}}}@layer refinements{.network-map__zoom button{border-radius:var(--radius);aspect-ratio:1}.network-map__filters button,.network-map__zoom button{border-radius:var(--radius);box-shadow:var(--shadow-tight)}@media (max-width:520px){.network-map__filters button{min-height:28px;padding:0 8px;font-size:9px}}.shell:has(#mapView.active){max-width:1440px}.live-train-details__close{border-radius:var(--radius);aspect-ratio:1}.network-map,.live-train-details{border-radius:var(--radius)}.network-map{background:var(--surface);min-height:680px;overflow:hidden}#mapView .map-results{padding:16px}.network-map__scroller{height:min(72vh,780px);padding:0}.network-map__status,.network-map__attribution,.live-train-details{border-radius:var(--radius);box-shadow:var(--shadow-tight)}.network-map__status{top:16px;left:16px}.network-map__filters{top:56px;left:16px}.network-map__zoom{top:16px;right:16px}.network-map__attribution{bottom:16px;left:16px}.live-train-details{bottom:16px;right:16px}.network-map__background{fill:#edf3f5}.metro-map-line{filter:drop-shadow(0 1px 2px #0d181d38);opacity:.95;stroke-width:9px}.metro-map-station__building,.metro-map-station__roof{stroke-width:1.8px}.metro-map-train__body{stroke-width:2.6px}@media (min-width:960px){#mapView .results{width:100%;max-width:1360px;margin:0 auto}}@media (max-width:860px){.map-dashboard{grid-template-columns:repeat(2,minmax(0,1fr))}.map-dashboard-card--primary,.map-dashboard-card--wide{grid-column:1/-1}.map-frequency-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:760px){.network-map{min-height:clamp(520px,100dvh - 150px,740px)}.map-dashboard-card{min-height:104px;padding:12px}.map-dashboard-card strong{font-size:36px}.map-dashboard-card .map-frequency-pill strong{font-size:22px}.network-map__scroller{height:clamp(520px,100dvh - 150px,740px)}.shell:has(#mapView.active){padding-left:0;padding-right:0}#mapView .map-results{border-left:0;border-right:0;padding:14px 10px 10px}}@media (max-width:520px){.network-map__svg{min-width:980px}#mapView .map-results{padding:12px 8px 8px}.map-dashboard{grid-template-columns:1fr 1fr;gap:8px}.map-dashboard-card--primary{grid-column:1/-1}.map-frequency-grid{grid-template-columns:1fr}.map-frequency-pill{min-height:54px}.network-map__filters{max-width:none;top:116px;left:12px;right:58px}.live-train-details{bottom:12px;left:12px;right:12px}}#mapView .section-heading{margin-bottom:4px}#mapView .map-dashboard{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-tight);grid-template-columns:minmax(210px,.7fr) minmax(0,1.8fr);gap:0;margin-bottom:14px;display:grid;overflow:hidden}#mapView .map-dashboard-card{box-shadow:none;background:0 0;border:0;border-radius:0;gap:14px;min-height:136px;padding:18px 20px;display:grid}#mapView .map-dashboard-card:before{display:none}#mapView .map-dashboard-card--primary{color:#f4fbfb;background:radial-gradient(circle at 100% 0,#47dcbf29,#0000 40%),linear-gradient(135deg,#112328,#0b1519)}#mapView .map-dashboard-card--primary .map-dashboard-card__label,#mapView .map-dashboard-card--primary .map-dashboard-card__context,#mapView .map-dashboard-card--primary .map-dashboard-card__meta{color:#e8f9f7b3}#mapView .map-dashboard-card--primary strong{color:#fff}#mapView .map-dashboard-card--wide{border-left:1px solid var(--line);grid-column:auto;min-height:0;padding-top:16px;padding-bottom:16px}#mapView .map-dashboard-card__top{justify-content:space-between;align-items:center;gap:12px;min-height:14px;display:flex}#mapView .map-dashboard-card__label,#mapView .map-dashboard-card__context,#mapView .map-dashboard-card__meta{letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:800;line-height:1.25}#mapView .map-dashboard-card__label{color:var(--subtle);align-items:center;gap:7px;display:inline-flex}#mapView .map-dashboard-card__context{color:var(--subtle);font-size:9px}#mapView .map-dashboard-card__meta{color:var(--muted);letter-spacing:.04em;text-transform:none;align-self:end}.map-live-dot{background:#4cdbc2;border-radius:999px;width:6px;height:6px;box-shadow:0 0 0 4px #4cdbc21f}.map-live-metric{align-items:baseline;gap:8px;display:flex}#mapView .map-live-metric strong{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-size:52px;line-height:.85}.map-live-metric span{color:#e8f9f7c2;font-size:12px;font-weight:700}#mapView .map-frequency-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:0;display:grid}#mapView .map-frequency-pill{background:0 0;border:0;border-radius:0;grid-template-columns:auto 1fr auto;gap:3px 8px;min-height:52px;padding:0 16px;display:grid}#mapView .map-frequency-pill+.map-frequency-pill{border-left:1px solid var(--line)}#mapView .map-frequency-pill:first-child{padding-left:0}#mapView .map-frequency-pill:last-child{padding-right:0}#mapView .map-frequency-pill .selected-line{border-radius:99px;width:7px;height:7px}#mapView .map-frequency-pill strong{font-size:26px;line-height:1}#mapView .map-frequency-pill small{letter-spacing:.04em;font-size:9px}@media (max-width:760px){#mapView .map-dashboard{grid-template-columns:1fr}#mapView .map-dashboard-card{min-height:124px;padding:16px}#mapView .map-dashboard-card--wide{border-left:0;border-top:1px solid var(--line);grid-column:1/-1;padding-top:14px;padding-bottom:14px}#mapView .map-frequency-grid{grid-template-columns:repeat(2,minmax(0,1fr))}#mapView .map-frequency-pill{padding:10px 12px}#mapView .map-frequency-pill:nth-child(odd){border-left:0;padding-left:0}#mapView .map-frequency-pill:nth-child(2n){padding-right:0}#mapView .map-frequency-pill:nth-child(n+3){border-top:1px solid var(--line)}}}
