:root{--bg:#0e0f12;--panel:#17181c;--panel-2:#1e2026;--ink:#eceef2;--muted:#8b8f99;--line:#2a2d35;--accent:#4d8dff;--accent-soft:#17263f;--wire:#c7ccd6;--pin:#7a8496;--pin-live:#4d8dff;--good:#34d399;--bad:#f87171;--volt:#fbbf24}.app{font-family:Inter,system-ui,sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;overscroll-behavior:none;display:flex;flex-direction:column;height:100dvh}.topbar{display:flex;align-items:center;gap:.4rem;padding:max(.6rem,env(safe-area-inset-top)) .6rem .6rem;background:var(--panel);border-bottom:1px solid var(--line);z-index:20}.title{font-size:1rem;font-weight:600;letter-spacing:-.01em;white-space:nowrap}.freqctl{display:flex;align-items:center;gap:.25rem;margin-left:auto;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;padding:.2rem .5rem;height:38px}.freq-lbl{color:var(--accent);font-weight:600;font-style:italic}.freq-lbl,.freqctl input{font-family:JetBrains Mono,monospace}.freqctl input{width:62px;background:transparent;border:none;color:var(--ink);font-size:.9rem;text-align:right;outline:none}.freq-unit{color:var(--muted);font-size:.78rem;font-family:JetBrains Mono,monospace}.topbar-actions{display:flex;gap:.3rem}.ghost-btn{display:inline-grid;place-items:center;min-width:38px;height:38px;padding:0 .5rem;background:var(--panel-2);border:1px solid var(--line);border-radius:10px;color:var(--ink);font-size:1.1rem;font-weight:600;cursor:pointer;text-decoration:none;transition:border-color .15s,background .15s}.ghost-btn:hover{border-color:var(--accent)}.ghost-btn.danger:hover{border-color:var(--bad);color:var(--bad)}.stage{position:relative;flex:1 1;overflow:hidden;touch-action:none}#svg{width:100%;height:100%;display:block}.grid-dot{fill:var(--line)}.hint{position:absolute;top:12px;left:50%;transform:translateX(-50%);max-width:92%;background:var(--panel);border:1px solid var(--line);color:var(--muted);font-size:.8rem;line-height:1.4;padding:.5rem .85rem;border-radius:10px;text-align:center;pointer-events:none;transition:opacity .3s}.hint b{color:var(--ink)}.status{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);background:var(--panel);border:1px solid var(--line);font-family:JetBrains Mono,monospace;font-size:.78rem;padding:.4rem .8rem;border-radius:999px;pointer-events:none;opacity:0;transition:opacity .2s;white-space:nowrap}.status.show{opacity:1}.status.ok{color:var(--good);border-color:color-mix(in srgb,var(--good) 40%,var(--line))}.status.bad{color:var(--bad);border-color:color-mix(in srgb,var(--bad) 40%,var(--line))}.comp-body{fill:var(--panel-2)}.comp-body,.comp-line{stroke:#ffffff;stroke-width:2}.comp-line{fill:none;stroke-linecap:round;stroke-linejoin:round}.comp-fill{fill:#ffffff;stroke:none}.comp-label{font:600 11px JetBrains Mono,monospace}.comp-label,.comp-sub{fill:#ffffff;text-anchor:middle}.comp-sub{font:700 12px JetBrains Mono,monospace}.comp.selected .comp-body,.comp.selected .comp-line{stroke:var(--accent)}.comp.selected .comp-fill,.comp.selected .comp-label,.comp.selected .comp-sub{fill:var(--accent)}.pin{fill:var(--panel);stroke:var(--pin);stroke-width:2;cursor:crosshair}.pin.hot{fill:var(--pin-live);stroke:var(--pin-live)}.pin-minus,.pin-plus{fill:var(--muted);font:700 11px JetBrains Mono,monospace;text-anchor:middle}.wire{stroke:var(--wire);stroke-width:3;fill:none;stroke-linecap:round}.wire-hit{stroke:transparent;stroke-width:16;fill:none;cursor:pointer}.temp-wire{stroke:var(--accent);stroke-width:2.5;stroke-dasharray:6 5;fill:none;pointer-events:none}.measure-line{stroke:var(--volt);stroke-width:2.5;stroke-dasharray:8 4;fill:none;stroke-linecap:round}.temp-measure{stroke:var(--volt);stroke-width:2.5;stroke-dasharray:8 4;fill:none;pointer-events:none}.measure-hit{stroke:transparent;stroke-width:16;fill:none;cursor:pointer}.node-badge rect{fill:var(--accent-soft);stroke:var(--accent);stroke-width:1}.node-badge text{fill:#cfe0ff;font:600 11px JetBrains Mono,monospace;text-anchor:middle}.probe-badge rect{fill:#2a2410;stroke:var(--volt);stroke-width:1}.probe-badge text{fill:var(--volt);font:600 11px JetBrains Mono,monospace;text-anchor:middle}.ctx-btn{cursor:pointer}.ctx-btn circle{fill:var(--panel-2);stroke:var(--line);stroke-width:1.5;transition:stroke .15s}.ctx-btn text{fill:var(--ink);font-size:14px;font-weight:600;text-anchor:middle;dominant-baseline:middle;pointer-events:none}.ctx-btn:hover circle{stroke:var(--accent)}.ctx-btn.danger:hover circle{stroke:var(--bad)}.ctx-btn.danger:hover text{fill:var(--bad)}.rot-ring-hit{fill:none;stroke:transparent;stroke-width:24;cursor:-webkit-grab;cursor:grab;pointer-events:auto}.rot-ring-hit:active{cursor:-webkit-grabbing;cursor:grabbing}.rot-ring{fill:none;stroke:var(--bad);stroke-width:2;stroke-dasharray:6 6;pointer-events:none}.rot-handle{fill:var(--panel);stroke:var(--accent);stroke-width:2;cursor:-webkit-grab;cursor:grab}.rot-handle:active{cursor:-webkit-grabbing;cursor:grabbing;fill:var(--accent)}.inspector{position:fixed;left:0;right:0;bottom:0;background:var(--panel-2);padding:1rem;border-top:1px solid var(--line);box-shadow:0 -4px 20px rgba(0,0,0,.5);z-index:100;transform:translateY(0);transition:transform .2s cubic-bezier(0,0,.2,1)}.inspector.hidden{transform:translateY(110%)}.insp-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.insp-head span{font-weight:700;font-size:1.1rem;color:var(--ink)}.insp-field{display:flex;flex-direction:column;gap:.4rem;margin-bottom:.75rem}.insp-field label{font-size:.85rem;color:var(--muted);font-weight:500}.input-row{display:flex;align-items:center;gap:.5rem}.insp-field input{flex:1 1;background:var(--bg);color:var(--ink);border:1px solid var(--line);border-radius:8px;padding:.5rem;font:14px JetBrains Mono,monospace}.insp-field input:focus{border-color:var(--accent);outline:none}.unit{font-family:JetBrains Mono,monospace;min-width:18px}.insp-hint,.unit{color:var(--muted)}.insp-hint{font-size:.78rem;line-height:1.4;margin:.2rem 0 .75rem}.insp-hint.hidden{display:none}.vars-panel{position:fixed;top:1rem;right:1rem;background:var(--panel-2);border:1px solid var(--line);border-radius:12px;padding:.75rem;box-shadow:0 8px 24px rgba(0,0,0,.4);min-width:150px;z-index:100}.vars-head{font-size:.85rem;font-weight:600;color:var(--muted);margin-bottom:.5rem;text-transform:uppercase;letter-spacing:1px}.var-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem}.var-name{font:600 13px JetBrains Mono,monospace;color:var(--accent);width:30px}.var-input{flex:1 1;background:var(--bg);color:var(--ink);border:1px solid var(--line);border-radius:6px;padding:.3rem .5rem;font:13px JetBrains Mono,monospace;width:60px}.var-input:focus{border-color:var(--accent);outline:none}.palette{display:flex;gap:.5rem;overflow-x:auto;overflow-y:hidden;padding:.6rem .75rem calc(.6rem + env(safe-area-inset-bottom));background:var(--panel);border-top:1px solid var(--line);scrollbar-width:thin;z-index:20}.palette::-webkit-scrollbar{height:6px}.palette::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}.pal-item{flex-shrink:0;display:flex;flex-direction:column;align-items:center;gap:.3rem;width:74px;padding:.5rem .3rem;background:var(--panel-2);border:1px solid var(--line);border-radius:12px;cursor:pointer;color:var(--ink);transition:border-color .15s,transform .1s}.pal-item:hover{border-color:var(--accent)}.pal-item:active{transform:scale(.95)}.pal-item svg{width:42px;height:28px}.pal-item .pal-name{font-size:.64rem;color:var(--muted);text-align:center;line-height:1.1}.pal-sym{stroke:#ffffff;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}.pal-sym-fill{fill:#ffffff;stroke:none}.pal-txt{fill:#ffffff;font:700 9px JetBrains Mono,monospace;text-anchor:middle}.hidden{display:none!important}