:root{--bg:#f5f6f8;--surface:#fff;--line:#e4e7eb;--line-strong:#d3d8de;--ink:#14181d;--ink-soft:#5b6672;--ink-faint:#8b949e;--accent:#0072b2;--accent-soft:#e8f2f8;--radius:8px;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif}*{box-sizing:border-box}html,body,#app-root{height:100%;margin:0;overflow:hidden}body{font-family:var(--sans);color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:13px}.app{flex-direction:column;height:100dvh;min-height:0;display:flex}.header{background:var(--surface);border-bottom:1px solid var(--line);flex:none;align-items:flex-end;gap:18px;padding:12px 20px;display:flex}.brand{letter-spacing:-.01em;margin-right:4px;padding-bottom:7px;font-size:15px;font-weight:640}.control{flex-direction:column;gap:4px;min-width:156px;display:flex}.control.start{min-width:148px;position:relative}.lbl{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);font-size:10.5px;font-weight:560}.start-input{border:1px solid var(--line-strong);border-radius:var(--radius);width:100%;height:34px;font-family:var(--mono);color:var(--ink);background:var(--surface);padding:0 10px;font-size:12.5px}.start-input::placeholder{color:var(--ink-faint)}.start-input:focus-within{outline:2px solid var(--accent-soft);border-color:var(--accent)}.start-input.is-invalid{color:#8e2a20;background:#fdf2f1;border-color:#c0392b}.start-input.is-invalid:focus-within{border-color:#c0392b;outline-color:#f6d7d3}.start-error{color:#8e2a20;z-index:70;background:#fdf2f1;border:1px solid #e6b2ab;border-radius:6px;max-width:230px;margin-top:4px;padding:5px 8px;font-size:11px;line-height:1.35;position:absolute;top:100%;left:0;box-shadow:0 4px 12px #1018281a}.start-error:empty{display:none}.btn{border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);height:34px;color:var(--ink);font:inherit;cursor:pointer;padding:0 16px;font-weight:540;transition:background .12s,border-color .12s,box-shadow .12s}.btn:hover{background:#f0f2f5}.btn:active{transform:translateY(1px)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;padding:0 22px}.btn.primary:hover{background:#005b8f;border-color:#005b8f}.btn.ghost{color:var(--ink-soft)}.btn.tiny{height:24px;padding:0 9px;font-size:11px}.btn.hidden{display:none}.btn.danger{color:#8e2a20;background:#fdf2f1;border-color:#e6b2ab}.btn.danger:hover{background:#fbe6e3;border-color:#d99289}.run-progress{font-family:var(--mono);color:var(--ink-soft);white-space:nowrap;margin-left:auto;padding-bottom:9px;font-size:11.5px}.options{background:var(--surface);border-bottom:1px solid var(--line);flex:0 auto;min-height:0;max-height:44vh;padding:18px 20px 20px;overflow-y:auto}.options.hidden{display:none}.opt-grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:22px 32px;display:grid}.opt-group h4{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin:0 0 10px;font-size:11px;font-weight:620}.fields{flex-wrap:wrap;gap:10px 14px;display:flex}.field{flex-direction:column;gap:3px;display:flex}.field[title]{cursor:help}.lbl.has-help{-webkit-text-decoration:underline dotted var(--line-strong);text-decoration:underline dotted var(--line-strong);text-underline-offset:2px}.field[title]:hover .lbl.has-help{color:var(--ink-soft);-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.so-num{border:1px solid var(--line-strong);width:104px;height:30px;font-family:var(--mono);background:var(--surface);color:var(--ink);border-radius:6px;padding:0 9px;font-size:12px}.so-num:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.muted{color:var(--ink-faint);margin:8px 0 0;font-size:11.5px;line-height:1.5}.muted.pad{padding:14px}.mono{font-family:var(--mono)}.so-radio{flex-wrap:wrap;gap:12px;display:flex}.so-radio label{align-items:center;gap:5px;font-size:12px;display:inline-flex}.so-radio input{accent-color:var(--accent);margin:0}.so-check label{align-items:center;height:30px;display:inline-flex}.so-check input{accent-color:var(--accent);width:16px;height:16px}.body{flex:auto;display:flex}.rail{border-right:1px solid var(--line);background:var(--surface);flex-direction:column;flex:0 0 232px;width:232px;min-height:0;display:flex}.rail-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:12px 14px 10px;display:flex}.rail-head h4{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);margin:0;font-size:11px;font-weight:620}.history{flex-direction:column;flex:1 1 0;gap:6px;min-height:0;padding:8px;display:flex;overflow-y:auto}.run-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);flex:none;transition:border-color .12s,background .12s;position:relative}.run-card:hover{border-color:var(--line-strong);background:#fbfcfd}.run-card.is-current{border-color:var(--accent);background:var(--accent-soft)}.run-card.is-compare{border-color:#cc79a7}.rc-open{text-align:left;width:100%;font:inherit;color:inherit;background:0 0;border:0;padding:9px 11px;display:block}.rc-method{font-size:12.5px;font-weight:600}.rc-problem{color:var(--ink-soft);margin-top:1px;font-size:11.5px}.rc-stats{color:var(--ink-faint);gap:9px;margin-top:5px;font-size:11px;display:flex}.rc-flag{color:#8e2a20;font-weight:600}.rc-pin{border:1px solid var(--line-strong);background:var(--surface);color:var(--ink-faint);cursor:pointer;opacity:0;border-radius:5px;padding:2px 6px;font-size:10px;transition:opacity .12s;position:absolute;top:7px;right:7px}.run-card:hover .rc-pin{opacity:1}.run-card.is-compare .rc-pin{opacity:1;color:#a8558a;border-color:#cc79a7}.stage{flex-direction:column;flex:auto;gap:10px;min-width:0;min-height:0;padding:14px 18px 18px;display:flex}.statbar{flex:none;align-items:baseline;gap:26px;padding:0 4px;display:flex}.stat{align-items:baseline;gap:7px;display:flex}.stat-label{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint);font-size:10.5px}.stat-value{font-size:14px;font-weight:600}.stat-value.mono{font-family:var(--mono);font-size:13px;font-weight:520}.stat-note{color:var(--accent);font-size:12px;font-weight:540}.playback-note{color:var(--ink-soft);font-size:11.5px;font-style:italic}.playback-note:empty{display:none}.status-message{color:var(--ink-soft);margin-left:auto;font-size:11.5px}.stat-feasible{letter-spacing:.02em;border:1px solid #0000;border-radius:999px;padding:1px 6px;font-size:10.5px;font-weight:600;line-height:1.4}.stat-feasible.hidden{display:none}.stat-feasible.is-feasible{color:var(--ink-soft);background:var(--bg);border-color:var(--line-strong)}.stat-feasible.is-infeasible{color:#8e2a20;background:#fdf2f1;border-color:#e6b2ab}.viz{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex:auto;min-height:200px;position:relative;overflow:hidden}.plot-layer{position:absolute;inset:0}.plot-layer.overlay{z-index:2;cursor:crosshair}.hover-readout{z-index:3;pointer-events:none;border:1px solid var(--line-strong);font-family:var(--mono);color:var(--ink);white-space:pre;background:#fffffff0;border-radius:5px;padding:4px 7px;font-size:11.5px;line-height:1.45;display:none;position:absolute;box-shadow:0 1px 4px #0000001f}.hover-readout.is-on{display:block}.plot-sync{display:none}.legend{color:var(--ink-faint);flex-wrap:wrap;flex:none;align-items:center;gap:3px 12px;padding:0 2px;font-size:11px;line-height:1.45;display:flex}.legend:empty{display:none}.legend-entry{align-items:center;gap:6px;display:inline-flex}.legend-swatch{flex:0 0 18px;justify-content:center;align-items:center;width:18px;display:inline-flex}.legend-mark{display:inline-block}.legend-mark.cross{font-weight:600;line-height:1}.legend-role{color:var(--ink);font-weight:560}.legend-gloss{color:var(--ink-faint)}.transport{flex:none;align-items:center;gap:12px;padding:2px 6px;display:flex}.transport-btn{border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:50%;flex:none;justify-content:center;align-items:center;width:38px;height:38px;font-size:13px;line-height:1;transition:background .12s;display:inline-flex}.transport-btn:hover{background:#005b8f}.transport-btn.ghost{background:var(--surface);border-color:var(--line-strong);color:var(--ink-soft);font-size:16px}.transport-btn.ghost:hover{background:#f0f2f5}.transport-btn .glyph.pause{letter-spacing:-1px;display:none}.transport-btn.is-playing .glyph.play{display:none}.transport-btn.is-playing .glyph.pause{display:inline}.so-slider{appearance:none;background:0 0;flex:auto;height:15px;margin:0 4px}.so-slider::-webkit-slider-runnable-track{background:var(--line);border-radius:3px;height:5px}.so-slider::-moz-range-track{background:var(--line);border-radius:3px;height:5px}.so-slider::-moz-range-progress{background:var(--accent);border-radius:3px;height:5px}.so-slider::-webkit-slider-thumb{appearance:none;border:1px solid var(--accent);background:#fff;border-radius:50%;width:15px;height:15px;margin-top:-5px;box-shadow:0 1px 3px #0000002e}.so-slider::-moz-range-thumb{border:1px solid var(--accent);background:#fff;border-radius:50%;width:15px;height:15px;box-shadow:0 1px 3px #0000002e}.so-slider:focus{outline:none}.so-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px var(--accent-soft)}.so-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px var(--accent-soft)}.transport.hidden,.metric-panel.hidden{display:none}.metric-panel{flex:none;width:100%}.metric-panel .metric-figure,.metric-panel .js-plotly-plot{width:100%!important}.statbar.hidden .stat{display:none}.statbar.hidden .status-message{margin-left:0;font-size:12.5px}.metricbar{align-items:center;gap:8px;padding:0 6px 2px;display:flex}.so-dd{border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);min-width:156px;height:34px;color:var(--ink);font:inherit;cursor:pointer;appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--ink-faint) 50%), linear-gradient(135deg, var(--ink-faint) 50%, transparent 50%);background-position:calc(100% - 15px) 15px,calc(100% - 10px) 15px;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding:0 28px 0 10px;font-size:12.5px}.so-dd.tiny{background-position:calc(100% - 15px) 13px,calc(100% - 10px) 13px;min-width:110px;height:30px}.so-dd.wide{min-width:190px}.so-dd:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.so-dd:disabled{color:var(--ink-faint);cursor:default}.js-plotly-plot .plotly .modebar{display:none!important}@media (width<=980px){.rail{display:none}.header{flex-wrap:wrap;gap:12px}}@media (height<=800px){.header{padding:9px 20px}.options{max-height:38vh;padding:14px 20px 16px}.stage{gap:8px;padding:10px 16px 12px}.metric-panel .metric-figure{height:120px}}@media (height<=660px){.header{gap:12px;padding:7px 16px}.statbar{gap:16px}.metric-panel .metric-figure{height:92px}.transport-btn{width:32px;height:32px}}@media (height<=560px){.metric-panel,.brand{display:none}}@media (height<=430px){.viz{min-height:0}}.analysis{border-top:1px solid var(--line);background:var(--surface);flex:0 auto;min-height:0;max-height:44%;overflow-y:auto}.analysis .rail-head{border-bottom:0;padding:10px 14px 2px}.conv-body{padding:2px 14px 12px}.conv-head{flex-wrap:wrap;align-items:baseline;gap:4px 8px;margin:4px 0 6px;display:flex}.conv-class{font-size:13px;font-weight:620}.conv-conf{letter-spacing:.05em;text-transform:uppercase;color:var(--ink-faint);font-size:10px}.conv-conf.is-low{color:#b8620a}.conv-conf.is-high{color:var(--accent)}.conv-row{justify-content:space-between;gap:8px;line-height:1.75;display:flex}.conv-k{color:var(--ink-soft);font-size:11.5px}.conv-v{font-size:11.5px}.conv-note{margin-top:7px;font-size:10.5px}.plot-host{position:absolute;inset:0}.metric-figure{width:100%;height:148px;position:relative}.surface-layer{flex:auto;min-height:0;position:relative}#viz3d-panel:not(.is-ready),.surface-layer.hidden,.analysis.hidden{display:none}.boot-fallback{color:var(--ink-soft);padding:14px 20px;font-size:12.5px}body.route-compare #app-root,#compare-page{display:none}body.route-compare #compare-page{flex-direction:column;height:100dvh;display:flex;overflow:hidden}#compare-page .compare-caption{color:var(--ink-faint);max-width:46ch;margin-left:auto;padding-bottom:8px;font-size:11.5px;line-height:1.45}#compare-page .compare-grid{flex:auto;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;gap:14px;min-height:0;padding:16px 20px 24px;display:grid;overflow-y:auto}#compare-page .panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);flex-direction:column;min-width:0;padding:10px 14px 12px;display:flex}#compare-page .panel.wide{grid-column:1/-1}#compare-page .panel-head{align-items:baseline;gap:10px;margin-bottom:6px;display:flex}#compare-page .panel-head h4{letter-spacing:-.01em;margin:0;font-size:12.5px;font-weight:600}#compare-page .panel-note{color:var(--ink-faint);font-size:11px}#compare-page .panel-plot{width:100%;position:relative}#compare-page .panel-body{overflow-x:auto}#compare-page .compare-table{border-collapse:collapse;width:100%;font-size:12px}#compare-page .compare-table th{text-align:left;color:var(--ink-soft);border-bottom:1px solid var(--line);white-space:nowrap;padding:4px 10px 6px 0;font-weight:560}#compare-page .compare-table td{border-bottom:1px solid var(--line);white-space:nowrap;padding:5px 10px 5px 0}#compare-page .compare-table tbody tr:first-child td{font-weight:560}#compare-page .compare-table tbody tr:last-child td{border-bottom:none}#compare-page select[multiple]{min-width:190px;max-width:260px;height:auto;min-height:34px;padding:2px}@media (width<=1100px){#compare-page .compare-grid{grid-template-columns:minmax(0,1fr)}}
