@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";:root{--bg-primary:#0f1117;--bg-card:#1a1d27;--bg-card-hover:#222632;--bg-subtle:#ffffff0a;--border-color:#2a2e3a;--shadow-card:0 1px 3px #0000004d;--text-primary:#e8eaed;--text-secondary:#9aa0ab;--text-muted:#6b7280;--accent-blue:#60a5fa;--accent-green:#34d399;--accent-yellow:#fbbf24;--accent-red:#f87171;--accent-orange:#fb923c;--accent-purple:#a78bfa;--accent-teal:#2dd4bf;--alert-bg:#fbbf241a;--alert-border:#fbbf2433;--alert-text:#fbbf24;--capacity-empty-bg:#34d3991f;--capacity-some-bg:#fbbf241f;--capacity-full-bg:#f871711f;--news-source-path-bg:#60a5fa33;--news-source-njt-bg:#34d39933;--news-source-panynj-bg:#a78bfa33;--news-source-ferry-bg:#fbbf2433}[data-theme=light]{--bg-primary:#eef1f5;--bg-card:#fff;--bg-card-hover:#f5f6f8;--bg-subtle:#00000009;--border-color:#d4d8e0;--shadow-card:0 1px 4px #00000014, 0 0 1px #0000000d;--text-primary:#111827;--text-secondary:#4b5563;--text-muted:#6b7280;--accent-blue:#2563eb;--accent-green:#059669;--accent-yellow:#b45309;--accent-red:#dc2626;--accent-orange:#c2410c;--accent-purple:#7c3aed;--accent-teal:#0d9488;--alert-bg:#fef3c7;--alert-border:#f59e0b;--alert-text:#92400e;--capacity-empty-bg:#d1fae5;--capacity-some-bg:#fef3c7;--capacity-full-bg:#fee2e2;--news-source-path-bg:#dbeafe;--news-source-njt-bg:#d1fae5;--news-source-panynj-bg:#ede9fe;--news-source-ferry-bg:#fef3c7}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{width:100%;height:100%;overflow:hidden}@media (width<=480px){html,body,#root{height:auto;min-height:100%;overflow:visible}}body{background:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;font-family:Inter,-apple-system,BlinkMacSystemFont,sans-serif;transition:background .5s,color .5s}.dashboard{grid-template-rows:auto auto auto 1fr 1fr;grid-template-columns:1fr 1fr 1fr;gap:clamp(4px,.7vw,12px);width:100vw;height:100vh;padding:clamp(6px,1vw,20px);display:grid;overflow:hidden}.pull-indicator{background:var(--accent-blue);transform-origin:0;z-index:1000;border-radius:0 2px 2px 0;width:100%;height:3px;transition:opacity .1s;position:fixed;top:0;left:0}.connectivity-banner{background:var(--capacity-full-bg);border:1px solid var(--accent-red);color:var(--accent-red);border-radius:clamp(3px,.4vw,6px);flex-shrink:0;grid-column:1/-1;align-items:center;gap:clamp(4px,.5vw,10px);max-height:clamp(24px,3vh,40px);padding:clamp(3px,.4vh,8px) clamp(8px,1vw,16px);font-size:clamp(8px,1vw,14px);font-weight:500;display:flex}.connectivity-icon{flex-shrink:0;width:clamp(12px,1.4vw,20px);height:clamp(12px,1.4vw,20px)}.header{grid-column:1/-1;justify-content:space-between;align-items:center;padding:clamp(2px,.5vh,10px) clamp(4px,.8vw,14px);display:flex}.header-left{align-items:center;gap:clamp(6px,1vw,16px);display:flex}.header-title{letter-spacing:-.02em;font-size:clamp(14px,2vw,36px);font-weight:700}.header-logo{letter-spacing:-.5px;font-size:clamp(14px,2vw,36px);font-weight:900}.header-logo-accent{color:var(--accent-purple,#a78bfa)}.direction-toggle{cursor:pointer;color:var(--text-primary);background:0 0;border:none;align-items:center;gap:clamp(4px,.5vw,10px);padding:0;font-family:inherit;transition:opacity .2s;display:flex}.direction-toggle:hover{opacity:.7}.direction-toggle-icon{width:clamp(10px,1.3vw,20px);height:clamp(10px,1.3vw,20px);color:var(--text-muted)}.header-subtitle{color:var(--text-muted);font-size:clamp(9px,1.2vw,18px);font-weight:500}.header-right{align-items:center;gap:clamp(8px,1vw,18px);display:flex}.header-time{font-variant-numeric:tabular-nums;color:var(--accent-blue);font-size:clamp(18px,2.8vw,48px);font-weight:700}.theme-toggle{background:var(--bg-subtle);border:1px solid var(--border-color);cursor:pointer;width:clamp(24px,2.8vw,44px);height:clamp(24px,2.8vw,44px);color:var(--text-secondary);border-radius:50%;justify-content:center;align-items:center;transition:background .3s,color .3s,border-color .3s;display:flex}.theme-toggle:hover{background:var(--bg-card-hover);color:var(--text-primary)}.theme-toggle-icon{width:clamp(12px,1.5vw,24px);height:clamp(12px,1.5vw,24px)}.card{background:var(--bg-card);border:1px solid var(--border-color);box-shadow:var(--shadow-card);border-radius:clamp(6px,1vw,16px);flex-direction:column;height:100%;min-height:0;padding:clamp(6px,1vw,18px) clamp(8px,1.2vw,22px);transition:background .5s,border-color .5s,box-shadow .5s;display:flex;overflow:hidden}.card-header{flex-shrink:0;align-items:center;gap:clamp(4px,.6vw,12px);margin-bottom:clamp(4px,.6vh,12px);display:flex}.card-icon{flex-shrink:0;width:clamp(14px,1.8vw,32px);height:clamp(22px,2.8vw,48px)}.card-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);font-size:clamp(9px,1.2vw,18px);font-weight:600}.card-body{flex-direction:column;flex:1;justify-content:center;display:flex;overflow:hidden}.top-row{grid-column:1/-1;grid-template-columns:1fr 1fr;gap:clamp(4px,.7vw,12px);display:grid}.tunnel-card .card-icon{color:var(--accent-orange)}.tunnel-card .card-body{justify-content:flex-start}.tunnel-grid{grid-template-columns:1fr 1fr;gap:clamp(6px,1vw,16px);display:grid}.tunnel-entry{flex-direction:column;gap:clamp(1px,.2vh,4px);display:flex}.tunnel-entry-name{color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;font-size:clamp(8px,1vw,14px);font-weight:600}.tunnel-entry-stats{align-items:baseline;gap:clamp(3px,.4vw,8px);display:flex}.tunnel-speed{color:var(--text-muted);align-items:center;gap:clamp(2px,.2vw,4px);margin-left:clamp(2px,.3vw,6px);font-size:clamp(8px,1vw,14px);font-weight:500;display:flex}.tunnel-entry .inline-alert{margin-top:clamp(2px,.3vh,4px)}.tunnel-time{color:var(--accent-green);font-size:clamp(20px,3.2vw,52px);font-weight:700;line-height:1}.tunnel-time.moderate{color:var(--accent-yellow)}.tunnel-time.heavy{color:var(--accent-orange)}.tunnel-time.severe{color:var(--accent-red)}.tunnel-unit{color:var(--text-secondary);font-size:clamp(9px,1.2vw,18px);font-weight:500}.tunnel-speed-icon{width:clamp(9px,1vw,14px);height:clamp(9px,1vw,14px)}.tunnel-alerts{flex-direction:column;gap:clamp(2px,.3vh,4px);max-height:clamp(40px,8vh,120px);display:flex;overflow-y:auto}.tunnel-alerts .inline-alert{margin-top:0}.inline-alert{background:var(--alert-bg);border:1px solid var(--alert-border);color:var(--alert-text);border-radius:clamp(3px,.4vw,6px);align-items:flex-start;gap:clamp(3px,.5vw,8px);margin-top:clamp(3px,.4vh,8px);padding:clamp(3px,.4vh,8px) clamp(5px,.7vw,12px);font-size:clamp(7px,1vw,14px);line-height:1.35;display:flex}.inline-alert-icon{flex-shrink:0;width:clamp(10px,1.2vw,18px);height:clamp(10px,1.2vw,18px);margin-top:1px}.inline-alert-dismiss{color:var(--alert-text);opacity:.5;cursor:pointer;background:0 0;border:none;border-radius:3px;flex-shrink:0;margin-left:auto;padding:2px;line-height:1}.inline-alert-dismiss:hover{opacity:1;background:var(--alert-border)}.weather-card .card-icon{color:var(--accent-blue)}.weather-card .card-header{gap:clamp(4px,.6vw,12px)}.weather-location-toggle{background:var(--bg-subtle);border:1px solid var(--border-color);cursor:pointer;color:var(--text-muted);border-radius:clamp(3px,.4vw,8px);align-items:center;gap:clamp(2px,.3vw,5px);margin-left:auto;padding:clamp(1px,.15vh,3px) clamp(4px,.5vw,10px);font-family:inherit;font-size:clamp(7px,.85vw,12px);font-weight:600;transition:background .2s,color .2s;display:flex}.weather-location-toggle:hover{background:var(--bg-card-hover);color:var(--text-primary)}.weather-location-icon{width:clamp(8px,.9vw,14px);height:clamp(8px,.9vw,14px)}.weather-card .card-body{flex:none}.weather-periods{flex:1;grid-template-columns:1fr 1fr 1fr;gap:clamp(4px,.7vw,10px);display:grid}.weather-period{background:var(--bg-subtle);border-radius:clamp(4px,.6vw,12px);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:clamp(2px,.3vh,5px);padding:clamp(6px,.8vw,14px) clamp(3px,.4vw,8px);display:flex}.weather-period-label{color:var(--text-muted);text-transform:uppercase;font-size:clamp(7px,.85vw,12px);font-weight:600}.weather-icon{font-size:clamp(14px,1.8vw,26px);line-height:1}.weather-temp{font-size:clamp(13px,1.8vw,26px);font-weight:700;line-height:1}.weather-temp-row{align-items:center;gap:clamp(3px,.4vw,6px);display:flex}.weather-temp-sep{color:var(--text-muted);opacity:.4;font-size:clamp(8px,1vw,14px)}.weather-humidity{color:var(--text-muted);align-items:center;gap:2px;font-size:clamp(9px,1.1vw,16px);font-weight:500;display:flex}.weather-desc{color:var(--text-secondary);text-align:center;font-size:clamp(7px,.9vw,14px)}.weather-detail{color:var(--text-muted);align-items:center;gap:2px;font-size:clamp(7px,.85vw,13px);display:flex}.weather-detail-icon{width:clamp(8px,.9vw,14px);height:clamp(8px,.9vw,14px)}.bus-card .card-icon{color:var(--text-primary)}.bus-card .card-header{gap:clamp(4px,.5vw,10px)}.card-title-sep{color:var(--text-muted);opacity:.4;font-size:clamp(9px,1.2vw,18px)}.card-title-stop{color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;flex-shrink:1;min-width:0;font-size:clamp(8px,1vw,16px);font-weight:600;overflow:hidden}.bus-source-badge{text-transform:uppercase;letter-spacing:.05em;border-radius:clamp(2px,.3vw,4px);margin-left:auto;padding:clamp(1px,.1vh,2px) clamp(3px,.4vw,7px);font-size:clamp(6px,.7vw,10px);font-weight:700}.bus-source-badge.live{background:var(--capacity-empty-bg);color:var(--accent-green)}.bus-source-badge.sched{background:var(--capacity-some-bg);color:var(--accent-yellow)}.bus-sched-indicator{color:var(--text-muted);opacity:.6;title:"Scheduled";flex-shrink:0;font-size:clamp(10px,1.2vw,18px)}.bus-empty{color:var(--text-muted);flex-direction:column;gap:clamp(2px,.3vh,6px);padding:clamp(4px,.5vh,10px) 0;font-size:clamp(8px,1vw,14px);font-style:italic;display:flex}.bus-service-note{color:var(--text-muted);opacity:.7;font-size:clamp(7px,.85vw,12px);font-style:normal;font-weight:500}.bus-card .card-body{flex-direction:column;flex:1;justify-content:flex-start;display:flex;overflow:hidden}.bus-list{flex-direction:column;gap:clamp(2px,.4vh,8px);display:flex}.bus-row{align-items:center;gap:clamp(5px,.7vw,14px);padding:clamp(2px,.3vh,6px) 0;display:flex}.bus-route{background:var(--accent-blue);color:#fff;text-align:center;border-radius:clamp(2px,.4vw,6px);flex-shrink:0;min-width:clamp(26px,3.5vw,56px);padding:clamp(1px,.2vh,4px) clamp(4px,.6vw,12px);font-size:clamp(9px,1.1vw,18px);font-weight:700}[data-theme=light] .bus-route{color:#fff}.bus-route.nj126{background:var(--accent-green)}.bus-route.nj128{background:var(--accent-purple)}.bus-route.nj165{background:var(--accent-orange)}.bus-route.nj166{background:var(--accent-yellow)}.bus-route.nj119{background:#e8590c}.bus-route.nj89{background:var(--accent-red)}.bus-route.nj22{background:var(--text-muted)}.bus-route.nj23{background:#6366f1}.bus-route.njother{background:var(--text-muted)}[data-theme=light] .bus-route.nj166{color:#fff}.bus-eta-group{font-variant-numeric:tabular-nums;flex:1;align-items:baseline;gap:clamp(3px,.4vw,8px);display:flex}.bus-eta-min{font-size:clamp(10px,1.3vw,20px);font-weight:600}.bus-eta-min.soon{color:var(--accent-green)}.bus-eta-min.moderate{color:var(--accent-yellow)}.bus-eta-min.later{color:var(--text-secondary)}.bus-eta-divider{color:var(--text-muted);opacity:.5;font-size:clamp(8px,1vw,16px)}.bus-eta-clock{color:var(--text-muted);font-size:clamp(8px,1vw,16px);font-weight:500}.bus-capacity{text-transform:uppercase;border-radius:clamp(2px,.3vw,5px);flex-shrink:0;padding:clamp(1px,.15vh,3px) clamp(4px,.5vw,10px);font-size:clamp(7px,.9vw,13px);font-weight:600}.bus-capacity.empty{background:var(--capacity-empty-bg);color:var(--accent-green)}.bus-capacity.some{background:var(--capacity-some-bg);color:var(--accent-yellow)}.bus-capacity.full{background:var(--capacity-full-bg);color:var(--accent-red)}.bus-variant{display:none}.bus-gate-header{color:var(--accent-blue);white-space:nowrap;border:none;border-bottom:1px dashed var(--accent-blue);cursor:pointer;background:0 0;padding:0;font-family:inherit;font-size:clamp(7px,.85vw,12px);font-weight:600;transition:opacity .2s}.bus-gate-header:hover{opacity:.7}.gate-tooltip{z-index:100;cursor:pointer;background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.gate-tooltip-content{background:var(--bg-card);border:1px solid var(--border-color);cursor:default;border-radius:clamp(6px,.8vw,12px);flex-direction:column;gap:clamp(4px,.5vh,10px);padding:clamp(8px,1vw,16px) clamp(12px,1.5vw,24px);display:flex;box-shadow:0 4px 20px #00000040}.gate-tooltip-title{color:var(--text-primary);margin-bottom:clamp(2px,.3vh,4px);font-size:clamp(11px,1.3vw,18px);font-weight:700}.gate-tooltip-row{justify-content:space-between;align-items:center;gap:clamp(12px,2vw,32px);display:flex}.gate-tooltip-time{color:var(--text-secondary);white-space:nowrap;font-size:clamp(10px,1.2vw,16px)}.gate-tooltip-gate{color:var(--accent-blue);white-space:nowrap;font-size:clamp(10px,1.2vw,16px);font-weight:700}.bus-gate{display:none}.transit-bottom-row{grid-column:1/-1;grid-template-columns:1fr 1fr;gap:clamp(4px,.7vw,12px);display:grid}.ferry-card .card-icon{color:#c00}.path-card .card-icon{color:var(--accent-blue)}.nycferry-card .card-icon{color:#00839c}[data-theme=dark] .mnr-clock-face{fill:#fffde8;filter:drop-shadow(0 0 3px #ffd700cc)drop-shadow(0 0 7px #ffc80066)}.lirr-card .card-icon{color:#0039a6}.njtrail-card .card-icon{color:#00953b}.hblr-card .card-icon{color:#6b3fa0}.mtabus-card .card-icon{color:#0039a6}.ferry-card .card-body,.path-card .card-body{justify-content:flex-start}.transit-section-title-inline{color:var(--text-secondary);margin-bottom:clamp(2px,.3vh,6px);font-size:clamp(8px,1vw,15px);font-weight:600}.transit-section-title-inline+.inline-alert{margin-top:0;margin-bottom:clamp(2px,.3vh,6px)}.transit-list{flex-direction:column;gap:clamp(2px,.3vh,6px);display:flex}.transit-row{align-items:center;gap:clamp(5px,.7vw,14px);padding:clamp(2px,.3vh,6px) 0;display:flex}.transit-badge{text-align:center;color:#fff;border-radius:clamp(2px,.4vw,6px);flex-shrink:0;min-width:clamp(34px,4.5vw,70px);padding:clamp(1px,.15vh,3px) clamp(4px,.5vw,10px);font-size:clamp(8px,1vw,15px);font-weight:700}.transit-badge.ferry{background:var(--accent-teal)}.transit-badge.path{background:var(--accent-blue)}.transit-dest{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:clamp(8px,1vw,16px);overflow:hidden}.transit-time{font-variant-numeric:tabular-nums;flex-shrink:0;font-size:clamp(10px,1.3vw,20px);font-weight:600}.transit-time.soon{color:var(--accent-green)}.transit-time.moderate{color:var(--accent-yellow)}.transit-time.later{color:var(--text-secondary)}.transit-eta-clock{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:clamp(8px,1vw,16px);font-weight:500}.news-ticker{background:var(--bg-card);border:1px solid var(--border-color);box-shadow:var(--shadow-card);border-radius:clamp(4px,.6vw,12px);flex-shrink:0;grid-column:1/-1;align-items:center;gap:clamp(6px,1vw,16px);max-height:clamp(28px,4vh,48px);padding:clamp(4px,.5vh,12px) clamp(8px,1vw,16px);transition:background .5s,border-color .5s,box-shadow .5s;display:flex;overflow:hidden}.news-label{text-transform:uppercase;color:var(--accent-red);flex-shrink:0;align-items:center;gap:clamp(3px,.4vw,8px);font-size:clamp(8px,1vw,16px);font-weight:700;display:flex}.news-label-icon{width:clamp(10px,1.2vw,20px);height:clamp(10px,1.2vw,20px)}.news-scroll-container{flex:1;position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 5% 95%,#0000);mask-image:linear-gradient(90deg,#0000,#000 5% 95%,#0000)}.news-scroll{white-space:nowrap;gap:clamp(24px,3vw,56px);width:max-content;animation:60s linear infinite scroll-news;display:flex}.news-item{color:var(--text-secondary);flex-shrink:0;align-items:center;gap:clamp(4px,.6vw,12px);font-size:clamp(9px,1.1vw,17px);display:flex}.news-source{text-transform:uppercase;border-radius:clamp(2px,.3vw,5px);flex-shrink:0;padding:clamp(1px,.15vh,3px) clamp(4px,.5vw,8px);font-size:clamp(7px,.85vw,13px);font-weight:600}.news-source.path{background:var(--news-source-path-bg);color:var(--accent-blue)}.news-source.njtransit{background:var(--news-source-njt-bg);color:var(--accent-green)}.news-source.panynj{background:var(--news-source-panynj-bg);color:var(--accent-purple)}.news-source.ferry{background:var(--news-source-ferry-bg);color:var(--accent-yellow)}.news-source.mta{color:#0039a6;background:#0039a626}@keyframes scroll-news{0%{transform:translate(0)}to{transform:translate(-50%)}}.status-dot{background:var(--accent-green);border-radius:50%;width:clamp(6px,.7vw,12px);height:clamp(6px,.7vw,12px);animation:2s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton-line{background:linear-gradient(90deg, var(--border-color) 25%, var(--bg-subtle) 50%, var(--border-color) 75%);background-size:200% 100%;border-radius:4px;height:14px;animation:1.5s ease-in-out infinite shimmer}.skeleton-row{align-items:center;gap:10px;padding:6px 0;display:flex}.skeleton-row .skeleton-badge{border-radius:50%;flex-shrink:0;width:20px;height:20px}.skeleton-row .skeleton-text{border-radius:3px;flex:1;height:12px}.skeleton-row .skeleton-time{border-radius:3px;flex-shrink:0;width:44px;height:12px}.skeleton-tunnel-row{align-items:center;gap:12px;padding:8px 0;display:flex}.skeleton-tunnel-row .skeleton-name{border-radius:4px;width:60px;height:14px}.skeleton-tunnel-row .skeleton-value{border-radius:4px;width:36px;height:18px}.skeleton-weather-period{flex-direction:column;flex:1;align-items:center;gap:6px;display:flex}.skeleton-weather-period .skeleton-icon{border-radius:50%;width:28px;height:28px}.skeleton-weather-period .skeleton-temp{border-radius:4px;width:32px;height:14px}.settings-btn{background:var(--bg-subtle);border:1px solid var(--border-color);cursor:pointer;width:clamp(24px,2.8vw,44px);height:clamp(24px,2.8vw,44px);color:var(--text-secondary);border-radius:50%;justify-content:center;align-items:center;transition:background .3s,color .3s;display:flex}.settings-btn:hover{background:var(--bg-card-hover);color:var(--text-primary)}.settings-btn-icon{width:clamp(12px,1.5vw,24px);height:clamp(12px,1.5vw,24px)}.settings-overlay{z-index:200;cursor:pointer;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.settings-panel{background:var(--bg-primary);border:1px solid var(--border-color);cursor:default;border-radius:14px;flex-direction:column;width:min(860px,92vw);max-height:min(680px,90vh);display:flex;overflow:hidden;box-shadow:0 8px 40px #0000004d}.settings-header{border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:16px 20px;display:flex}.settings-title{color:var(--text-primary);margin:0;font-size:18px;font-weight:700}.settings-close{cursor:pointer;color:var(--text-muted);background:0 0;border:none;border-radius:6px;justify-content:center;align-items:center;padding:4px;transition:background .2s,color .2s;display:flex}.settings-close:hover{background:var(--bg-subtle);color:var(--text-primary)}.settings-close-icon{width:20px;height:20px}.settings-body{flex-direction:column;flex:1;gap:24px;padding:16px 20px;display:flex;overflow-y:auto}.settings-section-title{text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);align-items:center;gap:8px;margin:0 0 10px;font-size:13px;font-weight:700;display:flex}.settings-section-hint{color:var(--text-muted);text-transform:none;letter-spacing:0;font-size:11px;font-weight:500}.settings-coming-soon-badge{text-transform:uppercase;letter-spacing:.03em;background:var(--bg-subtle);color:var(--text-muted);border:1px solid var(--border-color);border-radius:4px;padding:2px 6px;font-size:9px;font-weight:700}.disabled-section{opacity:.45;pointer-events:none}.settings-display-grid{flex-direction:column;gap:10px;display:flex}.settings-display-row{justify-content:space-between;align-items:center;gap:12px;display:flex}.settings-display-label{color:var(--text-primary);font-size:13px;font-weight:500}.ticker-speed-slider-wrap{align-items:center;gap:10px;min-width:180px;display:flex}.ticker-speed-slider{appearance:none;background:var(--border-color);cursor:pointer;border-radius:3px;outline:none;flex:1;height:6px}.ticker-speed-slider::-webkit-slider-thumb{appearance:none;background:var(--accent-blue);border:2px solid var(--bg-primary);cursor:pointer;border-radius:50%;width:18px;height:18px;transition:transform .1s;box-shadow:0 1px 4px #0003}.ticker-speed-slider::-webkit-slider-thumb:hover{transform:scale(1.15)}.ticker-speed-slider::-moz-range-thumb{background:var(--accent-blue);border:2px solid var(--bg-primary);cursor:pointer;border-radius:50%;width:18px;height:18px;box-shadow:0 1px 4px #0003}.ticker-speed-label{color:var(--accent-blue);text-align:center;min-width:52px;font-size:12px;font-weight:600}.settings-columns{grid-template-columns:1fr 1fr;gap:12px;display:grid}.settings-col-header{flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:8px;display:flex}.settings-col-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;font-size:11px;font-weight:700}.settings-city-select{color:var(--text-primary);background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;border-radius:6px;padding:3px 8px;font-family:inherit;font-size:12px;font-weight:600;transition:border-color .2s}.settings-city-select:focus{border-color:var(--accent-blue);outline:none}.settings-col-title{color:var(--text-secondary);align-items:center;gap:6px;margin-bottom:6px;font-size:12px;font-weight:700;display:flex}.settings-stop-list{flex-direction:column;gap:4px;display:flex}.settings-stop-empty{color:var(--text-muted);padding:8px 0;font-size:12px;font-style:italic}.settings-stop-item{background:var(--bg-card);border:1px solid var(--border-color);border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:13px;display:flex}.settings-stop-item.selected{border-color:var(--accent-blue);border-left:3px solid var(--accent-blue)}.settings-grip{width:14px;height:14px;color:var(--text-muted);opacity:.4;cursor:grab;flex-shrink:0}.settings-stop-item[draggable=true]{cursor:default}.settings-stop-item[draggable=true]:active{opacity:.5;cursor:grabbing}.settings-stop-name{color:var(--text-primary);flex:1;font-weight:500}.settings-stop-icon{flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;display:inline-flex}.settings-type-badge{color:#fff;white-space:nowrap;border-radius:3px;flex-shrink:0;padding:2px 6px;font-size:9px;font-weight:700}.settings-type-badge.bus{background:var(--accent-green)}.settings-type-badge.ferry{background:var(--accent-teal)}.settings-type-badge.path{background:var(--accent-blue)}.settings-type-badge.hblr{background:var(--accent-purple)}.settings-type-badge.subway{background:var(--accent-orange)}.settings-type-badge.lirr,.settings-type-badge.mnr{background:#0039a6}.settings-type-badge.mta-bus{background:var(--accent-purple)}.settings-stop-badges{flex-shrink:0;align-items:center;gap:3px;display:inline-flex}.settings-route-pill{color:#fff;white-space:nowrap;border-radius:3px;padding:2px 5px;font-size:9px;font-weight:700;line-height:1}.settings-route-pill.bus{background:var(--accent-green)}.settings-route-pill.rail{background:#e66b00}.settings-route-pill.mta-bus{background:var(--accent-purple)}.settings-route-pill.overflow{background:var(--text-muted);font-size:8px}.settings-stop-badge{text-transform:uppercase;border-radius:4px;flex-shrink:0;padding:2px 6px;font-size:9px;font-weight:700}.settings-stop-badge.outbound{color:var(--accent-green);background:#34d39926}.settings-stop-badge.inbound{color:var(--accent-blue);background:#60a5fa26}.settings-stop-actions{flex-shrink:0;gap:2px;display:flex}.settings-remove-btn,.settings-add-btn{cursor:pointer;background:var(--bg-subtle);width:24px;height:24px;color:var(--text-muted);border:none;border-radius:4px;justify-content:center;align-items:center;font-size:12px;font-weight:700;transition:all .15s;display:flex}.settings-add-btn:hover{background:var(--accent-blue);color:#fff}.settings-remove-btn:hover:not(:disabled){background:var(--accent-red);color:#fff}.settings-remove-btn:disabled{opacity:.25;cursor:default}.settings-add-btn{cursor:pointer;height:24px;color:var(--accent-green);background:#34d39926;border:none;border-radius:4px;justify-content:center;align-items:center;gap:3px;padding:0 8px;font-family:inherit;font-size:10px;font-weight:700;transition:all .15s;display:flex}.settings-add-btn.inbound{color:var(--accent-blue);background:#60a5fa26}.settings-add-btn:hover:not(:disabled){opacity:.8}.settings-add-btn:disabled{opacity:.25;cursor:default}.settings-available-grid,.settings-available-item{display:none}.new-card-btn{background:var(--bg-subtle);border:1px dashed var(--border-color);cursor:pointer;width:100%;color:var(--accent-blue);border-radius:8px;justify-content:center;align-items:center;gap:6px;margin-top:6px;padding:8px;font-family:inherit;font-size:12px;font-weight:600;transition:all .2s;display:flex}.new-card-btn:hover{background:var(--bg-card-hover);border-style:solid}.new-card-dialog{background:var(--bg-primary);border:1px solid var(--border-color);cursor:default;border-radius:14px;flex-direction:column;width:min(480px,90vw);max-height:min(520px,80vh);display:flex;overflow:hidden;box-shadow:0 8px 40px #0000004d}.new-card-body{flex-direction:column;flex:1;gap:12px;padding:16px 20px;display:flex;overflow-y:auto}.new-card-back{color:var(--accent-blue);cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0;font-family:inherit;font-size:12px;font-weight:600}.new-card-modes{flex-direction:column;gap:6px;display:flex}.new-card-mode{background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;color:var(--text-primary);border-radius:8px;align-items:center;gap:10px;padding:12px 14px;font-family:inherit;font-size:14px;font-weight:500;transition:all .2s;display:flex}.new-card-mode:hover:not(.disabled){border-color:var(--accent-blue)}.new-card-mode.disabled{opacity:.4;cursor:default}.new-card-soon{color:var(--text-muted);text-transform:uppercase;margin-left:auto;font-size:10px;font-weight:700}.new-card-lines{flex-direction:column;gap:6px;display:flex}.new-card-line-btn{background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;padding:10px 14px;font-family:inherit;transition:all .2s;display:flex}.new-card-line-btn:hover{border-color:var(--accent-blue)}.new-card-line-name{color:var(--text-primary);font-size:14px;font-weight:600}.new-card-line-count{color:var(--text-muted);font-size:11px}.new-card-stops{flex-direction:column;gap:4px;display:flex}.new-card-stop-btn{background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;color:var(--text-primary);border-radius:8px;align-items:center;padding:10px 14px;font-family:inherit;font-size:13px;font-weight:500;transition:all .2s;display:flex}.new-card-stop-btn:hover{border-color:var(--accent-green);background:var(--capacity-empty-bg)}.new-card-stop-picker{padding:4px 0}.new-card-stop-select{width:100%;color:var(--text-primary);background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;border-radius:8px;padding:10px 12px;font-family:inherit;font-size:13px;font-weight:500;transition:border-color .2s}.new-card-stop-select:focus{border-color:var(--accent-blue);outline:none}.new-card-search{flex-direction:column;gap:8px;display:flex}.new-card-search-input{width:100%;color:var(--text-primary);background:var(--bg-card);border:1px solid var(--border-color);border-radius:8px;padding:10px 12px;font-family:inherit;font-size:14px;font-weight:500;transition:border-color .2s}.new-card-search-input:focus{border-color:var(--accent-blue);outline:none}.search-btn{color:var(--accent-blue);border-style:dashed}.subway-card .card-header{gap:clamp(4px,.5vw,10px)}.subway-card-icon{color:var(--accent-blue);font-size:clamp(14px,1.8vw,28px);line-height:1}.mta-globe-beam{display:none}[data-theme=dark] .mta-globe-beam{display:block}[data-theme=dark] .mta-globe-white{fill:#fff8dc;filter:drop-shadow(0 0 4px #ffe566b3)}[data-theme=dark] .hblr-clock-face{fill:#d4f5ec;filter:drop-shadow(0 0 4px #7fffd4cc)}.lirr-headlight{display:none}[data-theme=dark] .lirr-headlight{display:block}.subway-dir-picker{flex-direction:column;gap:8px;display:flex}.subway-dir-options{flex-direction:column;gap:6px;display:flex}.subway-lines-label{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;margin-bottom:6px;font-size:12px;font-weight:600}.subway-lines-row{flex-wrap:wrap;gap:6px;display:flex}.subway-line-toggle{cursor:pointer;opacity:.35;background:0 0;border:2px solid #0000;border-radius:50%;padding:2px;transition:all .15s}.subway-line-toggle.active{opacity:1;border-color:var(--accent-blue)}.subway-dir-option{background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;color:var(--text-primary);border-radius:8px;align-items:center;gap:10px;padding:12px 14px;font-size:14px;font-weight:500;transition:all .2s;display:flex}.subway-dir-option input{display:none}.subway-dir-option.active{border-color:var(--accent-blue);background:#60a5fa1a}.settings-divider-label{text-transform:uppercase;color:var(--text-muted);letter-spacing:.05em;margin:8px 0 4px;font-size:10px;font-weight:600}.settings-alert-grid{grid-template-columns:1fr 1fr;gap:6px;display:grid}.settings-alert-toggle{background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;color:var(--text-secondary);border-radius:8px;align-items:center;gap:6px;padding:8px 10px;font-family:inherit;font-size:12px;font-weight:500;transition:all .2s;display:flex}.settings-alert-toggle.on{border-color:var(--accent-green);color:var(--accent-green)}.settings-alert-toggle.off{opacity:.5}.settings-tunnel-grid{grid-template-columns:1fr 1fr;gap:6px;display:grid}.settings-tunnel-btn{background:var(--bg-card);border:1px solid var(--border-color);cursor:pointer;color:var(--text-secondary);border-radius:8px;align-items:center;gap:6px;padding:10px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:all .2s;display:flex}.settings-tunnel-btn.selected{background:var(--accent-orange);border-color:var(--accent-orange);color:#fff}.settings-tunnel-btn.disabled{opacity:.3;cursor:default}.settings-footer{border-top:1px solid var(--border-color);flex-direction:column;flex-shrink:0;gap:10px;padding:14px 20px;display:flex}.settings-gtfs-status{color:var(--text-muted);align-items:center;gap:6px;font-size:11px;display:flex}.settings-gtfs-status.stale{color:var(--accent-orange)}.settings-gtfs-stale{font-weight:600}.settings-save-btn{background:var(--accent-blue);color:#fff;cursor:pointer;border:none;border-radius:8px;width:100%;padding:10px;font-family:inherit;font-size:14px;font-weight:600;transition:opacity .2s}.settings-save-btn:hover{opacity:.85}.settings-save-btn:disabled{cursor:not-allowed;opacity:.5;background:#999}.settings-reset-row{justify-content:center;align-items:center;gap:8px;margin-top:10px;display:flex}.settings-reset-btn{color:var(--text-muted);cursor:pointer;opacity:.6;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-family:inherit;font-size:12px;transition:opacity .15s}.settings-reset-btn:hover{opacity:1}.settings-reset-confirm-text{color:var(--text-muted);font-size:12px}.settings-reset-confirm-btn{cursor:pointer;background:var(--accent-red,#ef4444);color:#fff;border:none;border-radius:4px;padding:3px 10px;font-family:inherit;font-size:12px;font-weight:600;transition:opacity .15s}.settings-reset-confirm-btn:hover{opacity:.85}.settings-reset-cancel-btn{border:1px solid var(--border-color);cursor:pointer;background:var(--bg-subtle);color:var(--text-muted);border-radius:4px;padding:3px 10px;font-family:inherit;font-size:12px;transition:opacity .15s}.settings-reset-cancel-btn:hover{opacity:.7}.dashboard-footer{color:var(--text-muted);opacity:.55;flex-shrink:0;grid-column:1/-1;justify-content:center;align-items:center;gap:8px;padding:6px 0 2px;font-size:clamp(9px,.8vw,12px);display:flex}.dashboard-footer a{color:var(--text-muted);text-underline-offset:2px;text-decoration:underline}.dashboard-footer a:hover{opacity:1;color:var(--accent-blue)}.footer-sep{opacity:.4}.footer-version{opacity:.4;font-size:.85em}.station-lines-hint{opacity:.6;white-space:nowrap;text-overflow:ellipsis;max-width:50%;margin-left:auto;padding-left:8px;font-size:.8em;overflow:hidden}.preset-picker-overlay{z-index:300}.dashboard.dashboard-blurred{filter:blur(4px)brightness(.7);pointer-events:none;-webkit-user-select:none;user-select:none;transition:filter .2s}.preset-picker-modal{background:var(--bg-card);border-radius:clamp(10px,1.2vw,16px);flex-direction:column;gap:0;width:min(520px,92vw);max-height:90vh;display:flex;overflow-y:auto;box-shadow:0 8px 40px #0006}.preset-picker-header{border-bottom:1px solid var(--border-color);padding:28px 28px 20px}.preset-picker-title{color:var(--text-primary);margin-bottom:6px;font-size:clamp(18px,2vw,22px);font-weight:700;display:block}.preset-picker-subtitle{color:var(--text-secondary);margin:0;font-size:13px;line-height:1.5}.preset-picker-grid{grid-template-columns:1fr 1fr 1fr;gap:8px;padding:16px 28px 24px;display:grid}.preset-picker-card{background:var(--bg-subtle);border:1px solid var(--border-color);cursor:pointer;text-align:left;color:var(--text-primary);border-radius:10px;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;font-family:inherit;transition:all .15s;display:flex}.preset-picker-card:hover{border-color:var(--accent-blue);background:#60a5fa14;transform:translateY(-1px);box-shadow:0 2px 8px #00000026}.preset-picker-emoji{margin-bottom:4px;font-size:24px;line-height:1}.preset-picker-label{color:var(--text-primary);font-size:14px;font-weight:600}.preset-picker-desc{color:var(--text-secondary);font-size:11px;line-height:1.4}.preset-picker-zip{flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;display:flex}.preset-picker-zip-input{border:1px solid var(--border-color);background:var(--bg-subtle);min-width:120px;color:var(--text-primary);border-radius:6px;flex:1;padding:8px 12px;font-family:inherit;font-size:14px}.preset-picker-zip-btn{background:var(--accent-blue);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:8px 16px;font-family:inherit;font-size:14px;font-weight:600}.preset-picker-zip-btn:disabled{opacity:.5;cursor:not-allowed}.preset-picker-zip-error{color:#e53e3e;width:100%;font-size:11px}@media (width<=480px){.dashboard{height:auto;min-height:100dvh;padding-bottom:max(env(safe-area-inset-bottom,0px), 16px);grid-template-rows:auto;grid-template-columns:1fr;overflow:hidden auto}.top-row,.transit-bottom-row{grid-column:1;grid-template-columns:1fr}.card{height:auto;min-height:80px}.card-body{flex:none;overflow:visible}.bus-list,.transit-list{overflow:visible}}.njt-rail-headlight{display:none}[data-theme=dark] .njt-rail-headlight{display:block}[data-theme=dark] .njt-bus-sign{fill:#e8001c;filter:drop-shadow(0 0 2px #ff2040)}[data-theme=dark] .mta-bus-sign{fill:#ff6b00;filter:drop-shadow(0 0 2px #ff8c00)}.wtc-blink{display:none}[data-theme=dark] .wtc-blink{animation:2s step-start infinite spire-blink;display:block}@keyframes spire-blink{0%,49%{opacity:1}50%,to{opacity:0}}.oc-rib{stroke:#f0f0f0}.oc-rib-outline{stroke:#999}[data-theme=dark] .oc-rib-outline{stroke:#0000}.nyw-running-light{display:none}[data-theme=dark] .nyw-running-light{display:block}.nycf-running-light{display:none}[data-theme=dark] .nycf-running-light{display:block}.sol-flame-light{fill:#8aae80}.sol-flame-dark,[data-theme=dark] .sol-flame-light{display:none}[data-theme=dark] .sol-flame-dark{display:block}.alerts-panel-backdrop{z-index:299;background:#0000004d;position:fixed;inset:0}.alerts-panel{z-index:300;background:var(--bg-card);border-left:1px solid var(--border-color);flex-direction:column;width:clamp(320px,30vw,420px);transition:transform .3s cubic-bezier(.4,0,.2,1);display:flex;position:fixed;top:0;bottom:0;right:0;overflow-y:auto;transform:translate(100%);box-shadow:-4px 0 20px #00000026}.alerts-panel.open{transform:translate(0)}.alerts-panel-header{border-bottom:1px solid var(--border-color);justify-content:space-between;align-items:center;padding:20px 20px 12px;display:flex}.alerts-panel-title{color:var(--text-primary);font-size:18px;font-weight:700}.alerts-panel-close{background:var(--bg-subtle);border:1px solid var(--border-color);cursor:pointer;width:32px;height:32px;color:var(--text-secondary);border-radius:50%;justify-content:center;align-items:center;transition:background .2s,color .2s;display:flex}.alerts-panel-close:hover{background:var(--bg-card-hover);color:var(--text-primary)}.alerts-panel-dir-toggle{border-bottom:1px solid var(--border-color);gap:6px;padding:12px 20px;display:flex}.alerts-panel-dir-btn{border:1px solid var(--border-color);background:var(--bg-subtle);color:var(--text-secondary);cursor:pointer;border-radius:6px;flex:1;padding:8px 12px;font-family:inherit;font-size:12px;font-weight:600;transition:background .2s,color .2s,border-color .2s}.alerts-panel-dir-btn.active{background:var(--accent-blue,#3b82f6);color:#fff;border-color:var(--accent-blue,#3b82f6)}.alerts-panel-dir-btn:hover:not(.active){background:var(--bg-card-hover);color:var(--text-primary)}.alerts-panel-list{flex-direction:column;flex:1;gap:12px;padding:16px 20px;display:flex}.alerts-panel-card{background:var(--bg-subtle);border:1px solid var(--border-color);border-radius:8px;flex-direction:column;gap:6px;padding:12px 14px;display:flex}.alerts-panel-card.dismissed{opacity:.55}.alerts-panel-card-head{justify-content:space-between;align-items:center;display:flex}.alerts-panel-source{text-transform:uppercase;letter-spacing:.04em;background:var(--border-color);color:var(--text-secondary);border-radius:4px;padding:2px 6px;font-size:10px;font-weight:700}.alerts-panel-source.panynj{color:#fff;background:#4a7c59}.alerts-panel-source.njtransit{color:#fff;background:#1e40af}.alerts-panel-source.ferry{color:#fff;background:#0e7c47}.alerts-panel-source.path{color:#fff;background:#0369a1}.alerts-panel-source.mta{color:#fff;background:#0039a6}.alerts-panel-card-body{color:var(--text-primary);font-size:13px;line-height:1.4}.alerts-panel-timestamp{color:var(--text-secondary);opacity:.7;font-size:11px}.alerts-panel-card-dismiss{border:1px solid var(--border-color);color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:4px;align-self:flex-end;padding:3px 10px;font-family:inherit;font-size:11px;font-weight:600;transition:background .15s,color .15s}.alerts-panel-card-dismiss:hover{background:var(--bg-card-hover);color:var(--text-primary)}.alerts-panel-dismiss-all{border:1px solid var(--border-color);background:var(--bg-subtle);color:var(--text-secondary);cursor:pointer;border-radius:6px;align-self:center;padding:8px 16px;font-family:inherit;font-size:12px;font-weight:600;transition:background .15s,color .15s}.alerts-panel-dismiss-all:hover{background:var(--bg-card-hover);color:var(--text-primary)}.alerts-panel-empty{color:var(--text-secondary);flex-direction:column;align-items:center;gap:8px;padding:40px 20px;display:flex}.alerts-panel-empty-icon{opacity:.6;font-size:28px}.alerts-panel-empty p{margin:0;font-size:14px}.alerts-panel-dismissed{border-top:1px solid var(--border-color);padding:12px 20px 20px}.alerts-panel-dismissed-title{color:var(--text-secondary);margin:0 0 10px;font-size:12px;font-weight:600}.settings-btn{position:relative}.alerts-badge-count{background:var(--accent-red,#ef4444);color:#fff;border-radius:8px;justify-content:center;align-items:center;min-width:16px;height:16px;padding:0 3px;font-size:9px;font-weight:700;line-height:1;display:flex;position:absolute;top:-2px;right:-2px}.settings-btn.active{background:var(--accent-blue,#3b82f6);color:#fff;border-color:var(--accent-blue,#3b82f6)}
