:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#08101c;--bg-2:#0d1728;--surface:#121c30;--surface-2:#18243c;--surface-sheen:#ffffff08;--line:#8ca8d629;--text:#eef3ff;--muted:#93a4c4;--origin:#5b8cff;--dest:#ff6b7a;--current:#7aa2ff;--visited:#3dd68c;--path:#ffb020;--danger:#ff7b8a;--shadow:0 18px 50px #00000047;--radius:18px;--glow-blue:#5b8cff2e;--glow-gold:#ffb02014;--control-active:#223255;--primary-from:#7aa2ff;--primary-to:#4d7dff;--primary-text:#071224;--edge:#6f82a8;--weight-fill:#1a2740;--weight-path-fill:#3a2c12;--weight-text:#d5def0;--path-text:#ffd37a;--overlay:#0408109e;--grid:#7f9bc714;--node-idle:#2a3c5c;--node-idle-text:#e8eefc;--node-on-accent:#08101c;--node-stroke:#9db0d4;--node-stroke-selected:#fff;--result-ok-border:#ffb02073;--result-ok-bg:#ffb02014;--result-fail-border:#ff6b7a66;--result-fail-bg:#ff6b7a14}[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#eef3fb;--bg-2:#fff;--surface:#fff;--surface-2:#f7f9ff;--surface-sheen:#3b6fe00d;--line:#28406e24;--text:#152238;--muted:#5b6b88;--origin:#3b6fe0;--dest:#e24b5c;--current:#3d6fe8;--visited:#1aa86a;--path:#d48900;--danger:#d64558;--shadow:0 16px 40px #1c2e541a;--glow-blue:#3b6fe024;--glow-gold:#d489001a;--control-active:#e4ebfb;--primary-from:#5b8cff;--primary-to:#3d6fe8;--primary-text:#fff;--edge:#7b8eae;--weight-fill:#fff;--weight-path-fill:#fff4d6;--weight-text:#33415c;--path-text:#8a5a00;--overlay:#1420386b;--grid:#46649624;--node-idle:#e8eef8;--node-idle-text:#152238;--node-on-accent:#08101c;--node-stroke:#7a90b4;--node-stroke-selected:#152238;--result-ok-border:#d4890066;--result-ok-bg:#d489001a;--result-fail-border:#e24b5c59;--result-fail-bg:#e24b5c14}*{box-sizing:border-box}html,body{background:radial-gradient(1200px 500px at 10% -10%, var(--glow-blue), transparent 50%), radial-gradient(900px 420px at 100% 0%, var(--glow-gold), transparent 45%), var(--bg);min-height:100%;color:var(--text);margin:0;font-family:DM Sans,sans-serif}button,input,select{font:inherit}.app{max-width:1440px;margin:0 auto;padding:20px 22px 28px}.topbar{justify-content:space-between;align-items:center;gap:20px;margin-bottom:18px;display:flex}.topbar-end{flex-wrap:wrap;align-items:center;gap:16px;display:flex}.brand{align-items:center;gap:14px;display:flex}.brand-mark{background:linear-gradient(145deg,#7aa2ff,#3e6dff 55%,#ffb020);border-radius:14px;width:42px;height:42px;box-shadow:0 8px 24px #5b8cff59}h1,h2,h3{margin:0}h1{letter-spacing:-.03em;font-size:1.28rem}.brand p,.hint,.field span,.check,.muted,.footer{color:var(--muted)}.brand p{margin:2px 0 0;font-size:.9rem}.legend{color:var(--muted);flex-wrap:wrap;gap:14px 18px;font-size:.82rem;display:flex}.theme-toggle{background:var(--bg-2);color:var(--text);border:1px solid var(--line);border-radius:999px;align-items:center;gap:8px;padding:8px 12px 8px 10px;display:inline-flex}.theme-toggle:hover{background:var(--control-active)}.theme-icon{fill:none;stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;width:16px;height:16px}.theme-icon-moon{fill:currentColor;stroke:none}[data-theme=dark] .theme-icon-sun,[data-theme=light] .theme-icon-moon{display:none}.theme-label{font-size:.82rem;font-weight:600}.dot{vertical-align:middle;border-radius:50%;width:9px;height:9px;margin-right:7px;display:inline-block}.dot.origin{background:var(--origin)}.dot.dest{background:var(--dest)}.dot.current{background:var(--current)}.dot.visited{background:var(--visited)}.dot.path{background:var(--path)}.footer{border-top:1px solid var(--line);text-align:center;margin-top:22px;padding:14px 4px 0}.footer p{letter-spacing:.01em;margin:0;font-size:.88rem}.layout{grid-template-columns:minmax(0,1.7fr) minmax(320px,.9fr);align-items:start;gap:16px;display:grid}.canvas-card,.panel{background:linear-gradient(180deg, var(--surface-sheen), transparent 28%), var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:10px;padding:12px 14px;display:flex}.modes{background:var(--bg-2);border:1px solid var(--line);border-radius:12px;padding:4px;display:flex}.mode,button{cursor:pointer;border:0}.mode{color:var(--muted);background:0 0;border-radius:9px;padding:8px 12px}.mode.active{background:var(--control-active);color:var(--text)}.field{flex-direction:column;flex:1;gap:6px;display:flex}.field.compact{flex:none;min-width:84px}.field span,.speed span{letter-spacing:.04em;text-transform:uppercase;font-size:.75rem}input,select{background:var(--bg-2);color:var(--text);border:1px solid var(--line);border-radius:10px;padding:9px 10px}.check{align-items:center;gap:8px;font-size:.9rem;display:flex}.toolbar-actions{gap:8px;margin-left:auto;display:flex}.toolbar-spacer{display:none}.primary,.secondary,.ghost{border-radius:11px;padding:10px 14px}.primary{background:linear-gradient(180deg, var(--primary-from), var(--primary-to));color:var(--primary-text);font-weight:700}.secondary{background:var(--control-active);color:var(--text)}.ghost{color:var(--text);border:1px solid var(--line);background:0 0}.ghost.danger{color:var(--danger)}.canvas-wrap{padding:8px 8px 0}#graph{background:var(--bg-2);cursor:crosshair;border-radius:14px;width:100%;height:auto;display:block}.hint{margin:0;padding:10px 12px 12px;font-size:.86rem}.side{gap:12px;display:grid}.panel{padding:16px}.panel h2{margin-bottom:12px;font-size:.92rem}.row{grid-template-columns:1fr 1fr;gap:10px;display:grid}.actions{grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;display:grid}.actions .ghost{grid-column:1/-1}.speed{color:var(--muted);flex-direction:column;gap:8px;margin-top:14px;font-size:.8rem;display:flex}.result{background:var(--bg-2);border:1px solid var(--line);border-radius:12px;min-height:64px;padding:12px;line-height:1.45}.result.empty{color:var(--muted)}.result.ok{border-color:var(--result-ok-border);background:var(--result-ok-bg)}.result.fail{border-color:var(--result-fail-border);background:var(--result-fail-bg)}.result strong{color:var(--path)}.table-wrap{max-height:280px;overflow:auto}table{border-collapse:collapse;width:100%;font-family:JetBrains Mono,monospace;font-size:.8rem}th,td{text-align:left;border-bottom:1px solid var(--line);padding:8px 6px}th{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:.72rem;font-weight:500}tr.is-current td{color:var(--current)}tr.is-path td{color:var(--path)}.log{max-height:220px;color:var(--muted);margin:0;padding-left:18px;font-size:.86rem;overflow:auto}.log li{margin-bottom:8px}.log li.active{color:var(--text)}.node-circle{fill:var(--node-idle);stroke:var(--node-stroke);stroke-width:3px;cursor:pointer;transition:fill .2s,stroke .2s}.node-group.is-path .node-circle{fill:var(--path)}.node-group.is-origin .node-circle{fill:var(--origin)}.node-group.is-dest .node-circle{fill:var(--dest)}.node-group.is-current .node-circle{fill:var(--current)}.node-group.is-visited .node-circle{fill:var(--visited)}.node-group.is-selected .node-circle{stroke:var(--node-stroke-selected)}.node-label,.dist-label,.weight-label{pointer-events:none;font-family:JetBrains Mono,monospace}.node-label{fill:var(--node-on-accent)}.node-group.is-idle .node-label{fill:var(--node-idle-text)}.dist-label{fill:var(--muted)}.weight-label{fill:var(--weight-text)}.weight-label.is-path{fill:var(--path-text)}.grid-line{stroke:var(--grid)}#arrow path{fill:var(--edge)}#arrow-active path{fill:var(--current)}#arrow-path path{fill:var(--path)}.edge-line{stroke:var(--edge);stroke-width:2.5px;fill:none}.edge-line.is-relax{stroke:var(--current);stroke-width:4px}.edge-line.is-path{stroke:var(--path);stroke-width:4.5px}.weight-hit{fill:var(--weight-fill);stroke:var(--edge);cursor:pointer}.weight-hit.is-path{stroke:var(--path);fill:var(--weight-path-fill)}.modal{background:var(--overlay);z-index:20;place-items:center;display:grid;position:fixed;inset:0}.modal.hidden{display:none}.modal-card{background:var(--surface-2);border:1px solid var(--line);width:min(380px,100% - 32px);box-shadow:var(--shadow);border-radius:16px;padding:20px}.modal-card h3{margin-bottom:6px}.modal-card p{color:var(--muted);margin:0 0 14px}.modal-card input{width:100%}.modal-actions{justify-content:flex-end;gap:8px;margin-top:14px;display:flex}@media (width<=980px){.layout{grid-template-columns:1fr}.topbar{flex-direction:column;align-items:flex-start}}
