gtfs-garage-web 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dataset.js CHANGED
@@ -1,4 +1,4 @@
1
- import { m as h, p as L } from "./mount-Cblp0thn.js";
1
+ import { m as h, p as L } from "./mount-_v5kWtDw.js";
2
2
  function P(e, s) {
3
3
  const { description: a, canPrepare: n, asked: c, phrase: f } = s;
4
4
  switch (e.state) {
@@ -1 +1 @@
1
- .gtfs-viewer{--bg: #f7f7f8;--panel: #ffffff;--border: #dcdde0;--text: #1c1e21;--muted: #6b7280;--accent: #2563eb;--accent-bg: #eef2ff;--chip-bg: #eef1f5;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-family:var(--font);color:var(--text);background:var(--bg);display:flex;flex-direction:column;height:100%;min-height:0;position:relative}.gtfs-viewer,.gtfs-viewer *{box-sizing:border-box}.gtfs-viewer header{display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0}.gtfs-viewer header h1{font-size:16px;margin:0}.gtfs-viewer [data-el=source-label]{color:var(--muted);font-size:13px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gtfs-viewer button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:6px 10px}.gtfs-viewer button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.gtfs-viewer button:disabled{opacity:.45;cursor:default}.gtfs-viewer button:hover{filter:brightness(.97)}.gtfs-viewer [data-el=layout]{flex:1;display:flex;min-height:0}.gtfs-viewer [data-el=sidebar]{width:210px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border);overflow-y:auto;padding:8px}.gtfs-viewer .table-tab{display:flex;justify-content:space-between;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:13px}.gtfs-viewer .table-tab:hover{background:var(--bg)}.gtfs-viewer .table-tab.active{background:var(--accent-bg);color:var(--accent);font-weight:600}.gtfs-viewer .table-tab .count{color:var(--muted);font-weight:400}.gtfs-viewer .table-tab.active .count{color:var(--accent)}.gtfs-viewer .table-tab.missing{color:var(--muted);cursor:default;font-style:italic}.gtfs-viewer .table-tab.missing:hover{background:none}.gtfs-viewer .table-tab.forbidden .count{font-style:italic}.gtfs-viewer [data-el=content]{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.gtfs-viewer [data-el=panes]{flex:1;display:flex;min-width:0;min-height:0}.gtfs-viewer [data-el=browse-pane]{flex:1.3;display:flex;flex-direction:column;min-width:0;min-height:0;border-right:1px solid var(--border)}.gtfs-viewer [data-el=toolbar]{display:flex;align-items:center;gap:6px;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--panel);flex-shrink:0}.gtfs-viewer [data-el=table-pane]{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.gtfs-viewer [data-el=map-pane]{flex:1;min-width:0;min-height:0;position:relative}.gtfs-viewer [data-el=map]{position:absolute;top:0;right:0;bottom:0;left:0}.gtfs-viewer [data-el=filter-bar]{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--panel)}.gtfs-viewer .raw-toggle{display:flex;align-items:center;gap:5px;margin-left:auto;padding:0 4px;font-size:12px;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none}.gtfs-viewer .raw-toggle input{cursor:pointer}.gtfs-viewer .chip{display:flex;align-items:center;gap:6px;background:var(--chip-bg);border-radius:999px;padding:4px 10px;font-size:12px}.gtfs-viewer .chip button{border:none;background:none;padding:0;color:var(--muted);font-size:13px;line-height:1}.gtfs-viewer [data-el=add-filter-form]{display:none;gap:6px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--bg);font-size:13px}.gtfs-viewer [data-el=add-filter-form].open{display:flex}.gtfs-viewer [data-el=add-filter-form] select,.gtfs-viewer [data-el=add-filter-form] input{font:inherit;padding:4px 6px;border:1px solid var(--border);border-radius:4px}.gtfs-viewer [data-el=dataset-status]{flex:1;display:flex;align-items:center;justify-content:center;padding:24px}.gtfs-viewer [data-el=dataset-status] .is-error{color:#b42318}.gtfs-viewer [data-el=table-scroll]{flex:1;overflow:auto}.gtfs-viewer table{border-collapse:collapse;width:100%;font-size:12.5px}.gtfs-viewer th,.gtfs-viewer td{border-bottom:1px solid var(--border);padding:5px 10px;text-align:left;white-space:nowrap}.gtfs-viewer th{position:sticky;top:0;background:var(--panel);z-index:1}.gtfs-viewer tr:hover td{background:#fafafa}.gtfs-viewer a.fk-link{color:var(--accent);text-decoration:none}.gtfs-viewer a.fk-link:hover{text-decoration:underline}.gtfs-viewer .related-row{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}.gtfs-viewer .related-btn{font-size:10.5px;padding:1px 6px;border-radius:999px;background:var(--chip-bg);border:none;color:var(--muted)}.gtfs-viewer .related-btn:hover{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer [data-el=pager]{display:flex;align-items:center;gap:8px;padding:6px 10px;border-top:1px solid var(--border);background:var(--panel);font-size:12.5px}.gtfs-viewer [data-el=pager] .spacer{flex:1}.gtfs-viewer [data-el=load-overlay]{position:fixed;top:0;right:0;bottom:0;left:0;background:#14141973;display:flex;align-items:center;justify-content:center;z-index:50}.gtfs-viewer [data-el=load-overlay].hidden{display:none}.gtfs-viewer [data-el=load-panel]{background:var(--panel);border-radius:10px;padding:24px;width:420px;max-width:90vw}.gtfs-viewer [data-el=load-panel] h2{margin-top:0;font-size:16px}.gtfs-viewer [data-el=dropzone]{border:2px dashed var(--border);border-radius:8px;padding:24px;text-align:center;color:var(--muted);font-size:13px;margin-bottom:12px}.gtfs-viewer [data-el=dropzone].drag{border-color:var(--accent);color:var(--accent)}.gtfs-viewer [data-el=load-panel] .or{text-align:center;color:var(--muted);font-size:12px;margin:8px 0}.gtfs-viewer [data-el=load-panel] input[type=text]{width:100%;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font:inherit;margin-bottom:10px}.gtfs-viewer [data-el=load-panel] input[type=text]:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--accent)}.gtfs-viewer .field-label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}.gtfs-viewer [data-el=pick-row]{display:flex;gap:8px;margin-bottom:4px}.gtfs-viewer [data-el=pick-row] button{flex:1}.gtfs-viewer [data-el=load-actions]{display:flex;gap:8px;align-items:center}.gtfs-viewer [data-el=load-status]{color:var(--muted);font-size:12.5px;margin-top:8px}.gtfs-viewer [data-el=load-error]{color:[data-el="b91c1c"];font-size:12.5px;margin-top:8px}.gtfs-viewer [data-el=empty-state]{padding:40px;color:var(--muted);text-align:center}.gtfs-viewer [data-el=options-btn]{flex-shrink:0;white-space:nowrap}.gtfs-viewer [data-el=options-panel]{position:absolute;top:46px;right:16px;z-index:5;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px 14px;font-size:12.5px;width:460px;max-width:90vw;max-height:70vh;overflow:auto;box-shadow:0 6px 20px #0000001f}.gtfs-viewer [data-el=options-panel].hidden{display:none}.gtfs-viewer [data-el=options-header]{display:flex;align-items:center;gap:12px;margin-bottom:8px}.gtfs-viewer [data-el=options-header] strong{flex:1}.gtfs-viewer [data-el=options-header] button{padding:0 6px;line-height:1.4}.gtfs-viewer [data-el=options-panel] section+section{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}.gtfs-viewer [data-el=options-section-title]{font-weight:600;margin-bottom:6px}.gtfs-viewer [data-el=workdir-path]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--muted);cursor:pointer;overflow-wrap:anywhere}.gtfs-viewer [data-el=workdir-summary],.gtfs-viewer [data-el=metrics-summary]{color:var(--muted);margin:2px 0 8px}.gtfs-viewer [data-el=workdir-feeds]{display:flex;flex-direction:column;gap:4px}.gtfs-viewer .workdir-feed{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;background:var(--bg)}.gtfs-viewer .workdir-feed.current{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .workdir-feed-text{flex:1;min-width:0}.gtfs-viewer .workdir-feed-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gtfs-viewer .workdir-feed-detail{color:var(--muted);font-size:11.5px}.gtfs-viewer .workdir-feed.current .workdir-feed-detail{color:var(--accent)}.gtfs-viewer .workdir-feed-actions{display:flex;gap:4px;flex-shrink:0}.gtfs-viewer .workdir-feed-actions button{font-size:11.5px;padding:3px 7px}.gtfs-viewer .workdir-remove{line-height:1.2}.gtfs-viewer .workdir-startup.on{background:var(--accent);border-color:var(--accent);color:var(--bg)}.gtfs-viewer .workdir-empty{color:var(--muted);padding:6px 8px}.gtfs-viewer [data-el=workdir-actions]{margin-top:8px}.gtfs-viewer [data-el=recent-feeds]{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.gtfs-viewer .recent-feed{display:flex;align-items:baseline;gap:8px;width:100%;text-align:left;padding:7px 10px}.gtfs-viewer .recent-feed-detail{color:var(--muted);font-size:11.5px;margin-left:auto;flex-shrink:0}.gtfs-viewer [data-el=workdir-status]{color:var(--muted);min-height:1.2em;margin-top:4px}.gtfs-viewer [data-el=workdir-section].busy{opacity:.6}.gtfs-viewer [data-el=metrics-body]{overflow-x:auto}.gtfs-viewer [data-el=metrics-phases]{display:grid;grid-template-columns:auto auto;gap:2px 14px;margin:0 0 12px}.gtfs-viewer [data-el=metrics-phases] dt{color:var(--muted)}.gtfs-viewer [data-el=metrics-phases] dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer [data-el=metrics-body] table{border-collapse:collapse;white-space:nowrap}.gtfs-viewer [data-el=metrics-body] th{text-align:left;color:var(--muted);font-weight:500;border-bottom:1px solid var(--border)}.gtfs-viewer [data-el=metrics-body] th,.gtfs-viewer [data-el=metrics-body] td{padding:3px 10px 3px 0}.gtfs-viewer [data-el=metrics-body] td:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer [data-el=map-progress]{position:absolute;left:12px;bottom:12px;z-index:2;background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:5px 10px;color:var(--muted);font-size:12.5px;font-variant-numeric:tabular-nums;box-shadow:0 2px 8px #0000001a;pointer-events:none}.gtfs-viewer [data-el=table-scroll] td.value-numeric{text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer [data-el=table-scroll] td.value-implied{color:var(--muted);font-style:italic;cursor:help}.gtfs-viewer [data-el=table-scroll] td.value-malformed{cursor:help}.gtfs-viewer .value-swatch{display:inline-block;width:.75em;height:.75em;margin-right:6px;border:1px solid var(--border);border-radius:2px;vertical-align:baseline}.gtfs-viewer .value-link{color:var(--accent)}.gtfs-viewer [hidden]{display:none!important}.gtfs-viewer [data-el=screen-pane]{flex:1;min-width:0;min-height:0;overflow-y:auto;background:var(--bg)}.gtfs-viewer .sidebar-group{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:10px 10px 4px}.gtfs-viewer .explore-tab{justify-content:flex-start}.gtfs-viewer .explore{padding:16px 20px 32px}.gtfs-viewer .explore h2{margin:0 0 2px;font-size:18px}.gtfs-viewer .explore h3{margin:0 0 2px;font-size:13px;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.gtfs-viewer .explore-hint{color:var(--muted);font-size:12px}.gtfs-viewer .explore-section{margin-top:22px}.gtfs-viewer .explore-section>p{margin:0 0 10px}.gtfs-viewer .explore-loading,.gtfs-viewer .explore-error{padding:24px;color:var(--muted);font-size:13px}.gtfs-viewer .explore-error strong{color:var(--text)}.gtfs-viewer .explore-link{color:var(--accent);text-decoration:none;font-size:12px;margin-right:8px;cursor:pointer}.gtfs-viewer .explore-link:hover{text-decoration:underline}.gtfs-viewer .overview-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;min-width:0}.gtfs-viewer .overview-header>div{min-width:0}.gtfs-viewer .overview-header h2{overflow-wrap:anywhere}.gtfs-viewer .window-badge{text-align:right;border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel);font:inherit;cursor:pointer}.gtfs-viewer .window-dates{font-size:12px;color:var(--muted)}.gtfs-viewer .window-remaining{font-weight:600;font-size:14px}.gtfs-viewer .window-ok .window-remaining{color:#15803d}.gtfs-viewer .window-warn .window-remaining{color:#b45309}.gtfs-viewer .window-gone .window-remaining{color:#b91c1c}.gtfs-viewer .stat-row{display:flex;flex-wrap:wrap;gap:10px}.gtfs-viewer .stat{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:10px 14px;min-width:104px}.gtfs-viewer .stat-clickable{cursor:pointer}.gtfs-viewer .stat-clickable:hover{border-color:var(--accent)}.gtfs-viewer .stat-value{font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.gtfs-viewer .stat-label{font-size:12px;color:var(--muted)}.gtfs-viewer .agency-list{list-style:none;margin:0;padding:0}.gtfs-viewer .agency-list li{display:flex;align-items:baseline;gap:10px;padding:6px 0;border-bottom:1px solid var(--border)}.gtfs-viewer .agency-name{font-weight:600;font-size:13px}.gtfs-viewer .chip-row{display:flex;flex-wrap:wrap;gap:8px}.gtfs-viewer .chip{display:inline-flex;align-items:center;gap:6px;background:var(--chip-bg);border:1px solid var(--border);border-radius:999px;padding:4px 12px;font-size:12px;cursor:pointer}.gtfs-viewer .chip:hover{border-color:var(--accent)}.gtfs-viewer .chip-count{color:var(--muted);font-variant-numeric:tabular-nums}.gtfs-viewer .feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}.gtfs-viewer .feature{border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--panel)}.gtfs-viewer .feature-off{opacity:.55}.gtfs-viewer .feature-name{font-size:13px;font-weight:600}.gtfs-viewer .feature-links{margin-top:4px;display:flex;flex-wrap:wrap;gap:2px 8px}.gtfs-viewer .feature-links .explore-link{margin-right:0}.gtfs-viewer .explore-table{width:100%;border-collapse:collapse;background:var(--panel);font-size:13px}.gtfs-viewer .explore-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--border);padding:6px 8px}.gtfs-viewer .explore-table td{padding:7px 8px;border-bottom:1px solid var(--border);vertical-align:top}.gtfs-viewer .explore-table .numeric{text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer .pattern-name{font-weight:600}.gtfs-viewer .pattern-empty{opacity:.6}.gtfs-viewer .service-ids{max-width:260px;display:flex;flex-wrap:wrap;gap:2px 8px}.gtfs-viewer .service-ids .explore-link{margin-right:0;overflow-wrap:anywhere}.gtfs-viewer .explore-scroll{overflow-x:auto;max-width:100%}.gtfs-viewer .weekday-chart{display:flex;flex-direction:column;gap:3px}.gtfs-viewer .weekday-row{display:flex;align-items:center;gap:8px;font-size:12px}.gtfs-viewer .weekday-name{width:74px;color:var(--muted)}.gtfs-viewer .weekday-track{flex:1;background:var(--chip-bg);border-radius:4px;height:14px}.gtfs-viewer .weekday-bar{display:block;height:100%;border-radius:4px;background:var(--accent);min-width:2px}.gtfs-viewer .weekday-value{width:56px;text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer .gap-list{list-style:none;margin:0;padding:0;font-size:13px}.gtfs-viewer .gap-list li{padding:3px 0}.gtfs-viewer .calendar-months{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:14px}.gtfs-viewer .month-label{font-size:12px;color:var(--muted);margin-bottom:4px}.gtfs-viewer .month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.gtfs-viewer .month-weekday{font-size:9px;color:var(--muted);text-align:center}.gtfs-viewer .day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:3px;font-size:9px;color:var(--muted);background:var(--chip-bg)}.gtfs-viewer .day-0{background:var(--chip-bg)}.gtfs-viewer .day-1{background:#cfe0fb;color:#1e3a8a}.gtfs-viewer .day-2{background:#9dc1f7;color:#1e3a8a}.gtfs-viewer .day-3{background:#5d93ee;color:#fff}.gtfs-viewer .day-4{background:#2563eb;color:#fff}.gtfs-viewer .day-blank{background:none}.gtfs-viewer .route-search{font:inherit;font-size:13px;padding:6px 10px;border:1px solid var(--border);border-radius:6px;flex:1 1 160px;min-width:0;max-width:320px}.gtfs-viewer .route-group{margin-top:18px}.gtfs-viewer .route-group-label{font-size:12px;color:var(--muted);margin-bottom:4px}.gtfs-viewer .route-row{cursor:pointer}.gtfs-viewer .route-row:hover{background:var(--accent-bg)}.gtfs-viewer .route-name{font-weight:600}.gtfs-viewer .route-badge{display:inline-block;min-width:34px;text-align:center;padding:2px 8px;border-radius:5px;font-weight:700;font-size:13px;background:var(--chip-bg)}.gtfs-viewer .route-title{display:flex;align-items:center;gap:10px}.gtfs-viewer .route-actions{display:flex;gap:4px;align-items:center}.gtfs-viewer .direction-list{display:flex;flex-wrap:wrap;gap:10px}.gtfs-viewer .direction{border:1px solid var(--border);border-radius:8px;padding:10px 12px;background:var(--panel);min-width:180px}.gtfs-viewer .direction-label{font-weight:600;font-size:13px}.gtfs-viewer .direction .numeric{font-variant-numeric:tabular-nums;margin:4px 0 6px;font-size:12px}.gtfs-viewer .pattern-list{display:flex;flex-direction:column;gap:6px}.gtfs-viewer details.pattern{border:1px solid var(--border);border-radius:8px;background:var(--panel);padding:8px 12px}.gtfs-viewer details.pattern summary{cursor:pointer}.gtfs-viewer .pattern-head{display:inline-flex;gap:10px;align-items:baseline}.gtfs-viewer .stop-sequence{margin:8px 0 0;padding-left:22px;font-size:12px}.gtfs-viewer .stop-sequence li{padding:1px 0}.gtfs-viewer .hour-chart{display:flex;align-items:flex-end;gap:2px;height:110px;padding-top:8px}.gtfs-viewer .hour{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%}.gtfs-viewer .hour-bar{display:block;background:var(--accent);border-radius:2px 2px 0 0;min-height:1px}.gtfs-viewer .hour-label{font-size:9px;color:var(--muted);text-align:center;height:12px}.gtfs-viewer .calendar-legend{display:flex;align-items:center;gap:4px;margin-bottom:10px;font-variant-numeric:tabular-nums}.gtfs-viewer .calendar-legend .day{width:14px;height:14px;aspect-ratio:auto}.gtfs-viewer .calendar-legend .explore-hint{margin-right:6px}.gtfs-viewer .month-grid .day{border:1px solid transparent;font:inherit;font-size:9px;padding:0;cursor:pointer}.gtfs-viewer .month-grid .day-blank{cursor:default}.gtfs-viewer .month-grid .day:hover{border-color:var(--accent)}.gtfs-viewer .day-selected{outline:2px solid var(--accent);outline-offset:1px}.gtfs-viewer .day-panel{border:1px solid var(--accent);border-radius:8px;background:var(--panel);padding:10px 12px;margin-top:14px}.gtfs-viewer .day-panel-head{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:8px}.gtfs-viewer .day-routes{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.gtfs-viewer .day-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}.gtfs-viewer .route-chip{font:inherit;font-size:12px;font-weight:600;border:1px solid var(--border);background:var(--chip-bg);border-radius:5px;padding:2px 8px;cursor:pointer}.gtfs-viewer .route-chip:hover{border-color:var(--accent)}.gtfs-viewer .agency-more{padding-top:8px;border-bottom:none}.gtfs-viewer .map-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);font-size:12px}.gtfs-viewer .pattern-headsign{font-size:12px;color:var(--text)}.gtfs-viewer .pattern-body{margin-top:8px}.gtfs-viewer .pattern-links{margin-top:6px}.gtfs-viewer [data-el=content][data-layout=above] [data-el=panes]{flex-direction:column}.gtfs-viewer [data-el=content][data-layout=above] [data-el=map-pane]{flex:0 0 32%;border-right:none;border-bottom:1px solid var(--border);order:-1}.gtfs-viewer [data-el=content][data-layout=above] [data-el=browse-pane]{border-right:none}.gtfs-viewer [data-el=content][data-layout=none] [data-el=map-pane]{display:none}.gtfs-viewer [data-el=mode-switch]{display:inline-flex;border:1px solid var(--border);border-radius:6px;overflow:hidden}.gtfs-viewer button.mode{border:none;border-radius:0;padding:5px 14px;font-size:13px;background:var(--panel);color:var(--muted)}.gtfs-viewer button.mode.active{background:var(--accent-bg);color:var(--accent);font-weight:600}.gtfs-viewer .date-chip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:4px 6px 4px 12px;border:1px solid var(--accent);background:var(--accent-bg);border-radius:999px;font-size:13px}.gtfs-viewer [data-el=date-chip-day]{font-weight:600;color:var(--accent)}.gtfs-viewer .date-chip button{border:none;background:none;padding:2px 7px;line-height:1;color:var(--accent);border-radius:999px}.gtfs-viewer .date-chip button:hover{background:var(--panel)}.gtfs-viewer [data-el=date-clear]{font-size:16px}.gtfs-viewer [data-el=toolbar]{position:relative}.gtfs-viewer .date-menu{position:absolute;top:100%;left:12px;z-index:20;min-width:280px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 24px #0000001f;padding:4px}.gtfs-viewer .date-menu-item{display:flex;justify-content:space-between;gap:16px;width:100%;border:none;background:none;text-align:left;padding:7px 10px;border-radius:6px;font-size:13px}.gtfs-viewer .date-menu-item:hover{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .date-menu-date{color:var(--muted);font-variant-numeric:tabular-nums}.gtfs-viewer .periods{display:flex;flex-direction:column;gap:4px}.gtfs-viewer .period-row{display:flex;align-items:center;gap:10px;font-size:12px}.gtfs-viewer .period-name{width:150px;flex-shrink:0;text-align:right;color:var(--muted);overflow-wrap:anywhere}.gtfs-viewer .period-track{position:relative;flex:1;min-width:0;height:18px;background:var(--chip-bg);border-radius:4px}.gtfs-viewer .period-bar{position:absolute;top:0;height:100%;border:none;border-radius:4px;background:var(--accent);cursor:pointer;padding:0;min-width:3px}.gtfs-viewer .period-bar:hover{background:#1d4ed8}.gtfs-viewer .period-days{width:62px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}.gtfs-viewer .period-axis .period-track{background:none;height:auto}.gtfs-viewer .axis-start,.gtfs-viewer .axis-end{color:var(--muted);font-size:11px}.gtfs-viewer .axis-end{float:right}.gtfs-viewer .change-list{list-style:none;margin:0;padding:0;font-size:13px}.gtfs-viewer .change-list li{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:5px 0;border-bottom:1px solid var(--border)}.gtfs-viewer .change-date{font-weight:600;font-variant-numeric:tabular-nums}.gtfs-viewer .day-choices{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.gtfs-viewer .day-choice{display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:10px 14px;border:1px solid var(--border);border-radius:8px;background:var(--panel);text-align:left}.gtfs-viewer .day-choice:hover{border-color:var(--accent)}.gtfs-viewer .day-choice-label{font-weight:600;font-size:13px}.gtfs-viewer .day-choice-date{color:var(--muted);font-size:12px}.gtfs-viewer .timetable-scroll{overflow:auto;max-height:100%;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.gtfs-viewer table.timetable{border-collapse:separate;border-spacing:0;font-size:12px;font-variant-numeric:tabular-nums}.gtfs-viewer table.timetable th,.gtfs-viewer table.timetable td{padding:4px 8px;border-bottom:1px solid var(--border);white-space:nowrap}.gtfs-viewer table.timetable thead th{position:sticky;top:0;z-index:2;background:var(--panel);border-bottom:1px solid var(--border)}.gtfs-viewer table.timetable .stop-head,.gtfs-viewer table.timetable .stop-cell{position:sticky;left:0;z-index:1;background:var(--panel);border-right:1px solid var(--border);text-align:left;min-width:170px}.gtfs-viewer table.timetable thead .stop-head{z-index:3}.gtfs-viewer .trip-head{cursor:pointer;font-weight:600;text-align:right}.gtfs-viewer .trip-head:hover{background:var(--accent-bg)}.gtfs-viewer .trip-head.selected{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .trip-block{font-weight:400;font-size:10px;color:var(--muted)}.gtfs-viewer .time-cell{text-align:right}.gtfs-viewer .time-linked{cursor:pointer}.gtfs-viewer .time-linked:hover{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .stop-name{border:none;background:none;padding:0;font:inherit;color:var(--text);text-align:left;cursor:pointer}.gtfs-viewer .stop-name:hover{color:var(--accent);text-decoration:underline}.gtfs-viewer .stop-cell a.explore-link{margin-left:8px;font-size:10.5px;color:var(--muted)}.gtfs-viewer .stop-cell a.explore-link:hover{color:var(--accent)}.gtfs-viewer .stop-cell.selected{background:var(--accent-bg)}.gtfs-viewer .stop-cell.selected .stop-name{color:var(--accent);font-weight:600}.gtfs-viewer .timetable-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.gtfs-viewer .timetable-controls .raw-toggle{margin-left:auto}.gtfs-viewer .map-note{margin-top:8px}.gtfs-viewer .stop-mark{width:18px;height:18px;border-radius:50%;border:2px solid var(--accent);background:#2563eb2e;box-shadow:0 0 #2563eb80;animation:gtfs-stop-mark 1.4s ease-out 3}@keyframes gtfs-stop-mark{0%{box-shadow:0 0 #2563eb80}to{box-shadow:0 0 0 16px #2563eb00}}@media(prefers-reduced-motion:reduce){.gtfs-viewer .stop-mark{animation:none}}.gtfs-viewer .time-blank{color:var(--border)}.gtfs-viewer .timetable-grid-wrap{margin-top:14px;min-height:0}.gtfs-viewer .chip.active{background:var(--accent-bg);color:var(--accent);border-color:var(--accent)}.gtfs-viewer .facets{display:flex;flex-direction:column;gap:6px;margin-top:14px}.gtfs-viewer .facet-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px}.gtfs-viewer .facet-label{width:110px;flex-shrink:0;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}.gtfs-viewer .facet-chip{padding:3px 10px;font-size:12px}.gtfs-viewer .facet-chip.active{background:var(--accent);color:#fff;border-color:var(--accent)}.gtfs-viewer .facet-chip.active .chip-count{color:#fffc}.gtfs-viewer .facet-chip.facet-empty{opacity:.45}.gtfs-viewer .facet-summary{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;margin-top:12px;font-size:13px;font-weight:600}.gtfs-viewer .facet-summary .explore-hint{font-weight:400}
1
+ .gtfs-viewer{--bg: #f7f7f8;--panel: #ffffff;--border: #dcdde0;--text: #1c1e21;--muted: #6b7280;--accent: #2563eb;--accent-bg: #eef2ff;--chip-bg: #eef1f5;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;font-family:var(--font);color:var(--text);background:var(--bg);display:flex;flex-direction:column;height:100%;min-height:0;position:relative}.gtfs-viewer,.gtfs-viewer *{box-sizing:border-box}.gtfs-viewer header{display:flex;align-items:center;gap:12px;padding:10px 16px;background:var(--panel);border-bottom:1px solid var(--border);flex-shrink:0}.gtfs-viewer header h1{font-size:16px;margin:0}.gtfs-viewer [data-el=source-label]{color:var(--muted);font-size:13px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gtfs-viewer button{font:inherit;cursor:pointer;border:1px solid var(--border);background:var(--panel);border-radius:6px;padding:6px 10px}.gtfs-viewer button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.gtfs-viewer button:disabled{opacity:.45;cursor:default}.gtfs-viewer button:hover{filter:brightness(.97)}.gtfs-viewer [data-el=layout]{flex:1;display:flex;min-height:0}.gtfs-viewer [data-el=sidebar]{width:210px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--border);overflow-y:auto;padding:8px}.gtfs-viewer .table-tab{display:flex;justify-content:space-between;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:13px}.gtfs-viewer .table-tab:hover{background:var(--bg)}.gtfs-viewer .table-tab.active{background:var(--accent-bg);color:var(--accent);font-weight:600}.gtfs-viewer .table-tab .count{color:var(--muted);font-weight:400}.gtfs-viewer .table-tab.active .count{color:var(--accent)}.gtfs-viewer .table-tab.missing{color:var(--muted);cursor:default;font-style:italic}.gtfs-viewer .table-tab.missing:hover{background:none}.gtfs-viewer .table-tab.forbidden .count{font-style:italic}.gtfs-viewer [data-el=content]{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.gtfs-viewer [data-el=panes]{flex:1;display:flex;min-width:0;min-height:0}.gtfs-viewer [data-el=browse-pane]{flex:1.3;display:flex;flex-direction:column;min-width:0;min-height:0;border-right:1px solid var(--border)}.gtfs-viewer [data-el=toolbar]{display:flex;align-items:center;gap:6px;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--panel);flex-shrink:0}.gtfs-viewer [data-el=table-pane]{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0}.gtfs-viewer [data-el=map-pane]{flex:1;min-width:0;min-height:0;position:relative}.gtfs-viewer [data-el=map]{position:absolute;top:0;right:0;bottom:0;left:0}.gtfs-viewer [data-el=filter-bar]{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--panel)}.gtfs-viewer .raw-toggle{display:flex;align-items:center;gap:5px;margin-left:auto;padding:0 4px;font-size:12px;color:var(--muted);cursor:pointer;-webkit-user-select:none;user-select:none}.gtfs-viewer .raw-toggle input{cursor:pointer}.gtfs-viewer .chip{display:flex;align-items:center;gap:6px;background:var(--chip-bg);border-radius:999px;padding:4px 10px;font-size:12px}.gtfs-viewer .chip button{border:none;background:none;padding:0;color:var(--muted);font-size:13px;line-height:1}.gtfs-viewer [data-el=add-filter-form]{display:none;gap:6px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border);background:var(--bg);font-size:13px}.gtfs-viewer [data-el=add-filter-form].open{display:flex}.gtfs-viewer [data-el=add-filter-form] select,.gtfs-viewer [data-el=add-filter-form] input{font:inherit;padding:4px 6px;border:1px solid var(--border);border-radius:4px}.gtfs-viewer [data-el=dataset-status]{flex:1;display:flex;align-items:center;justify-content:center;padding:24px}.gtfs-viewer [data-el=dataset-status] .is-error{color:#b42318}.gtfs-viewer [data-el=table-scroll]{flex:1;overflow:auto}.gtfs-viewer table{border-collapse:collapse;width:100%;font-size:12.5px}.gtfs-viewer th,.gtfs-viewer td{border-bottom:1px solid var(--border);padding:5px 10px;text-align:left;white-space:nowrap}.gtfs-viewer th{position:sticky;top:0;background:var(--panel);z-index:1}.gtfs-viewer tr:hover td{background:#fafafa}.gtfs-viewer a.fk-link{color:var(--accent);text-decoration:none}.gtfs-viewer a.fk-link:hover{text-decoration:underline}.gtfs-viewer .related-row{display:flex;gap:4px;flex-wrap:wrap;margin-top:2px}.gtfs-viewer .related-btn{font-size:10.5px;padding:1px 6px;border-radius:999px;background:var(--chip-bg);border:none;color:var(--muted)}.gtfs-viewer .related-btn:hover{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer [data-el=pager]{display:flex;align-items:center;gap:8px;padding:6px 10px;border-top:1px solid var(--border);background:var(--panel);font-size:12.5px}.gtfs-viewer [data-el=pager] .spacer{flex:1}.gtfs-viewer [data-el=load-overlay]{position:fixed;top:0;right:0;bottom:0;left:0;background:#14141973;display:flex;align-items:center;justify-content:center;z-index:50}.gtfs-viewer [data-el=load-overlay].hidden{display:none}.gtfs-viewer [data-el=load-panel]{background:var(--panel);border-radius:10px;padding:24px;width:420px;max-width:90vw}.gtfs-viewer [data-el=load-panel] h2{margin-top:0;font-size:16px}.gtfs-viewer [data-el=dropzone]{border:2px dashed var(--border);border-radius:8px;padding:24px;text-align:center;color:var(--muted);font-size:13px;margin-bottom:12px}.gtfs-viewer [data-el=dropzone].drag{border-color:var(--accent);color:var(--accent)}.gtfs-viewer [data-el=load-panel] .or{text-align:center;color:var(--muted);font-size:12px;margin:8px 0}.gtfs-viewer [data-el=load-panel] input[type=text]{width:100%;padding:6px 8px;border:1px solid var(--border);border-radius:6px;font:inherit;margin-bottom:10px}.gtfs-viewer [data-el=load-panel] input[type=text]:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--accent)}.gtfs-viewer .field-label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}.gtfs-viewer [data-el=pick-row]{display:flex;gap:8px;margin-bottom:4px}.gtfs-viewer [data-el=pick-row] button{flex:1}.gtfs-viewer [data-el=load-actions]{display:flex;gap:8px;align-items:center}.gtfs-viewer [data-el=load-status]{color:var(--muted);font-size:12.5px;margin-top:8px}.gtfs-viewer [data-el=load-error]{color:[data-el="b91c1c"];font-size:12.5px;margin-top:8px}.gtfs-viewer [data-el=empty-state]{padding:40px;color:var(--muted);text-align:center}.gtfs-viewer [data-el=options-btn]{flex-shrink:0;white-space:nowrap}.gtfs-viewer [data-el=options-panel]{position:absolute;top:46px;right:16px;z-index:5;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:12px 14px;font-size:12.5px;width:460px;max-width:90vw;max-height:70vh;overflow:auto;box-shadow:0 6px 20px #0000001f}.gtfs-viewer [data-el=options-panel].hidden{display:none}.gtfs-viewer [data-el=options-header]{display:flex;align-items:center;gap:12px;margin-bottom:8px}.gtfs-viewer [data-el=options-header] strong{flex:1}.gtfs-viewer [data-el=options-header] button{padding:0 6px;line-height:1.4}.gtfs-viewer [data-el=options-panel] section+section{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}.gtfs-viewer [data-el=options-section-title]{font-weight:600;margin-bottom:6px}.gtfs-viewer [data-el=workdir-path]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--muted);cursor:pointer;overflow-wrap:anywhere}.gtfs-viewer [data-el=workdir-summary],.gtfs-viewer [data-el=metrics-summary]{color:var(--muted);margin:2px 0 8px}.gtfs-viewer [data-el=workdir-feeds]{display:flex;flex-direction:column;gap:4px}.gtfs-viewer .workdir-feed{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:6px;background:var(--bg)}.gtfs-viewer .workdir-feed.current{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .workdir-feed-text{flex:1;min-width:0}.gtfs-viewer .workdir-feed-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gtfs-viewer .workdir-feed-detail{color:var(--muted);font-size:11.5px}.gtfs-viewer .workdir-feed.current .workdir-feed-detail{color:var(--accent)}.gtfs-viewer .workdir-feed-actions{display:flex;gap:4px;flex-shrink:0}.gtfs-viewer .workdir-feed-actions button{font-size:11.5px;padding:3px 7px}.gtfs-viewer .workdir-remove{line-height:1.2}.gtfs-viewer .workdir-startup.on{background:var(--accent);border-color:var(--accent);color:var(--bg)}.gtfs-viewer .workdir-empty{color:var(--muted);padding:6px 8px}.gtfs-viewer [data-el=workdir-actions]{margin-top:8px}.gtfs-viewer [data-el=recent-feeds]{display:flex;flex-direction:column;gap:4px;margin-bottom:4px}.gtfs-viewer .recent-feed{display:flex;align-items:baseline;gap:8px;width:100%;text-align:left;padding:7px 10px}.gtfs-viewer .recent-feed-detail{color:var(--muted);font-size:11.5px;margin-left:auto;flex-shrink:0}.gtfs-viewer [data-el=workdir-status]{color:var(--muted);min-height:1.2em;margin-top:4px}.gtfs-viewer [data-el=workdir-section].busy{opacity:.6}.gtfs-viewer [data-el=metrics-body]{overflow-x:auto}.gtfs-viewer [data-el=metrics-phases]{display:grid;grid-template-columns:auto auto;gap:2px 14px;margin:0 0 12px}.gtfs-viewer [data-el=metrics-phases] dt{color:var(--muted)}.gtfs-viewer [data-el=metrics-phases] dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer [data-el=metrics-body] table{border-collapse:collapse;white-space:nowrap}.gtfs-viewer [data-el=metrics-body] th{text-align:left;color:var(--muted);font-weight:500;border-bottom:1px solid var(--border)}.gtfs-viewer [data-el=metrics-body] th,.gtfs-viewer [data-el=metrics-body] td{padding:3px 10px 3px 0}.gtfs-viewer [data-el=metrics-body] td:not(:first-child){text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer [data-el=map-progress]{position:absolute;left:12px;bottom:12px;z-index:2;background:var(--panel);border:1px solid var(--border);border-radius:6px;padding:5px 10px;color:var(--muted);font-size:12.5px;font-variant-numeric:tabular-nums;box-shadow:0 2px 8px #0000001a;pointer-events:none}.gtfs-viewer [data-el=table-scroll] td.value-numeric,.gtfs-viewer [data-el=table-scroll] th.value-numeric{text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer [data-el=table-scroll] td.value-implied{color:var(--muted);font-style:italic;cursor:help}.gtfs-viewer [data-el=table-scroll] td.value-malformed{cursor:help}.gtfs-viewer .value-swatch{display:inline-block;width:.75em;height:.75em;margin-right:6px;border:1px solid var(--border);border-radius:2px;vertical-align:baseline}.gtfs-viewer .value-link{color:var(--accent)}.gtfs-viewer [hidden]{display:none!important}.gtfs-viewer [data-el=screen-pane]{flex:1;min-width:0;min-height:0;overflow-y:auto;background:var(--bg)}.gtfs-viewer .sidebar-group{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:10px 10px 4px}.gtfs-viewer .explore-tab{justify-content:flex-start}.gtfs-viewer .explore{padding:16px 20px 32px}.gtfs-viewer .explore h2{margin:0 0 2px;font-size:18px}.gtfs-viewer .explore h3{margin:0 0 2px;font-size:13px;letter-spacing:.02em;text-transform:uppercase;color:var(--muted)}.gtfs-viewer .explore-hint{color:var(--muted);font-size:12px}.gtfs-viewer .explore-section{margin-top:22px}.gtfs-viewer .explore-section>p{margin:0 0 10px}.gtfs-viewer .explore-loading,.gtfs-viewer .explore-error{padding:24px;color:var(--muted);font-size:13px}.gtfs-viewer .explore-error strong{color:var(--text)}.gtfs-viewer .explore-link{color:var(--accent);text-decoration:none;font-size:12px;margin-right:8px;cursor:pointer}.gtfs-viewer .explore-link:hover{text-decoration:underline}.gtfs-viewer .overview-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;min-width:0}.gtfs-viewer .overview-header>div{min-width:0}.gtfs-viewer .overview-header h2{overflow-wrap:anywhere}.gtfs-viewer .window-badge{text-align:right;border:1px solid var(--border);border-radius:8px;padding:8px 12px;background:var(--panel);font:inherit;cursor:pointer}.gtfs-viewer .window-dates{font-size:12px;color:var(--muted)}.gtfs-viewer .window-remaining{font-weight:600;font-size:14px}.gtfs-viewer .window-ok .window-remaining{color:#15803d}.gtfs-viewer .window-warn .window-remaining{color:#b45309}.gtfs-viewer .window-gone .window-remaining{color:#b91c1c}.gtfs-viewer .stat-row{display:flex;flex-wrap:wrap;gap:10px}.gtfs-viewer .stat{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:10px 14px;min-width:104px}.gtfs-viewer .stat-clickable{cursor:pointer}.gtfs-viewer .stat-clickable:hover{border-color:var(--accent)}.gtfs-viewer .stat-value{font-size:20px;font-weight:600;font-variant-numeric:tabular-nums}.gtfs-viewer .stat-label{font-size:12px;color:var(--muted)}.gtfs-viewer .agency-list{list-style:none;margin:0;padding:0}.gtfs-viewer .agency-list li{display:flex;align-items:baseline;gap:10px;padding:6px 0;border-bottom:1px solid var(--border)}.gtfs-viewer .agency-name{font-weight:600;font-size:13px}.gtfs-viewer .chip-row{display:flex;flex-wrap:wrap;gap:8px}.gtfs-viewer .chip{display:inline-flex;align-items:center;gap:6px;background:var(--chip-bg);border:1px solid var(--border);border-radius:999px;padding:4px 12px;font-size:12px;cursor:pointer}.gtfs-viewer .chip:hover{border-color:var(--accent)}.gtfs-viewer .chip-count{color:var(--muted);font-variant-numeric:tabular-nums}.gtfs-viewer .feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:8px}.gtfs-viewer .feature{border:1px solid var(--border);border-radius:8px;padding:8px 10px;background:var(--panel)}.gtfs-viewer .feature-off{opacity:.55}.gtfs-viewer .feature-name{font-size:13px;font-weight:600}.gtfs-viewer .feature-links{margin-top:4px;display:flex;flex-wrap:wrap;gap:2px 8px}.gtfs-viewer .feature-links .explore-link{margin-right:0}.gtfs-viewer .explore-table{width:100%;border-collapse:collapse;background:var(--panel);font-size:13px}.gtfs-viewer .explore-table th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);border-bottom:1px solid var(--border);padding:6px 8px}.gtfs-viewer .explore-table td{padding:7px 8px;border-bottom:1px solid var(--border);vertical-align:top}.gtfs-viewer .explore-table .numeric{text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer .pattern-name{font-weight:600}.gtfs-viewer .pattern-empty{opacity:.6}.gtfs-viewer .service-ids{max-width:260px;display:flex;flex-wrap:wrap;gap:2px 8px}.gtfs-viewer .service-ids .explore-link{margin-right:0;overflow-wrap:anywhere}.gtfs-viewer .explore-scroll{overflow-x:auto;max-width:100%}.gtfs-viewer .weekday-chart{display:flex;flex-direction:column;gap:3px}.gtfs-viewer .weekday-row{display:flex;align-items:center;gap:8px;font-size:12px}.gtfs-viewer .weekday-name{width:74px;color:var(--muted)}.gtfs-viewer .weekday-track{flex:1;background:var(--chip-bg);border-radius:4px;height:14px}.gtfs-viewer .weekday-bar{display:block;height:100%;border-radius:4px;background:var(--accent);min-width:2px}.gtfs-viewer .weekday-value{width:56px;text-align:right;font-variant-numeric:tabular-nums}.gtfs-viewer .gap-list{list-style:none;margin:0;padding:0;font-size:13px}.gtfs-viewer .gap-list li{padding:3px 0}.gtfs-viewer .calendar-months{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:14px}.gtfs-viewer .month-label{font-size:12px;color:var(--muted);margin-bottom:4px}.gtfs-viewer .month-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.gtfs-viewer .month-weekday{font-size:9px;color:var(--muted);text-align:center}.gtfs-viewer .day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:3px;font-size:9px;color:var(--muted);background:var(--chip-bg)}.gtfs-viewer .day-0{background:var(--chip-bg)}.gtfs-viewer .day-1{background:#cfe0fb;color:#1e3a8a}.gtfs-viewer .day-2{background:#9dc1f7;color:#1e3a8a}.gtfs-viewer .day-3{background:#5d93ee;color:#fff}.gtfs-viewer .day-4{background:#2563eb;color:#fff}.gtfs-viewer .day-blank{background:none}.gtfs-viewer .route-search{font:inherit;font-size:13px;padding:6px 10px;border:1px solid var(--border);border-radius:6px;flex:1 1 160px;min-width:0;max-width:320px}.gtfs-viewer .route-group{margin-top:18px}.gtfs-viewer .route-group-label{font-size:12px;color:var(--muted);margin-bottom:4px}.gtfs-viewer .route-row{cursor:pointer}.gtfs-viewer .route-row:hover{background:var(--accent-bg)}.gtfs-viewer .route-name{font-weight:600}.gtfs-viewer .route-badge{display:inline-block;min-width:34px;text-align:center;padding:2px 8px;border-radius:5px;font-weight:700;font-size:13px;background:var(--chip-bg)}.gtfs-viewer .route-title{display:flex;align-items:center;gap:10px}.gtfs-viewer .route-actions{display:flex;gap:4px;align-items:center}.gtfs-viewer .direction-list{display:flex;flex-wrap:wrap;gap:10px}.gtfs-viewer .direction{border:1px solid var(--border);border-radius:8px;padding:10px 12px;background:var(--panel);min-width:180px}.gtfs-viewer .direction-label{font-weight:600;font-size:13px}.gtfs-viewer .direction .numeric{font-variant-numeric:tabular-nums;margin:4px 0 6px;font-size:12px}.gtfs-viewer .pattern-list{display:flex;flex-direction:column;gap:6px}.gtfs-viewer details.pattern{border:1px solid var(--border);border-radius:8px;background:var(--panel);padding:8px 12px}.gtfs-viewer details.pattern summary{cursor:pointer}.gtfs-viewer .pattern-head{display:inline-flex;gap:10px;align-items:baseline}.gtfs-viewer .stop-sequence{margin:8px 0 0;padding-left:22px;font-size:12px}.gtfs-viewer .stop-sequence li{padding:1px 0}.gtfs-viewer .hour-chart{display:flex;align-items:flex-end;gap:2px;height:110px;padding-top:8px}.gtfs-viewer .hour{flex:1;display:flex;flex-direction:column;justify-content:flex-end;height:100%}.gtfs-viewer .hour-bar{display:block;background:var(--accent);border-radius:2px 2px 0 0;min-height:1px}.gtfs-viewer .hour-label{font-size:9px;color:var(--muted);text-align:center;height:12px}.gtfs-viewer .calendar-legend{display:flex;align-items:center;gap:4px;margin-bottom:10px;font-variant-numeric:tabular-nums}.gtfs-viewer .calendar-legend .day{width:14px;height:14px;aspect-ratio:auto}.gtfs-viewer .calendar-legend .explore-hint{margin-right:6px}.gtfs-viewer .month-grid .day{border:1px solid transparent;font:inherit;font-size:9px;padding:0;cursor:pointer}.gtfs-viewer .month-grid .day-blank{cursor:default}.gtfs-viewer .month-grid .day:hover{border-color:var(--accent)}.gtfs-viewer .day-selected{outline:2px solid var(--accent);outline-offset:1px}.gtfs-viewer .day-panel{border:1px solid var(--accent);border-radius:8px;background:var(--panel);padding:10px 12px;margin-top:14px}.gtfs-viewer .day-panel-head{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:8px}.gtfs-viewer .day-routes{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.gtfs-viewer .day-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}.gtfs-viewer .route-chip{font:inherit;font-size:12px;font-weight:600;border:1px solid var(--border);background:var(--chip-bg);border-radius:5px;padding:2px 8px;cursor:pointer}.gtfs-viewer .route-chip:hover{border-color:var(--accent)}.gtfs-viewer .agency-more{padding-top:8px;border-bottom:none}.gtfs-viewer .map-controls{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--panel);font-size:12px}.gtfs-viewer .pattern-headsign{font-size:12px;color:var(--text)}.gtfs-viewer .pattern-body{margin-top:8px}.gtfs-viewer .pattern-links{margin-top:6px}.gtfs-viewer [data-el=content][data-layout=above] [data-el=panes]{flex-direction:column}.gtfs-viewer [data-el=content][data-layout=above] [data-el=map-pane]{flex:0 0 32%;border-right:none;border-bottom:1px solid var(--border);order:-1}.gtfs-viewer [data-el=content][data-layout=above] [data-el=browse-pane]{border-right:none}.gtfs-viewer [data-el=content][data-layout=none] [data-el=map-pane]{display:none}.gtfs-viewer [data-el=mode-switch]{display:inline-flex;border:1px solid var(--border);border-radius:6px;overflow:hidden}.gtfs-viewer button.mode{border:none;border-radius:0;padding:5px 14px;font-size:13px;background:var(--panel);color:var(--muted)}.gtfs-viewer button.mode.active{background:var(--accent-bg);color:var(--accent);font-weight:600}.gtfs-viewer .date-chip{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:4px 6px 4px 12px;border:1px solid var(--accent);background:var(--accent-bg);border-radius:999px;font-size:13px}.gtfs-viewer [data-el=date-chip-day]{font-weight:600;color:var(--accent)}.gtfs-viewer .date-chip button{border:none;background:none;padding:2px 7px;line-height:1;color:var(--accent);border-radius:999px}.gtfs-viewer .date-chip button:hover{background:var(--panel)}.gtfs-viewer [data-el=date-clear]{font-size:16px}.gtfs-viewer [data-el=toolbar]{position:relative}.gtfs-viewer .date-menu{position:absolute;top:100%;left:12px;z-index:20;min-width:280px;background:var(--panel);border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 24px #0000001f;padding:4px}.gtfs-viewer .date-menu-item{display:flex;justify-content:space-between;gap:16px;width:100%;border:none;background:none;text-align:left;padding:7px 10px;border-radius:6px;font-size:13px}.gtfs-viewer .date-menu-item:hover{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .date-menu-date{color:var(--muted);font-variant-numeric:tabular-nums}.gtfs-viewer .periods{display:flex;flex-direction:column;gap:4px}.gtfs-viewer .period-row{display:flex;align-items:center;gap:10px;font-size:12px}.gtfs-viewer .period-name{width:150px;flex-shrink:0;text-align:right;color:var(--muted);overflow-wrap:anywhere}.gtfs-viewer .period-track{position:relative;flex:1;min-width:0;height:18px;background:var(--chip-bg);border-radius:4px}.gtfs-viewer .period-bar{position:absolute;top:0;height:100%;border:none;border-radius:4px;background:var(--accent);cursor:pointer;padding:0;min-width:3px}.gtfs-viewer .period-bar:hover{background:#1d4ed8}.gtfs-viewer .period-days{width:62px;text-align:right;color:var(--muted);font-variant-numeric:tabular-nums}.gtfs-viewer .period-axis .period-track{background:none;height:auto}.gtfs-viewer .axis-start,.gtfs-viewer .axis-end{color:var(--muted);font-size:11px}.gtfs-viewer .axis-end{float:right}.gtfs-viewer .change-list{list-style:none;margin:0;padding:0;font-size:13px}.gtfs-viewer .change-list li{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:5px 0;border-bottom:1px solid var(--border)}.gtfs-viewer .change-date{font-weight:600;font-variant-numeric:tabular-nums}.gtfs-viewer .day-choices{display:flex;flex-wrap:wrap;gap:8px;margin-top:16px}.gtfs-viewer .day-choice{display:flex;flex-direction:column;gap:2px;align-items:flex-start;padding:10px 14px;border:1px solid var(--border);border-radius:8px;background:var(--panel);text-align:left}.gtfs-viewer .day-choice:hover{border-color:var(--accent)}.gtfs-viewer .day-choice-label{font-weight:600;font-size:13px}.gtfs-viewer .day-choice-date{color:var(--muted);font-size:12px}.gtfs-viewer .timetable-scroll{overflow:auto;max-height:100%;border:1px solid var(--border);border-radius:8px;background:var(--panel)}.gtfs-viewer table.timetable{width:auto;border-collapse:separate;border-spacing:0;font-size:12px;font-variant-numeric:tabular-nums}.gtfs-viewer table.timetable th,.gtfs-viewer table.timetable td{padding:4px 8px;border-bottom:1px solid var(--border);white-space:nowrap}.gtfs-viewer table.timetable thead th{position:sticky;top:0;z-index:2;background:var(--panel);border-bottom:1px solid var(--border)}.gtfs-viewer table.timetable .stop-head,.gtfs-viewer table.timetable .stop-cell{position:sticky;left:0;z-index:1;background:var(--panel);border-right:1px solid var(--border);text-align:left;min-width:170px}.gtfs-viewer table.timetable thead .stop-head{z-index:3}.gtfs-viewer .trip-head{cursor:pointer;font-weight:600;text-align:right}.gtfs-viewer .trip-head:hover{background:var(--accent-bg)}.gtfs-viewer .trip-head.selected{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .trip-block{font-weight:400;font-size:10px;color:var(--muted)}.gtfs-viewer .time-cell{text-align:right}.gtfs-viewer .destination-chips{gap:16px}.gtfs-viewer .destination-chips .chip-group{display:flex;flex-wrap:wrap;gap:6px}.gtfs-viewer .time-cell.col-selected{background:var(--accent-bg)}.gtfs-viewer .time-linked{cursor:pointer}.gtfs-viewer .time-linked:hover{background:var(--accent-bg);color:var(--accent)}.gtfs-viewer .stop-name{border:none;background:none;padding:0;font:inherit;color:var(--text);text-align:left;cursor:pointer}.gtfs-viewer .stop-name:hover{color:var(--accent);text-decoration:underline}.gtfs-viewer .stop-cell a.explore-link{margin-left:8px;font-size:10.5px;color:var(--muted)}.gtfs-viewer .stop-cell a.explore-link:hover{color:var(--accent)}.gtfs-viewer .stop-cell.selected{background:var(--accent-bg)}.gtfs-viewer .stop-cell.selected .stop-name{color:var(--accent);font-weight:600}.gtfs-viewer .timetable-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.gtfs-viewer .timetable-controls .raw-toggle{margin-left:auto}.gtfs-viewer .map-note{margin-top:8px}.gtfs-viewer .stop-mark{width:18px;height:18px;border-radius:50%;border:2px solid var(--accent);background:#2563eb2e;box-shadow:0 0 #2563eb80;animation:gtfs-stop-mark 1.4s ease-out 3}@keyframes gtfs-stop-mark{0%{box-shadow:0 0 #2563eb80}to{box-shadow:0 0 0 16px #2563eb00}}@media(prefers-reduced-motion:reduce){.gtfs-viewer .stop-mark{animation:none}}.gtfs-viewer .time-blank{color:var(--border)}.gtfs-viewer .timetable-grid-wrap{margin-top:14px;min-height:0}.gtfs-viewer .chip.active{background:var(--accent-bg);color:var(--accent);border-color:var(--accent)}.gtfs-viewer .facets{display:flex;flex-direction:column;gap:6px;margin-top:14px}.gtfs-viewer .facet-row{display:flex;align-items:baseline;flex-wrap:wrap;gap:6px}.gtfs-viewer .facet-label{width:110px;flex-shrink:0;font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}.gtfs-viewer .facet-chip{padding:3px 10px;font-size:12px}.gtfs-viewer .facet-chip.active{background:var(--accent);color:#fff;border-color:var(--accent)}.gtfs-viewer .facet-chip.active .chip-count{color:#fffc}.gtfs-viewer .facet-chip.facet-empty{opacity:.45}.gtfs-viewer .facet-summary{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;margin-top:12px;font-size:13px;font-weight:600}.gtfs-viewer .facet-summary .explore-hint{font-weight:400}
@@ -0,0 +1,167 @@
1
+ const s = {
2
+ type: "FeatureCollection",
3
+ features: []
4
+ }, a = () => ({ type: "geojson", data: s }), u = ["interpolate", ["linear"], ["zoom"], 6, 1.5, 12, 3, 16, 5], p = 0.45, S = ["interpolate", ["linear"], ["zoom"], 6, 3, 12, 5, 16, 7], C = 0.95, h = ["match", ["get", "route_type"], "3", 1, "1", 4, 3], m = ["match", ["get", "route_type"], "3", 3.5, "1", 5, 4], y = ["match", ["get", "route_type"], "3", 5, "1", 10, 7], I = ["match", ["get", "route_type"], "3", 6, "1", 9, 7], f = ["match", ["get", "route_type"], "1", 0.8, "3", 0.6, 0.7], U = 0.95, g = "#6b7280", d = [
5
+ "let",
6
+ "rgba",
7
+ ["to-rgba", ["to-color", ["concat", "#", ["get", "route_color"]], "#3388ff"]],
8
+ [
9
+ "case",
10
+ [
11
+ ">",
12
+ [
13
+ "+",
14
+ ["*", 0.2126, ["at", 0, ["var", "rgba"]]],
15
+ ["*", 0.7152, ["at", 1, ["var", "rgba"]]],
16
+ ["*", 0.0722, ["at", 2, ["var", "rgba"]]]
17
+ ],
18
+ 0.85 * 255
19
+ ],
20
+ g,
21
+ ["to-color", ["concat", "#", ["get", "route_color"]], "#3388ff"]
22
+ ]
23
+ ], r = "#ff0066";
24
+ function R(t) {
25
+ const e = typeof t == "string" ? t.trim().replace(/^#/, "") : "";
26
+ if (!/^[0-9a-fA-F]{6}$/.test(e)) return null;
27
+ const [o, i, l] = [0, 2, 4].map((c) => parseInt(e.slice(c, c + 2), 16) / 255);
28
+ return 0.2126 * o + 0.7152 * i + 0.0722 * l > 0.85 ? null : `#${e}`;
29
+ }
30
+ const O = ["locations", "routes", "shapes", "stops", "highlight"];
31
+ function _() {
32
+ return Object.fromEntries(O.map((t) => [t, a()]));
33
+ }
34
+ function T() {
35
+ return [
36
+ // Zones first, so they sit under the lines. A zone is an area a rider can
37
+ // be picked up in, not a thing drawn on top of the network.
38
+ {
39
+ id: "locations-fill",
40
+ type: "fill",
41
+ source: "locations",
42
+ paint: { "fill-color": "#7c3aed", "fill-opacity": 0.12 }
43
+ },
44
+ {
45
+ id: "locations-outline",
46
+ type: "line",
47
+ source: "locations",
48
+ paint: { "line-color": "#7c3aed", "line-width": 1, "line-opacity": 0.5 }
49
+ },
50
+ // Shapes no route claims (feeds whose trips.txt has no shape_id) still need
51
+ // drawing, otherwise those feeds render an empty map.
52
+ {
53
+ id: "shapes",
54
+ type: "line",
55
+ source: "shapes",
56
+ paint: { "line-color": "#9ca3af", "line-width": 1.5, "line-opacity": 0.6 }
57
+ },
58
+ {
59
+ id: "routes-white",
60
+ type: "line",
61
+ source: "routes",
62
+ layout: { "line-cap": "round", "line-join": "round" },
63
+ paint: {
64
+ "line-color": "#ffffff",
65
+ "line-width": y,
66
+ "line-opacity": 0.8
67
+ }
68
+ },
69
+ {
70
+ id: "routes",
71
+ type: "line",
72
+ source: "routes",
73
+ layout: { "line-cap": "round", "line-join": "round" },
74
+ paint: {
75
+ "line-color": d,
76
+ "line-width": h,
77
+ "line-opacity": f
78
+ }
79
+ },
80
+ {
81
+ id: "stops",
82
+ type: "circle",
83
+ source: "stops",
84
+ paint: {
85
+ "circle-radius": u,
86
+ "circle-color": "#1c1e21",
87
+ "circle-opacity": p
88
+ }
89
+ },
90
+ {
91
+ id: "highlight-fill",
92
+ type: "fill",
93
+ source: "highlight",
94
+ filter: ["==", ["geometry-type"], "Polygon"],
95
+ paint: { "fill-color": r, "fill-opacity": 0.25 }
96
+ },
97
+ {
98
+ id: "highlight-line",
99
+ type: "line",
100
+ source: "highlight",
101
+ filter: ["!=", ["geometry-type"], "Point"],
102
+ layout: { "line-cap": "round", "line-join": "round" },
103
+ // A focused route's shapes carry its own colour, so the line reads as
104
+ // the same route it is everywhere else; anything else - a row picked in
105
+ // a table - has none and keeps the highlight's own.
106
+ paint: {
107
+ "line-color": ["coalesce", ["get", "highlight_color"], r],
108
+ "line-width": 5,
109
+ "line-opacity": 0.95
110
+ }
111
+ },
112
+ {
113
+ id: "highlight-point-outer",
114
+ type: "circle",
115
+ source: "highlight",
116
+ filter: ["==", ["geometry-type"], "Point"],
117
+ paint: { "circle-radius": 9, "circle-color": "#ffffff", "circle-opacity": 1 }
118
+ },
119
+ {
120
+ id: "highlight-point",
121
+ type: "circle",
122
+ source: "highlight",
123
+ filter: ["==", ["geometry-type"], "Point"],
124
+ paint: { "circle-radius": 6, "circle-color": r, "circle-opacity": 1 }
125
+ }
126
+ ];
127
+ }
128
+ function n() {
129
+ return { version: 8, sources: {}, layers: [] };
130
+ }
131
+ async function P(t) {
132
+ let e = n();
133
+ if (t.kind === "vector" && t.url)
134
+ try {
135
+ const o = await fetch(t.url);
136
+ if (!o.ok) throw new Error(`${o.status} ${o.statusText}`);
137
+ if (e = await o.json(), t.attribution)
138
+ for (const i of Object.values(e.sources))
139
+ i.attribution = t.attribution;
140
+ } catch (o) {
141
+ console.error(`Basemap ${t.url} could not be loaded; continuing without one.`, o), e = n();
142
+ }
143
+ else t.kind === "raster" && t.url && (e.sources.basemap = {
144
+ type: "raster",
145
+ tiles: [t.url],
146
+ tileSize: 256,
147
+ attribution: t.attribution
148
+ }, e.layers.push({ id: "basemap", type: "raster", source: "basemap", minzoom: 0, maxzoom: 22 }));
149
+ return Object.assign(e.sources, _()), e.layers.push(...T()), e;
150
+ }
151
+ export {
152
+ s as E,
153
+ g as P,
154
+ m as R,
155
+ S,
156
+ h as a,
157
+ P as b,
158
+ U as c,
159
+ f as d,
160
+ I as e,
161
+ y as f,
162
+ u as g,
163
+ C as h,
164
+ p as i,
165
+ O as j,
166
+ R as r
167
+ };
@@ -28,6 +28,39 @@ export declare const STOP_RADIUS: (string | number | string[])[];
28
28
  export declare const STOP_OPACITY = 0.45;
29
29
  export declare const STOP_RADIUS_FOCUSED: (string | number | string[])[];
30
30
  export declare const STOP_OPACITY_FOCUSED = 0.95;
31
+ /**
32
+ * How routes are drawn: across the network, and when they are the subject.
33
+ *
34
+ * Thin across the network, where two hundred routes have to share the map.
35
+ * Picked out on their own - a filtered list, a route's card - the same widths
36
+ * left a bus route a 1px line inside its white casing, which read as a white
37
+ * road rather than a route. Exported in pairs so the map swaps between them
38
+ * the way it swaps the stops'.
39
+ */
40
+ export declare const ROUTE_WIDTH: (string | number | string[])[];
41
+ export declare const ROUTE_WIDTH_FOCUSED: (string | number | string[])[];
42
+ export declare const ROUTE_CASING_WIDTH: (string | number | string[])[];
43
+ export declare const ROUTE_CASING_WIDTH_FOCUSED: (string | number | string[])[];
44
+ export declare const ROUTE_OPACITY: (string | number | string[])[];
45
+ export declare const ROUTE_OPACITY_FOCUSED = 0.95;
46
+ /**
47
+ * What a route whose own colour is too pale to see is drawn in.
48
+ *
49
+ * GTFS defaults `route_color` to white, and a white line inside a white casing
50
+ * is no line at all - which is how route 84 vanished from a filtered map.
51
+ */
52
+ export declare const PALE_ROUTE_COLOR = "#6b7280";
53
+ /** What the highlight is drawn in when the thing highlighted has no colour of its own. */
54
+ export declare const HIGHLIGHT_COLOR = "#ff0066";
55
+ /**
56
+ * A route's `route_color` as a line colour for its highlight, or null to keep
57
+ * the highlight's own.
58
+ *
59
+ * Null for a colour the feed leaves empty or states unreadably, and for one too
60
+ * pale to see against a light basemap: GTFS defaults `route_color` to white,
61
+ * and a focused route drawn in white is a route that has vanished.
62
+ */
63
+ export declare function routeLineColor(raw: unknown): string | null;
31
64
  export declare const SOURCE_IDS: readonly ["locations", "routes", "shapes", "stops", "highlight"];
32
65
  export type SourceId = (typeof SOURCE_IDS)[number];
33
66
  /**