*,:before,:after{box-sizing:border-box}body{margin:0}#root{display:contents}.traffic-light{background:#405057;border:1px solid #333;border-radius:8px;flex-direction:column;gap:4px;padding:6px;display:flex}.bulb{opacity:.65;border-radius:50%;width:20px;height:20px;transition:opacity .2s,box-shadow .2s}.bulb-red{background:#ef4444}.bulb-yellow{background:#eab308}.bulb-green{background:#22c55e}.bulb.on{opacity:1;box-shadow:0 0 10px}.bulb-red.on{box-shadow:0 0 12px #ef4444}.bulb-yellow.on{box-shadow:0 0 12px #eab308}.bulb-green.on{box-shadow:0 0 12px #22c55e}.intersection-wrap{flex-direction:column;align-items:center;gap:16px;display:flex}.intersection-svg{border:1px solid #2d2d44;border-radius:12px;width:100%;max-width:260px}.lights-row{align-items:center;gap:20px;display:flex}.light-wrap{flex-direction:column;align-items:center;gap:4px;display:flex}.light-label{color:#888;text-transform:uppercase;letter-spacing:.05em;font-size:11px}.countdown-badge{color:#eb8117;text-align:center;font-variant-numeric:tabular-nums;min-width:60px;font-size:28px;font-weight:700}.cycle-bar-wrap{flex-direction:column;gap:10px;display:flex}.cycle-bar{border-radius:8px;gap:2px;height:16px;display:flex;overflow:hidden}.cycle-seg{opacity:.5;border-radius:4px;transition:width .4s}.cycle-seg.active{opacity:1;box-shadow:0 0 8px}.cycle-legend{flex-wrap:wrap;gap:8px 16px;display:flex}.legend-item{color:#94a3b8;align-items:center;gap:5px;font-size:11px;display:flex}.legend-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.cycle-total{color:#64748b;margin:0;font-size:12px}.stats-grid{grid-template-columns:repeat(2,1fr);gap:8px;margin-top:16px;display:grid}.stat-card{background:#fff;border:1px solid #405057;border-radius:8px;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.stat-label{text-transform:uppercase;letter-spacing:.08em;color:#eb8117;font-size:10px}.stat-value{color:#84828f;font-variant-numeric:tabular-nums;font-size:18px;font-weight:600}[data-theme=dark] .stat-card{background:#1e293b;border-color:#334155}[data-theme=dark] .stat-value{color:#e2e8f0}.el-root{flex-direction:column;gap:6px;max-height:380px;display:flex;overflow-y:auto}.el-root::-webkit-scrollbar{width:4px}.el-root::-webkit-scrollbar-track{background:0 0}.el-root::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:2px}.el-empty{color:#94a3b8;padding:8px;font-size:12px}.el-session{background:#fff;border:1px solid #64748b;border-radius:6px;overflow:hidden}.el-session--open{border-color:#253047}.el-session-header{cursor:pointer;text-align:left;color:#64748b;background:0 0;border:none;align-items:center;gap:8px;width:100%;padding:7px 10px;font-size:12px;transition:background .12s;display:flex}.el-session-header:hover{background:#f1f5f9}.el-session-arrow{color:#475569;flex-shrink:0;width:10px;font-size:10px}.el-session-badge{text-transform:uppercase;letter-spacing:.07em;color:#3b82f6;background:#3b82f61f;border-radius:3px;flex-shrink:0;padding:1px 6px;font-size:10px;font-weight:700}.el-session-label{color:#94a3b8;white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:11.5px;overflow:hidden}.el-session-count{color:#334155;flex-shrink:0;margin-left:auto;font-size:10.5px}.el-event-list{border-top:1px solid #e2e8f0;flex-direction:column;gap:4px;margin:0;padding:4px 6px 6px;list-style:none;display:flex}.el-event-item{background:#fafafa;border:1px solid #20ab6a;border-radius:5px;align-items:baseline;gap:10px;padding:5px 8px;font-size:12px;animation:.18s el-slide-in;display:flex}.el-event-item--reset{background:#3b82f60f;border-color:#3b82f640}@keyframes el-slide-in{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}.el-event-ts{color:#475569;font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}.el-event-msg{color:#94a3b8}.el-event-item--reset .el-event-msg{color:#60a5fa;font-weight:600}[data-theme=dark] .el-root::-webkit-scrollbar-thumb{background:#334155}[data-theme=dark] .el-empty{color:#94a3b8}[data-theme=dark] .el-session{background:#1e293b;border-color:#334155}[data-theme=dark] .el-session--open{border-color:#1e3a5f}[data-theme=dark] .el-session-header{color:#94a3b8}[data-theme=dark] .el-session-header:hover{background:#293548}[data-theme=dark] .el-session-count{color:#475569}[data-theme=dark] .el-event-list{border-top-color:#334155}[data-theme=dark] .el-event-item{background:#0f172a;border-color:#334155}[data-theme=dark] .el-event-item--reset{background:#60a5fa0d;border-color:#60a5fa33}[data-theme=dark] .el-event-ts{color:#475569}.pn-modal{--pn-strong:#1e293b;--pn-body:#334155;--pn-muted:#4b5563;--pn-radius:10px;z-index:2000;font-family:var(--font);justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}[data-theme=dark] .pn-modal{--pn-strong:var(--text);--pn-body:#cbd5e1;--pn-muted:var(--muted)}.pn-backdrop{-webkit-backdrop-filter:blur(4px);background:#000000a6;position:absolute;inset:0}.pn-dialog{background:var(--surface);border:1px solid var(--border);border-radius:var(--pn-radius);flex-direction:column;width:min(480px,100%);max-height:90vh;display:flex;position:relative;overflow:hidden;box-shadow:0 24px 48px #00000059}.pn-header{border-bottom:1px solid var(--border);text-align:center;flex-shrink:0;padding:24px 24px 16px;position:relative}.pn-lang{border:1px solid var(--border);color:var(--pn-muted);letter-spacing:.08em;cursor:pointer;background:0 0;border-radius:6px;padding:3px 8px;font-family:inherit;font-size:10px;font-weight:700;transition:color .15s,border-color .15s;position:absolute;top:12px;right:12px}.pn-lang:hover{color:var(--accent);border-color:var(--accent)}.pn-icon{margin-bottom:8px;font-size:32px;line-height:1}.pn-title{color:var(--pn-strong);letter-spacing:-.01em;font-size:17px;font-weight:700}.pn-subtitle{color:var(--pn-muted);margin-top:3px;font-size:12px}.pn-body{flex-direction:column;flex:1;gap:12px;padding:16px 24px;display:flex;overflow-y:auto}.pn-disclaimer{color:var(--pn-body);background:color-mix(in srgb, var(--accent) 10%, transparent);border-left:3px solid var(--accent);border-radius:4px;margin-bottom:2px;padding:8px 10px;font-size:11.5px;line-height:1.5}.pn-intro{color:var(--pn-body);font-size:13px;line-height:1.6}.pn-item{background:var(--bg);border:1px solid var(--border);color:var(--pn-body);border-radius:8px;flex-direction:column;gap:3px;padding:10px 12px;font-size:13px;line-height:1.5;display:flex}.pn-label{text-transform:uppercase;letter-spacing:.07em;color:var(--pn-muted);font-size:10px;font-weight:700}.pn-item strong{color:var(--pn-strong)}.pn-item a{color:var(--accent);text-decoration:none}.pn-item a:hover{text-decoration:underline}.pn-law{color:var(--pn-muted);text-align:center;font-size:11px;line-height:1.6}.pn-actions{border-top:1px solid var(--border);flex-shrink:0;gap:8px;padding:16px 24px;display:flex}.pn-reject,.pn-accept{cursor:pointer;border-radius:6px;padding:11px;font-family:inherit;font-size:13px;font-weight:600}.pn-reject{border:1px solid var(--border);color:var(--pn-body);background:0 0;flex:1;transition:background .15s,color .15s}.pn-reject:hover{background:var(--bg);color:var(--pn-strong)}.pn-accept{background:var(--accent);color:#1a1005;border:none;flex:2;transition:filter .15s,transform .1s}.pn-accept:hover{filter:brightness(1.06)}.pn-accept:active{transform:scale(.98)}.pn-lang:focus-visible,.pn-reject:focus-visible,.pn-accept:focus-visible,.pn-item a:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (width<=480px){.pn-header{padding:20px 16px 14px}.pn-body,.pn-actions{padding:14px 16px}}.vsp-root{--vsp-bg:#fff;--vsp-surface:#fafafa;--vsp-border:#405057;--vsp-border-focus:#22c55e;--vsp-text:#1e293b;--vsp-muted:#64748b;--vsp-accent:#eb8117;--vsp-accent-dim:#22c55e1a;--vsp-red:#ef4444;--vsp-red-dim:#ef44441f;--vsp-radius:6px;--vsp-font-mono:"JetBrains Mono", "Fira Code", ui-monospace, monospace;color:var(--vsp-text);background:0 0;flex-direction:column;gap:14px;font-family:system-ui,-apple-system,sans-serif;font-size:13.5px;display:flex}.vsp-header{justify-content:space-between;align-items:center;gap:10px;display:flex}.vsp-title{letter-spacing:.06em;text-transform:uppercase;color:var(--vsp-muted);margin:0;font-size:14px;font-weight:600}.vsp-badge{letter-spacing:.07em;text-transform:uppercase;border-radius:4px;align-items:center;gap:5px;padding:3px 8px;font-size:11px;font-weight:600;display:inline-flex}.vsp-badge--ok{background:var(--vsp-accent-dim);color:var(--vsp-accent)}.vsp-tabs{background:var(--vsp-bg);border:1px solid var(--vsp-border);border-radius:var(--vsp-radius);gap:4px;padding:3px;display:flex}.vsp-tab{color:var(--vsp-muted);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:1;justify-content:center;align-items:center;gap:6px;padding:7px 10px;font-size:12.5px;font-weight:500;transition:background .15s,color .15s;display:flex}.vsp-tab:hover:not(.vsp-tab--active){background:var(--vsp-surface);color:var(--vsp-text)}.vsp-tab--active{background:var(--vsp-surface);color:var(--vsp-accent);border:1px solid #0000}.vsp-tab-icon{align-items:center;display:flex}.vsp-tab-icon svg{width:14px;height:14px}.vsp-label{text-transform:uppercase;letter-spacing:.07em;color:var(--vsp-muted);font-size:11.5px;font-weight:600}.vsp-input{box-sizing:border-box;background:var(--vsp-bg);border:1px solid var(--vsp-border);border-radius:var(--vsp-radius);width:100%;color:var(--vsp-text);font-family:var(--vsp-font-mono);outline:none;padding:8px 11px;font-size:13px;transition:border-color .15s}.vsp-input:focus{border-color:var(--vsp-border-focus)}.vsp-input--sm{text-align:center;width:70px}.vsp-input--cam{cursor:pointer;flex:1}.vsp-hint{color:var(--vsp-muted);margin:0;font-size:11.5px;line-height:1.5}.vsp-hint--center{text-align:center}.vsp-source-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.vsp-preview-wrap{aspect-ratio:4/3;border:1px solid var(--vsp-border);border-radius:var(--vsp-radius);background:#000;width:100%;position:relative;overflow:hidden}.vsp-preview-img{object-fit:cover;width:100%;height:100%;animation:.15s vsp-frame-in;display:block}@keyframes vsp-frame-in{0%{opacity:.6}to{opacity:1}}.vsp-preview-video{object-fit:cover;width:100%;height:100%;display:block}.vsp-preview-placeholder{width:100%;height:100%;color:var(--vsp-muted);justify-content:center;align-items:center;font-size:12px;display:flex}.vsp-preview-placeholder--gated{text-align:center;flex-direction:column;gap:12px;padding:20px}.vsp-gate-text{color:#cbd5e1;max-width:34ch;line-height:1.5}.vsp-gate-btn{border-radius:var(--vsp-radius);background:var(--vsp-accent);color:#1a1005;cursor:pointer;border:none;padding:9px 16px;font-family:inherit;font-size:12.5px;font-weight:600;transition:filter .15s,transform .1s}.vsp-gate-btn:hover{filter:brightness(1.06)}.vsp-gate-btn:active{transform:scale(.98)}.vsp-gate-btn:focus-visible{outline:2px solid var(--vsp-accent);outline-offset:2px}.vsp-preview-badge{letter-spacing:.08em;text-transform:uppercase;color:#20ab6a;background:#0000008c;border:1px solid #22c55e59;border-radius:3px;padding:2px 7px;font-size:10px;font-weight:700;position:absolute;top:6px;left:6px}.vsp-rtsp-section{flex-direction:column;gap:8px;display:flex}.vsp-slots{grid-template-columns:1fr 1fr;gap:10px;display:grid}.vsp-slot{flex-direction:column;gap:6px;display:flex}.vsp-slot-label{text-transform:uppercase;letter-spacing:.08em;color:var(--vsp-muted);font-size:11px;font-weight:700}.vsp-slot-empty{aspect-ratio:4/3;background:var(--vsp-bg);border:1px dashed var(--vsp-border);border-radius:var(--vsp-radius);color:var(--vsp-muted);justify-content:center;align-items:center;font-size:11px;display:flex}.vsp-slot-thumb-wrap{aspect-ratio:4/3;border-radius:var(--vsp-radius);border:1px solid var(--vsp-border);background:#000;position:relative;overflow:hidden}.vsp-slot-thumb{object-fit:cover;width:100%;height:100%;display:block}.vsp-slot-clear{color:#fff;cursor:pointer;background:#000000a6;border:1px solid #ffffff26;border-radius:4px;justify-content:center;align-items:center;width:20px;height:20px;padding:0;font-size:11px;transition:background .12s;display:flex;position:absolute;top:4px;right:4px}.vsp-slot-clear:hover{background:#ef4444cc}.vsp-slot-btn{background:var(--vsp-bg);border:1px solid var(--vsp-border);border-radius:var(--vsp-radius);width:100%;color:var(--vsp-text);cursor:pointer;padding:6px;font-size:12px;font-weight:500;transition:border-color .15s,background .15s}.vsp-slot-btn:hover:not(:disabled){border-color:var(--vsp-accent);color:var(--vsp-accent);background:var(--vsp-accent-dim)}.vsp-slot-btn:disabled{opacity:.4;cursor:not-allowed}.vsp-upload-zone{aspect-ratio:4/3;border:1.5px dashed var(--vsp-border);border-radius:var(--vsp-radius);background:var(--vsp-bg);cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:4px;transition:border-color .15s,background .15s;display:flex}.vsp-upload-zone:hover,.vsp-upload-zone--over{border-color:var(--vsp-accent);background:var(--vsp-accent-dim)}.vsp-upload-text{color:var(--vsp-muted);text-align:center;font-size:11.5px}.vsp-upload-text u{color:var(--vsp-accent);text-underline-offset:2px}.vsp-upload-types{color:var(--vsp-muted);opacity:.6;font-size:10px}.vsp-result{background:var(--vsp-bg);border-radius:var(--vsp-radius);border:1px solid #22c55e40;flex-direction:column;gap:10px;padding:12px 14px;animation:.2s vsp-fade-in;display:flex}.vsp-result-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.vsp-result-title{text-transform:uppercase;letter-spacing:.08em;color:var(--vsp-accent);font-size:11px;font-weight:700}.vsp-result-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.vsp-result-cell{background:var(--vsp-surface);border:1px solid var(--vsp-border);border-radius:4px;flex-direction:column;gap:4px;padding:8px 10px;display:flex}.vsp-result-dir{text-transform:uppercase;letter-spacing:.1em;color:var(--vsp-muted);font-size:10px;font-weight:700}.vsp-result-val{color:var(--vsp-accent);font-size:15px;font-weight:700}.vsp-result-lane-row{align-items:center;gap:6px;margin-top:2px;display:flex}.vsp-result-lane-label{color:var(--vsp-muted);text-transform:uppercase;letter-spacing:.07em;flex-shrink:0;font-size:10px}.vsp-result-lane-input{background:var(--vsp-bg);border:1px solid var(--vsp-border);width:48px;color:var(--vsp-text);font-size:12px;font-family:var(--vsp-font-mono);text-align:center;border-radius:4px;outline:none;padding:3px 6px;transition:border-color .15s}.vsp-result-lane-input:focus{border-color:var(--vsp-border-focus)}.vsp-result-lane-input:disabled{opacity:.45;cursor:not-allowed}.vsp-apply-result-btn{border:1px solid var(--vsp-accent);border-radius:var(--vsp-radius);width:100%;color:var(--vsp-accent);letter-spacing:.04em;cursor:pointer;background:0 0;padding:8px;font-size:12.5px;font-weight:600;transition:background .15s,opacity .15s}.vsp-apply-result-btn:hover{background:var(--vsp-accent-dim)}.vsp-apply-result-btn:active{opacity:.75}.vsp-feedback{border-radius:var(--vsp-radius);align-items:center;gap:7px;padding:9px 12px;font-size:12.5px;animation:.2s vsp-fade-in;display:flex}.vsp-feedback svg{flex-shrink:0;width:15px;height:15px}.vsp-feedback--error{background:var(--vsp-red-dim);color:var(--vsp-red);border:1px solid #ef44444d}@keyframes vsp-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.vsp-apply-btn{border-radius:var(--vsp-radius);color:#fff;letter-spacing:.04em;cursor:pointer;background:#20ab6a;border:none;width:100%;padding:10px;font-size:13.5px;font-weight:600;transition:opacity .15s,transform .1s}.vsp-apply-btn:hover:not(:disabled){opacity:.88}.vsp-apply-btn:active:not(:disabled){transform:scale(.985)}.vsp-apply-btn:disabled{opacity:.4;cursor:not-allowed}[data-theme=dark] .vsp-root{--vsp-bg:#0f172a;--vsp-surface:#1e293b;--vsp-border:#334155;--vsp-text:#e2e8f0;--vsp-muted:#94a3b8}.nm-wrap{--nm-bg:#f0f4f8;--nm-border:#c5d1dc;--nm-grid-minor:#dde5ed;--nm-grid-major:#c5d1dc;--nm-road:#2c3a4a;--nm-lane-idle:#a0b4c4;--nm-arrow-idle:#8fa8bc;--nm-stop-stroke:#f0f4f8;--nm-lane-text:#64748b;--nm-ring-none:#94a3b8;--nm-node-bg:#fff;--nm-node-bg-sel:#fffbeb;--nm-node-border:#405057;--nm-node-text:#1e293b;--nm-node-text-sel:#b45309;--nm-hint:#94a3b8;border:1px solid var(--nm-border);background:var(--nm-bg);border-radius:8px;flex:1;min-height:0;overflow:hidden}[data-theme=dark] .nm-wrap{--nm-bg:#070714;--nm-border:#405057;--nm-grid-minor:#111827;--nm-grid-major:#1a2535;--nm-road:#0a0f1a;--nm-lane-idle:#1e3228;--nm-arrow-idle:#374151;--nm-stop-stroke:#000a14;--nm-lane-text:#475569;--nm-ring-none:#334155;--nm-node-bg:#060c14;--nm-node-bg-sel:#0d1a0d;--nm-node-border:#1e293b;--nm-node-text:#e2e8f0;--nm-node-text-sel:#f59e0b;--nm-hint:#1e293b}.nm-svg{-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.nm-svg.nm-node{cursor:crosshair}.nm-svg.nm-edge{cursor:cell}.nm-svg.nm-select{cursor:default}.nc-panel{background:#fafafa;flex-direction:column;gap:12px;height:100%;padding:16px;display:flex;overflow-y:auto}.nc-title{text-transform:uppercase;letter-spacing:.1em;color:#84828f;border-bottom:1px solid #e2e8f0;padding-bottom:10px;font-size:12px;font-weight:700}.nc-hint{color:#94a3b8;font-size:12px;line-height:1.5}.nc-section-label{color:#94a3b8;text-transform:uppercase;letter-spacing:.06em;margin-bottom:-6px;font-size:11px}.nc-toggle-row{gap:6px;display:flex}.nc-toggle{color:#64748b;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:6px;flex:1;padding:6px;font-size:12px;transition:all .15s}.nc-toggle:hover{color:#405057;background:#f1f5f9}.nc-toggle.active.nc-priority-major{color:#2563eb;background:#eff6ff;border-color:#3b82f6}.nc-toggle.active.nc-priority-normal{color:#16a34a;background:#f0fdf4;border-color:#20ab6a}.nc-toggle.active.nc-priority-minor{color:#d97706;background:#fffbeb;border-color:#f59e0b}.nc-row{justify-content:space-between;align-items:center;gap:8px;display:flex}.nc-row-label{color:#64748b;font-size:12px}.nc-stepper{align-items:center;gap:8px;display:flex}.nc-stepper button{color:#405057;cursor:pointer;background:#fff;border:1px solid #e2e8f0;border-radius:5px;justify-content:center;align-items:center;width:26px;height:26px;font-size:16px;transition:background .12s;display:flex}.nc-stepper button:hover:not(:disabled){background:#f1f5f9}.nc-stepper button:disabled{opacity:.3;cursor:not-allowed}.nc-stepper span{font-variant-numeric:tabular-nums;text-align:center;color:#405057;min-width:24px;font-size:15px}.nc-stepper span.nc-zero{color:#94a3b8;font-size:18px}.nc-priority-note{color:#94a3b8;text-align:center;background:#f8fafc;border-radius:4px;padding:4px;font-size:11px}.nc-delete{color:#ef4444;cursor:pointer;background:#fff1f2;border:1px solid #fecaca;border-radius:6px;margin-top:auto;padding:8px;font-size:12px;transition:background .15s}.nc-delete:hover{background:#fee2e2}.nc-phase-badge{color:#64748b;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;align-items:center;gap:8px;padding:8px 10px;font-size:12px;display:flex}.nc-phase-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.nc-cycle-length{color:#94a3b8;font-variant-numeric:tabular-nums;margin-left:auto;font-size:10px}.nc-approach{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:8px 10px;display:flex}.nc-approach-green{background:#f0fdf4;border-color:#bbf7d0}.nc-approach-label{color:#64748b;flex-direction:column;flex:1;gap:3px;font-size:11px;display:flex}.nc-approach-priority{text-transform:uppercase;letter-spacing:.05em;border-radius:3px;align-self:flex-start;padding:1px 5px;font-size:9px}.nc-priority-badge-major{color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe}.nc-priority-badge-normal{color:#16a34a;background:#f0fdf4;border:1px solid #bbf7d0}.nc-priority-badge-minor{color:#d97706;background:#fffbeb;border:1px solid #fde68a}.nc-legend{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;flex-direction:column;gap:6px;padding:10px;display:flex}.nc-legend-row{color:#64748b;align-items:center;gap:6px;font-size:11px;display:flex}.nc-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.nc-spawn-row{align-items:center;gap:8px;display:flex}.nc-spawn-toggle{color:#64748b;cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;font-size:12px;display:flex}.nc-spawn-toggle input[type=checkbox]{accent-color:#20ab6a;cursor:pointer;width:14px;height:14px}.nc-spawn-slider{accent-color:#3b82f6;cursor:pointer;flex:1;height:4px}.nc-spawn-rate-val{color:#2563eb;font-variant-numeric:tabular-nums;text-align:right;min-width:28px;font-size:11px}[data-theme=dark] .nc-panel{background:#1e293b}[data-theme=dark] .nc-title{color:#94a3b8;border-bottom-color:#334155}[data-theme=dark] .nc-hint,[data-theme=dark] .nc-section-label{color:#475569}[data-theme=dark] .nc-row-label{color:#94a3b8}[data-theme=dark] .nc-toggle{color:#94a3b8;background:#0f172a;border-color:#334155}[data-theme=dark] .nc-toggle:hover{color:#e2e8f0;background:#1e293b}[data-theme=dark] .nc-toggle.active.nc-priority-major{color:#93c5fd;background:#1e3a5f;border-color:#3b82f6}[data-theme=dark] .nc-toggle.active.nc-priority-normal{color:#4ade80;background:#0d2a1a;border-color:#22c55e}[data-theme=dark] .nc-toggle.active.nc-priority-minor{color:#fcd34d;background:#2a1d0d;border-color:#f59e0b}[data-theme=dark] .nc-stepper button{color:#94a3b8;background:#0f172a;border-color:#334155}[data-theme=dark] .nc-stepper button:hover:not(:disabled){background:#1e293b}[data-theme=dark] .nc-stepper span{color:#94a3b8}[data-theme=dark] .nc-stepper span.nc-zero{color:#334155}[data-theme=dark] .nc-priority-note{color:#475569;background:#0f172a}[data-theme=dark] .nc-priority-badge-major{color:#93c5fd;background:#1e3a5f;border-color:#1d4ed8}[data-theme=dark] .nc-priority-badge-normal{color:#4ade80;background:#0d2a1a;border-color:#15803d}[data-theme=dark] .nc-priority-badge-minor{color:#fcd34d;background:#2a1d0d;border-color:#b45309}[data-theme=dark] .nc-phase-badge{color:#94a3b8;background:#0f172a;border-color:#334155}[data-theme=dark] .nc-cycle-length{color:#475569}[data-theme=dark] .nc-approach{background:#0f172a;border-color:#334155}[data-theme=dark] .nc-approach-green{background:#0d2a1a;border-color:#134e2e}[data-theme=dark] .nc-approach-label{color:#94a3b8}[data-theme=dark] .nc-legend{background:#0f172a;border-color:#334155}[data-theme=dark] .nc-legend-row,[data-theme=dark] .nc-spawn-toggle{color:#94a3b8}[data-theme=dark] .nc-spawn-rate-val{color:#60a5fa}[data-theme=dark] .nc-delete{color:#f87171;background:#1c0a0a;border-color:#7f1d1d}[data-theme=dark] .nc-delete:hover{background:#2d1010}.ntp-wrap{background:#fff;border-top:1px solid #405057;flex-shrink:0;align-items:center;gap:12px;padding:10px 16px;display:flex;overflow-x:auto}.ntp-heading{text-transform:uppercase;letter-spacing:.1em;color:#94a3b8;white-space:nowrap;flex-shrink:0;font-size:10px}.ntp-cards{flex:1;gap:10px;display:flex}.ntp-card{background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;flex-direction:column;gap:5px;min-width:130px;padding:8px 10px;display:flex}.ntp-card.ntp-idle{opacity:.45;flex-direction:row;justify-content:space-between;align-items:center}.ntp-card-top{justify-content:space-between;align-items:baseline;gap:6px;display:flex}.ntp-node-label{color:#405057;font-size:13px;font-weight:700}.ntp-timer{font-variant-numeric:tabular-nums;color:#20ab6a;font-size:13px;font-weight:700}.ntp-idle-text{color:#94a3b8;font-size:10px}.ntp-bar{border-radius:3px;gap:1px;height:5px;display:flex;overflow:hidden}.ntp-seg{opacity:.5;border-radius:2px;transition:background .3s}.ntp-seg.ntp-seg-active{opacity:1}.ntp-phase-label{color:#94a3b8;white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.ntp-active-str{color:#20ab6a}[data-theme=dark] .ntp-wrap{background:#1e293b;border-top-color:#334155}[data-theme=dark] .ntp-card{background:#0f172a;border-color:#334155}[data-theme=dark] .ntp-node-label{color:#94a3b8}[data-theme=dark] .ntp-idle-text,[data-theme=dark] .ntp-phase-label{color:#475569}.p2-layout{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.p2-toolbar{background:#fff;border-bottom:1px solid #405057;flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;padding:8px 16px;display:flex}.p2-tools{gap:6px;display:flex}.p2-actions{border-left:1px solid #e2e8f0;gap:6px;margin-left:4px;padding-left:10px;display:flex}.p2-btn-secondary{color:#94a3b8!important;border-color:#e2e8f0!important}.p2-btn-secondary:hover{color:#64748b!important}.p2-btn{color:#64748b;cursor:pointer;white-space:nowrap;background:#fafafa;border:1px solid #e2e8f0;border-radius:6px;padding:6px 12px;font-family:inherit;font-size:12px;transition:all .15s}.p2-btn:hover{color:#405057;background:#f1f5f9}.p2-btn.active{color:#20ab6a;background:#f0fdf4;border-color:#20ab6a}.p2-btn-del{color:#ef4444;background:#fff1f2;border-color:#fecaca}.p2-btn-del:hover{color:#dc2626;background:#fee2e2}.p2-wave-btn{color:#16a34a;cursor:pointer;white-space:nowrap;background:#f0fdf4;border:1px solid #86efac;border-radius:6px;padding:6px 14px;font-family:inherit;font-size:12px;transition:all .15s}.p2-wave-btn:hover:not(:disabled){background:#dcfce7}.p2-wave-btn:disabled{opacity:.35;cursor:not-allowed}.p2-lifetime-ctrl{align-items:center;gap:5px;display:flex}.p2-lifetime-label{color:#64748b;white-space:nowrap;text-align:right;min-width:36px;font-size:11px}.p2-lifetime-slider{cursor:pointer;accent-color:#eb8117;width:80px}.p2-hint{color:#94a3b8;white-space:nowrap;text-overflow:ellipsis;margin-left:auto;font-size:11px;overflow:hidden}.p2-sep{background:#e2e8f0;flex-shrink:0;width:1px;height:20px}.p2-badge{color:#84828f;font-variant-numeric:tabular-nums;white-space:nowrap;font-size:12px}.p2-body{background:#405057;flex:1;gap:1px;min-height:0;display:flex}.p2-sidebar{background:#fafafa;flex-shrink:0;width:220px;overflow-y:auto}@media (width<=800px){.p2-sidebar{width:180px}}.p2-city-btn{color:#2563eb;cursor:pointer;white-space:nowrap;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;padding:6px 14px;font-family:inherit;font-size:12px;transition:all .15s}.p2-city-btn:hover:not(:disabled){color:#1d4ed8;background:#dbeafe;border-color:#3b82f6}.p2-city-btn:disabled{opacity:.35;cursor:not-allowed}.p2-import-banner{color:#2563eb;background:#2563eb12;border-bottom:1px solid #2563eb40;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;font-size:13px;display:flex}.p2-import-dialog{z-index:20;background:#fff;border:1px solid #bfdbfe;border-radius:8px;flex-direction:column;gap:12px;min-width:340px;padding:16px 20px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 8px 32px #0000001f}.p2-import-dialog-title{color:#2563eb;font-size:13px;font-weight:600}.p2-import-rows{flex-direction:column;gap:8px;display:flex}.p2-import-row{align-items:center;gap:10px;display:flex}.p2-import-side{color:#405057;min-width:100px;font-size:12px}.p2-import-select{color:#405057;background:#f8fafc;border:1px solid #e2e8f0;border-radius:4px;outline:none;flex:1;padding:5px 8px;font-size:12px}.p2-import-merge{background:#00000005;border:1px solid #e2e8f0;border-radius:6px;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;display:flex}.p2-import-merge-label{text-transform:uppercase;letter-spacing:.07em;color:#94a3b8;flex-shrink:0;font-size:11px;font-weight:600}.p2-import-merge-opt{color:#64748b;cursor:pointer;border:1px solid #e2e8f0;border-radius:4px;align-items:center;gap:5px;padding:4px 10px;font-size:12px;transition:border-color .15s,color .15s,background .15s;display:flex}.p2-import-merge-opt input[type=radio]{display:none}.p2-import-merge-opt.active{color:#2563eb;background:#2563eb12;border-color:#2563eb66}.p2-import-merge-opt:not(.active):hover{color:#405057;border-color:#94a3b8}.p2-import-actions{justify-content:flex-end;gap:8px;display:flex}.p2-import-approach-list{flex-direction:column;gap:5px;display:flex}.p2-import-approach-row{background:#00000005;border:1px solid #e2e8f0;border-radius:5px;align-items:center;gap:8px;padding:5px 8px;display:flex}.p2-import-approach-side{letter-spacing:.05em;border-radius:3px;flex-shrink:0;padding:2px 6px;font-size:10px;font-weight:700}.p2-import-side-ns{color:#16a34a;background:#16a34a1a;border:1px solid #16a34a40}.p2-import-side-ew{color:#2563eb;background:#2563eb1a;border:1px solid #2563eb40}.p2-import-approach-source{color:#405057;flex:1;font-size:12px}.p2-import-approach-dir{color:#94a3b8;margin-left:2px}.p2-import-approach-count{color:#eb8117;flex-shrink:0;font-size:12px;font-weight:600}[data-theme=dark] .p2-toolbar{background:#1e293b;border-bottom-color:#334155}[data-theme=dark] .p2-actions{border-left-color:#334155}[data-theme=dark] .p2-sep{background:#334155}[data-theme=dark] .p2-hint{color:#475569}[data-theme=dark] .p2-badge,[data-theme=dark] .p2-lifetime-label{color:#94a3b8}[data-theme=dark] .p2-btn{color:#94a3b8;background:#0f172a;border-color:#334155}[data-theme=dark] .p2-btn:hover{color:#e2e8f0;background:#1e293b}[data-theme=dark] .p2-btn.active{color:#20ab6a;background:#0d2a1a;border-color:#20ab6a}[data-theme=dark] .p2-btn-secondary{color:#475569!important;border-color:#334155!important}[data-theme=dark] .p2-btn-secondary:hover{color:#94a3b8!important}[data-theme=dark] .p2-btn-del{color:#f87171;background:#1c0a0a;border-color:#7f1d1d}[data-theme=dark] .p2-btn-del:hover{color:#ef4444;background:#2d1010}[data-theme=dark] .p2-wave-btn{color:#4ade80;background:#0d2a1a;border-color:#134e2e}[data-theme=dark] .p2-wave-btn:hover:not(:disabled){background:#0f3a20}[data-theme=dark] .p2-city-btn{color:#93c5fd;background:#0f1f3d;border-color:#1e3a5f}[data-theme=dark] .p2-city-btn:hover:not(:disabled){color:#bfdbfe;background:#1e3a5f;border-color:#3b82f6}[data-theme=dark] .p2-body{background:#334155}[data-theme=dark] .p2-sidebar{background:#1e293b}[data-theme=dark] .p2-import-banner{color:#60a5fa;background:#60a5fa14;border-bottom-color:#60a5fa33}[data-theme=dark] .p2-import-dialog{background:#1e293b;border-color:#334155}[data-theme=dark] .p2-import-dialog-title{color:#60a5fa}[data-theme=dark] .p2-import-side{color:#94a3b8}[data-theme=dark] .p2-import-select{color:#e2e8f0;background:#0f172a;border-color:#334155}[data-theme=dark] .p2-import-merge{background:#ffffff08;border-color:#334155}[data-theme=dark] .p2-import-merge-label{color:#475569}[data-theme=dark] .p2-import-merge-opt{color:#94a3b8;border-color:#334155}[data-theme=dark] .p2-import-merge-opt.active{color:#60a5fa;background:#60a5fa14;border-color:#60a5fa66}[data-theme=dark] .p2-import-merge-opt:not(.active):hover{color:#e2e8f0;border-color:#475569}[data-theme=dark] .p2-import-approach-row{background:#ffffff08;border-color:#334155}[data-theme=dark] .p2-import-approach-source{color:#94a3b8}[data-theme=dark] .p2-import-approach-dir{color:#475569}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--bg:#fff;--surface:#fafafa;--border:#405057;--text:#84828f;--muted:#64748b;--accent:#eb8117;--font:"Inter", "Segoe UI", system-ui, sans-serif}[data-theme=dark]{--bg:#0f172a;--surface:#1e293b;--border:#334155;--text:#e2e8f0;--muted:#94a3b8}body{background:var(--bg);color:var(--text);font-family:var(--font);min-height:100dvh}.app{flex-direction:column;min-height:100dvh;display:flex}.app-header{border-bottom:1px solid var(--border);background:var(--bg);align-items:center;gap:16px;padding:14px 24px;display:flex}.logo{color:var(--accent);letter-spacing:.05em;font-size:18px;font-weight:700}.subtitle{color:var(--muted);font-size:13px}.theme-toggle{cursor:pointer;background:#e2e8f0;border:1.5px solid #c4cfd8;border-radius:11px;flex-shrink:0;width:40px;height:22px;padding:0;transition:background .2s,border-color .2s;position:relative}.theme-toggle:after{content:"";background:var(--accent);border-radius:50%;width:14px;height:14px;transition:transform .2s;position:absolute;top:2px;left:2px}.theme-toggle.is-dark{background:#1e293b;border-color:#334155}.theme-toggle.is-dark:after{transform:translate(18px)}.app-nav{gap:4px;margin-left:auto;display:flex}.nav-link{border:1px solid var(--accent);color:var(--text);font-size:11px;font-family:var(--font);letter-spacing:.05em;cursor:pointer;background:0 0;border-radius:999px;padding:5px 14px;transition:all .15s}.nav-link:hover{color:var(--accent);border-color:#20ab6a}.nav-link.active{color:#fff;background:#20ab6a;border-color:#20ab6a}.app-grid{background:var(--border);flex:1;grid-template-rows:1fr 1fr;grid-template-columns:380px 1fr 260px;gap:1px;display:grid}@media (width<=900px){.app-grid{grid-template-columns:1fr}}.panel{background:var(--surface);flex-direction:column;gap:16px;padding:20px;display:flex}.panel-title{text-transform:uppercase;letter-spacing:.1em;color:var(--muted);border-bottom:1px solid var(--border);padding-bottom:10px;font-size:12px;font-weight:600}.panel-intersection{grid-area:span 2/span 1}.panel-log{grid-area:span 2/3}.center-column{background:var(--border);flex-direction:column;grid-area:1/2/3;gap:1px;min-height:0;display:flex}.panel-stats{flex-shrink:0}.panel-source{flex:1;min-height:0;overflow-y:auto}.car-controls{flex-direction:column;gap:8px;display:flex}.control-row{align-items:center;gap:10px;display:flex}.dir-label{color:var(--muted);flex:1;font-size:13px}.btn-ctrl{border:1px solid var(--border);color:#000;cursor:pointer;background:#20ab6a;border-radius:6px;justify-content:center;align-items:center;width:28px;height:28px;font-size:18px;line-height:1;transition:background .15s;display:flex}.btn-ctrl:hover{color:#fff;background:#1e293b}.btn-ctrl:active{color:#fff;background:#334155}.car-count{font-variant-numeric:tabular-nums;text-align:center;min-width:50px;font-size:14px}.app-footer{margin-top:auto}.page-active{display:contents}.page-hidden{display:none}.ctrl-group{align-items:center;gap:5px;display:flex}.ctrl-group-label{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;min-width:34px;font-size:10px}.simulate-row{gap:8px;margin-top:4px;display:flex}.btn-simulate{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;flex:1;padding:8px;font-size:13px;font-weight:600;transition:opacity .15s,transform .1s}.btn-simulate:hover{opacity:.88}.btn-simulate:active{transform:scale(.97)}.btn-export{border:1px solid var(--border);color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border-radius:6px;padding:8px 12px;font-size:11.5px;font-weight:500;transition:color .15s,border-color .15s}.btn-export:hover:not(:disabled){color:var(--text);border-color:#334155}.btn-export:disabled{opacity:.35;cursor:not-allowed}.sim-status{color:var(--muted);text-align:center;margin:0;font-size:11px}.sim-status--running{color:var(--accent)}
