:root{--transit-accent: #7c3aed;--transit-accent-soft: #f5f3ff}.transit-header{background:linear-gradient(135deg,var(--transit-accent-soft) 0%,#faf5ff 100%);border:1px solid #ddd6fe;border-radius:var(--radius-xl);padding:1.75rem 2rem;margin-bottom:1.5rem}.transit-header h1{font-size:2rem;font-weight:600;color:var(--text-primary);margin:0 0 .35rem}.transit-header .transit-subtitle{color:var(--text-secondary);margin:0 0 .75rem}.transit-modes{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.75rem}.transit-mode-chip{display:inline-flex;align-items:center;gap:.3rem;background:var(--white);border:1px solid #ddd6fe;color:var(--transit-accent);border-radius:999px;padding:.15rem .65rem;font-size:var(--font-size-sm);font-weight:600}button.transit-mode-chip,a.transit-mode-chip[role=tab]{cursor:pointer}button.transit-mode-chip:hover,a.transit-mode-chip[role=tab]:hover{border-color:var(--transit-accent)}button.transit-mode-chip[aria-pressed=true],button.transit-mode-chip[aria-selected=true],a.transit-mode-chip[role=tab][aria-pressed=true],a.transit-mode-chip[role=tab][aria-selected=true]{background:var(--transit-accent);border-color:var(--transit-accent);color:var(--white)}.transit-card{background:var(--white);border:1px solid var(--border-color);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm);padding:1.5rem;margin-bottom:1.5rem}.transit-card>h2{font-size:1.25rem;font-weight:600;margin:0 0 1rem;display:flex;align-items:center;gap:.5rem}.transit-card-meta{color:var(--text-muted);font-size:var(--font-size-sm)}.departure-board{width:100%;border-collapse:collapse}.departure-board th{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);border-bottom:2px solid var(--border-color);padding:.4rem .5rem;text-align:left}.departure-board td{border-bottom:1px solid var(--border-color);padding:.55rem .5rem;vertical-align:middle}.departure-board tr.is-canceled td{color:var(--text-light)}.departure-board tr.is-canceled .departure-headsign{text-decoration:line-through}.departure-board .departure-time{font-variant-numeric:tabular-nums;font-weight:600;white-space:nowrap}.departure-board .departure-time-planned-old{text-decoration:line-through;color:var(--text-light);font-weight:400;margin-right:.35rem}.departure-board .departure-countdown{display:block;font-size:.75rem;font-weight:400;color:var(--text-muted)}.line-badge{display:inline-flex;align-items:center;justify-content:center;min-width:2.4rem;padding:.15rem .45rem;border-radius:var(--radius-md);font-weight:700;font-size:.85rem;color:#fff;background:var(--ui-dark)}.line-badge.mode-TRAIN{background:#be123c}.line-badge.mode-METRO{background:#1d4ed8}.line-badge.mode-TRAM{background:#0f766e}.line-badge.mode-BUS{background:#b45309}.line-badge.mode-BOAT{background:#0369a1}.line-badge.mode-TAXI{background:#4b5563}.departure-status{font-size:.75rem;font-weight:700;border-radius:999px;padding:.1rem .55rem;white-space:nowrap}.departure-status.status-ontime{background:#dcfce7;color:#15803d}.departure-status.status-late{background:#fef3c7;color:#a16207}.departure-status.status-very-late,.departure-status.status-canceled{background:#fee2e2;color:#b91c1c}.departure-status.status-planned{background:var(--bg-light);color:var(--text-muted)}.departure-status.status-current{background:#fee2e2;color:#b91c1c}.departure-status.status-upcoming{background:#dbeafe;color:#1d4ed8}.occupancy{display:inline-flex;align-items:center;gap:.35rem;font-size:.75rem;font-weight:600;white-space:nowrap;color:var(--text-muted)}.occupancy .occupancy-bars{display:inline-flex;align-items:flex-end;gap:2px;height:.8rem}.occupancy .occupancy-bars i{display:block;width:4px;border-radius:1px;background:var(--border-color)}.occupancy .occupancy-bars i:nth-child(1){height:45%}.occupancy .occupancy-bars i:nth-child(2){height:72%}.occupancy .occupancy-bars i:nth-child(3){height:100%}.occupancy.occupancy-low i:nth-child(-n+1){background:#15803d}.occupancy.occupancy-medium i:nth-child(-n+2){background:#a16207}.occupancy.occupancy-high i:nth-child(-n+3){background:#b91c1c}.occupancy.occupancy-low .occupancy-label{color:#15803d}.occupancy.occupancy-medium .occupancy-label{color:#a16207}.occupancy.occupancy-high .occupancy-label{color:#b91c1c}.transit-line-departures .occupancy{margin-right:.4rem}.departure-board-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:.5rem;margin-top:.75rem;color:var(--text-muted);font-size:var(--font-size-sm)}.transit-alert{border-left:4px solid var(--warning);background:#fffbeb;border-radius:var(--radius-lg);padding:.85rem 1rem;margin-bottom:.75rem}.transit-alert:last-child{margin-bottom:0}.transit-alert .transit-alert-header{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin-bottom:.25rem}.transit-alert .transit-alert-title{font-weight:700;color:var(--text-primary);margin:0;font-size:1rem}.transit-alert .transit-alert-operator{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.transit-alert .transit-alert-text{margin:.25rem 0;white-space:pre-line;color:var(--text-secondary)}.transit-alert .transit-alert-lines{display:flex;flex-wrap:wrap;gap:.3rem;margin:.4rem 0}.transit-alert .transit-alert-meta{font-size:var(--font-size-sm);color:var(--text-muted)}.transit-lines{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:.5rem}.transit-line{display:flex;align-items:center;gap:.6rem;border:1px solid var(--border-color);border-radius:var(--radius-lg);padding:.45rem .6rem}.transit-line .transit-line-name{flex:1;min-width:0;font-size:.85rem;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.transit-watch-btn{border:1px solid var(--border-color);background:var(--white);color:var(--text-secondary);border-radius:var(--radius-md);padding:.15rem .45rem;font-size:.85rem;line-height:1.4}.transit-watch-btn:hover{border-color:var(--transit-accent);color:var(--transit-accent)}.transit-watch-btn[aria-pressed=true]{background:var(--transit-accent-soft);border-color:var(--transit-accent);color:var(--transit-accent)}.transit-station-list{list-style:none;padding:0;margin:0;columns:3 14rem;column-gap:1.5rem}.transit-station-list li{break-inside:avoid;padding:.2rem 0}.transit-station-list .transit-station-modes{color:var(--text-muted);font-size:.75rem;margin-left:.25rem}.transit-letter{font-weight:700;color:var(--transit-accent);margin-top:.5rem}.transit-results{list-style:none;padding:0;margin:0}.transit-results li{display:flex;justify-content:space-between;gap:1rem;padding:.5rem 0;border-bottom:1px solid var(--border-color)}.transit-results li:last-child{border-bottom:0}.transit-filters{display:flex;flex-wrap:wrap;gap:.75rem;align-items:flex-end;margin-bottom:1rem}.transit-filters .form-select,.transit-filters .form-control{min-width:12rem}.transit-suggest{position:relative}.transit-suggestions{position:absolute;top:calc(100% + .25rem);left:0;right:0;min-width:18rem;z-index:1000;list-style:none;margin:0;padding:.25rem 0;background:var(--white);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-md, 0 8px 24px rgba(0, 0, 0, .12));max-height:22rem;overflow-y:auto}.transit-suggestions [role=option]{display:flex;flex-direction:column;padding:.45rem .75rem;cursor:pointer}.transit-suggestions [role=option][aria-selected=true]{background:var(--transit-accent-soft)}.transit-suggestions .transit-suggestion-name{font-weight:600;color:var(--text-primary)}.transit-suggestions .transit-suggestion-name mark{background:none;padding:0;color:var(--transit-accent)}.transit-suggestions .transit-suggestion-meta{font-size:var(--font-size-sm);color:var(--text-muted)}.transit-suggestions .transit-suggestion-type{display:inline-block;padding:0 .4rem;border-radius:var(--radius-sm);font-size:.75rem;font-weight:600;background:var(--transit-accent-soft);color:var(--transit-accent)}.transit-suggestions .transit-suggestion-type-rail{background:var(--surface-subtle);color:var(--text-primary)}.transit-suggestions .transit-suggestion-empty{padding:.45rem .75rem;color:var(--text-muted)}.transit-watch-dialog{border:0;border-radius:var(--radius-xl);box-shadow:var(--shadow-lg, 0 16px 48px rgba(0, 0, 0, .2));padding:1.5rem;width:min(32rem,100vw - 2rem)}.transit-watch-dialog::backdrop{background:rgba(15,23,42,.45)}#transit-map{height:260px;border-radius:var(--radius-lg)}.transit-notice{background:var(--bg-light);border-radius:var(--radius-lg);padding:.75rem 1rem;color:var(--text-secondary);font-size:.9rem}a.line-badge{text-decoration:none}a.line-badge:hover{filter:brightness(1.1)}.line-badge-lg{font-size:1.25rem;min-width:3rem;padding:.2rem .6rem;vertical-align:.15em}.transit-line-directions{display:grid;grid-template-columns:repeat(auto-fit,minmax(20rem,1fr));gap:0 1.5rem}.transit-line-departures{list-style:none;padding:0;margin:0 0 .5rem}.transit-line-departures li{display:flex;justify-content:space-between;padding:.3rem 0;border-bottom:1px solid var(--border-color)}.transit-line-departures li.is-canceled .departure-time{text-decoration:line-through;color:var(--text-light)}.transit-line-departures .transit-line-headsign{flex:1;margin-left:.75rem;color:var(--text-secondary)}.transit-line-stops{padding-left:1.5rem;margin:0}.transit-line-stops li{padding:.15rem 0}.transit-line-stops li::marker{color:var(--transit-accent);font-size:.8em}.transit-line-stops li.is-selected>a{font-weight:700}.transit-line-list{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:.4rem 1rem}.transit-line-list li{display:flex;align-items:center;gap:.5rem}.history-chart{display:flex;align-items:stretch;gap:2px;height:6rem;border-bottom:1px solid var(--border-color);margin-bottom:1.25rem}.history-col{position:relative;flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;outline:none}.history-bar{width:100%;max-width:24px;border-radius:4px 4px 0 0;background:var(--transit-accent);opacity:.85}.history-col-label{position:absolute;bottom:-1.2rem;font-size:.7rem;color:var(--text-muted);white-space:nowrap}.history-col:nth-child(even) .history-col-label{visibility:hidden}[data-tip]:hover:after,[data-tip]:focus:after{content:attr(data-tip);position:absolute;bottom:calc(100% + .25rem);left:50%;transform:translate(-50%);z-index:5;white-space:nowrap;background:var(--ui-dark, #1f2937);color:#fff;font-size:.75rem;padding:.25rem .5rem;border-radius:var(--radius-md);pointer-events:none}[data-tip]:hover .history-bar,[data-tip]:focus .history-bar{opacity:1}.history-list li.is-ended a{color:var(--text-secondary)}.alert-timeline{list-style:none;padding:0 0 0 1rem;margin:0;border-left:2px solid var(--border-color)}.alert-timeline li{position:relative;padding:.25rem 0 .5rem .5rem}.alert-timeline li:before{content:"";position:absolute;left:-1.4rem;top:.55rem;width:10px;height:10px;border-radius:50%;background:var(--transit-accent);box-shadow:0 0 0 2px var(--white)}.alert-timeline li.alert-timeline-ended:before{background:var(--text-muted)}.alert-timeline time{font-weight:600;margin-right:.5rem;font-variant-numeric:tabular-nums}.rail-header{--transit-accent: #be123c;background:linear-gradient(135deg,#fff1f2 0%,#fff7f7 100%);border-color:#fecdd3}.rail-header .transit-mode-chip{border-color:#fecdd3}.station-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;margin:.75rem 0 1rem;max-width:40rem}.station-switch .station-switch-item{display:flex;align-items:center;gap:.6rem;padding:.6rem .85rem;border:1px solid var(--border-color);border-radius:var(--radius-lg);background:var(--white);color:var(--text-primary);text-decoration:none;min-width:0}.station-switch .station-switch-item>.bi{font-size:1.35rem;flex-shrink:0}.station-switch .station-switch-item>span{display:flex;flex-direction:column;min-width:0}.station-switch .station-switch-item:nth-child(1)>.bi{color:#be123c}.station-switch .station-switch-item:nth-child(2)>.bi{color:#7c3aed}.station-switch a.station-switch-item:hover,.station-switch a.station-switch-item:focus-visible{border-color:currentColor;box-shadow:var(--shadow-sm, 0 1px 3px rgba(0, 0, 0, .08))}.station-switch .station-switch-item.is-current:nth-child(1){border:2px solid #be123c}.station-switch .station-switch-item.is-current:nth-child(2){border:2px solid #7c3aed}.station-switch .station-switch-label{font-weight:600}.station-switch .station-switch-meta{font-size:var(--font-size-sm);color:var(--text-muted)}@media (max-width: 480px){.station-switch{grid-template-columns:1fr}}a.transit-mode-chip{text-decoration:none}.transit-mode-chip.rail-chip-alert{color:#b91c1c;border-color:#fecaca}.transit-mode-chip.rail-chip-ok{color:#15803d;border-color:#bbf7d0}.rail-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:.75rem;margin-bottom:1.5rem}.rail-stat{background:var(--white);border:1px solid var(--border-color);border-radius:var(--radius-xl);box-shadow:var(--shadow-sm);padding:1rem 1.25rem;display:flex;flex-direction:column}.rail-stat .rail-stat-value{font-size:1.75rem;font-weight:700;font-variant-numeric:tabular-nums;color:var(--text-primary);line-height:1.1}.rail-stat .rail-stat-label{color:var(--text-muted);font-size:var(--font-size-sm)}.transit-alert.is-ended,.transit-alert.is-resolved{border-left-color:var(--border-color);background:var(--bg-light)}.transit-alert.is-upcoming{border-left-color:#93c5fd;background:#f8fafc}.rail-message{border-left:4px solid var(--border-color);background:var(--bg-light);border-radius:var(--radius-lg);padding:.75rem 1rem;margin-bottom:.75rem}.rail-message:last-child{margin-bottom:0}.rail-message.priority-high{border-left-color:var(--danger, #dc2626);background:#fef2f2}.rail-message.priority-normal{border-left-color:var(--warning);background:#fffbeb}.rail-board .rail-via,.rail-board .rail-note{display:block;font-size:.8rem;color:var(--text-muted)}.rail-board .rail-note{color:#a16207}.rail-board .rail-train{white-space:nowrap}.rail-board .rail-train .line-badge{min-width:2rem;margin-right:.25rem}.rail-board .rail-train-name{font-size:.85rem}.rail-board .rail-train-number{display:block;font-size:.75rem;color:var(--text-muted)}.transit-results li.is-canceled{color:var(--text-light)}a.rail-train-number{color:inherit;text-decoration:underline dotted}.rail-journey tr.is-passed td{color:var(--text-muted)}.rail-journey tr.is-current td{background:#fff1f2}.rail-journey .rail-delay{color:#b91c1c}.rail-day[aria-current=date]{background:var(--transit-accent);border-color:var(--transit-accent);color:var(--white)}.rail-punctuality{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(6.5rem,1fr));gap:.4rem}.rail-punctuality li{display:flex;flex-direction:column;border-radius:var(--radius-lg);padding:.4rem .6rem;font-size:var(--font-size-sm);background:#dcfce7;color:#15803d}.rail-punctuality li.is-late{background:#fef3c7;color:#a16207}.rail-punctuality li.is-canceled{background:#fee2e2;color:#b91c1c}@media (max-width: 768px){.transit-header{padding:1.25rem}.transit-header h1{font-size:1.5rem}.transit-card{padding:1rem}.departure-board .col-mode,.departure-board .col-platform{display:none}.departure-board .occupancy-label{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}.rail-board .col-platform{display:table-cell}.rail-board .rail-train-name{display:none}}
