:root{color-scheme:dark;--accent:#2dd4bf;--grad:linear-gradient(92deg,#2ee6a6,#38bdf8 60%,#818cf8)}*{box-sizing:border-box}body,html{height:100%}body{background:radial-gradient(1100px 720px at 50% -8%,#0c1320 0,transparent 55%),#05070a;color:#e8edf1;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;margin:0;-webkit-font-smoothing:antialiased}.pf,body{min-height:100vh}.pf{display:flex;flex-direction:column;margin:0 auto;max-width:1100px;padding:26px 18px 34px}.pf__bar{align-items:center;display:flex;gap:14px;margin-bottom:14px}.pf__title{background:var(--grad);-webkit-background-clip:text;background-clip:text;font-size:22px;font-weight:800;letter-spacing:-.01em;margin:0;-webkit-text-fill-color:transparent}.pf__back{margin-right:auto}.pf__back,.pf__home{color:#9fb0bb;font-size:15px;font-weight:600;text-decoration:none}.pf__home{margin-left:auto}.pf__back:hover,.pf__home:hover{color:#67e8f9}.pf__lead{color:#9fb0bb;font-size:13.5px;line-height:1.65;margin:0 0 16px;max-width:80ch}.pf__lead strong{color:#cdd9e1}.pf__lead em{color:#67e8f9;font-style:normal}.pf__stage{background:radial-gradient(130% 120% at 50% 0,rgba(45,212,191,.08),transparent 62%),radial-gradient(120% 130% at 50% 120%,rgba(129,140,248,.1),transparent 60%),#060a10;border:1px solid hsla(0,0%,100%,.08);border-radius:18px;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.04),0 20px 50px rgba(0,0,0,.45);min-height:56vh;overflow:hidden;position:relative}.pf__canvas{cursor:crosshair;display:block;height:100%;inset:0;position:absolute;touch-action:none;-moz-user-select:none;user-select:none;-webkit-user-select:none;width:100%}.pf__status{backdrop-filter:blur(6px);background:rgba(8,12,18,.62);border:1px solid hsla(0,0%,100%,.1);border-radius:10px;color:#d6fbf3;font-size:12.5px;font-weight:600;left:10px;max-width:calc(100% - 20px);padding:6px 11px;pointer-events:none;position:absolute;top:10px}.pf__status[data-kind=ok]{border-color:rgba(251,191,36,.45);color:#fde9b8}.pf__status[data-kind=bad]{border-color:rgba(251,113,133,.5);color:#fecdd3}.pf__status[data-kind=busy]{border-color:rgba(45,212,191,.5);color:#bff3ea}.pf__legend{color:#9fb0bb;display:flex;flex-wrap:wrap;font-size:11.5px;gap:8px 16px;margin:14px 0 4px}.pf__legend span{align-items:center;display:inline-flex;gap:7px}.sw{border:1px solid hsla(0,0%,100%,.12);border-radius:4px;flex:0 0 auto;height:14px;width:14px}.sw--start{background:#34d399;box-shadow:0 0 7px rgba(52,211,153,.7)}.sw--end,.sw--start{border-color:transparent}.sw--end{background:#fb7185;box-shadow:0 0 7px rgba(251,113,133,.7)}.sw--wall{background:#27384a}.sw--weight{background:rgba(129,140,248,.45)}.sw--frontier{background:rgba(45,212,191,.42);border-color:#5eead4}.sw--visited{background:linear-gradient(92deg,#38bdf8,#6366f1,#a78bfa)}.sw--path,.sw--visited{border-color:transparent}.sw--path{background:#fbbf24;box-shadow:0 0 7px rgba(251,191,36,.7)}.pf__stats{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));margin:14px 0 4px}.stat{background:linear-gradient(180deg,rgba(21,29,40,.7),rgba(12,17,24,.7));border:1px solid hsla(0,0%,100%,.08);border-radius:12px;padding:11px 13px}.stat__label{color:#8aa0ad;font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.stat__val{color:#e8edf1;font-size:24px;font-variant-numeric:tabular-nums;font-weight:800;line-height:1.05;margin:3px 0 1px}.stat__val.is-accent{background:var(--grad);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.stat__sub{color:#7d909c;font-size:11px}.pf__controls{align-items:end;display:grid;gap:14px 18px;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));margin:16px 0 6px}.ctl{display:flex;flex-direction:column;gap:8px;min-width:0}.ctl>span{color:#9fb0bb;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}.ctl>span em{color:#67e8f9;font-style:normal;font-weight:700;letter-spacing:0;text-transform:none}.ctl.is-disabled{opacity:.42}.ctl input[type=range]{accent-color:var(--accent);height:26px;width:100%}.ctl select{background:hsla(0,0%,100%,.05);border:1px solid hsla(0,0%,100%,.16);border-radius:8px;color:#e8edf1;font:inherit;font-size:13px;padding:9px 10px;width:100%}.ctl select:disabled{cursor:not-allowed}.ctl__row{display:flex;gap:8px}.ctl__row select{flex:1 1 auto;min-width:0}.ctl-group{display:flex;flex-wrap:wrap;gap:10px;grid-column:1/-1}.btn{background:hsla(0,0%,100%,.05);border:1px solid hsla(0,0%,100%,.16);border-radius:8px;color:#e8edf1;cursor:pointer;font:inherit;font-size:13px;font-weight:600;padding:9px 14px;transition:border-color .12s ease,background .12s ease,transform .12s ease,color .12s ease;white-space:nowrap}.btn:hover{background:rgba(45,212,191,.08);border-color:rgba(45,212,191,.5)}.btn:active{transform:translateY(1px)}.btn:focus-visible{outline:2px solid rgba(45,212,191,.7);outline-offset:2px}.btn--primary{background:linear-gradient(92deg,#2ee6a6,#38bdf8);border-color:transparent;color:#04221c;font-weight:700;min-width:120px}.btn--primary:hover{background:linear-gradient(92deg,#41f0b4,#59c8ff);border-color:transparent}.btn--primary.is-running{background:linear-gradient(92deg,#fbbf24,#fb7185);color:#2a0d12}.btn--ghost{color:#b9c6cf}.btn--toggle.is-on{background:linear-gradient(92deg,#2ee6a6,#38bdf8);border-color:transparent;color:#04221c}.btn--toggle.is-on:hover{background:linear-gradient(92deg,#41f0b4,#59c8ff)}.pf__hint{color:#71808a;font-size:12.5px;line-height:1.7;margin-top:16px}.pf__hint strong{color:#cdd9e1}.pf__hint code{background:rgba(45,212,191,.1);border:1px solid rgba(45,212,191,.22);border-radius:5px;color:#9be7da;font-size:11.5px;padding:1px 5px}.pf__hint code,.pf__hint kbd{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.pf__hint kbd{background:hsla(0,0%,100%,.06);border:1px solid hsla(0,0%,100%,.14);border-radius:4px;color:#cdd9e1;font-size:11px;padding:1px 6px}@media (max-width:560px){.pf{padding:20px 14px 28px}.pf__stage{min-height:50vh}.ctl-group .btn{flex:1 1 auto}.btn--primary{min-width:0}.btn{min-height:40px}.ctl input[type=range]{height:40px}.stat__label{font-size:11px}.pf__legend{font-size:12px}.pf__hint{font-size:13px}.pf__hint code,.pf__hint kbd{font-size:12px}}@media (prefers-reduced-motion:reduce){.btn{transition:none}.btn:active{transform:none}}