:root{--font-primary:"Open Sans", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, "SFMono-Regular", "Menlo", monospace;--fs-2xs:10px;--fs-xs:11px;--fs-sm:13px;--fs-md:14px;--fs-lg:16px;--fw-regular:400;--fw-medium:500;--fw-semibold:600;--fw-bold:700;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--radius-xs:2px;--radius-sm:4px;--radius-md:8px;--radius-lg:14px;--radius-full:999px;--border-w-sm:1px;--shadow-xs:0 1px 2px #0f1e370f;--shadow-sm:0 1px 3px #0f1e3714, 0 1px 2px #0f1e370d;--shadow-lg:0 10px 22px #0f1e3724, 0 3px 8px #0f1e3714;--shadow-xl:0 22px 48px #0f1e3733, 0 8px 16px #0f1e371a;--bg-primary:#f6f8fb;--bg-secondary:#fff;--bg-subtle:#f1f4f8;--bg-soft:#e8eef4;--bg-inverse:#17233a;--text-primary:#16233b;--text-secondary:#3d4a5c;--text-tertiary:#697586;--text-soft:#98a2b3;--text-inverse:#fff;--border-primary:#e2e8f0;--border-subtle:#eef2f7;--border-strong:#cbd5e1;--brand-primary:#1659cb;--brand-secondary:#1e64d8;--brand-strong:#0b4a8f;--brand-subtle:#eff5ff;--brand-muted:#dbeafe;--brand-light:#c6dbfb;--accent-green-strong:#16a34a;--accent-green-deep:#12803b;--accent-green-soft:#e3f6ec;--accent-red-primary:#dc2626;--accent-red-strong:#b91c1c;--accent-red-subtle:#fdeded;--accent-orange-primary:#f97316;--accent-orange-strong:#d9770a;--accent-orange-soft:#fdecd6;--accent-cyan-subtle:#ecfbfd;--accent-cyan-strong:#0e7490;--accent-purple-soft:#ede9fe;--accent-purple-strong:#6d28d9;--danger-primary:#dc2626;--sev-ok:var(--accent-green-strong);--sev-ok-soft:var(--accent-green-soft);--sev-warn:var(--accent-orange-strong);--sev-warn-soft:var(--accent-orange-soft);--sev-bad:var(--accent-red-primary);--sev-bad-soft:var(--accent-red-subtle)}*,:before,:after{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-primary);color:var(--text-primary);background:var(--bg-primary);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}button{cursor:pointer;color:inherit;background:0 0;border:0;padding:0;font-family:inherit}a{color:inherit}svg{display:block}.tp-app{background:var(--bg-primary);height:100dvh;color:var(--text-primary);font-size:var(--fs-sm);grid-template-rows:44px 1fr;display:grid;overflow:hidden}.tp-topbar{align-items:center;gap:var(--space-3);padding:0 var(--space-3);background:var(--bg-secondary);border-bottom:1px solid var(--border-primary);min-width:0;display:flex}.tp-brand{font-weight:var(--fw-bold);font-size:var(--fs-md);letter-spacing:-.02em;flex:none;align-items:center;gap:7px;display:flex}.tp-brand-mark{background:var(--brand-primary);color:#fff;border-radius:5px;place-items:center;width:22px;height:22px;font-size:12px;display:grid}.tp-topbar-title{color:var(--text-tertiary);padding-left:var(--space-3);border-left:1px solid var(--border-primary);flex:none}.tp-consts{gap:5px;min-width:0;display:flex;overflow:hidden}.tp-const{font-family:var(--font-mono);font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary);background:var(--bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);white-space:nowrap;padding:2px 6px}.tp-filters{align-items:center;gap:5px;min-width:0;margin-left:auto;display:flex}.tp-filter-chip{font-size:var(--fs-xs);background:var(--brand-subtle);color:var(--brand-strong);border:1px solid var(--brand-light);border-radius:var(--radius-full);white-space:nowrap;align-items:center;gap:5px;padding:3px 8px;display:inline-flex}.tp-filter-chip:hover{background:var(--brand-muted)}.tp-filter-key{text-transform:uppercase;font-size:var(--fs-2xs);letter-spacing:.05em;opacity:.65}.tp-filter-x{opacity:.7;font-size:9px}.tp-filter-clear{font-size:var(--fs-xs);color:var(--text-tertiary);text-underline-offset:2px;text-decoration:underline}.tp-search{flex:0 260px;align-items:center;min-width:150px;display:flex;position:relative}.tp-search-icon{color:var(--text-soft);pointer-events:none;font-size:13px;position:absolute;left:8px}.tp-search input{width:100%;height:28px;font-family:var(--font-primary);font-size:var(--fs-sm);color:var(--text-primary);background:var(--bg-subtle);border:1px solid var(--border-primary);border-radius:var(--radius-sm);padding:0 34px 0 24px}.tp-search input::placeholder{color:var(--text-soft)}.tp-search input:focus{background:var(--bg-secondary);border-color:var(--brand-primary);box-shadow:0 0 0 2px var(--brand-subtle);outline:none}.tp-search input::-webkit-search-cancel-button{cursor:pointer}.tp-search-kbd{font-family:var(--font-mono);color:var(--text-soft);background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-xs);pointer-events:none;padding:1px 3px;font-size:9px;position:absolute;right:7px}.tp-search input:focus~.tp-search-kbd{display:none}.tp-search-list{z-index:60;background:var(--bg-secondary);border:1px solid var(--border-strong);border-radius:var(--radius-md);max-height:320px;box-shadow:var(--shadow-lg);margin:0;padding:3px;list-style:none;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow-y:auto}.tp-search-list button{align-items:baseline;gap:var(--space-2);border-radius:var(--radius-sm);text-align:left;width:100%;font-size:var(--fs-xs);padding:4px 7px;display:flex}.tp-search-list button[data-on]{background:var(--brand-subtle)}.tp-search-ref{font-family:var(--font-mono);color:var(--text-primary);flex:none}.tp-search-where{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-search-trip{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--text-secondary);flex:none;margin-left:auto}.tp-search-trip[data-kind=unplanned]{color:var(--sev-bad)}.tp-search-none{font-size:var(--fs-xs);color:var(--text-soft);padding:6px 8px}.tp-grid{grid-template:"input summary summary""input kpis kpis""trips trips map"minmax(230px,1.2fr)"queue queue map"minmax(180px,.8fr)"dq dq dq"/232px minmax(0,1fr) minmax(330px,25%);gap:9px;min-height:0;padding:9px;display:grid;overflow:hidden}.tp-input{grid-area:input}.tp-summary{grid-area:summary}.tp-trips-panel{grid-area:trips}.tp-kpis{grid-area:kpis}.tp-dq{grid-area:dq}.tp-map-panel{grid-area:map}.tp-queue-panel{grid-area:queue}.tp-panel{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-md);min-width:0;min-height:0;box-shadow:var(--shadow-xs);flex-direction:column;display:flex;overflow:hidden}.tp-panel-hd{align-items:center;gap:var(--space-2);height:27px;padding:0 var(--space-3);border-bottom:1px solid var(--border-subtle);background:linear-gradient(var(--bg-secondary), var(--bg-subtle));flex:none;display:flex}.tp-panel-hd h2{font-size:var(--fs-xs);font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.07em;color:var(--text-secondary);margin:0}.tp-panel-meta{font-size:var(--fs-xs);color:var(--text-tertiary);font-family:var(--font-mono);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;overflow:hidden}.tp-panel-actions{flex:none}.tp-panel-body{flex-direction:column;flex:1;min-height:0;display:flex}.tp-toggle{font-size:var(--fs-xs);color:var(--text-tertiary);cursor:pointer;white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.tp-toggle input{accent-color:var(--brand-primary);margin:0}.tp-input{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);flex-direction:column;gap:6px;min-height:0;padding:8px 10px;display:flex;overflow:hidden}.tp-input-hd{align-items:baseline;gap:var(--space-2);display:flex}.tp-input-name{font-weight:var(--fw-semibold);font-size:var(--fs-sm);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-input-reset{font-size:var(--fs-xs);color:var(--brand-primary);cursor:pointer;flex:none;margin-left:auto}.tp-input-reset:hover,.tp-input-reset[data-over]{text-underline-offset:2px;text-decoration:underline}.tp-input-clear{font-size:var(--fs-xs);color:var(--text-soft);flex:none}.tp-input-clear:hover{color:var(--sev-bad)}.tp-input-sheets{gap:2px;margin:0;padding:0;list-style:none;display:grid}.tp-input-sheets li{font-size:var(--fs-xs);color:var(--text-secondary);align-items:baseline;gap:6px;display:flex}.tp-input-sheets li:before{content:"✓";color:var(--sev-ok);flex:none;font-size:10px}.tp-input-sheets li[data-ok=false]:before{content:"✕";color:var(--sev-bad)}.tp-input-sheet-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-input-sheet-rows{font-family:var(--font-mono);color:var(--text-tertiary);flex:none;margin-left:auto}.tp-input-foot{font-size:var(--fs-xs);color:var(--text-tertiary);border-top:1px solid var(--border-subtle);align-items:center;gap:6px;padding-top:6px;display:flex}.tp-input-foot input{font-family:var(--font-mono);font-size:var(--fs-xs);border:1px solid var(--border-primary);border-radius:var(--radius-sm);background:var(--bg-subtle);color:var(--text-primary);min-width:0;margin-left:auto;padding:2px 4px}.tp-input-stat{font-size:var(--fs-2xs);color:var(--text-soft);font-family:var(--font-mono);margin:0}.tp-input-drop{border:1px dashed var(--border-strong);border-radius:var(--radius-sm);text-align:center;font-size:var(--fs-2xs);color:var(--text-soft);cursor:pointer;padding:5px}.tp-input-drop[data-over],.tp-input-drop:hover{border-color:var(--brand-primary);color:var(--brand-primary);background:var(--brand-subtle)}.tp-app-empty .tp-empty{place-content:center;justify-items:center;gap:var(--space-5);padding:var(--space-6);min-height:0;display:grid}.tp-dropzone{border:2px dashed var(--border-strong);border-radius:var(--radius-lg);background:var(--bg-secondary);width:min(560px,90vw);padding:var(--space-6) var(--space-5);text-align:center;cursor:pointer;transition:border-color .12s,background .12s}.tp-dropzone[data-over],.tp-dropzone:hover{border-color:var(--brand-primary);background:var(--brand-subtle)}.tp-dropzone-icon{color:var(--brand-primary);margin-bottom:var(--space-3);place-items:center;display:grid}.tp-dropzone-title{font-size:17px;font-weight:var(--fw-semibold);margin:0 0 4px}.tp-dropzone-sub{font-size:var(--fs-sm);color:var(--text-tertiary);margin:0}.tp-empty-expect{text-align:center}.tp-empty-expect-label{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.09em;color:var(--text-soft)}.tp-empty-expect ul{flex-wrap:wrap;justify-content:center;gap:6px;margin:6px 0 0;padding:0;list-style:none;display:flex}.tp-empty-expect li{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-secondary);background:var(--bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);padding:3px 7px}.tp-empty-error{max-width:560px;font-size:var(--fs-sm);color:var(--sev-bad);background:var(--sev-bad-soft);border:1px solid var(--sev-bad);border-radius:var(--radius-sm);padding:var(--space-3);margin:0}.tp-summary{align-items:center;gap:6px var(--space-4);background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);flex-wrap:wrap;min-width:0;padding:7px 12px;display:flex}.tp-summary-scope{font-size:var(--fs-md);color:var(--text-secondary)}.tp-summary-scope strong{font-size:var(--fs-lg);color:var(--text-primary)}.tp-summary-notes{flex-wrap:wrap;align-items:center;gap:5px;min-width:0;margin-left:auto;display:flex}.tp-summary-label{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.07em;color:var(--text-soft)}.tp-note{font-size:var(--fs-xs);border:1px solid var(--border-strong);border-radius:var(--radius-full);color:var(--text-secondary);background:var(--bg-secondary);white-space:nowrap;padding:3px 10px}.tp-note[data-clickable=true]:hover{border-color:var(--brand-primary);color:var(--brand-primary)}.tp-note[data-clickable=false]{cursor:default;color:var(--text-tertiary);border-style:dashed}.tp-note[data-on=true]{background:var(--text-primary);border-color:var(--text-primary);color:#fff}.tp-kpis{grid-template-columns:repeat(5,minmax(0,1fr));gap:9px;min-width:0;display:grid}.tp-kpi{text-align:left;background:var(--bg-secondary);border:1px solid var(--border-primary);border-top:2px solid var(--tp-tone);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);--tp-tone:var(--border-strong);grid-template-rows:auto auto 11px 1fr;gap:0;min-width:0;padding:5px 9px 6px;display:grid}.tp-kpi[data-tone=ok]{--tp-tone:var(--sev-ok)}.tp-kpi[data-tone=warn]{--tp-tone:var(--sev-warn)}.tp-kpi[data-tone=bad]{--tp-tone:var(--sev-bad)}.tp-kpi[data-clickable=true]:hover{box-shadow:var(--shadow-sm);border-color:var(--border-strong)}.tp-kpi[data-clickable=false]{cursor:default}.tp-kpi[data-on=true]{background:var(--bg-subtle);outline:2px solid var(--text-primary);outline-offset:-2px}.tp-kpi-label{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tp-kpi-value{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-size:19px;font-weight:var(--fw-bold);letter-spacing:-.03em;color:var(--text-primary);white-space:nowrap;text-overflow:ellipsis;line-height:1.15;overflow:hidden}.tp-kpi[data-tone=bad] .tp-kpi-value{color:var(--sev-bad)}.tp-kpi[data-tone=warn] .tp-kpi-value{color:var(--accent-orange-strong)}.tp-kpi-viz{align-self:center;display:block}.tp-kpi-sub{font-size:var(--fs-2xs);color:var(--text-tertiary);-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2;display:-webkit-box;overflow:hidden}.tp-meter{border-radius:var(--radius-full);background:var(--bg-soft);height:5px;position:relative;overflow:visible}.tp-meter-fill{border-radius:var(--radius-full);background:var(--sev-ok);position:absolute;inset:0 auto 0 0}.tp-meter[data-sev=warn] .tp-meter-fill{background:var(--sev-warn)}.tp-meter[data-sev=bad] .tp-meter-fill{background:var(--sev-bad)}.tp-meter-marker{background:var(--text-primary);border-radius:1px;width:2px;position:absolute;top:-2px;bottom:-2px}.tp-stack{border-radius:var(--radius-full);background:var(--bg-soft);height:5px;display:flex;overflow:hidden}.tp-stack-seg[data-sev=ok]{background:var(--sev-ok)}.tp-stack-seg[data-sev=warn]{background:var(--sev-warn)}.tp-stack-seg[data-sev=bad]{background:var(--sev-bad)}.tp-sparkbars{align-items:flex-end;gap:2px;height:12px;display:flex}.tp-sparkbar{background:var(--brand-light);border-radius:1px 1px 0 0;flex:1;min-width:2px}.tp-sparkbar[data-sev=bad]{background:var(--sev-bad)}.tp-sparkbar[data-sev=warn]{background:var(--sev-warn)}.tp-dq{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-md);box-shadow:var(--shadow-xs);min-width:0;overflow:hidden}.tp-dq[data-open=true]{max-height:40vh;overflow:auto}.tp-dq-bar{align-items:center;gap:var(--space-2);width:100%;font-size:var(--fs-xs);text-align:left;padding:5px 10px;display:flex}.tp-dq-caret{color:var(--text-soft);flex:none}.tp-dq-lead{color:var(--text-secondary);font-weight:var(--fw-semibold);flex:none}.tp-dq-flag{border-radius:var(--radius-sm);font-size:var(--fs-2xs);white-space:nowrap;padding:1px 6px}.tp-dq-flag[data-sev=warn]{background:var(--sev-warn-soft);color:var(--accent-orange-strong);border:1px solid var(--accent-orange-primary)}.tp-dq-flag[data-sev=info]{background:var(--bg-subtle);color:var(--text-tertiary);border:1px solid var(--border-primary)}.tp-dq-count{color:var(--text-soft);font-family:var(--font-mono);flex:none;margin-left:auto}.tp-dq-detail{border-top:1px solid var(--border-subtle);padding:2px 10px 10px}.tp-dq-finding{font-size:var(--fs-xs);color:var(--text-secondary);max-width:92ch;margin:8px 0 0;line-height:1.45}.tp-dq-groups{gap:var(--space-4);margin-top:var(--space-3);grid-template-columns:repeat(auto-fit,minmax(280px,1fr));display:grid}.tp-dq-group-title{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.07em;color:var(--text-soft)}.tp-dq-group ul{gap:1px;margin:5px 0 0;padding:0;list-style:none;display:grid}.tp-dq-group li{font-size:var(--fs-2xs);align-items:baseline;gap:6px;display:flex}.tp-dq-col{font-family:var(--font-mono);color:var(--text-secondary)}.tp-dq-sheet{color:var(--text-soft)}.tp-dq-val{font-family:var(--font-mono);color:var(--text-primary);background:var(--bg-subtle);border-radius:var(--radius-xs);margin-left:auto;padding:0 4px}.tp-tl{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.tp-tl-scroll{flex:0 auto;min-height:0;overflow:hidden auto}.tp-tl-spacer{flex:1;min-height:0}.tp-tl-canvas{position:relative}.tp-tl-bands{inset:0 0 0 var(--tp-head);pointer-events:none;position:absolute}.tp-tl-band{background:color-mix(in srgb, var(--sev-ok) 7%, transparent);border-left:1px solid color-mix(in srgb, var(--sev-ok) 45%, transparent);border-right:1px solid color-mix(in srgb, var(--sev-ok) 45%, transparent);position:absolute;top:0;bottom:0}.tp-tl-overrun{background:repeating-linear-gradient(-45deg, color-mix(in srgb, var(--sev-bad) 9%, transparent) 0 4px, transparent 4px 9px);position:absolute;top:0;bottom:0}.tp-tl-row{grid-template-columns:var(--tp-head) minmax(0, 1fr);border-bottom:1px solid var(--border-subtle);align-items:center;height:21px;display:grid}.tp-tl-row[data-dim]{opacity:.32}.tp-tl-head{height:100%;padding:0 var(--space-2) 0 var(--space-3);font-size:var(--fs-2xs);text-align:left;border-right:1px solid var(--border-primary);background:var(--bg-secondary);z-index:2;align-items:center;gap:5px;display:flex;position:relative;overflow:hidden}.tp-tl-head:hover{background:var(--bg-subtle)}.tp-tl-swatch{border-radius:2px;flex:none;width:3px;height:13px}.tp-tl-veh{flex-direction:column;flex:none;line-height:1.05;display:flex}.tp-tl-code{font-family:var(--font-mono);font-weight:var(--fw-semibold);font-size:var(--fs-2xs);color:var(--text-primary)}.tp-tl-make{letter-spacing:.05em;color:var(--text-soft);text-transform:uppercase;font-size:8px}.tp-tl-nums{font-family:var(--font-mono);color:var(--text-soft);white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;margin-left:auto;overflow:hidden}.tp-tl-over{font-family:var(--font-mono);color:var(--sev-bad);background:var(--sev-bad-soft);border-radius:var(--radius-xs);flex:none;padding:0 3px}.tp-tl-plot{height:100%;position:relative}.tp-tl-leg{cursor:pointer;--tp-leg:var(--sev-ok);border-radius:2px;height:10px;display:flex;position:absolute;top:3px;overflow:hidden}.tp-tl-leg[data-sev=warn]{--tp-leg:var(--sev-warn)}.tp-tl-leg[data-sev=bad]{--tp-leg:var(--sev-bad)}.tp-tl-leg[data-dim]{opacity:.22}.tp-tl-leg[data-sel]{outline:1.5px solid var(--text-primary);outline-offset:1px;z-index:3}.tp-tl-leg:hover{filter:brightness(1.08);z-index:3}.tp-tl-seg{min-width:0;height:100%}.tp-tl-out,.tp-tl-back{background:color-mix(in srgb, var(--tp-leg) 42%, #fff)}.tp-tl-svc{background:var(--tp-leg);min-width:1px}.tp-tl-ribbon{height:5px;position:absolute;bottom:1px;left:0;right:0}.tp-tl-load{background:var(--sev-ok);border-radius:1px;position:absolute;bottom:0}.tp-tl-load[data-sev=warn]{background:var(--sev-warn)}.tp-tl-load[data-sev=bad]{background:var(--sev-bad)}.tp-tl-axis{height:24px;margin-left:var(--tp-head);border-top:1px solid var(--border-primary);flex:none;position:relative}.tp-tl-tick{font-family:var(--font-mono);color:var(--text-soft);white-space:nowrap;font-size:9px;position:absolute;top:11px;transform:translate(-50%)}.tp-tl-tick:before{content:"";border-left:1px solid var(--border-strong);height:4px;position:absolute;top:-10px;left:50%}.tp-tl-tick[data-major=true]{color:var(--text-secondary);font-weight:var(--fw-semibold)}.tp-tl-day{font-size:9px;font-weight:var(--fw-bold);letter-spacing:.05em;text-transform:uppercase;color:var(--text-tertiary);border-left:1px solid var(--border-strong);white-space:nowrap;padding-left:4px;position:absolute;top:0}.tp-tl-axis-shift{height:10px;color:var(--accent-green-deep);text-align:center;border-bottom:1px solid color-mix(in srgb, var(--sev-ok) 55%, transparent);white-space:nowrap;font-size:9px;position:absolute;top:0;overflow:hidden}.tp-tl-legend{padding:3px var(--space-3) 5px;margin-left:var(--tp-head);font-size:var(--fs-2xs);color:var(--text-tertiary);flex:none;align-items:center;gap:10px;display:flex}.tp-tl-key{align-items:center;gap:4px;display:inline-flex}.tp-tl-key:before{content:"";background:var(--sev-ok);border-radius:1px;width:9px;height:5px}.tp-tl-key[data-sev=warn]:before{background:var(--sev-warn)}.tp-tl-key[data-sev=bad]:before{background:var(--sev-bad)}.tp-tl-key-band:before{background:color-mix(in srgb, var(--sev-ok) 20%, transparent);border:1px solid color-mix(in srgb, var(--sev-ok) 50%, transparent)}.tp-tl-key-over:before{background:repeating-linear-gradient(-45deg, color-mix(in srgb, var(--sev-bad) 45%, transparent) 0 2px, transparent 2px 4px)}.tp-tl-key-note{color:var(--text-soft);margin-left:auto}.tp-tl-tip{z-index:40;background:var(--bg-secondary);border:1px solid var(--border-strong);border-radius:var(--radius-md);width:296px;box-shadow:var(--shadow-lg);font-size:var(--fs-xs);pointer-events:none;padding:7px 9px;position:fixed}.tp-tl-tip-hd{justify-content:space-between;gap:var(--space-2);font-family:var(--font-mono);margin-bottom:3px;display:flex}.tp-tl-tip-row{color:var(--text-tertiary);font-size:var(--fs-2xs);line-height:1.4}.tp-tl-tip-stops{border-top:1px solid var(--border-subtle);gap:2px;margin:5px 0 0;padding:5px 0 0;list-style:none;display:grid}.tp-tl-tip-stops li{font-size:var(--fs-2xs);align-items:baseline;gap:5px;display:flex}.tp-tl-tip-ref{font-family:var(--font-mono);flex:none}.tp-tl-tip-sub{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-tl-tip-late{color:var(--text-tertiary);flex:none;margin-left:auto}.tp-tl-tip-stops li[data-late] .tp-tl-tip-late{color:var(--sev-bad);font-weight:var(--fw-semibold)}.tp-tl-tip-foot{color:var(--text-soft);text-transform:uppercase;letter-spacing:.06em;margin-top:5px;font-size:9px}.tp-map-path-line{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;opacity:.75;pointer-events:none}.tp-map-path-hit{fill:none;stroke:#0000;stroke-width:11px;cursor:pointer}.tp-map-path-line[data-hop=chain]{stroke-width:3px;opacity:.95}.tp-map-path-line[data-hop=back]{stroke-width:1.4px;opacity:.55}.tp-map-path[data-muted] .tp-map-path-line{stroke-width:1px;opacity:.16}.tp-map-path:hover .tp-map-path-line{opacity:1}.tp-map-path[data-muted]:hover .tp-map-path-line{stroke-width:2px;opacity:.7}.tp-map-path-stop{cursor:pointer}.tp-map-path-stop circle{fill:#fff;stroke:currentColor;stroke-width:1.6px}.tp-map-path-stop[data-late] circle{fill:var(--sev-bad-soft);stroke:var(--sev-bad)}.tp-map-path-stop text{font-family:var(--font-mono);font-size:8px;font-weight:var(--fw-semibold);text-anchor:middle;fill:var(--text-primary);pointer-events:none}.tp-map-path-stop[data-late] text{fill:var(--sev-bad)}.tp-map-path-stop:hover circle{stroke-width:2.6px}.tp-map-panel.tp-map-full{z-index:80;box-shadow:none;border:0;border-radius:0;position:fixed;inset:0}.tp-map-panel.tp-map-full .tp-panel-hd{height:40px}.tp-map-panel.tp-map-full .tp-map-key{max-width:34%}.tp-map-expand{font-size:var(--fs-2xs);font-weight:var(--fw-semibold);color:var(--brand-primary);background:var(--brand-subtle);border:1px solid var(--brand-light);border-radius:var(--radius-sm);white-space:nowrap;flex:none;padding:2px 7px}.tp-map-expand:hover{background:var(--brand-muted)}.tp-tt-wrap{flex:1;min-height:0;overflow:auto}.tp-tt{border-collapse:collapse;width:100%;font-size:var(--fs-sm)}.tp-tt thead th{z-index:2;background:var(--bg-secondary);border-bottom:1px solid var(--border-primary);text-align:left;white-space:nowrap;padding:0;position:sticky;top:0}.tp-tt thead th button{text-align:left;width:100%;font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary);padding:5px 10px}.tp-tt thead th[data-numeric] button{text-align:right}.tp-tt thead th button:hover{color:var(--text-primary);background:var(--bg-subtle)}.tp-tt thead th[data-on] button{color:var(--brand-primary)}.tp-tt-caret{margin-left:3px;font-size:8px}.tp-tt-row{cursor:pointer;border-bottom:1px solid var(--border-subtle)}.tp-tt-row:hover{background:var(--brand-subtle)}.tp-tt-row[data-dim]{opacity:.35}.tp-tt-row[data-on]{background:var(--brand-subtle);box-shadow:inset 3px 0 0 var(--brand-primary)}.tp-tt td{vertical-align:middle;padding:5px 10px}.tp-tt-num{text-align:right;font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}.tp-tt-vehicle{align-items:center;gap:7px;display:flex}.tp-tt-swatch{border-radius:2px;flex:none;width:3px;height:22px}.tp-tt-vehicle strong{font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:var(--fw-semibold);display:block}.tp-tt-vehicle em{font-style:normal;font-size:var(--fs-2xs);color:var(--text-tertiary);display:block}.tp-tt-when{min-width:210px}.tp-tt-bar{border-radius:var(--radius-full);background:var(--bg-soft);height:7px;display:block;position:relative;overflow:hidden}.tp-tt-bar-window{background:color-mix(in srgb, var(--sev-ok) 26%, transparent);position:absolute;top:0;bottom:0}.tp-tt-bar-run{border-radius:var(--radius-full);background:var(--sev-ok);position:absolute;top:1px;bottom:1px}.tp-tt-bar-run[data-beyond]{background:var(--sev-bad)}.tp-tt-when-text{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--text-tertiary);white-space:nowrap;margin-top:2px;display:block}.tp-tt-sub{font-style:normal;font-size:var(--fs-2xs);color:var(--text-soft);display:block}.tp-tt-fill[data-sev=bad]{color:var(--sev-bad);font-weight:var(--fw-semibold)}.tp-tt-fill[data-sev=warn]{color:var(--accent-orange-strong)}.tp-tt-late{color:var(--sev-bad);font-weight:var(--fw-semibold)}.tp-tt-late em{font-style:normal;font-weight:var(--fw-regular);color:var(--text-soft)}.tp-tt-beyond{color:var(--sev-bad);background:var(--sev-bad-soft);border-radius:var(--radius-xs);padding:1px 5px}.tp-tt-none{color:var(--text-soft)}.tp-tt-foot{border-top:1px solid var(--border-subtle);font-size:var(--fs-2xs);color:var(--text-soft);flex:none;margin:0;padding:5px 10px 6px}.tp-tt-group{font-size:9px;font-weight:var(--fw-semibold);letter-spacing:.03em;color:var(--accent-cyan-strong);background:var(--accent-cyan-subtle);border:1px solid var(--accent-cyan-soft);border-radius:var(--radius-full);white-space:nowrap;flex:none;margin-left:auto;padding:1px 6px}.tp-tt-group:hover{background:var(--accent-cyan-soft)}.tp-tt-row[data-nested]{background:var(--bg-subtle)}.tp-tt-row[data-nested] .tp-tt-vehicle{padding-left:26px}.tp-tt-row[data-nested] .tp-tt-vehicle strong{font-weight:var(--fw-regular);color:var(--text-secondary)}.tp-tt-row[data-nested]:hover{background:var(--brand-subtle)}.tp-tt th.tp-tt-pick,.tp-tt td.tp-tt-pick{text-align:center;width:30px;padding-left:10px;padding-right:0}.tp-tt th.tp-tt-pick{color:var(--text-soft);font-size:11px}.tp-tt-pick input{accent-color:var(--brand-primary);cursor:pointer;margin:0}.tp-tt-row[data-cmp]{background:var(--accent-purple-soft)}.tp-tt-row[data-cmp]:hover{background:color-mix(in srgb, var(--accent-purple-soft) 70%, var(--brand-subtle))}.tp-tt-bar{align-items:center;gap:var(--space-3);border-top:1px solid var(--border-primary);background:var(--accent-purple-soft);min-height:30px;font-size:var(--fs-xs);color:var(--accent-purple-strong);flex:none;padding:5px 10px;display:flex}.tp-tt-compare{font-size:var(--fs-xs);font-weight:var(--fw-semibold);color:#fff;background:var(--accent-purple-strong);border-radius:var(--radius-sm);padding:3px 10px}.tp-tt-compare:hover{filter:brightness(1.1)}.tp-tt-bar-clear{font-size:var(--fs-xs);color:var(--accent-purple-strong);text-underline-offset:2px;text-decoration:underline}.tp-cmp{z-index:70;background:var(--bg-primary);flex-direction:column;display:flex;position:fixed;inset:0}.tp-cmp-hd{align-items:center;gap:var(--space-3);background:var(--bg-secondary);border-bottom:1px solid var(--border-primary);flex:none;padding:9px 12px;display:flex}.tp-cmp-hd h3{font-size:var(--fs-lg);margin:0}.tp-cmp-hd span{font-size:var(--fs-xs);color:var(--text-tertiary)}.tp-cmp-clear{font-size:var(--fs-xs);color:var(--brand-primary);text-underline-offset:2px;margin-left:auto;text-decoration:underline}.tp-cmp-close{border-radius:var(--radius-sm);width:26px;height:26px;color:var(--text-tertiary);place-items:center;display:grid}.tp-cmp-close:hover{background:var(--bg-soft);color:var(--text-primary)}.tp-cmp-cols{flex:1;gap:9px;min-height:0;padding:9px;display:flex;overflow-x:auto}.tp-cmp-col{background:var(--bg-secondary);border:1px solid var(--border-primary);border-radius:var(--radius-md);min-height:0;box-shadow:var(--shadow-xs);flex-direction:column;flex:1 0 300px;display:flex;overflow:hidden}.tp-cmp-col>header{align-items:flex-start;gap:var(--space-2);border-top:3px solid var(--brand-primary);border-bottom:1px solid var(--border-subtle);flex:none;padding:8px 10px;display:flex}.tp-cmp-col>header strong{font-family:var(--font-mono);font-size:var(--fs-md);display:block}.tp-cmp-col>header em{font-style:normal;font-size:var(--fs-2xs);color:var(--text-tertiary);display:block}.tp-cmp-col>header button{color:var(--text-soft);flex:none;margin-left:auto}.tp-cmp-col>header button:hover{color:var(--sev-bad)}.tp-cmp-figures{background:var(--border-subtle);flex:none;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;display:grid}.tp-cmp-figure{background:var(--bg-secondary);flex-direction:column;gap:1px;padding:4px 8px;display:flex}.tp-cmp-figure span{text-transform:uppercase;letter-spacing:.05em;color:var(--text-soft);font-size:9px}.tp-cmp-figure strong{font-family:var(--font-mono);font-size:var(--fs-sm)}.tp-cmp-figure[data-tone=bad] strong{color:var(--sev-bad)}.tp-cmp-span{font-family:var(--font-mono);font-size:var(--fs-2xs);color:var(--text-tertiary);border-top:1px solid var(--border-subtle);flex:none;margin:0;padding:5px 10px}.tp-cmp-col h4{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.07em;color:var(--text-soft);border-top:1px solid var(--border-subtle);flex:none;margin:0;padding:5px 10px 3px}.tp-cmp-legs{flex:1;min-height:0;margin:0;padding:0 4px 6px;list-style:none;overflow-y:auto}.tp-cmp-legs li{font-size:var(--fs-2xs);display:block}.tp-cmp-leg-n{font-family:var(--font-mono);color:var(--text-soft);flex:none;min-width:18px}.tp-cmp-leg-when{font-family:var(--font-mono);color:var(--text-tertiary);flex:none}.tp-cmp-leg-where{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-cmp-leg-km{font-family:var(--font-mono);color:var(--text-tertiary);flex:none;margin-left:auto}.tp-cmp-leg-fill{font-family:var(--font-mono);text-align:right;min-width:38px;color:var(--sev-ok);flex:none}.tp-cmp-leg-fill[data-sev=warn]{color:var(--accent-orange-strong)}.tp-cmp-leg-fill[data-sev=bad]{color:var(--sev-bad)}.tp-cmp-run>button,.tp-cmp-stop>button{width:100%;font-size:var(--fs-2xs);text-align:left;border-radius:var(--radius-xs);align-items:baseline;gap:6px;padding:2px 6px;display:flex}.tp-cmp-run>button:hover,.tp-cmp-stop>button:hover{background:var(--brand-subtle)}.tp-cmp-run{border-bottom:1px solid var(--border-subtle)}.tp-cmp-run[data-open]>button{background:var(--bg-subtle);font-weight:var(--fw-semibold)}.tp-cmp-caret{color:var(--text-soft);flex:none;width:8px}.tp-cmp-run-body{background:var(--bg-subtle);padding:2px 6px 7px 14px}.tp-cmp-run-line{font-size:var(--fs-2xs);color:var(--text-tertiary);margin:2px 0 5px;line-height:1.4}.tp-cmp-stops{border-left:2px solid var(--border-primary);margin:0 0 6px;padding:0;list-style:none}.tp-cmp-stop-ref{font-family:var(--font-mono);flex:none}.tp-cmp-stop-where{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-cmp-stop-late{color:var(--text-soft);flex:none;margin-left:auto}.tp-cmp-stop-late[data-late]{color:var(--sev-bad);font-weight:var(--fw-semibold)}.tp-cmp-stop-body{background:var(--bg-secondary);border-radius:var(--radius-xs);padding:2px 6px 6px 14px}.tp-cmp-stop-body p{font-size:var(--fs-2xs);color:var(--text-tertiary);margin:2px 0 4px;line-height:1.4}.tp-cmp-stop-tags em{font-style:normal;font-family:var(--font-mono);background:var(--bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);margin-right:3px;padding:0 4px;font-size:9px}.tp-cmp-run-body h5{text-transform:uppercase;letter-spacing:.06em;color:var(--text-soft);margin:6px 0 3px;font-size:9px}.tp-cause-sets{gap:2px;margin:0 0 6px;padding:0;list-style:none;display:grid}.tp-cause-sets li{flex-wrap:wrap;align-items:baseline;gap:3px;font-size:9px;display:flex}.tp-cause-set-count{text-transform:uppercase;letter-spacing:.05em;color:var(--text-soft);margin-right:3px}.tp-cause-sets em{font-style:normal;font-family:var(--font-mono);color:var(--accent-purple-strong);background:var(--accent-purple-soft);border-radius:var(--radius-xs);padding:1px 4px}.tp-cause-note{color:var(--text-tertiary);margin:0 0 6px;font-size:9px;line-height:1.45}.tp-rail-split{font-size:var(--fs-2xs);color:var(--text-secondary);margin:6px 0 0;line-height:1.4}.tp-rail-trip{border:1px solid var(--brand-light);background:var(--brand-subtle);border-radius:var(--radius-sm);margin-bottom:9px;padding:7px 9px}.tp-rail-trip-hd{align-items:flex-start;gap:var(--space-2);display:flex}.tp-rail-trip-hd strong{font-family:var(--font-mono);font-size:var(--fs-md);display:block}.tp-rail-trip-hd em{font-style:normal;font-size:var(--fs-2xs);color:var(--text-tertiary);display:block}.tp-rail-trip-hd button{font-size:var(--fs-xs);font-weight:var(--fw-semibold);color:var(--brand-primary);white-space:nowrap;flex:none;margin-left:auto}.tp-rail-trip-hd button:hover{text-underline-offset:2px;text-decoration:underline}.tp-rail-trip-line{font-size:var(--fs-2xs);color:var(--text-secondary);margin:4px 0 0;line-height:1.4}.tp-map{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.tp-map-plot{flex:1;min-height:0;position:relative;overflow:hidden}.tp-map-svg{cursor:grab;touch-action:none;display:block}.tp-map-svg[data-drag]{cursor:grabbing}.tp-map-controls{align-items:center;gap:6px var(--space-2);border-bottom:1px solid var(--border-subtle);flex-wrap:wrap;flex:none;padding:5px 10px;display:flex}.tp-seg{border:1px solid var(--border-primary);border-radius:var(--radius-sm);background:var(--bg-subtle);display:inline-flex;overflow:hidden}.tp-seg button{font-size:var(--fs-2xs);color:var(--text-tertiary);white-space:nowrap;padding:2px 7px}.tp-seg button+button{border-left:1px solid var(--border-primary)}.tp-seg button:hover{color:var(--text-primary)}.tp-seg button[data-on=true]{background:var(--bg-secondary);color:var(--brand-primary);font-weight:var(--fw-semibold);box-shadow:inset 0 -2px 0 var(--brand-primary)}.tp-map-reset{font-size:var(--fs-2xs);color:var(--brand-primary);text-underline-offset:2px;white-space:nowrap;text-decoration:underline}.tp-map-grid circle{stroke:var(--border-primary);stroke-dasharray:2 5}.tp-map-spokes line{stroke-width:.7px;opacity:.3}.tp-map-bubble{cursor:pointer}.tp-map-bubble-base{fill:color-mix(in srgb, var(--brand-primary) 16%, transparent);stroke:color-mix(in srgb, var(--brand-primary) 55%, transparent);stroke-width:1px}.tp-map-bubble-share{fill:color-mix(in srgb, var(--sev-bad) 62%, transparent);stroke:var(--sev-bad);stroke-width:.6px;pointer-events:none}.tp-map-bubble:hover .tp-map-bubble-base{fill:color-mix(in srgb, var(--brand-primary) 32%, transparent);stroke:var(--brand-primary)}.tp-map-bubble[data-dim]{opacity:.2}.tp-map-bubble-label{fill:var(--text-secondary);text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:var(--bg-secondary);stroke-width:3px;font-size:9.5px}.tp-map-bubble-count{fill:var(--text-soft);font-family:var(--font-mono)}.tp-map-stop{cursor:pointer;stroke:#fff;stroke-width:.6px}.tp-map-stop[data-dim]{opacity:.14}.tp-map-stop:hover{stroke:var(--text-primary);stroke-width:1.3px}.tp-map-drop{fill:color-mix(in srgb, var(--sev-bad) 16%, transparent);stroke:var(--sev-bad);stroke-width:1.4px;cursor:pointer}.tp-map-drop[data-dim]{opacity:.16}.tp-map-drop:hover{fill:color-mix(in srgb, var(--sev-bad) 36%, transparent)}.tp-map-depot rect{fill:var(--text-primary)}.tp-map-depot[data-off] rect{fill:var(--text-tertiary)}.tp-map-depot text{font-size:9px;font-weight:var(--fw-bold);text-transform:uppercase;letter-spacing:.06em;fill:var(--text-primary);paint-order:stroke;stroke:var(--bg-secondary);stroke-width:3px}.tp-map-scale line{stroke:var(--text-tertiary);stroke-width:1.2px}.tp-map-scale text{fill:var(--text-tertiary);font-size:9px;font-family:var(--font-mono)}.tp-map-tip text{fill:var(--text-tertiary);paint-order:stroke;stroke:var(--bg-secondary);stroke-width:3.5px;font-size:10px}.tp-map-tip .tp-map-tip-title{font-size:11px;font-weight:var(--fw-bold);fill:var(--text-primary)}.tp-map-foot{align-items:center;gap:var(--space-3);border-top:1px solid var(--border-subtle);font-size:var(--fs-2xs);color:var(--text-tertiary);flex:none;min-width:0;padding:4px 10px 6px;display:flex}.tp-map-hint{color:var(--text-soft);text-overflow:ellipsis;overflow:hidden}.tp-map-key{z-index:2;border-radius:var(--radius-sm);background:color-mix(in srgb, var(--bg-secondary) 90%, transparent);border:1px solid var(--border-subtle);pointer-events:none;flex-direction:column;gap:3px;max-width:62%;padding:5px 7px;display:flex;position:absolute;top:6px;left:8px}.tp-map-key-title{text-transform:uppercase;letter-spacing:.06em;color:var(--text-soft);white-space:nowrap}.tp-map-key-sizes{align-items:flex-end;gap:9px;min-height:18px;display:flex}.tp-map-key-size{font-family:var(--font-mono);color:var(--text-tertiary);align-items:center;gap:3px;display:inline-flex}.tp-map-key-size span{background:color-mix(in srgb, var(--brand-primary) 16%, transparent);border:1px solid color-mix(in srgb, var(--brand-primary) 55%, transparent);border-radius:50%;display:inline-block}.tp-map-key-share{color:var(--text-soft);text-wrap:pretty;max-width:30ch}.tp-map-legend-item{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.tp-map-legend-item:before{content:"";border-radius:50%;width:8px;height:8px}.tp-map-legend-drop:before{border:1.4px solid var(--sev-bad);background:color-mix(in srgb, var(--sev-bad) 16%, transparent)}.tp-map-legend-late:before{background:var(--sev-bad)}.tp-queue-panel .tp-panel-body{overflow-y:auto}.tp-queue-empty{padding:var(--space-4);font-size:var(--fs-sm);color:var(--text-tertiary);margin:0}.tp-causes{margin:0;padding:0;list-style:none}.tp-cause{border-bottom:1px solid var(--border-subtle);--tp-cause-color:var(--sev-warn)}.tp-cause[data-id=tag_gap]{--tp-cause-color:var(--accent-purple-strong)}.tp-cause[data-id=trip_id]{--tp-cause-color:var(--accent-cyan-strong)}.tp-cause[data-id=window]{--tp-cause-color:var(--brand-primary)}.tp-cause[data-id=time_blown]{--tp-cause-color:var(--sev-bad)}.tp-cause-hd{align-items:flex-start;gap:var(--space-2);text-align:left;border-left:3px solid var(--tp-cause-color);width:100%;padding:7px 10px;display:flex}.tp-cause-hd:hover,.tp-cause[data-open=true] .tp-cause-hd{background:var(--bg-subtle)}.tp-cause-count{font-family:var(--font-mono);font-size:17px;font-weight:var(--fw-bold);color:var(--tp-cause-color);flex:none;min-width:26px;line-height:1}.tp-cause-text{flex-direction:column;gap:1px;min-width:0;display:flex}.tp-cause-title{font-size:var(--fs-sm);font-weight:var(--fw-semibold);line-height:1.2}.tp-cause-fix{font-size:var(--fs-2xs);color:var(--text-tertiary);line-height:1.35}.tp-cause-side{flex-direction:column;flex:none;align-items:flex-end;gap:1px;margin-left:auto;display:flex}.tp-cause-vol{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-secondary)}.tp-cause-owner{text-transform:uppercase;letter-spacing:.05em;color:var(--text-soft);font-size:9px}.tp-cause-body{padding:0 10px 8px 39px}.tp-cause-codes{flex-wrap:wrap;gap:4px;margin-bottom:6px;display:flex}.tp-code{font-family:var(--font-mono);background:var(--bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-tertiary);padding:1px 5px;font-size:9px}.tp-code em{font-style:normal;font-weight:var(--fw-bold);color:var(--text-primary);margin-left:4px}.tp-cause-tags{color:var(--text-tertiary);font-size:9px}.tp-cause-tags em{font-style:normal;font-family:var(--font-mono);color:var(--accent-purple-strong);background:var(--accent-purple-soft);border-radius:var(--radius-xs);margin-left:3px;padding:1px 4px}.tp-cause-cns{gap:1px;margin:0;padding:0;list-style:none;display:grid}.tp-cause-cns button{border-radius:var(--radius-xs);width:100%;font-size:var(--fs-2xs);text-align:left;align-items:baseline;gap:6px;padding:2px 4px;display:flex}.tp-cause-cns button:hover{background:var(--brand-subtle)}.tp-cn-ref{font-family:var(--font-mono);color:var(--text-primary);flex:none}.tp-cn-sub{color:var(--text-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tp-cn-vol{font-family:var(--font-mono);color:var(--text-secondary);flex:none;margin-left:auto}.tp-cn-why{color:var(--text-soft);flex:none}.tp-cause-none{font-size:var(--fs-2xs);color:var(--text-soft);padding:2px 4px}.tp-rail-scrim{z-index:50;background:#0f1e3738;position:fixed;inset:0}.tp-rail{z-index:51;background:var(--bg-secondary);border-left:1px solid var(--border-strong);width:min(452px,96vw);box-shadow:var(--shadow-xl);flex-direction:column;display:flex;position:fixed;top:0;bottom:0;right:0}.tp-rail-hd{align-items:flex-start;gap:var(--space-2);border-bottom:1px solid var(--border-primary);flex:none;padding:10px 12px;display:flex}.tp-rail-hd h3{font-size:var(--fs-lg);font-family:var(--font-mono);letter-spacing:-.02em;margin:0}.tp-rail-hd span{font-size:var(--fs-xs);color:var(--text-tertiary)}.tp-rail-close{border-radius:var(--radius-sm);width:24px;height:24px;color:var(--text-tertiary);flex:none;place-items:center;margin-left:auto;display:grid}.tp-rail-close:hover{background:var(--bg-soft);color:var(--text-primary)}.tp-rail-body{flex:1;min-height:0;padding:10px 12px 24px;overflow-y:auto}.tp-rail-h4{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.07em;color:var(--text-soft);margin:14px 0 5px}.tp-rail-stats{background:var(--border-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-sm);grid-template-columns:repeat(2,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.tp-rail-stat{background:var(--bg-secondary);flex-direction:column;gap:1px;padding:4px 7px;display:flex}.tp-rail-stat span{text-transform:uppercase;letter-spacing:.05em;color:var(--text-soft);font-size:9px}.tp-rail-stat strong{font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:var(--fw-semibold)}.tp-rail-cause{border-radius:var(--radius-sm);background:var(--sev-bad-soft);border-left:3px solid var(--sev-bad);flex-direction:column;gap:2px;margin-bottom:9px;padding:7px 9px;display:flex}.tp-rail-cause[data-id=tag_gap]{background:var(--accent-purple-soft);border-left-color:var(--accent-purple-strong)}.tp-rail-cause[data-id=trip_id]{background:var(--accent-cyan-subtle);border-left-color:var(--accent-cyan-strong)}.tp-rail-cause[data-id=window]{background:var(--brand-subtle);border-left-color:var(--brand-primary)}.tp-rail-cause strong{font-size:var(--fs-sm)}.tp-rail-cause span{font-size:var(--fs-2xs);color:var(--text-secondary);line-height:1.4}.tp-rail-tags{flex-wrap:wrap;gap:3px;margin:8px 0 0;display:flex}.tp-rail-tags span{font-family:var(--font-mono);background:var(--bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-secondary);padding:1px 5px;font-size:9px}.tp-rail-legs,.tp-rail-stops{gap:1px;margin:0;padding:0;list-style:none;display:grid}.tp-rail-legs button,.tp-rail-stops button{border-radius:var(--radius-xs);width:100%;font-size:var(--fs-2xs);text-align:left;align-items:baseline;gap:6px;padding:3px 5px;display:flex}.tp-rail-legs button:hover,.tp-rail-stops button:hover{background:var(--brand-subtle)}.tp-rail-leg-n{font-family:var(--font-mono);color:var(--text-soft);flex:none;min-width:18px}.tp-rail-leg-when,.tp-rail-stop-kind{font-family:var(--font-mono);color:var(--text-tertiary);flex:none}.tp-rail-leg-where,.tp-rail-stop-addr{text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);overflow:hidden}.tp-rail-leg-km,.tp-rail-leg-load,.tp-rail-stop-late{font-family:var(--font-mono);color:var(--text-tertiary);flex:none}.tp-rail-leg-km,.tp-rail-stop-late{margin-left:auto}.tp-rail-stop-ref{font-family:var(--font-mono);flex:none}.tp-rail-stops li[data-late] .tp-rail-stop-late{color:var(--sev-bad);font-weight:var(--fw-semibold)}.tp-why{margin-top:14px}.tp-why h4{font-size:var(--fs-2xs);text-transform:uppercase;letter-spacing:.07em;color:var(--text-soft);margin:0 0 5px}.tp-why-table{border-collapse:collapse;width:100%;font-size:var(--fs-2xs)}.tp-why-table th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--text-soft);font-size:9px;font-weight:var(--fw-medium);border-bottom:1px solid var(--border-primary);padding:2px 4px}.tp-why-table td{border-bottom:1px solid var(--border-subtle);vertical-align:top;padding:3px 4px}.tp-why-worker{font-family:var(--font-mono);white-space:nowrap}.tp-why-elig{color:var(--text-tertiary)}.tp-why-table tr[data-elig=ineligible] .tp-why-elig{color:var(--sev-bad);font-weight:var(--fw-semibold)}.tp-why-codes span{background:var(--bg-subtle);border:1px solid var(--border-subtle);border-radius:var(--radius-xs);color:var(--text-secondary);margin:0 3px 2px 0;padding:0 4px;display:inline-block}.tp-why-quote{font-size:var(--fs-2xs);color:var(--text-tertiary);margin:6px 0 0;font-style:italic;line-height:1.4}.tp-fields dl{gap:1px;margin:0;display:grid}.tp-field{gap:var(--space-2);font-size:var(--fs-2xs);border-bottom:1px solid var(--border-subtle);grid-template-columns:46% 1fr;padding:2px 4px;display:grid}.tp-field dt{color:var(--text-tertiary);text-overflow:ellipsis;overflow:hidden}.tp-field dd{font-family:var(--font-mono);color:var(--text-primary);overflow-wrap:anywhere;margin:0}.tp-fields-more{font-size:var(--fs-2xs);color:var(--brand-primary);margin-top:6px}.tp-fields-blank dd{color:var(--text-soft)}@media (width<=1180px){.tp-app{height:auto;min-height:100dvh}.tp-grid{grid-template-rows:none;grid-template-columns:minmax(0,1fr);grid-template-areas:"summary""input""kpis""trips""map""queue""dq";overflow:visible}.tp-kpis{grid-template-columns:repeat(4,minmax(0,1fr))}.tp-trips-panel,.tp-map-panel,.tp-queue-panel{min-height:330px}}
