.ad-root,.ad-login,.ad-boot{--ad-navy: #0b1a40;--ad-navy-2: #0f2a6b;--ad-accent: #1f4fd1;--ad-page: #f1f5f9;--ad-card: #ffffff;--ad-border: #e2e8f0;--ad-text: #0f172a;--ad-muted: #64748b;--ad-faint: #94a3b8;--ad-green: #16a34a;--ad-amber: #d97706;--ad-red: #dc2626;--ad-radius: 14px;--ad-shadow: 0 1px 3px #0f172a14, 0 1px 2px #0f172a0a;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ad-text);-webkit-font-smoothing:antialiased}.ad-root{display:grid;grid-template-columns:244px 1fr;min-height:100vh;background:var(--ad-page)}.ad-sidebar{position:sticky;top:0;align-self:start;height:100vh;display:flex;flex-direction:column;gap:8px;padding:22px 16px;background:var(--ad-navy);color:#cbd5e1}.ad-brand{display:flex;align-items:center;gap:12px;padding:6px 8px 18px}.ad-brand-badge{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;background:var(--ad-navy-2);font-size:18px}.ad-brand-name{font-weight:700;font-size:15px;color:#fff}.ad-brand-sub{font-size:12px;color:#7c8db5}.ad-nav{display:flex;flex-direction:column;gap:4px}.ad-nav-item{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;border:0;border-radius:10px;background:transparent;color:#aebbd6;font-size:14px;font-family:inherit;cursor:pointer;text-align:left;transition:background .15s,color .15s}.ad-nav-item:hover{background:#14274f;color:#e2e8f0}.ad-nav-item.is-active{background:var(--ad-accent);color:#fff;font-weight:600;box-shadow:0 6px 16px #1f4fd155}.ad-nav-item svg{flex:none}.ad-nav-soon{margin-left:auto;font-size:10px;letter-spacing:.04em;text-transform:uppercase;color:#6b7ba6;background:#14274f;padding:2px 6px;border-radius:6px}.ad-sidebar-foot{margin-top:auto;display:flex;flex-direction:column;gap:10px;padding-top:14px;border-top:1px solid #1c2f59}.ad-user{display:flex;align-items:center;gap:10px;min-width:0}.ad-user-avatar{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:50%;background:var(--ad-navy-2);color:#fff;font-size:13px;font-weight:700}.ad-user-email{font-size:12px;color:#aebbd6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-logout{display:flex;align-items:center;gap:8px;padding:8px 12px;border:1px solid #1c2f59;border-radius:9px;background:transparent;color:#aebbd6;font-size:13px;font-family:inherit;cursor:pointer}.ad-logout:hover{background:#14274f;color:#fff}.ad-main{min-width:0;overflow-x:hidden}.ad-page{padding:24px 28px 40px;display:flex;flex-direction:column;gap:18px}.ad-topbar{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}.ad-topbar-title{margin:0;font-size:22px;font-weight:700}.ad-topbar-sub{margin:4px 0 0;font-size:13px;color:var(--ad-muted)}.ad-topbar-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.ad-range{display:inline-flex;padding:3px;background:#e8edf5;border-radius:10px}.ad-range-btn{border:0;background:transparent;padding:6px 12px;border-radius:8px;font-size:13px;font-family:inherit;color:var(--ad-muted);cursor:pointer}.ad-range-btn.is-active{background:#fff;color:var(--ad-navy-2);font-weight:600;box-shadow:var(--ad-shadow)}.ad-btn{border:1px solid transparent;background:var(--ad-navy-2);color:#fff;padding:8px 14px;border-radius:9px;font-size:13px;font-weight:600;font-family:inherit;cursor:pointer}.ad-btn:hover:not(:disabled){background:#0c2050}.ad-btn.ghost{background:#fff;color:var(--ad-text);border-color:var(--ad-border)}.ad-btn.ghost:hover:not(:disabled){background:#f8fafc}.ad-btn:disabled{opacity:.55;cursor:default}.ad-card{background:var(--ad-card);border:1px solid var(--ad-border);border-radius:var(--ad-radius);box-shadow:var(--ad-shadow)}.ad-metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.ad-metric{padding:18px 20px;display:flex;flex-direction:column;gap:6px}.ad-metric-label{font-size:13px;color:var(--ad-muted)}.ad-metric-value{font-size:30px;font-weight:700;letter-spacing:-.01em;font-variant-numeric:tabular-nums}.ad-metric-hint{font-size:12px}.ad-metric-hint.tone-up{color:var(--ad-green);font-weight:600}.ad-metric-hint.tone-muted{color:var(--ad-faint)}.ad-section-title{margin:8px 0 0;font-size:15px;font-weight:700;color:var(--ad-text)}.ad-grid{display:grid;gap:16px}.ad-grid.acquisition{grid-template-columns:2fr 1fr}.ad-grid.thirds{grid-template-columns:repeat(3,1fr)}.ad-grid.halves{grid-template-columns:repeat(2,1fr)}.ad-panel{display:flex;flex-direction:column;padding:18px 20px;min-width:0}.ad-panel-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:14px}.ad-panel-head h3{margin:0;font-size:14px;font-weight:700}.ad-panel-sub{font-size:12px;color:var(--ad-faint)}.ad-panel-body{flex:1;min-height:0}.ad-legend{display:flex;gap:18px;margin-bottom:10px;font-size:12px;color:var(--ad-muted)}.ad-legend span{display:inline-flex;align-items:center;gap:6px}.ad-dot{display:inline-block;width:9px;height:9px;border-radius:3px;flex:none}.ad-ts-plot{display:flex;align-items:flex-end;gap:3px;height:200px}.ad-ts-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;height:100%;min-width:0}.ad-ts-bars{display:flex;align-items:flex-end;justify-content:center;gap:2px;width:100%;height:100%}.ad-ts-bar{width:45%;max-width:9px;border-radius:3px 3px 0 0;min-height:2px}.ad-ts-bar-new{background:#2563eb}.ad-ts-bar-active{background:#f59e0b}.ad-ts-tick{font-size:10px;color:var(--ad-faint);white-space:nowrap;font-variant-numeric:tabular-nums}.ad-rank{display:flex;flex-direction:column;gap:11px}.ad-rank-row{display:grid;grid-template-columns:120px 1fr auto;align-items:center;gap:12px}.ad-rank-label{font-size:13px;color:var(--ad-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-rank-track{height:10px;border-radius:6px;background:#eef2f7;overflow:hidden}.ad-rank-fill{display:block;height:100%;border-radius:6px;background:#2563eb;min-width:2px;transition:width .3s ease}.ad-rank-value{font-size:13px;font-weight:600;color:var(--ad-text);font-variant-numeric:tabular-nums}.ad-donut{display:flex;align-items:center;gap:18px}.ad-donut-ring{position:relative;width:132px;height:132px;border-radius:50%;flex:none}.ad-donut-hole{position:absolute;top:26px;right:26px;bottom:26px;left:26px;background:var(--ad-card);border-radius:50%;display:grid;place-content:center;text-align:center}.ad-donut-total{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums}.ad-donut-caption{font-size:11px;color:var(--ad-faint)}.ad-donut-legend{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px;min-width:0}.ad-donut-legend li{display:flex;align-items:center;gap:8px;font-size:13px}.ad-donut-name{color:var(--ad-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-donut-pct{margin-left:auto;font-weight:600;font-variant-numeric:tabular-nums}.ad-empty{display:grid;place-items:center;min-height:120px;color:var(--ad-faint);font-size:13px}.ad-loading,.ad-boot{display:grid;place-items:center;min-height:200px;color:var(--ad-muted);font-size:14px}.ad-boot{min-height:100vh;background:var(--ad-page)}.ad-empty-page{display:grid;place-items:center;gap:8px;min-height:320px;color:var(--ad-muted)}.ad-empty-page-icon{font-size:40px}.ad-banner{border-radius:12px;padding:14px 16px;font-size:13px;line-height:1.5}.ad-banner.info{background:#fffbeb;border:1px solid #fde68a;color:#92400e}.ad-banner.error{background:#fef2f2;border:1px solid #fecaca;color:var(--ad-red)}.ad-login{min-height:100vh;display:grid;place-items:center;padding:24px;background:radial-gradient(1200px 600px at 80% -10%,#16327a 0%,transparent 60%),var(--ad-navy)}.ad-login-card{width:100%;max-width:380px;background:var(--ad-card);border-radius:18px;padding:30px 28px;box-shadow:0 24px 60px #0009;display:flex;flex-direction:column;gap:14px}.ad-login-brand{display:flex;align-items:center;gap:12px}.ad-login-logo{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;background:var(--ad-navy-2);font-size:20px}.ad-login-title{font-weight:700;font-size:16px}.ad-login-sub{font-size:12px;color:var(--ad-muted)}.ad-login-heading{margin:8px 0 0;font-size:20px;font-weight:700}.ad-login-lead{margin:0 0 4px;font-size:13px;color:var(--ad-muted)}.ad-field{display:flex;flex-direction:column;gap:6px}.ad-field span{font-size:12px;font-weight:600;color:var(--ad-muted)}.ad-field input{border:1px solid var(--ad-border);border-radius:10px;padding:10px 12px;font-size:14px;font-family:inherit;color:var(--ad-text)}.ad-field input:focus{outline:none;border-color:var(--ad-accent);box-shadow:0 0 0 3px #1f4fd122}.ad-login-btn{margin-top:6px;border:0;border-radius:10px;padding:12px;background:var(--ad-navy-2);color:#fff;font-size:14px;font-weight:600;font-family:inherit;cursor:pointer}.ad-login-btn:hover:not(:disabled){background:#0c2050}.ad-login-btn:disabled{opacity:.6;cursor:default}.ad-login-error{background:#fef2f2;border:1px solid #fecaca;color:var(--ad-red);border-radius:10px;padding:10px 12px;font-size:13px}@media (max-width: 1100px){.ad-grid.acquisition,.ad-grid.thirds,.ad-grid.halves{grid-template-columns:1fr}.ad-metrics{grid-template-columns:repeat(2,1fr)}}@media (max-width: 720px){.ad-root{grid-template-columns:1fr}.ad-sidebar{position:static;height:auto}.ad-metrics{grid-template-columns:1fr}}.ad-ops{--ad-ops-brand: #1b3f8f;--ad-ops-brand-dark: #0f2a6b;--ad-ops-line: #f1f5f9;--ad-ops-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;min-height:100vh;background:var(--ad-page)}.ad-ops-topbar{display:flex;align-items:center;gap:18px;padding:18px 32px;background:#fff;border-bottom:1px solid var(--ad-border)}.ad-ops-heading{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.ad-ops-heading h1,.ad-ops-section-head h2{margin:0;font-size:21px;font-weight:700;letter-spacing:-.4px;color:var(--ad-text)}.ad-ops-heading p,.ad-ops-section-head p{margin:0;font-size:13px;color:var(--ad-muted)}.ad-ops-range{display:inline-flex;align-items:center;padding:4px;background:var(--ad-page);border:1px solid var(--ad-border);border-radius:10px}.ad-ops-range button{padding:7px 14px;border:1px solid transparent;border-radius:7px;background:transparent;color:var(--ad-muted);font-family:inherit;font-size:12.5px;font-weight:500;cursor:pointer}.ad-ops-range button.is-active{background:#fff;border-color:var(--ad-border);color:var(--ad-text);font-weight:700}.ad-ops-export{display:inline-flex;align-items:center;gap:7px;padding:10px 14px;border:1px solid var(--ad-border);border-radius:10px;background:#fff;color:#475569;font-family:inherit;font-size:13px;font-weight:600;cursor:pointer}.ad-ops-export:hover:not(:disabled){background:#f8fafc}.ad-ops-export:disabled{opacity:.55;cursor:default}.ad-ops-content{display:flex;flex-direction:column;gap:24px;padding:26px 32px 40px}.ad-ops-section{display:flex;flex-direction:column;gap:20px}.ad-ops-section-head{display:flex;flex-direction:column;gap:2px}.ad-ops-card{background:var(--ad-card);border:1px solid var(--ad-border);border-radius:16px;min-width:0}.ad-ops-card-title{margin:0;font-size:14px;font-weight:700;color:var(--ad-text)}.ad-ops-row5{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:18px}.ad-ops-kpi{display:flex;flex-direction:column;gap:12px;padding:22px}.ad-ops-kpi-head{display:flex;align-items:center;gap:10px;min-width:0}.ad-ops-tile{display:grid;place-items:center;flex:none;width:34px;height:34px;border-radius:9px;background:#eff4ff;color:var(--ad-ops-brand)}.ad-ops-kpi-label{font-size:13px;font-weight:600;color:var(--ad-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-ops-kpi-value{font-family:var(--ad-ops-mono);font-size:30px;font-weight:700;letter-spacing:-.5px;color:var(--ad-text);white-space:nowrap}.ad-ops-delta{display:flex;align-items:center;gap:5px;flex-wrap:wrap;font-size:12.5px}.ad-ops-delta.tone-good{color:var(--ad-green)}.ad-ops-delta.tone-bad{color:var(--ad-red)}.ad-ops-delta.tone-neutral{color:var(--ad-muted)}.ad-ops-delta-text{font-weight:700}.ad-ops-delta-caption{font-size:12px;color:var(--ad-faint)}.ad-ops-svc{--svc-dot: #22c55e;--svc-bg: #dcfce7;--svc-border: #86efac;--svc-fg: #15803d;display:flex;flex-direction:column;gap:12px;padding:20px}.ad-ops-svc.state-degraded{--svc-dot: #f59e0b;--svc-bg: #fef3c7;--svc-border: #fcd34d;--svc-fg: #b45309}.ad-ops-svc.state-down{--svc-dot: #ef4444;--svc-bg: #fee2e2;--svc-border: #fca5a5;--svc-fg: #b91c1c}.ad-ops-svc-top{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px}.ad-ops-svc-name{display:flex;align-items:center;gap:8px;min-width:0;font-size:14px;font-weight:700;color:var(--ad-text)}.ad-ops-svc-name>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-ops-svc-dot{flex:none;width:9px;height:9px;border-radius:50%;background:var(--svc-dot)}.ad-ops-badge{display:inline-flex;align-items:center;gap:5px;flex:none;padding:4px 10px;border:1px solid var(--svc-border);border-radius:999px;background:var(--svc-bg);color:var(--svc-fg);font-size:11.5px;font-weight:700}.ad-ops-svc-detail{font-size:12.5px;color:var(--ad-muted)}.ad-ops-split{display:flex;align-items:flex-start;gap:18px}.ad-ops-chart{flex:1;display:flex;flex-direction:column;gap:14px;padding:22px}.ad-ops-bars{display:flex;align-items:flex-end;gap:6px;height:200px}.ad-ops-bars.is-dense{gap:2px}.ad-ops-bar{flex:1;min-width:0;min-height:2px;border-radius:4px 4px 0 0;background:var(--ad-ops-brand)}.ad-ops-bar.is-peak{background:var(--ad-ops-brand-dark)}.ad-ops-axis{display:flex;justify-content:space-between;font-size:11px;color:var(--ad-faint);font-variant-numeric:tabular-nums}.ad-ops-chart-empty{min-height:227px}.ad-ops-endpoints{flex:none;width:440px;display:flex;flex-direction:column;gap:14px;padding:22px}.ad-ops-ep{display:flex;flex-direction:column;gap:6px}.ad-ops-ep-top{display:flex;justify-content:space-between;gap:12px;font-size:12.5px}.ad-ops-ep-path{color:var(--ad-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-ops-ep-pct{flex:none;font-weight:700;color:var(--ad-muted)}.ad-ops-track{height:7px;border-radius:4px;background:var(--ad-ops-line);overflow:hidden}.ad-ops-track span{display:block;height:100%;min-width:2px;border-radius:4px;background:var(--ad-ops-brand);transition:width .3s ease}.ad-ops-list{flex:1;display:flex;flex-direction:column;gap:6px;padding:22px}.ad-ops-list-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-bottom:6px}.ad-ops-list-head h3{margin:0;font-size:16px;font-weight:700;color:var(--ad-text)}.ad-ops-link{padding:0;border:0;background:none;color:var(--ad-ops-brand);font-family:inherit;font-size:13px;font-weight:600;cursor:pointer}.ad-ops-link:hover{text-decoration:underline}.ad-ops-tag{padding:5px 10px;border-radius:7px;background:var(--ad-ops-line);color:var(--ad-muted);font-size:12px;font-weight:600}.ad-ops-inc{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--ad-ops-line)}.ad-ops-inc:last-child{border-bottom:0}.ad-ops-inc-tile{display:grid;place-items:center;flex:none;width:34px;height:34px;border-radius:9px}.ad-ops-inc-tile.tone-red{background:#fee2e2;color:#dc2626}.ad-ops-inc-tile.tone-amber{background:#fef3c7;color:#f59e0b}.ad-ops-inc-tile.tone-blue{background:#e8eefb;color:#2563eb}.ad-ops-inc-tile.tone-green{background:#dcfce7;color:var(--ad-green)}.ad-ops-inc-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.ad-ops-inc-title{font-size:13.5px;font-weight:600;color:var(--ad-text)}.ad-ops-inc-meta{font-size:12px;color:var(--ad-muted)}.ad-ops-inc-time{flex:none;font-family:var(--ad-ops-mono);font-size:12px;font-weight:500;color:var(--ad-faint)}.ad-ops-stations{flex:none;width:540px}.ad-ops-table{width:100%;border-collapse:collapse;table-layout:fixed}.ad-ops-table th{padding:0 0 8px;text-align:right;font-size:11px;font-weight:700;letter-spacing:.3px;text-transform:uppercase;color:var(--ad-faint)}.ad-ops-table th:nth-child(2){width:96px}.ad-ops-table th:nth-child(3){width:92px}.ad-ops-table th:nth-child(4){width:54px}.ad-ops-table th:first-child,.ad-ops-table td:first-child{text-align:left}.ad-ops-table td{padding:11px 0;border-bottom:1px solid var(--ad-ops-line);text-align:right;vertical-align:middle}.ad-ops-table tr:last-child td{border-bottom:0}.ad-ops-st-name{font-size:13.5px;font-weight:600;color:var(--ad-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ad-ops-mono{font-family:var(--ad-ops-mono);font-size:13px;font-weight:500;color:var(--ad-text)}.ad-ops-mono.muted{color:#475569}.ad-ops-trend svg{display:inline-block;vertical-align:middle}.ad-ops-trend.trend-up{color:var(--ad-green)}.ad-ops-trend.trend-down{color:var(--ad-muted)}.ad-ops-trend.trend-flat{color:var(--ad-faint)}@media (max-width: 1400px){.ad-ops-row5{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (max-width: 1100px){.ad-ops-row5{grid-template-columns:repeat(2,minmax(0,1fr))}.ad-ops-split{flex-direction:column;align-items:stretch}.ad-ops-endpoints,.ad-ops-stations{width:auto}}@media (max-width: 720px){.ad-ops-topbar{flex-wrap:wrap;padding:16px}.ad-ops-heading{flex-basis:100%}.ad-ops-content{padding:20px 16px 32px}.ad-ops-row5{grid-template-columns:1fr}.ad-ops-table th:nth-child(2){width:64px}.ad-ops-table th:nth-child(3){width:78px}.ad-ops-table th:nth-child(4){width:40px}}:root{--navy: #0f2a6b;--navy-soft: #1b3f8f;--page: #f1f5f9;--card: #ffffff;--border: #e2e8f0;--border-soft: #f1f5f9;--ink: #0f172a;--muted: #64748b;--muted-2: #94a3b8;--blue: #2563eb;--green: #16a34a;--amber: #d97706;--red: #dc2626;--shadow-card: 0 1px 3px #0f172a14}*{box-sizing:border-box;margin:0}body{font-family:Inter,system-ui,sans-serif;background:var(--page);color:var(--ink);-webkit-font-smoothing:antialiased}.mono{font-family:JetBrains Mono,monospace}.app{min-height:100vh;display:flex;flex-direction:column}.header{background:var(--navy);color:#fff;display:flex;align-items:center;gap:20px;padding:18px 28px}.header-left{display:flex;align-items:center;gap:14px;flex:1}.header-logo{width:44px;height:44px;border-radius:10px;background:#fff;display:flex;align-items:center;justify-content:center;font-size:22px}.header-station-top{display:flex;align-items:center;gap:10px}.header-title{font-size:24px;font-weight:700;letter-spacing:-.4px}.header-trigger{background:var(--navy-soft);border:none;color:#fff;border-radius:8px;padding:4px 8px;cursor:pointer;font-size:13px}.header-sub{display:flex;align-items:center;gap:8px;font-size:12px;color:#93b4e8;margin-top:2px}.header-sub-sep{color:#5e7cb8}.header-clock{display:flex;flex-direction:column;align-items:flex-end}.header-time{font-size:30px;font-weight:700;letter-spacing:.5px;line-height:1}.header-date{font-size:12px;color:#93b4e8;margin-top:2px}.header-refresh{background:var(--navy-soft);border:none;color:#fff;border-radius:8px;padding:8px 14px;font-size:12px;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:6px;font-family:inherit}.header-refresh:hover{filter:brightness(1.15)}.pill{display:inline-flex;align-items:center;gap:5px;border-radius:999px;padding:3px 9px;font-size:10px;font-weight:700;letter-spacing:.5px}.pill-live{background:var(--green);color:#fff}.pill-dot{width:7px;height:7px;border-radius:999px;background:#fff}.pill-green{background:#dcfce7;color:var(--green)}.pill-amber{background:#fef3c7;color:var(--amber)}.pill-red-soft{background:#fee2e2;color:var(--red);padding:2px 8px}.body{flex:1;display:flex;flex-direction:column;gap:20px;padding:24px 28px}.app-error{background:#fef2f2;border:1px solid var(--red);color:#991b1b;padding:12px 28px;font-size:14px;display:flex;align-items:center;gap:12px}.app-error-retry,.primary-btn{background:var(--navy);color:#fff;border:none;border-radius:7px;padding:6px 14px;font-size:13px;font-weight:600;cursor:pointer;font-family:inherit}.empty-state{display:flex;flex-direction:column;align-items:center;gap:16px;padding:80px 0;color:var(--muted)}.primary-btn{padding:10px 20px}.card{background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-card)}.stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.stat-card{padding:18px;display:flex;flex-direction:column;gap:10px}.stat-icon{width:36px;height:36px;border-radius:18px;display:flex;align-items:center;justify-content:center;font-size:16px}.stat-icon-blue{background:#dbeafe;color:var(--blue)}.stat-icon-green{background:#dcfce7;color:var(--green)}.stat-icon-amber{background:#fef3c7;color:var(--amber)}.stat-icon-red{background:#fee2e2;color:var(--red)}.stat-label{font-size:11px;font-weight:600;letter-spacing:.6px;color:var(--muted)}.stat-value{font-size:30px;font-weight:700;color:var(--ink)}.stat-foot{font-size:13px;color:var(--muted)}.stat-foot-amber{color:var(--amber)}.progress{height:6px;border-radius:3px;background:var(--border);overflow:hidden}.progress-fill{height:100%;background:var(--green);border-radius:3px}.columns{display:flex;gap:20px;align-items:flex-start}.side-column{width:380px;flex-shrink:0;display:flex;flex-direction:column;gap:20px}.board{flex:1;overflow:hidden;display:flex;flex-direction:column}.board-header{display:flex;justify-content:space-between;align-items:center;padding:20px 24px;border-bottom:1px solid var(--border)}.board-title{font-size:20px;font-weight:700}.board-subtitle{font-size:13px;color:var(--muted);font-weight:500;margin-top:4px}.board-meta{display:flex;align-items:center;gap:8px}.board-update{font-size:13px;color:var(--muted-2);font-weight:500}.board-filter{display:flex;align-items:center;gap:6px;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:6px 10px}.board-filter-icon{font-size:12px}.board-filter-select{border:none;background:none;outline:none;font-family:inherit;font-size:13px;color:var(--ink);cursor:pointer;max-width:200px}.table-head,.table-row{display:flex;gap:16px;align-items:center;padding:12px 24px}.table-head{background:#f8fafc;border-bottom:1px solid var(--border);font-size:11px;font-weight:700;letter-spacing:.6px;color:var(--muted)}.table-row{padding:14px 24px;border-bottom:1px solid var(--border-soft)}.table-row:nth-child(2n){background:#fbfcfe}.table-body{max-height:620px;overflow-y:auto}.table-empty,.side-empty{padding:32px 24px;text-align:center;color:var(--muted-2);font-size:14px}.col-time{width:80px}.col-train{width:190px;display:flex;align-items:center;gap:8px}.col-dir{flex:1;display:flex;flex-direction:column;gap:2px}.col-track{width:80px}.col-status{width:170px}.cell-time{display:flex;flex-direction:column}.board-time{font-size:15px;font-weight:700}.board-time-delayed{color:#d99e00}.board-time-late{color:#d92d20}.board-time-planned{font-size:11px;color:var(--muted-2);text-decoration:line-through}.train-badge{background:#eff6ff;color:var(--blue);border-radius:6px;padding:3px 7px;font-size:12px;font-weight:700}.train-name{font-size:12px;color:var(--muted)}.dir-name{font-size:14px;font-weight:600}.dir-carrier{font-size:11px;color:var(--muted-2)}.track-badge{display:inline-block;min-width:28px;text-align:center;border:1px solid var(--border);border-radius:6px;padding:2px 8px;font-size:13px;font-weight:600}.status-badge{display:inline-block;border-radius:999px;padding:4px 12px;font-size:12px;font-weight:600}.status-green{background:#dcfce7;color:var(--green)}.status-amber{background:#fef3c7;color:var(--amber)}.status-red{background:#fee2e2;color:var(--red)}.status-neutral{background:#f1f5f9;color:var(--muted)}.side-panel{overflow:hidden}.side-header{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;border-bottom:1px solid var(--border)}.side-header-title{display:flex;align-items:center;gap:8px}.side-header-title h3{font-size:15px;font-weight:700}.side-header-note{font-size:12px;color:var(--muted)}.disruption-list{display:flex;flex-direction:column;gap:10px;padding:12px 16px}.disruption{border-radius:8px;padding:8px 10px}.disruption-red{background:#fef2f2;border-left:4px solid var(--red)}.disruption-amber{background:#fffbeb;border-left:4px solid var(--amber)}.disruption-blue{background:#eff6ff;border-left:4px solid var(--blue)}.disruption-type{font-size:11px;font-weight:700;letter-spacing:.4px;color:var(--muted);margin-bottom:4px}.disruption-message{font-size:13px;line-height:1.4}.arrival-list{display:flex;flex-direction:column}.arrival-row{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--border-soft)}.arrival-row:last-child{border-bottom:none}.arrival-time{font-size:14px;font-weight:700}.arrival-info{flex:1;display:flex;align-items:center;gap:8px;min-width:0}.arrival-dir{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.status-dot{width:10px;height:10px;border-radius:999px;flex-shrink:0}.ss-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a55;z-index:40}.ss-panel{position:fixed;top:96px;left:28px;width:380px;max-height:75vh;display:flex;flex-direction:column;background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 32px #0f172a33;overflow:hidden;z-index:41}.ss-head{padding:12px 14px;border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:10px}.ss-head-top{display:flex;justify-content:space-between;align-items:center}.ss-head-title{font-size:14px;font-weight:700}.ss-close{background:none;border:none;cursor:pointer;color:var(--muted);font-size:13px;padding:4px 6px}.ss-search{display:flex;align-items:center;gap:8px;background:#f8fafc;border:1px solid var(--border);border-radius:8px;padding:8px 10px}.ss-search-input{border:none;background:none;outline:none;font-size:13px;font-family:inherit;flex:1}.ss-section-label{font-size:10px;font-weight:700;letter-spacing:.6px;color:var(--muted-2);padding:8px 14px 4px}.ss-list{overflow-y:auto}.ss-row{display:flex;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--border-soft);cursor:pointer}.ss-row:hover{background:#f8fafc}.ss-row-current{background:#eff6ff}.ss-row-icon{width:28px;height:28px;border-radius:7px;background:#f1f5f9;display:flex;align-items:center;justify-content:center;font-size:13px}.ss-row-text{flex:1;min-width:0}.ss-row-name{font-size:13px;font-weight:600}.ss-row-meta{font-size:11px;color:var(--muted)}.ss-star{background:none;border:1px solid var(--border);border-radius:8px;width:30px;height:30px;cursor:pointer;color:#cbd5e1;font-size:14px}.ss-star-on{color:#f59e0b;border-color:#f59e0b}.ss-empty{padding:20px 14px;text-align:center;font-size:13px;color:var(--muted-2)}.ss-error{color:var(--red)}.ss-foot{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#f8fafc;border-top:1px solid var(--border)}.ss-foot-text{font-size:11px;color:var(--muted);line-height:1.4}.table-row-clickable,.arrival-row-clickable{cursor:pointer}.table-row-clickable:hover{background:#eff6ff}.arrival-row-clickable:hover{background:#f8fafc}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a55;z-index:50;animation:fade-in .15s ease}.drawer{position:fixed;top:0;right:0;width:680px;max-width:100vw;height:100vh;background:var(--page);border-left:1px solid var(--border);box-shadow:-24px 0 60px #0f172a33;z-index:51;display:flex;flex-direction:column;animation:slide-in .2s ease}@keyframes fade-in{0%{opacity:0}}@keyframes slide-in{0%{transform:translate(100%)}}.drawer-head{background:var(--navy);color:#fff;padding:20px 22px;display:flex;flex-direction:column;gap:16px}.drawer-head-top{display:flex;align-items:center;gap:10px}.drawer-head-spacer{flex:1}.drawer-cat{background:#1d4ed8;border-radius:6px;padding:4px 10px;font-size:14px;font-weight:700}.drawer-trainname{font-size:14px;font-weight:500;color:#93b4e8}.drawer-close{background:var(--navy-soft);border:none;color:#fff;width:34px;height:34px;border-radius:9px;cursor:pointer;font-size:14px}.drawer-route{display:flex;align-items:center;gap:10px}.drawer-route-end{display:flex;flex-direction:column;gap:2px}.drawer-route-end-right{align-items:flex-end;text-align:right}.drawer-route-time{font-size:22px;font-weight:700;line-height:1}.drawer-route-station{font-size:12px;color:#93b4e8}.drawer-route-arrow{flex:1;text-align:center;color:#5e7cb8;font-size:18px}.drawer-status{display:flex;align-items:center;gap:10px;background:var(--navy-soft);border-radius:10px;padding:10px 12px}.drawer-status-icon{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:13px;flex-shrink:0}.drawer-status-green{background:var(--green)}.drawer-status-amber{background:var(--amber)}.drawer-status-red{background:var(--red)}.drawer-status-neutral{background:#64748b}.drawer-status-title{font-size:13px;font-weight:600}.drawer-status-sub{font-size:11px;color:#93b4e8;margin-top:1px}.drawer-headinfo{font-size:11px;color:#93b4e8;line-height:1.4}.drawer-body{flex:1;overflow-y:auto;padding:18px 22px;display:flex;flex-direction:column;gap:16px}.drawer-error{background:#fef2f2;border:1px solid var(--red);color:#991b1b;border-radius:10px;padding:12px;font-size:13px}.drawer-card{background:#fff;border:1px solid var(--border);border-radius:14px;box-shadow:var(--shadow-card);overflow:hidden}.drawer-card-head{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid var(--border)}.drawer-card-title{font-size:15px;font-weight:700}.drawer-card-count{font-weight:400;color:var(--muted)}.drawer-card-note{font-size:11px;color:var(--muted-2)}.drawer-loading{padding:24px 18px;text-align:center;color:var(--muted-2);font-size:13px}.timeline{padding:8px 18px 14px;max-height:340px;overflow-y:auto}.tl-stop{display:flex;gap:14px;padding:12px 0}.tl-stop-next{background:#eff6ff;border-radius:10px;margin:0 -8px;padding:12px 8px}.tl-stop-current{background:#0f2a6b1a;border:1px solid rgba(15,42,107,.35);border-radius:10px;margin:0 -8px;padding:12px 8px}.tl-stop-current .tl-name{color:var(--navy)}.tl-time{width:56px;display:flex;flex-direction:column;align-items:flex-end;flex-shrink:0}.tl-time-planned{font-size:15px;font-weight:700}.tl-stop-passed .tl-time-planned,.tl-stop-passed .tl-name{color:var(--muted-2)}.tl-time-actual{font-size:11px;font-weight:500;color:var(--red)}.tl-rail{width:16px;display:flex;flex-direction:column;align-items:center;flex-shrink:0}.tl-rail-line{width:2px;flex:1;background:#cbd5e1}.tl-stop:first-child .tl-rail-top,.tl-stop:last-child .tl-rail-bottom{background:transparent}.tl-dot{width:12px;height:12px;border-radius:999px;flex-shrink:0}.tl-dot-origin{background:#1d4ed8;box-shadow:inset 0 0 0 3px #fff;width:16px;height:16px}.tl-dot-dest{background:var(--green);box-shadow:inset 0 0 0 3px #fff;width:16px;height:16px}.tl-dot-passed{background:#cbd5e1}.tl-dot-ring{background:#fff;box-shadow:inset 0 0 0 2px #1d4ed8}.tl-info{flex:1;display:flex;flex-direction:column;gap:4px;padding-bottom:4px}.tl-name{font-size:15px;font-weight:700}.tl-note{font-size:12px;color:var(--muted)}.tl-tag{align-self:flex-start;font-size:11px;font-weight:600;border-radius:6px;padding:3px 8px}.tl-tag-green{background:#dcfce7;color:#15803d}.tl-tag-blue{background:#dbeafe;color:#1d4ed8}.tl-tag-amber{background:#fef3c7;color:#b45309}.train-info-scroll{max-height:360px;overflow-y:auto}.facts-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px 18px}.fact{background:#f8fafc;border-radius:8px;padding:10px 12px}.fact-label{font-size:10px;font-weight:700;letter-spacing:.5px;color:var(--muted-2)}.fact-value{font-size:13px;font-weight:600;margin-top:3px}.amenities{padding:4px 18px 14px;display:flex;flex-direction:column;gap:8px}.amenity-list{display:flex;flex-wrap:wrap;gap:8px}.amenity{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border);border-radius:999px;padding:5px 10px;font-size:12px;color:#334155}.punctuality{padding:12px 18px 16px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:10px}.punctuality-head{display:flex;justify-content:space-between;align-items:center}.punctuality-title{font-size:13px;font-weight:700}.punctuality-avg{font-size:12px;color:var(--muted)}.punctuality-chart{display:flex;gap:6px;align-items:flex-end}.punctuality-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px}.punctuality-bar-wrap{height:64px;width:100%;display:flex;align-items:flex-end}.punctuality-bar{width:100%;border-radius:3px}.punctuality-bar-green{background:var(--green)}.punctuality-bar-amber{background:var(--amber)}.punctuality-bar-red{background:var(--red)}.punctuality-day{font-size:10px;color:var(--muted-2)}.punctuality-summary{font-size:11px;color:var(--muted)}.drawer-foot{display:flex;align-items:center;gap:10px;padding:14px 22px;background:#fff;border-top:1px solid var(--border)}.drawer-foot-btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);background:#fff;border-radius:9px;padding:11px 14px;font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;color:var(--ink)}.drawer-foot-btn-primary{background:var(--navy);color:#fff;border-color:var(--navy);padding:11px 18px}@media (max-width: 1100px){.stats-row{grid-template-columns:repeat(2,1fr)}.columns{flex-direction:column}.side-column{width:100%}}
