[hidden]{display:none!important}
/* ===== Circuit Lab design system: tokens, chrome, panels, terminal, editor. Part artwork classes live in app.css. ===== */
@font-face{font-family:Inter;src:url(../fonts/Inter-var.woff2) format('woff2');font-weight:100 900;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url(../fonts/JetBrainsMono-400.woff2) format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url(../fonts/JetBrainsMono-500.woff2) format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url(../fonts/JetBrainsMono-600.woff2) format('woff2');font-weight:600;font-display:swap}
:root{
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;
  --bg:#08090b;--l0:#0b0d10;--l1:#101215;--l2:#15181c;--l3:#1b1f24;--l4:#23282f;
  --line:#22262c;--line2:#2c3138;--hair:rgba(255,255,255,.06);
  --txt:#e6e8eb;--txt2:#a9afb8;--mut:#6c737d;
  --acc:#22d3ee;--acc-d:#0e7490;--acc-bg:rgba(34,211,238,.10);--acc2:#22d3ee;
  --ok:#34d399;--warn:#fbbf24;--err:#f87171;--panel:var(--l1);--panel2:var(--l2);
  --r1:4px;--r2:6px;--r3:10px;
  --sh1:0 1px 2px rgba(0,0,0,.4);--sh2:0 8px 24px rgba(0,0,0,.45),0 0 0 1px var(--hair);--sh3:0 24px 64px rgba(0,0,0,.6),0 0 0 1px var(--line2);
  --t:150ms cubic-bezier(.2,.7,.3,1);
  --font:Inter,system-ui,-apple-system,'Segoe UI',sans-serif;--mono:'JetBrains Mono',ui-monospace,Menlo,Consolas,monospace;
  --canvas:#0a0c0f;--grid:#20252c;--grid2:#2a3039;
  --dockH:300px;--sideW:300px;--palW:232px;
  font-family:var(--font);font-feature-settings:'cv11','ss01';-webkit-font-smoothing:antialiased;color-scheme:dark;
}
[data-theme=light]{--bg:#eef0f3;--l0:#f6f7f9;--l1:#ffffff;--l2:#f4f5f7;--l3:#eceef1;--l4:#e2e5e9;--line:#dfe2e6;--line2:#cfd4da;--hair:rgba(0,0,0,.06);--txt:#15181c;--txt2:#4b525c;--mut:#7c848f;--acc:#0891b2;--acc-d:#0e7490;--acc-bg:rgba(8,145,178,.10);--canvas:#f7f8fa;--grid:#d5d9df;--grid2:#c3c9d1;--sh2:0 8px 24px rgba(16,24,40,.12),0 0 0 1px var(--line);--sh3:0 24px 64px rgba(16,24,40,.2),0 0 0 1px var(--line);color-scheme:light}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--txt);font-size:13px;line-height:1.45;overflow:hidden}
::selection{background:rgba(34,211,238,.3)}
::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--l4);border-radius:10px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background-color:var(--line2)}::-webkit-scrollbar-corner{background:transparent}
.ic{width:16px;height:16px;flex:none;display:inline-block;vertical-align:middle}.ic.xl{width:32px;height:32px;opacity:.5}
.mono,code,kbd{font-family:var(--mono)}code{font-size:.92em;background:var(--l3);padding:1px 5px;border-radius:var(--r1)}
kbd{font-size:10.5px;padding:1px 5px;border-radius:var(--r1);border:1px solid var(--line2);border-bottom-width:2px;color:var(--txt2);background:var(--l2)}
/* controls */
button,select,input,.btn,textarea{font:inherit;color:var(--txt)}
button,.btn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;background:var(--l3);border:1px solid var(--line2);border-radius:var(--r2);cursor:pointer;transition:background var(--t),border-color var(--t),color var(--t),box-shadow var(--t);white-space:nowrap;font-weight:500;font-size:12.5px}
button:hover,.btn:hover{background:var(--l4);border-color:#3a414a}button:active{transform:translateY(.5px)}
button:focus-visible,select:focus-visible,input:focus-visible{outline:none;box-shadow:0 0 0 2px var(--acc-bg),0 0 0 1px var(--acc)}
button.primary{background:linear-gradient(180deg,#22d3ee,#06b6d4);border-color:#22d3ee;color:#04161a;font-weight:600;box-shadow:0 0 0 1px rgba(34,211,238,.25),0 4px 14px rgba(34,211,238,.18)}button.primary:hover{background:linear-gradient(180deg,#67e8f9,#22d3ee)}
.iconbtn{width:28px;padding:0;justify-content:center;background:transparent;border-color:transparent;color:var(--txt2)}.iconbtn:hover{background:var(--l3);border-color:var(--line2);color:var(--txt)}.iconbtn.sm{width:24px;height:24px}.iconbtn.on{color:var(--acc);background:var(--acc-bg)}
select{height:28px;padding:0 26px 0 9px;background:var(--l3) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%237c848f' stroke-width='1.5' fill='none'/%3E%3C/svg%3E") no-repeat right 9px center;border:1px solid var(--line2);border-radius:var(--r2);appearance:none;cursor:pointer;font-size:12.5px;transition:border-color var(--t)}
select:hover{border-color:#3a414a}select option{background:var(--l2);color:var(--txt)}
input{height:28px;padding:0 9px;background:var(--l0);border:1px solid var(--line2);border-radius:var(--r2);transition:border-color var(--t),box-shadow var(--t);font-size:12.5px;min-width:0}input:hover{border-color:#3a414a}
input[type=checkbox]{appearance:none;width:14px;height:14px;padding:0;border-radius:3px;background:var(--l0);border:1px solid var(--line2);display:inline-grid;place-content:center;cursor:pointer;flex:none}
input[type=checkbox]:checked{background:var(--acc);border-color:var(--acc)}input[type=checkbox]:checked::after{content:'';width:7px;height:4px;border:2px solid #04161a;border-top:0;border-right:0;transform:rotate(-45deg) translate(1px,-1px)}
input[type=range]{appearance:none;height:16px;background:transparent;border:0;padding:0;width:100%}input[type=range]::-webkit-slider-runnable-track{height:3px;background:var(--l4);border-radius:2px}input[type=range]::-webkit-slider-thumb{appearance:none;width:14px;height:14px;border-radius:50%;background:var(--txt);margin-top:-5.5px;box-shadow:0 0 0 3px var(--acc-bg),0 1px 3px #000}
.sep{width:1px;height:20px;background:var(--line);margin:0 4px}.vsep{width:1px;height:18px;background:var(--line);margin:0 2px}
.muted{color:var(--mut)}.small{font-size:11.5px}.warn{color:var(--warn)}
.row{display:flex;gap:var(--s2);align-items:center}.row.wrap{flex-wrap:wrap}
.tgl{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 8px;border-radius:var(--r2);color:var(--txt2);font-size:12px;cursor:pointer;user-select:none;transition:background var(--t)}.tgl:hover{background:var(--l3)}
.fld{display:inline-flex;align-items:center;gap:6px;color:var(--mut);font-size:12px}
/* top command bar */
header#top{height:48px;display:flex;align-items:center;gap:var(--s3);padding:0 var(--s3);background:var(--l0);border-bottom:1px solid var(--line);position:relative;z-index:10;container:topbar / inline-size}
header#top>*{flex-shrink:0}
header#top>.crumb{flex:1 1 auto;min-width:calc(12ch + 20px);max-width:none}
.brand{display:flex;align-items:center;gap:8px;font-weight:650;letter-spacing:-.01em;font-size:13.5px}.logo{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;background:linear-gradient(135deg,#22d3ee,#0e7490);color:#031014;box-shadow:0 0 18px rgba(34,211,238,.35)}.logo svg{width:14px;height:14px}
.crumb{display:flex;align-items:center;gap:8px;min-width:calc(12ch + 20px);max-width:none;flex:1 1 auto}.crumb-sep{color:var(--line2);font-size:18px;flex:none}.proj-title{font-weight:550;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:default;min-width:12ch;flex:1 1 auto}
.chip-tag{font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;border-radius:20px;border:1px solid var(--line2);color:var(--txt2);white-space:nowrap}.chip-tag.ex{color:var(--warn);border-color:rgba(251,191,36,.35);background:rgba(251,191,36,.08)}.chip-tag.mine{color:var(--ok);border-color:rgba(52,211,153,.35);background:rgba(52,211,153,.08)}
.runctl{display:flex;align-items:center;gap:2px;padding:2px;border-radius:8px;background:var(--l2);border:1px solid var(--line)}.runctl .run{height:26px;padding:0 12px}.runctl .run .ic{width:12px;height:12px}
#bRun:disabled{cursor:progress;opacity:.72}#bRun:disabled:hover{transform:none}
#bRun.spinning,#bRun.spinning:disabled{background:#1b1f24;border-color:#9aa3af;color:#e8eaed;box-shadow:none;opacity:1}
#bRun.spinning:hover{background:#2a3038;border-color:#c5c9d0;color:#ffffff;opacity:1}
#bRun.spinning:active{background:#12161b;border-color:#9aa3af;color:#e8eaed;opacity:1;transform:none}
#bRun.spinning:focus-visible{background:#1b1f24;color:#e8eaed;opacity:1;outline:2px solid #0891b2;outline-offset:2px}
html[data-theme=light] #bRun.spinning,html[data-theme=light] #bRun.spinning:disabled,html[data-theme=light] #bRun.spinning:focus-visible{background:#eceef1;border-color:#3d4550;color:#2c333c;opacity:1}
html[data-theme=light] #bRun.spinning:hover{background:#e2e5e9;border-color:#3d4550;color:#15181c}
html[data-theme=light] #bRun.spinning:active{background:#d5d9df;border-color:#3d4550;color:#15181c;transform:none}
#bRun .runspin{display:none;width:12px;height:12px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;box-sizing:border-box;flex:none}
#bRun.spinning .ic{display:none}#bRun.spinning .runspin{display:block;animation:runspin .7s linear infinite}
/* Widest live label is Building…, measured at 8.4em with the icon and padding. Compiling… is not shown. */
#bRun{min-width:8.4em;flex-shrink:0}
/* Full-width compile line. --strip-top is the measured bottom of the top bar plus the ticker, set from a ResizeObserver. */
#compileStrip{position:fixed;top:var(--strip-top,0px);left:0;right:0;z-index:12;margin:0;padding:8px 16px;box-sizing:border-box;background:#1b1f24;color:#e8eaed;border-bottom:1px solid #9aa3af;font-size:13.5px;line-height:1.45;font-weight:500;white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere;pointer-events:none}
#compileStrip[hidden]{display:none!important}
html[data-theme=light] #compileStrip{background:#eceef1;color:#2c333c;border-bottom-color:#3d4550}
/* Push the canvas down while the strip is up. Transform is not layout, so CLS stays 0. */
html.strip-on #stage,html.strip-on #projBanner,html.strip-on #mParts,html.strip-on #mWireBar{transform:translateY(var(--strip-h,0px))}
html.strip-on body:not(.m) #palette,html.strip-on body:not(.m) #side{transform:translateY(var(--strip-h,0px))}
html.strip-on body:not(.m) #palList,html.strip-on body:not(.m) .insp-body{padding-bottom:calc(var(--s3) + var(--strip-h,0px))}
@keyframes runspin{to{transform:rotate(360deg)}}
body.running .runctl .run{background:var(--l3);color:var(--ok);border-color:rgba(52,211,153,.4);box-shadow:none}body.running #bStop{color:var(--err)}
.status{display:flex;align-items:center;gap:8px;height:28px;padding:0 10px;border-radius:var(--r2);background:var(--l2);border:1px solid var(--line);color:var(--txt2);font-size:12px;white-space:nowrap;position:relative;overflow:hidden;flex:0 0 auto;min-width:11em;max-width:11em}
.status #stText{overflow:visible;text-overflow:clip;min-width:8ch}
.status.st-short,.status.st-icon{min-width:0;max-width:none}
.status.st-icon{gap:0;padding:0 8px}
.status.st-icon #stText{position:absolute;width:0;height:0;min-width:0;margin:0;padding:0;overflow:hidden;clip:rect(0,0,0,0)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.status #stTime{color:var(--mut);font-size:11.5px}
.dot{width:7px;height:7px;border-radius:50%;background:var(--mut);flex:none;transition:background var(--t)}.dot.run{background:var(--ok);box-shadow:0 0 0 3px rgba(52,211,153,.15),0 0 10px var(--ok);animation:pulse 1.6s infinite}.dot.busy{background:var(--warn);box-shadow:0 0 0 3px rgba(251,191,36,.15)}.dot.err{background:var(--err);box-shadow:0 0 0 3px rgba(248,113,113,.15)}
@keyframes pulse{50%{box-shadow:0 0 0 5px rgba(52,211,153,.05),0 0 4px var(--ok)}}
.prog{position:absolute;left:0;right:0;bottom:0;height:2px;overflow:hidden;opacity:0;transition:opacity var(--t)}.prog i{position:absolute;inset:0 60% 0 0;background:linear-gradient(90deg,transparent,var(--acc),transparent);animation:indet 1.1s infinite linear}body.busy .prog{opacity:1}@keyframes indet{from{transform:translateX(-100%)}to{transform:translateX(250%)}}
.tb{display:flex;align-items:center;gap:6px;margin-left:auto;min-width:0}
.tb #selExample{max-width:190px}
.tb-fold,.tb-proj,#tbMore{display:contents}
#bMore,#bExamples{display:none}
.ex-slot{position:relative;display:inline-flex;align-items:center;flex:none}
.ex-list{position:absolute;top:calc(100% + 6px);left:0;z-index:40;min-width:220px;max-width:min(320px,calc(100vw - 16px));max-height:280px;overflow:auto;display:flex;flex-direction:column;align-items:stretch;gap:2px;padding:6px;background:var(--l2);border:1px solid var(--line2);border-radius:10px;box-shadow:var(--sh3)}
.ex-list[hidden]{display:none!important}
.ex-list button{width:100%;justify-content:flex-start;text-align:left;height:auto;min-height:28px;white-space:nowrap}
.ex-tip{display:none;position:absolute;top:calc(100% + 6px);left:0;z-index:40;max-width:260px;padding:6px 8px;background:var(--l2);color:var(--txt);border:1px solid var(--line2);border-radius:8px;box-shadow:var(--sh2);font-size:12px;line-height:1.35;white-space:normal}
#bExamples:hover+#exTip,#bExamples:focus-visible+#exTip,#bExamples.tip-hold+#exTip{display:block}
#bExamples:hover{background:var(--l4);border-color:#3a414a}
#bExamples:focus-visible{outline:2px solid #0891b2;outline-offset:2px}
#bExamples:active{transform:translateY(.5px)}
#bExamples:disabled,#bExamples[aria-disabled="true"]{opacity:.45;cursor:not-allowed;transform:none}
.tb-lab{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.cmdk{color:var(--mut);background:var(--l1);min-width:190px;justify-content:flex-start}.cmdk span{flex:1;text-align:left;font-weight:400}.cmdk:hover{color:var(--txt2)}
.conn{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--mut);padding:0 4px}.conn i{width:6px;height:6px;border-radius:50%;background:var(--mut)}.conn.ok i{background:var(--ok);box-shadow:0 0 6px var(--ok)}.conn.bad i{background:var(--err)}
/* main layout */
#main{display:grid;grid-template-columns:var(--palW) minmax(0,1fr) 4px var(--sideW);height:calc(100% - 70px);position:relative}
body.c-palette #main{grid-template-columns:0 minmax(0,1fr) 4px var(--sideW)}body.c-side #main{grid-template-columns:var(--palW) minmax(0,1fr) 0 0}body.c-palette.c-side #main{grid-template-columns:0 minmax(0,1fr) 0 0}
body.c-palette #palette,body.c-side #side,body.c-side #sideResizer{display:none}
.panel{background:var(--l1);min-width:0;min-height:0}
.panel-h{height:36px;display:flex;align-items:center;justify-content:space-between;padding:0 var(--s2) 0 var(--s3);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);border-bottom:1px solid var(--line);flex:none}
#palette{border-right:1px solid var(--line);display:flex;flex-direction:column}
.pal-search{position:relative;padding:var(--s2)}.pal-search .ic{position:absolute;left:18px;top:50%;transform:translateY(-50%);color:var(--mut);width:14px;height:14px}.pal-search input{width:100%;padding-left:30px;background:var(--l0)}
#palList{overflow:auto;padding:0 var(--s2) var(--s3);flex:1}
.pcat{display:flex;align-items:center;justify-content:space-between;color:var(--mut);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin:var(--s3) var(--s1) var(--s1);cursor:pointer;user-select:none}.pcat::after{content:'';width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);transition:transform var(--t)}.pcat.closed::after{transform:rotate(-45deg)}
.pgrid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.pgrid.closed{display:none}
.pitem{display:flex;flex-direction:column;align-items:center;gap:4px;padding:8px 4px 6px;border-radius:var(--r2);border:1px solid var(--line);background:var(--l2);cursor:grab;transition:border-color var(--t),background var(--t),transform var(--t);overflow:hidden}
.pitem:hover{border-color:var(--acc-d);background:var(--l3);transform:translateY(-1px)}.pitem:active{cursor:grabbing}
.pitem svg{width:100%;height:46px;pointer-events:none}.pitem span{font-size:11px;color:var(--txt2);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.pal-empty{padding:var(--s4);text-align:center;color:var(--mut);font-size:12px}
#center{display:flex;flex-direction:column;min-width:0;min-height:0}
#stageWrap{position:relative;overflow:hidden;background:var(--canvas);flex:1;min-height:120px}
#stage{width:100%;height:100%;display:block;user-select:none;touch-action:none}
.grid-dot{fill:var(--grid)}.grid-dot2{fill:var(--grid2)}
.resizer-h{height:4px;cursor:row-resize;background:var(--l0);border-top:1px solid var(--line);transition:background var(--t);flex:none}.resizer-h:hover,.resizer-h.drag{background:var(--acc-d)}
.resizer-v{cursor:col-resize;background:var(--l0);border-left:1px solid var(--line);transition:background var(--t)}.resizer-v:hover,.resizer-v.drag{background:var(--acc-d)}
#dock{height:var(--dockH);display:flex;flex-direction:column;flex:none}body.c-dock #dock,body.c-dock #dockResizer{display:none}
#side{border-left:1px solid var(--line);display:flex;flex-direction:column}
.reopen{position:absolute;right:8px;bottom:8px;display:none;gap:4px;z-index:6}body.c-palette .reopen,body.c-side .reopen,body.c-dock .reopen{display:flex}.reopen button{display:none;background:var(--l2);border-color:var(--line2)}
body.c-palette [data-reopen=palette],body.c-side [data-reopen=side],body.c-dock [data-reopen=dock]{display:inline-flex}
/* canvas overlays */
.canvas-tools,.zoom-tools{position:absolute;display:flex;align-items:center;gap:2px;padding:3px;background:color-mix(in srgb,var(--l1) 88%,transparent);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:9px;box-shadow:var(--sh2);z-index:4}
.canvas-tools{left:12px;bottom:12px}.canvas-tools select{height:26px;font-size:12px;background-color:var(--l2)}
.wire-color{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 2px 0 6px;color:var(--txt2);font-size:11px;font-weight:650;letter-spacing:.06em;text-transform:uppercase;cursor:default}
.wire-color .ic{width:15px;height:15px;color:var(--acc)}.wire-color select{max-width:92px}
.zoom-tools{right:12px;bottom:12px}#zoomPct{min-width:44px;text-align:center;font-size:11.5px;color:var(--txt2)}
#minimap{position:absolute;right:12px;bottom:52px;width:200px;height:130px;border-radius:9px;border:1px solid var(--line);background:color-mix(in srgb,var(--l0) 90%,transparent);box-shadow:var(--sh2);cursor:pointer;z-index:4}#minimap.off{display:none}
.hint{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);max-width:46%;color:var(--txt2);font-size:11.5px;pointer-events:none;background:color-mix(in srgb,var(--l1) 85%,transparent);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:20px;padding:5px 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:3}
.projbanner{position:absolute;top:12px;left:12px;right:12px;display:flex;gap:var(--s2);align-items:center;flex-wrap:wrap;font-size:12px;pointer-events:none;z-index:4}.projbanner>*{pointer-events:auto}
.projbanner .pb-ex,.projbanner .pb-my{display:inline-flex;align-items:center;gap:6px;height:30px;background:color-mix(in srgb,var(--l1) 88%,transparent);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:8px;padding:0 10px;box-shadow:var(--sh1)}
.projbanner .pb-ex{border-color:rgba(251,191,36,.35)}.projbanner .pb-ex::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--warn)}.projbanner .pb-my::before{content:'';width:6px;height:6px;border-radius:50%;background:var(--ok)}
.projbanner .muted{font-size:11.5px}#pbName{cursor:pointer;border-bottom:1px dashed var(--mut)}
.tip{position:absolute;background:color-mix(in srgb,var(--l0) 94%,transparent);backdrop-filter:blur(8px);border:1px solid var(--line2);border-radius:8px;padding:7px 10px;font-size:12px;pointer-events:none;max-width:360px;z-index:8;box-shadow:var(--sh2)}.tip b{color:var(--acc);font-weight:600}
.warnbox{position:absolute;top:52px;left:12px;background:rgba(251,191,36,.1);border:1px solid rgba(251,191,36,.35);color:#fde68a;border-radius:8px;padding:7px 11px;font-size:12px;max-width:60%;z-index:4}
/* tabs / dock */
.tabs{display:flex;align-items:center;gap:2px;height:36px;padding:0 var(--s2);border-bottom:1px solid var(--line);overflow-x:auto;flex:none;background:var(--l1)}
.tabs button{height:36px;border:0;border-radius:0;background:none;padding:0 10px;color:var(--mut);font-weight:500;position:relative}.tabs button:hover{background:none;color:var(--txt)}
.tabs button.on{color:var(--txt)}.tabs button.on::after{content:'';position:absolute;left:8px;right:8px;bottom:-1px;height:2px;border-radius:2px;background:var(--acc)}
.tabs button.iconbtn{height:24px}.tabs-sp{flex:1}
.tab{display:none;padding:var(--s2) var(--s3);overflow:auto;flex:1;min-height:0;flex-direction:column;gap:var(--s2)}.tab.on{display:flex}
.termbar input{flex:1}
.term{flex:1;min-height:80px;margin:0;background:var(--l0);border:1px solid var(--line);border-radius:var(--r2);padding:8px 10px;overflow:auto;font:12px/1.6 var(--mono);color:var(--txt2);white-space:pre-wrap;word-break:break-word}
.term .ln{display:block}.term .ts{color:var(--mut);margin-right:10px;user-select:none}.term .ln.err{color:var(--err)}.term .ln.wrn{color:var(--warn)}.term .ln.ok{color:var(--ok)}.term .ln.sys{color:var(--mut)}.term .ln.net{color:#7dd3fc}.term .ln.http{color:#a5b4fc}.term .ln.boot{color:#566170}.term .ln.in{color:var(--acc)}
.term .empty-t{color:var(--mut);font-family:var(--font)}
#netPanel .nlr{padding:1px 0}.nlr.k-wifi,.nlr.k-dhcp{color:var(--ok)}.nlr.k-dns{color:#c4b5fd}.nlr.k-http,.nlr.k-tcp{color:#7dd3fc}.nlr.k-udp{color:var(--warn)}.nlr.k-dev{color:var(--txt)}.nlr.k-fw{color:#a7f3d0}.nlr.k-info{color:var(--mut)}.nlr.bad{color:var(--err)}
.codebar{flex-wrap:wrap}.filetabs{display:flex;gap:2px}.filetabs button{height:26px;padding:0 10px;font-size:12px;font-family:var(--mono);background:transparent;border-color:transparent;color:var(--mut)}.filetabs button.on{background:var(--l3);border-color:var(--line2);color:var(--txt)}
.note{background:var(--l2);border:1px solid var(--line);border-radius:var(--r2);padding:8px 10px;color:var(--txt2);font-size:12px;line-height:1.5}
#buildLog{max-height:none;font-size:11.5px}#buildDet summary{color:var(--mut);cursor:pointer;margin-bottom:6px}
/* code editor (textarea over highlighted pre) */
.codewrap{flex:1;min-height:120px;display:flex;background:var(--l0);border:1px solid var(--line);border-radius:var(--r2);overflow:hidden;font:12.5px/1.6 var(--mono)}
.gutter{flex:none;min-width:46px;padding:10px 0;background:var(--l1);border-right:1px solid var(--line);color:var(--mut);text-align:right;user-select:none;overflow:hidden;font-size:11.5px}
.gutter div{padding:0 10px 0 6px;height:calc(12.5px*1.6);position:relative}.gutter .e{color:var(--err)}.gutter .e::before{content:'';position:absolute;left:5px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:var(--err);box-shadow:0 0 6px var(--err)}.gutter .w::before{content:'';position:absolute;left:5px;top:50%;width:6px;height:6px;margin-top:-3px;border-radius:50%;background:var(--warn)}
.code-scroll{position:relative;flex:1;min-width:0}
.code-hl,#code{position:absolute;inset:0;margin:0;padding:10px 12px;font:inherit;white-space:pre;tab-size:2;overflow:auto;border:0}
.code-hl{pointer-events:none;color:#d4d8de;overflow:hidden}
#code{background:transparent;color:transparent;caret-color:var(--acc);resize:none;outline:none;border-radius:0;height:100%;width:100%}#code::selection{background:rgba(34,211,238,.25);color:transparent}
.code-hl .lerr{background:rgba(248,113,113,.10);box-shadow:inset 2px 0 0 var(--err);display:inline-block;min-width:100%}
.tk-k{color:#c792ea}.tk-t{color:#7dd3fc}.tk-s{color:#a5d6a7}.tk-n{color:#f8bd6c}.tk-c{color:#5c6773;font-style:italic}.tk-p{color:#f78c6c}.tk-f{color:#82aaff}.tk-m{color:#89ddff}
[data-theme=light] .code-hl{color:#1f2328}[data-theme=light] .tk-k{color:#8b3fd1}[data-theme=light] .tk-t{color:#0369a1}[data-theme=light] .tk-s{color:#15803d}[data-theme=light] .tk-n{color:#b45309}[data-theme=light] .tk-c{color:#8a929c}[data-theme=light] .tk-p{color:#c2410c}[data-theme=light] .tk-f{color:#1d4ed8}
/* inspector */
.insp-body{padding:var(--s3);overflow:auto;flex:1;display:flex;flex-direction:column;gap:var(--s2)}
#insp h3{margin:0 0 var(--s3);font-size:14px;font-weight:600;display:flex;align-items:baseline;gap:8px}#insp h3 small{color:var(--mut);font-weight:500;font-family:var(--mono);font-size:11px;padding:1px 6px;border:1px solid var(--line2);border-radius:var(--r1)}
#insp label{display:flex;flex-direction:column;gap:5px;margin-bottom:var(--s3);color:var(--mut);font-size:11.5px;font-weight:500}#insp label input[type=checkbox]{align-self:flex-start}
#insp .insp-k{margin:0 0 5px;color:var(--mut);font-size:11.5px;font-weight:500}
#insp .row button{flex:1;justify-content:center}#insp .row button.on{border-color:var(--acc);color:var(--acc)}#insp .row button.is-off{opacity:.45}
.ro{font-family:var(--mono);color:var(--ok);font-size:12px;background:var(--l0);border:1px solid var(--line);border-radius:var(--r2);padding:8px 10px;margin:0 0 var(--s3);min-height:34px}
table.pins{width:100%;border-collapse:collapse;font-size:11.5px;font-family:var(--mono)}table.pins td{border-bottom:1px solid var(--line);padding:4px 6px;color:var(--txt2)}table.pins tr:hover td{background:var(--l2)}
.sw{width:22px;height:22px;padding:0;border-radius:50%;border:2px solid var(--l1)}.sw.on{box-shadow:0 0 0 2px var(--acc)}
#warnList .w{color:var(--warn);margin:2px 0;font-size:12px}
h4{margin:var(--s3) 0 var(--s1);color:var(--mut);font-size:10.5px;font-weight:600;text-transform:uppercase;letter-spacing:.08em}
.empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:6px;padding:32px 12px;color:var(--mut)}.empty p{margin:6px 0 0;color:var(--txt2);font-weight:500}.empty small{max-width:220px}
canvas{width:100%;background:var(--l0);border:1px solid var(--line);border-radius:var(--r2)}
/* toasts */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:10px;background:var(--l2);border:1px solid var(--line2);color:var(--txt);padding:10px 14px 10px 12px;border-radius:10px;z-index:90;box-shadow:var(--sh3);font-size:12.5px;max-width:min(640px,90vw);animation:toastIn 200ms cubic-bezier(.2,.8,.3,1)}
.toast::before{content:'';width:8px;height:8px;border-radius:50%;background:var(--acc);box-shadow:0 0 8px var(--acc);flex:none}.toast.err::before{background:var(--err);box-shadow:0 0 8px var(--err)}.toast.err{border-color:rgba(248,113,113,.35)}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,8px)}}
/* modals, menus, command palette */
.modal{position:fixed;inset:0;background:rgba(3,4,6,.6);backdrop-filter:blur(3px);z-index:60;display:flex;align-items:flex-start;justify-content:center;padding-top:10vh;animation:fade 150ms}.modal[hidden]{display:none}@keyframes fade{from{opacity:0}}
.modal-box{background:var(--l1);border-radius:12px;padding:var(--s4);width:min(760px,94vw);max-height:76vh;overflow:auto;display:flex;flex-direction:column;gap:var(--s3);box-shadow:var(--sh3)}.modal-box h3{font-size:15px;font-weight:600}
/* "+ New blank" chooser (Basic circuit vs ESP32) */
.nb-modal{z-index:70}.nb-box{width:min(600px,94vw)}.nb-sub{margin:0;color:var(--txt2)}
.nb-opts{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
.nb-opt{display:grid;grid-template-columns:1fr auto;align-items:center;align-content:start;gap:8px 10px;height:auto;min-height:132px;padding:var(--s4);text-align:left;white-space:normal;border-radius:var(--r3);background:var(--l2);border:1px solid var(--line2)}
.nb-opt:hover{background:var(--l3);border-color:var(--acc-d)}.nb-opt:focus-visible{border-color:var(--acc);background:var(--acc-bg)}
.nb-t{font-size:14px;font-weight:600;color:var(--txt)}.nb-tag{font-size:10.5px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--acc);background:var(--acc-bg);border-radius:999px;padding:2px 8px}
.nb-d{grid-column:1/-1;font-size:12.5px;font-weight:400;line-height:1.5;color:var(--txt2)}
.nb-foot{justify-content:flex-end}
@media (max-width:540px){.nb-opts{grid-template-columns:1fr}.nb-opt{min-height:0}}
.projs{width:100%;border-collapse:collapse}.projs td{padding:10px 8px;border-top:1px solid var(--line);vertical-align:middle}.projs tr:hover td{background:var(--l2)}.projs td:last-child{text-align:right;white-space:nowrap}.projs td button{margin-left:4px;height:26px;padding:0 8px;font-size:12px}.projs .pn{font-weight:550}.projs tr.cur .pn{color:var(--acc)}
.ctxmenu{position:absolute;z-index:30;background:var(--l2);border-radius:10px;padding:5px;display:flex;flex-direction:column;gap:1px;min-width:180px;box-shadow:var(--sh3);animation:fade 120ms}.ctxmenu button{justify-content:flex-start;background:none;border-color:transparent;height:28px}.ctxmenu button:hover{background:var(--l4)}
.ctx-colors{display:flex;flex-wrap:wrap;gap:5px;padding:7px 8px 4px;border-top:1px solid var(--line);margin-top:3px}.ctx-colors span{width:16px;height:16px;border-radius:50%;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(0,0,0,.4);transition:transform var(--t)}.ctx-colors span:hover{transform:scale(1.2)}
.cmdk-box{width:min(620px,94vw);background:var(--l1);border-radius:14px;box-shadow:var(--sh3);overflow:hidden}
.cmdk-in{display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:1px solid var(--line)}.cmdk-in .ic{color:var(--mut)}.cmdk-in input{flex:1;height:52px;border:0;background:none;font-size:15px;box-shadow:none!important}
#cmdkList{max-height:50vh;overflow:auto;padding:6px}.ck{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;cursor:pointer;color:var(--txt2)}.ck .ck-g{margin-left:auto;font-size:11px;color:var(--mut)}.ck.on{background:var(--acc-bg);color:var(--txt)}.ck.on .ck-g{color:var(--acc)}
.keys #keysList{display:grid;grid-template-columns:1fr 1fr;gap:4px 24px}.krow{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px solid var(--line);font-size:12.5px;color:var(--txt2)}.krow span:last-child{display:flex;gap:4px}
/* canvas highlights + wires */
.hl-net{fill:none;stroke:var(--acc);stroke-width:1.3;pointer-events:none;opacity:.85}.hl-pin{fill:rgba(34,211,238,.25);stroke:#fff;stroke-width:1.4;pointer-events:none}.hl-target{fill:none;stroke:var(--warn);stroke-width:2;pointer-events:none}
#stage.on-pin{cursor:crosshair}
.wire{cursor:pointer}.w-hit{stroke:transparent;stroke-width:12;fill:none}.w-shadow{stroke:rgba(0,0,0,.5);stroke-width:4.6;fill:none;stroke-linejoin:round;stroke-linecap:round;transform:translate(0,1.2px)}
.w-line{stroke-width:2.4;fill:none;stroke-linejoin:round;stroke-linecap:round;transition:stroke-width var(--t)}.wire:hover .w-line{stroke-width:3;filter:drop-shadow(0 0 3px currentColor)}
.wire.sel .w-line{stroke-width:3.2;filter:drop-shadow(0 0 4px rgba(34,211,238,.9))}
.w-flow{fill:none;stroke:#fff;stroke-width:1.1;stroke-dasharray:1.5 9;stroke-linecap:round;opacity:0;pointer-events:none}
#stage.flow.live .w-flow{opacity:.55;animation:flow .9s linear infinite}@keyframes flow{to{stroke-dashoffset:-10.5}}
.w-end{stroke:rgba(0,0,0,.5);stroke-width:.6}.w-bend{fill:#fff;stroke:var(--acc);stroke-width:1.2;cursor:move}
.w-preview{stroke-width:2.4;fill:none;stroke-dasharray:6 4;pointer-events:none;animation:flow .6s linear infinite}
/* responsive + touch */
@media (max-width:1440px){:root{--palW:208px;--sideW:272px}.cmdk span{display:none}.cmdk{min-width:0}.cmdk kbd{display:none}#bProjects span{display:none}}
@media (max-width:1300px){.conn span,.crumb .chip-tag{display:none}.tb #selExample{max-width:140px}}
@media (max-width:900px){#main{grid-template-columns:1fr!important;grid-template-rows:auto 1fr auto}#palette{max-height:140px}#side,#sideResizer{display:none}}
/* Queries use the header's content box, so a classic scrollbar (about 15px) is already
   subtracted. 1255px folds search, shortcuts and theme into More. 1156px folds Projects,
   Save, Download and Import. 925px (about 949px of header, under a 950px window) turns
   Examples into a button that still shows the word Examples. */
@container topbar (max-width:1255px){
  body:not(.m) .tb-fold{display:inline-flex;position:relative;align-items:center;gap:6px}
  body:not(.m) #bMore{display:inline-flex;flex:none}
  body:not(.m) #tbMore{display:none;position:absolute;top:calc(100% + 6px);right:0;z-index:40;min-width:220px;flex-direction:column;align-items:stretch;gap:2px;padding:6px;background:var(--l2);border:1px solid var(--line2);border-radius:10px;box-shadow:var(--sh3)}
  body:not(.m) #tbMore.open{display:flex}
  body:not(.m) #tbMore.open :is(button,.btn){width:100%;justify-content:flex-start}
  body:not(.m) #tbMore.open .cmdk{min-width:0}
  body:not(.m) #tbMore.open :is(.cmdk span,.cmdk kbd,.tb-lab,#bProjects span){display:inline!important;position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
}
@container topbar (max-width:1156px){
  body:not(.m) .tb-proj{display:none}
  body:not(.m) #tbMore.open .tb-proj{display:flex;flex-direction:column;align-items:stretch;gap:2px}
  body:not(.m) #tbMore.open .tb-proj .sep{display:none}
}
@container topbar (max-width:925px){
  body:not(.m) #bExamples{display:inline-flex;flex:none}
  body:not(.m) #bExamples .ex-lab{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
  body:not(.m) .ex-slot #selExample{position:absolute;width:1px;height:1px;margin:0;padding:0;border:0;opacity:0;pointer-events:none;overflow:hidden;clip:rect(0,0,0,0)}
  body:not(.m) .brand-t{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
}
@media (pointer:coarse){button,.btn,select,input{height:34px}.iconbtn{width:34px}.w-hit{stroke-width:20}.pin{r:4}}
/* hint sits above the left canvas toolbar, never under the toolbars/minimap */
.hint{left:12px;bottom:54px;transform:none;max-width:calc(100% - 250px);overflow:hidden;text-overflow:ellipsis}
body:has(#minimap.off) .hint{max-width:calc(100% - 40px)}
.dot.warn{background:var(--warn);animation:pulse .8s infinite}
body.reconnecting #status{border-color:var(--warn);box-shadow:0 0 0 3px rgba(251,191,36,.12)}body.reconnecting #stText{color:var(--warn)}

/* parts list (BOM) */
.bom{max-width:860px}.bom-h{display:flex;align-items:center;justify-content:space-between;gap:var(--s3);margin:0 0 var(--s2)}.bom-t{font-weight:600;color:var(--txt)}
.bom-list{border:1px solid var(--line);border-radius:var(--r2);overflow:hidden;background:var(--l2)}
.bom-row{display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:var(--s3);padding:7px var(--s3);border-top:1px solid var(--line)}.bom-row:first-child{border-top:0}.bom-row:hover{background:var(--l3)}
.bom-q{color:var(--acc);font-weight:600}.bom-n{color:var(--txt);min-width:0}.bom-n small{display:block;color:var(--mut);font-size:11px}
.bom-a{white-space:nowrap;font-size:12px;font-weight:500;color:var(--acc);text-decoration:none;padding:4px 10px;border:1px solid var(--line2);border-radius:var(--r1);background:var(--l1)}.bom-a:hover{background:var(--acc-bg);border-color:var(--acc)}
@media (max-width:640px){.bom-row{grid-template-columns:36px 1fr;row-gap:6px}.bom-a{grid-column:2;justify-self:start}.bom-h{flex-wrap:wrap}}
/* visual upgrade: wires + parts */
.w-line{stroke-width:2.6}
.w-hl{fill:none;stroke:#fff;stroke-width:.7;opacity:.28;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;transform:translate(-.35px,-.6px)}
.w-shadow{stroke:rgba(0,0,0,.45);stroke-width:4.4;filter:blur(.6px)}
.kp-key{cursor:pointer}.kp-key:hover rect:nth-child(2){filter:brightness(1.12)}
.lbl-hit{cursor:move}
.espp{cursor:crosshair}

#legalFoot{height:22px;line-height:22px;font-size:11px;padding:0 10px;color:var(--muted,#888);border-top:1px solid var(--line,rgba(127,127,127,.2));display:flex;gap:12px;justify-content:space-between;overflow:hidden;white-space:nowrap}#legalFoot span{overflow:hidden;text-overflow:ellipsis}#legalFoot a{color:inherit;text-decoration:underline;flex:none}

/* ---- 3D view ---- */
.view-toggle{display:inline-flex;border:1px solid var(--line);border-radius:var(--r2);overflow:hidden;background:var(--l2)}
.view-toggle .seg{appearance:none;border:0;background:transparent;color:var(--txt2);height:28px;padding:0 10px;display:inline-flex;align-items:center;gap:5px;cursor:pointer;font:600 11.5px/1 var(--sans);letter-spacing:.04em}
.view-toggle .seg .ic{width:14px;height:14px}
.view-toggle .seg.on{background:linear-gradient(180deg,rgba(34,211,238,.18),rgba(34,211,238,.06));color:var(--acc);box-shadow:inset 0 0 0 1px rgba(34,211,238,.35)}
.view-toggle .seg:hover{color:var(--txt)}
#stageWrap > canvas.stage3d,#stage3d{position:absolute;inset:0;width:100%;height:100%;display:none;z-index:3;border:0;outline:none;touch-action:none;background:#07090d}
#stageWrap > canvas.stage3d.on,#stage3d.on{display:block!important}
body.view3d #stage{visibility:hidden;pointer-events:none}
body.view3d .hint{opacity:0}
body.view3d #minimap{display:none}
body.view3d #zoomPct{display:none!important}
body.view3d .canvas-tools .tgl:has(#cbOrtho),body.view3d .wire-color,body.view3d #bRot,body.view3d #bDel{opacity:.35;pointer-events:none}
/* ---- schematic view (classic symbols, view-only) ---- */
#stageSch.stage-sch{position:absolute;inset:0;width:100%;height:100%;display:none;z-index:3;background:var(--canvas);touch-action:none}
#stageSch.stage-sch.on{display:block}
body.viewsch #stage{visibility:hidden;pointer-events:none}
body.viewsch #minimap{display:none}
body.viewsch .canvas-tools .tgl:has(#cbOrtho),body.viewsch .wire-color,body.viewsch #bRot,body.viewsch #bDel,body.viewsch #iRot,body.viewsch #iDel{opacity:.35;pointer-events:none}
body.viewsch .canvas-tools,body.viewsch .zoom-tools{z-index:12}
body.viewsch .hint{z-index:5;opacity:1;max-width:min(760px,calc(100% - 28px))}
#stageSch .sch-stroke{fill:none;stroke:var(--txt);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
#stageSch .sch-wire{fill:none;stroke:var(--acc);stroke-width:1.55;stroke-linejoin:round;pointer-events:none}
#stageSch .sch-hitnet{fill:none;stroke:transparent;stroke-width:12}
#stageSch .sch-body{fill:color-mix(in srgb,var(--l1) 86%,var(--canvas));stroke:var(--txt);stroke-width:1.45}
#stageSch .sch-dot{fill:var(--txt);stroke:none}
#stageSch .sch-pin{fill:var(--acc);stroke:var(--canvas);stroke-width:1}
#stageSch .sch-ref{fill:var(--txt);font:600 12px var(--sans,system-ui,sans-serif);text-anchor:middle}
#stageSch .sch-val{fill:var(--txt2);font:11px var(--mono,ui-monospace,monospace);text-anchor:middle}
#stageSch .sch-note{fill:var(--mut);font:10px var(--sans,system-ui,sans-serif);text-anchor:middle}
#stageSch .sch-pname{fill:var(--txt2);font:9.5px var(--mono,ui-monospace,monospace)}
#stageSch .sch-title{fill:var(--txt);font:600 11px var(--sans,system-ui,sans-serif);text-anchor:middle}
#stageSch .sch-flag,#stageSch .sch-netlbl{fill:var(--acc);font:700 10.5px var(--mono,ui-monospace,monospace)}
#stageSch .sch-gnd{stroke:var(--txt)}
#stageSch .sch-hit{fill:transparent}
#stageSch .sch-sym.sel .sch-body,#stageSch .sch-sym.sel .sch-stroke{stroke:var(--acc)}
#stageSch .sch-sym.sel .sch-body{fill:var(--acc-bg)}
#stageSch .sch-glow{pointer-events:none}
#stageSch .sch-nc{fill:none;stroke:var(--mut);stroke-width:1.25;stroke-linecap:round}
#stage.flow.live .wire .w-flow{opacity:var(--wo,.55);animation-duration:var(--wd,.9s);animation-direction:var(--wdir,normal)}
@media (prefers-reduced-motion:reduce){
  #stage.flow.live .w-flow{animation:none!important;opacity:.35}
  body.view3d #stage3d{/* still render, orbit idle disabled in JS */}
}
/* ===== MSO-4 instrument suite (js/scope.js) ===== */
#tab-scope{padding:0;overflow:hidden}
.inst{--ic:#22d3ee;--ib:#05090f;--il:rgba(110,190,230,.16);display:flex;flex-direction:column;flex:1;min-height:0;background:linear-gradient(180deg,#060b12,#03060a);color:#cfe3f5;font-family:var(--mono);position:relative}
.inst-top{display:flex;align-items:center;gap:6px;padding:6px 10px;border-bottom:1px solid var(--il);flex-wrap:wrap;background:linear-gradient(180deg,rgba(34,211,238,.06),transparent)}
.inst-brand{display:flex;align-items:baseline;gap:8px;margin-right:6px}.inst-brand b{font-size:13px;letter-spacing:.18em;color:#e8f6ff;text-shadow:0 0 10px rgba(34,211,238,.6)}.inst-brand i{font-style:normal;font-size:9.5px;letter-spacing:.16em;color:#5f86a3}
.inst-sr{font-size:10px;color:#6f93ad;letter-spacing:.06em}.inst-sp{flex:1}.ivs{width:1px;height:18px;background:var(--il);margin:0 2px}
.inst .ib{height:24px;padding:0 9px;font:600 10px var(--mono);letter-spacing:.12em;background:rgba(8,16,26,.9);border:1px solid var(--il);color:#9fc0d8;border-radius:2px;clip-path:polygon(5px 0,100% 0,100% calc(100% - 5px),calc(100% - 5px) 100%,0 100%,0 5px)}
.inst .ib:hover{color:#fff;border-color:var(--ic)}.inst .ib.on{color:#031016;background:var(--ic);border-color:var(--ic);box-shadow:0 0 14px rgba(34,211,238,.5)}
.inst .ib.rs{color:#6dff8a;border-color:rgba(109,255,138,.45);min-width:86px;justify-content:center}.inst .ib.rs.stop{color:#ff6a6a;border-color:rgba(255,90,90,.55);box-shadow:inset 0 0 12px rgba(255,90,90,.2)}
.inst .ib[data-a=probe].on{background:#ff9f1a;border-color:#ff9f1a;box-shadow:0 0 16px rgba(255,159,26,.6);animation:instPulse 1s infinite}
@keyframes instPulse{50%{box-shadow:0 0 4px rgba(255,159,26,.3)}}
.inst-body{display:flex;flex:1;min-height:0}
.inst-screen{flex:1;min-width:0;position:relative;padding:6px}
#scopeCv{width:100%;height:100%;display:block;border-radius:3px;box-shadow:inset 0 0 0 1px rgba(110,190,230,.12),0 0 40px rgba(0,0,0,.6);cursor:crosshair;touch-action:none}
.inst-cur{position:absolute;right:14px;top:34px;display:flex;flex-direction:column;gap:1px;padding:6px 8px;background:rgba(2,8,14,.82);border:1px solid var(--il);border-left:2px solid #ff9f1a;font-size:10.5px;pointer-events:none;backdrop-filter:blur(6px)}
.inst-cur span{display:flex;justify-content:space-between;gap:12px}.inst-cur b{color:#7d9cb6;font-weight:600}
.inst-side{width:236px;flex:none;display:flex;flex-direction:column;gap:6px;padding:6px 8px 6px 0;overflow:auto}
.isec{border:1px solid var(--il);background:rgba(6,12,20,.8);padding:6px 8px;position:relative}.isec.grow{flex:1;min-height:0;overflow:auto}
.isec::before{content:'';position:absolute;left:-1px;top:-1px;width:8px;height:8px;border-left:2px solid var(--ic);border-top:2px solid var(--ic)}
.ish{font-size:9.5px;letter-spacing:.2em;color:#5f86a3;font-weight:700;margin-bottom:5px}.ish small{color:#3f6077;letter-spacing:.05em;font-weight:500}
.irow{display:flex;align-items:center;gap:5px;margin:3px 0;font-size:10px;color:#7d9cb6}.irow select{flex:1;height:24px;font:600 11px var(--mono);background-color:#03070c;border-color:var(--il);color:#e8f6ff}.irow input[type=range]{flex:1;accent-color:var(--ic);height:16px;padding:0;background:none;border:0}.irow b{min-width:58px;text-align:right;color:#e8f6ff;font-size:10.5px}
.inst .ik{width:24px;height:24px;padding:0;justify-content:center;background:#03070c;border:1px solid var(--il);color:#cfe3f5;font:700 13px var(--mono)}
.iseg{display:flex;flex:1}.iseg.w{margin:3px 0}.iseg button{flex:1;height:24px;justify-content:center;font:700 10px var(--mono);letter-spacing:.1em;background:#03070c;border:1px solid var(--il);color:#7d9cb6;border-radius:0}.iseg button.on{background:rgba(34,211,238,.18);color:#e8f6ff;border-color:var(--ic)}
.imeas{display:flex;flex-direction:column;gap:6px;font-size:10px}.im{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:1px 6px;border-left:2px solid var(--c);padding-left:6px}.im b{grid-column:1/-1;color:var(--c);letter-spacing:.14em;text-shadow:0 0 8px var(--c)}.im span{color:#5f86a3}.im i{font-style:normal;color:#e8f6ff;text-align:right}
.inst-ch{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;padding:0 8px 8px}
.ich{border:1px solid var(--il);background:rgba(6,12,20,.85);padding:5px 7px;opacity:.55;cursor:pointer;position:relative;transition:opacity .15s,border-color .15s}.ich.on{opacity:1}.ich.sel{border-color:var(--c);box-shadow:0 0 0 1px var(--c) inset,0 0 18px color-mix(in srgb,var(--c) 25%,transparent)}
.ich::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--c);box-shadow:0 0 10px var(--c)}
.ich-h{display:flex;align-items:center;gap:6px;font-size:10.5px}.ich-h b{color:var(--c);letter-spacing:.1em}.ich-src{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9fc0d8}
.ich button{height:20px;min-width:20px;padding:0 4px;justify-content:center;background:#03070c;border:1px solid var(--il);color:#9fc0d8;font:700 11px var(--mono);border-radius:2px}
.ich-r{display:flex;align-items:center;gap:3px;margin-top:4px}.ich-r select{height:20px;flex:1;min-width:0;font:600 10px var(--mono);padding:0 18px 0 5px;background-color:#03070c;border-color:var(--il);color:#e8f6ff;background-position:right 5px center}.ich-p{font-size:9px;color:#5f86a3;margin-left:3px}
.ich-v{font-size:17px;font-weight:600;color:#fff;margin-top:3px;text-shadow:0 0 12px var(--c);letter-spacing:.02em}
.inst-la{border-top:1px solid var(--il);padding:4px 8px 8px;display:flex;flex-direction:column;gap:4px}.inst-la[hidden]{display:none}
.la-bar{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:10px;color:#7d9cb6}.la-bar .ish{margin:0}.la-bar select{height:20px;font:600 10px var(--mono);padding:0 16px 0 4px;background-color:#03070c;border-color:var(--il);color:#cfe3f5;background-position:right 4px center}
#laCv{width:100%;height:150px;display:block;border:1px solid var(--il)}
body:not(.m) #dock:has(#tab-scope.on){height:max(var(--dockH),min(540px,58vh))}
body.probe-armed #stage{cursor:crosshair}body.probe-armed #stage .pin,body.probe-armed #stage .wire{cursor:crosshair}
body.probe-armed #stageWrap{box-shadow:inset 0 0 0 2px #ff9f1a,inset 0 0 60px rgba(255,159,26,.18)}
/* inspector probe buttons */
.pins td.pacts{white-space:nowrap;text-align:right}.pins .pa{height:20px;width:22px;padding:0;justify-content:center;font-size:11px;background:transparent;border-color:transparent;color:var(--mut)}.pins .pa:hover{color:#ffd84a;border-color:var(--line2);background:var(--l3)}
.probe-row .probe-b{font-family:var(--mono);font-size:11px;letter-spacing:.04em}
/* telemetry strip */
.telstrip{position:absolute;left:12px;bottom:12px;z-index:6;display:flex;align-items:stretch;gap:6px;padding:5px 6px;background:rgba(3,7,12,.82);border:1px solid rgba(110,190,230,.2);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-family:var(--mono);box-shadow:0 8px 30px rgba(0,0,0,.45);max-width:calc(100% - 260px)}
.telstrip[hidden]{display:none}
.tel-h{writing-mode:vertical-rl;transform:rotate(180deg);font-size:8.5px;letter-spacing:.22em;color:#22d3ee;font-weight:700;text-shadow:0 0 8px rgba(34,211,238,.6)}
.tel-i{display:flex;align-items:center;gap:6px;padding:0 4px 0 7px;border-left:2px solid var(--c);position:relative}
.tel-l{display:flex;flex-direction:column;min-width:76px}.tel-n{font-size:9.5px;color:#7d9cb6;max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tel-v{font-size:13px;font-weight:600;color:#fff;text-shadow:0 0 10px var(--c)}
.tel-i canvas{width:150px;height:30px}
.tel-i button{height:16px;width:16px;padding:0;justify-content:center;font-size:11px;background:transparent;border:0;color:#5f86a3}.tel-i button:hover{color:#fff}
[data-theme=light] .telstrip{background:rgba(3,7,12,.88)}

/* 3D safety: 2D/3D toggle + Exit 3D always above the WebGL canvas; dark backdrop, never white */
body.view3d #stageWrap{background:#07090d}
body.view3d .canvas-tools,body.view3d .zoom-tools{z-index:12}
.exit3d{display:none;position:absolute;top:12px;right:12px;z-index:13;height:34px;padding:0 16px;border-radius:17px;border:1px solid rgba(34,211,238,.55);background:rgba(4,8,14,.82);color:#e6fdff;font:600 13px/34px var(--mono,ui-monospace,monospace);letter-spacing:.06em;cursor:pointer;box-shadow:0 6px 20px rgba(0,0,0,.45);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.exit3d:hover{background:rgba(34,211,238,.18)}
body.view3d .exit3d{display:block}

/* Header chip: names the current view. Off the 2D editor it is also the kill-switch back to 2D.
   It stays an outline, never a filled "selected tab", so "2D" is not read as the mode you are in. */
.force2d{position:relative;z-index:2147483647;flex:0 0 auto;height:26px;min-width:38px;padding:0 10px;margin:0 6px;border-radius:13px;border:1px solid rgba(34,211,238,.45);background:#0b1118;color:#cfefff;font:700 12px/24px var(--mono,ui-monospace,monospace);letter-spacing:.04em;cursor:pointer;white-space:nowrap}
.force2d:hover{background:#12202b}
body.view3d .force2d,body.viewsch .force2d{background:#0b1118;color:#e7fbff;border-color:rgba(34,211,238,.8)}
.view3d-load{position:absolute;inset:0;z-index:11;display:flex;align-items:center;justify-content:center;background:#07090d;pointer-events:none}
.view3d-load[hidden]{display:none!important}
.view3d-load-card{display:flex;align-items:center;gap:12px;padding:14px 18px;border:1px solid rgba(34,211,238,.45);border-radius:14px;background:rgba(8,12,18,.94);color:#e7fbff;font:600 14px/1.2 var(--mono,ui-monospace,monospace);letter-spacing:.03em;box-shadow:0 12px 40px rgba(0,0,0,.5)}
.view3d-spin{width:18px;height:18px;border-radius:50%;border:2px solid rgba(207,239,255,.28);border-top-color:#22d3ee;animation:view3dspin .8s linear infinite;flex:0 0 auto}
@keyframes view3dspin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.view3d-spin{animation:none}}
/* phones / touch: no 3D entry at all for this hotfix */
body.no3d #bView3d,body.no3d .exit3d,body.no3d #stage3d{display:none!important}
/* Staging banner. Hidden until the server marks <html data-cl-env="staging">, so a live page keeps its layout.
   Height is fixed (the sentence wraps inside it; the page below does not move).
   #fff4d4 on #4a2f00 is 11.28:1 in both themes. The link uses that pair, inverted on hover. */
#stageBanner{display:none}
html[data-cl-env=staging]{--stage-h:56px}
html[data-cl-env=staging] #stageBanner{display:flex;align-items:center;justify-content:center;box-sizing:border-box;height:var(--stage-h);min-height:var(--stage-h);max-height:var(--stage-h);padding:6px 12px;background:#4a2f00;color:#fff4d4;font:600 13px/1.3 system-ui,-apple-system,'Segoe UI',sans-serif;text-align:center}
html[data-cl-env=staging] #stageBanner .stage-copy{display:block;max-width:100%;pointer-events:none}
html[data-cl-env=staging] #stageBanner a{color:#fff4d4;text-decoration:underline;text-underline-offset:2px;pointer-events:auto;border-radius:2px;white-space:nowrap}
html[data-cl-env=staging] #stageBanner a:hover,html[data-cl-env=staging] #stageBanner a:hover:focus-visible{color:#4a2f00;background:#fff4d4}
html[data-cl-env=staging] #stageBanner a:focus-visible{outline:2px solid #fff4d4;outline-offset:2px}
html[data-cl-env=staging] #stageBanner a:active,html[data-cl-env=staging] #stageBanner a:active:hover,html[data-cl-env=staging] #stageBanner a:active:focus-visible,html[data-cl-env=staging] #stageBanner a:active:hover:focus-visible{color:#fff4d4;background:#241500}
html[data-cl-env=staging] #main{height:calc(100% - 70px - var(--stage-h))}
@media (max-width:360px){
  html[data-cl-env=staging] #stageBanner{font-size:12px;padding:4px 8px}
}
