.ic{flex:none;width:20px;height:20px;display:inline-flex}.ic svg{width:100%;height:100%}.ic-16{width:16px;height:16px}.ic-18{width:18px;height:18px}.ic-24{width:24px;height:24px}.btn{justify-content:center;align-items:center;gap:var(--s-2);min-height:var(--target);padding:0 var(--s-4);border-radius:var(--r-sm);font-size:var(--t-15);letter-spacing:-.005em;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;transition:background var(--dur) var(--ease), border-color var(--dur) var(--ease), color var(--dur) var(--ease), opacity var(--dur);background:var(--surface-2);color:var(--text);border:1px solid #0000;border-color:var(--stroke-2);font-weight:600;display:inline-flex}.btn:hover{background:var(--surface-3)}.btn:active{transform:translateY(.5px)}.btn[disabled],.btn.is-disabled{opacity:.4;pointer-events:none}.btn-primary{background:var(--accent);color:var(--accent-ink);border-color:#0000}.btn-primary:hover{background:#f4ae62}.btn-ghost{color:var(--text-2);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--surface-2);color:var(--text)}.btn-quiet{border-color:var(--stroke-2);background:0 0}.btn-danger{background:var(--danger-soft);color:var(--danger);border-color:#ff5a5f4d}.btn-block{width:100%}.btn-sm{min-height:32px;padding:0 var(--s-3);font-size:var(--t-13);border-radius:8px}.btn-lg{min-height:52px;font-size:var(--t-17);border-radius:var(--r-md)}.btn-icon{width:var(--target);min-width:var(--target);padding:0}.btn-icon.btn-sm{width:32px;min-width:32px}.btn .ic{width:18px;height:18px}.kbd{font-family:var(--font-mono);color:var(--text-2);border:1px solid var(--stroke-2);background:var(--surface);border-bottom-width:2px;border-radius:5px;padding:3px 5px;font-size:11px;line-height:1}.chip{border:1px solid var(--stroke-2);background:var(--surface);height:32px;color:var(--text-2);font-size:var(--t-13);white-space:nowrap;cursor:pointer;transition:background var(--dur), color var(--dur), border-color var(--dur);border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-weight:500;display:inline-flex}.chip:hover{color:var(--text);border-color:var(--stroke-3)}.chip.is-on,.chip[aria-pressed=true]{background:var(--text);color:var(--bg);border-color:var(--text)}.chip .count{font-family:var(--font-mono);color:inherit;opacity:.65;font-size:11px}.chip .ic{width:16px;height:16px}@media (width<=767px){.chip{height:36px}}.chip-state{cursor:default;height:24px;font-size:var(--t-12);gap:5px;padding:0 8px;font-weight:600}.chip-state:before{content:"";background:currentColor;border-radius:50%;width:6px;height:6px}.chip-ok{color:var(--success);background:var(--success-soft);border-color:#0000}.chip-warn{color:var(--warning);background:var(--warning-soft);border-color:#0000}.chip-bad{color:var(--danger);background:var(--danger-soft);border-color:#0000}.chip-info{color:var(--info);background:var(--info-soft);border-color:#0000}.chip-neutral{color:var(--text-2);background:var(--surface-2);border-color:#0000}.chip-pro{cursor:default;height:20px;font-family:var(--font-mono);letter-spacing:.04em;color:var(--text-2);border-color:var(--stroke-2);background:0 0;border-radius:5px;gap:4px;padding:0 6px;font-size:11px;font-weight:600}.chip-pro .ic{width:12px;height:12px}.spec-chip{font-family:var(--font-mono);font-size:var(--t-12);color:var(--text-2);border:1px solid var(--stroke-2);white-space:nowrap;background:var(--surface);border-radius:6px;flex:none;align-items:center;gap:4px;padding:2px 7px;font-weight:500;display:inline-flex}.spec-chip.is-live{color:var(--text)}.spec-chip.is-ok{color:var(--success);border-color:#3dd68c59}.spec-chip.is-bad{color:var(--danger);border-color:#ff5a5f59}.spec-chip.is-warn{color:var(--warning);border-color:#f5c45159}.seg{background:var(--surface);border:1px solid var(--stroke-2);border-radius:12px;align-items:stretch;gap:2px;padding:3px;display:inline-flex}.seg>button{appearance:none;color:var(--text-2);cursor:pointer;min-height:30px;font-size:var(--t-13);white-space:nowrap;transition:background var(--dur), color var(--dur);background:0 0;border:0;border-radius:9px;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-weight:500;display:inline-flex}.seg>button:hover{color:var(--text)}.seg>button[aria-pressed=true]{background:var(--surface-3);color:var(--text);box-shadow:0 0 0 1px var(--stroke-2) inset}.seg>button .ic{width:16px;height:16px}.seg.seg-mono>button{font-family:var(--font-mono);font-size:var(--t-12);padding:0 10px}@media (width<=767px){.seg>button{min-height:38px}}.seg.seg-block{display:flex}.seg.seg-block>button{flex:1}.card{background:var(--surface);border:1px solid var(--stroke);border-radius:var(--r-md)}.card-pad{padding:var(--s-4)}.divider{background:var(--stroke);border:0;height:1px;margin:0}.row{align-items:center;gap:var(--s-2);display:flex}.col{flex-direction:column;display:flex}.grow{flex:1;min-width:0}.stack-4>*+*{margin-top:var(--s-1)}.stack-8>*+*{margin-top:var(--s-2)}.stack-12>*+*{margin-top:var(--s-3)}.stack-16>*+*{margin-top:var(--s-4)}.stack-24>*+*{margin-top:var(--s-5)}.section-label{font-size:var(--t-12);letter-spacing:.08em;text-transform:uppercase;color:var(--text-2);align-items:center;gap:var(--s-2);font-weight:600;display:flex}.section-label .aside{letter-spacing:0;text-transform:none;color:var(--text-3);font-weight:500;font-family:var(--font-mono);margin-left:auto}.conn-list{flex-direction:column;display:flex}.conn-row{align-items:center;gap:var(--s-3);min-height:var(--target);border-top:1px solid var(--stroke);padding:10px 0;display:flex}.conn-list>.conn-row:first-child{border-top:0}.conn-row.is-selectable{cursor:pointer;border-radius:8px;margin:0 -6px;padding-left:6px;padding-right:6px}.conn-row.is-selectable:hover{background:var(--surface-2)}.conn-row.is-selected{background:var(--accent-soft)}.conn-badge{width:24px;height:24px;font-family:var(--font-mono);font-size:var(--t-12);color:#fff;background:var(--surface-3);border-radius:7px;flex:none;place-items:center;font-weight:600;display:grid;box-shadow:inset 0 0 0 1px #ffffff1f}.conn-badge[data-color=red]{background:var(--wire-red)}.conn-badge[data-color=black]{background:#0b0b0c;box-shadow:inset 0 0 0 1px #ffffff59}.conn-badge[data-color=yellow]{background:var(--wire-yellow);color:#1a1404}.conn-badge[data-color=green]{background:var(--wire-green)}.conn-badge[data-color=blue]{background:var(--wire-blue)}.conn-badge[data-color=orange]{background:var(--wire-orange);color:#1a0e04}.conn-badge[data-color=white]{background:var(--wire-white);color:#141414}.conn-badge[data-color=violet]{background:var(--wire-violet)}.conn-badge[data-color=neutral]{background:var(--surface-3);color:var(--text)}.conn-text{flex:1;min-width:0}.conn-title{font-size:var(--t-15);font-weight:600;line-height:1.3;display:block}.conn-sub{font-size:var(--t-13);color:var(--text-2);margin-top:1px;line-height:1.35;display:block}.callout{background:var(--surface-2);border-radius:4px var(--r-sm) var(--r-sm) 4px;padding:var(--s-3) var(--s-4) var(--s-3) calc(var(--s-4) + 3px);font-size:var(--t-13);color:var(--text-2);position:relative}.callout:before{content:"";background:var(--accent);border-radius:3px;width:3px;position:absolute;top:0;bottom:0;left:0}.callout b,.callout strong,.callout .callout-title{color:var(--text);font-weight:600}.callout .callout-title{font-size:var(--t-15);margin-bottom:2px;display:block}.callout-ok:before{background:var(--success)}.callout-bad:before{background:var(--danger)}.callout-warn:before{background:var(--warning)}.callout-info:before{background:var(--info)}.callout-neutral:before{background:var(--stroke-3)}.in-label{white-space:nowrap;pointer-events:none;font-family:var(--font-mono);color:var(--text);border:1px solid var(--stroke-2);background:#0f1012e6;border-radius:999px;align-items:center;gap:6px;padding:3px 9px 3px 7px;font-size:11.5px;font-weight:500;line-height:1.25;display:inline-flex;position:absolute;top:0;left:0;transform:translate(-50%,-50%);box-shadow:0 2px 8px #00000059}.in-label .dot{background:var(--text-2);border-radius:50%;flex:none;width:7px;height:7px}.in-label .k{color:var(--text-2)}.in-label.is-ok .v{color:var(--success)}.in-label.is-bad{border-color:#ff5a5f8c}.in-label.is-bad .v{color:var(--danger)}.in-label.is-warn .v{color:var(--warning)}.in-label.is-sel{border-color:var(--accent-line)}.in-label.is-interactive{pointer-events:auto;cursor:pointer}.gesture-hint{border:1px solid var(--stroke-2);height:32px;font-size:var(--t-13);color:var(--text-2);white-space:nowrap;pointer-events:none;background:#0f1012db;border-radius:999px;align-items:center;gap:8px;padding:0 12px 0 8px;display:inline-flex}.gesture-hint .ic{width:18px;height:18px;color:var(--text)}.gesture-hint .pulse{display:inline-flex;position:relative}.gesture-hint .pulse:after{content:"";border:1px solid var(--text-2);animation:hint-pulse 1.8s var(--ease) infinite;opacity:0;border-radius:50%;position:absolute;inset:-4px}@keyframes hint-pulse{0%{opacity:.8;transform:scale(.6)}to{opacity:0;transform:scale(1.5)}}.lcd{border-radius:var(--r-sm);border:1px solid var(--stroke-2);font-family:var(--font-mono);color:#e8ece6;background:#0b0c0b;padding:8px 12px 10px;position:relative;overflow:hidden;box-shadow:inset 0 1px #ffffff0a,inset 0 0 24px #0009}.lcd-ann{letter-spacing:.06em;color:#e8ece647;gap:8px;min-height:14px;font-size:10.5px;display:flex}.lcd-ann .on{color:#e8ece6d9}.lcd-main{justify-content:flex-end;align-items:baseline;gap:6px;display:flex;position:relative}.lcd-digits{letter-spacing:.02em;font-size:34px;font-weight:500;line-height:1.1;position:relative}.lcd-digits .ghost{color:#e8ece60d;pointer-events:none;position:absolute;top:0;right:0}.lcd-digits .val{position:relative}.lcd-unit{color:#e8ece6cc;min-width:28px;font-size:15px}.lcd.is-off .val,.lcd.is-off .lcd-unit{opacity:0}.lcd.is-bad .val{color:var(--danger)}.lcd-sm .lcd-digits{font-size:22px}.lcd-sm .lcd-unit{min-width:22px;font-size:12px}.lcd-label{font-family:var(--font-ui);font-size:var(--t-12);color:var(--text-2)}.readout{border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--stroke);flex-direction:column;gap:2px;min-width:0;padding:10px 12px;display:flex}.readout .k{font-size:var(--t-12);color:var(--text-2);align-items:center;gap:6px;display:flex}.readout .v{font-family:var(--font-mono);font-size:var(--t-22);letter-spacing:-.01em;white-space:nowrap;font-weight:500}.readout .v small{font-size:var(--t-13);color:var(--text-2);margin-left:3px;font-weight:400}.readout.is-ok .v{color:var(--success)}.readout.is-bad .v{color:var(--danger)}.readout.is-warn .v{color:var(--warning)}.ring{flex:none;place-items:center;display:inline-grid;position:relative}.ring svg{transform:rotate(-90deg)}.ring .track{stroke:var(--surface-3)}.ring .bar{stroke:var(--accent);stroke-linecap:round;transition:stroke-dashoffset .6s var(--ease)}.ring.is-ok .bar{stroke:var(--success)}.ring.is-muted .bar{stroke:var(--text-2)}.ring .ring-label{font-family:var(--font-mono);font-size:var(--t-12);font-weight:600;position:absolute}.speed-toggle .lbl{font-size:var(--t-12);color:var(--text-3);align-items:center;padding:0 6px 0 8px;display:inline-flex}.sheet{z-index:30;height:calc(100% - var(--sheet-top-gap,56px));background:var(--surface);border-top:1px solid var(--stroke-2);border-radius:var(--r-lg) var(--r-lg) 0 0;transform:translateY(calc(100% - var(--sheet-h,160px)));transition:transform .32s var(--ease);touch-action:none;flex-direction:column;display:flex;position:absolute;bottom:0;left:0;right:0;box-shadow:0 -12px 32px #00000073}.sheet.is-dragging{transition:none}.sheet-grip{cursor:grab;touch-action:none;flex:none;place-items:center;height:24px;display:grid}.sheet-grip:before{content:"";background:var(--stroke-3);border-radius:3px;width:36px;height:5px}.sheet-body{overscroll-behavior:contain;min-height:0;padding:0 var(--s-4) calc(var(--s-4) + var(--safe-bottom));touch-action:pan-y;flex:1;overflow-y:auto}.sheet[data-detent=peek] .sheet-body{overflow:hidden}.scrim{z-index:80;opacity:0;pointer-events:none;transition:opacity .22s var(--ease);background:#0505069e;position:fixed;inset:0}.scrim.is-open{opacity:1;pointer-events:auto}.toast-host{left:50%;bottom:calc(24px + var(--safe-bottom));z-index:120;pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;transform:translate(-50%)}@media (width<=767px){.toast-host{bottom:auto;top:calc(var(--safe-top) + 64px)}}.toast{max-width:min(92vw,420px);color:var(--text);font-size:var(--t-13);box-shadow:var(--shadow-float);animation:toast-in .22s var(--ease);background:#26272c;border-radius:12px;align-items:center;gap:10px;padding:10px 14px;display:flex}.toast .ic{width:18px;height:18px}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.cmdk{z-index:100;background:var(--surface);border-radius:var(--r-md);width:min(620px,92vw);box-shadow:0 24px 64px #0009, 0 0 0 1px var(--stroke-2);display:none;position:fixed;top:14vh;left:50%;overflow:hidden;transform:translate(-50%)}.cmdk.is-open{animation:toast-in .16s var(--ease);display:block}.cmdk-input{border-bottom:1px solid var(--stroke);align-items:center;gap:10px;padding:14px 16px;display:flex}.cmdk-input input{color:var(--text);font:inherit;font-size:var(--t-17);background:0 0;border:0;outline:0;flex:1}.cmdk-input input::placeholder{color:var(--text-3)}.cmdk-list{max-height:50vh;padding:6px;overflow-y:auto}.cmdk-group{font-size:var(--t-12);color:var(--text-3);letter-spacing:.06em;text-transform:uppercase;padding:10px 10px 4px;font-weight:600}.cmdk-item{cursor:pointer;height:40px;color:var(--text-2);font-size:var(--t-15);border-radius:8px;align-items:center;gap:12px;padding:0 10px;display:flex}.cmdk-item .ic{width:18px;height:18px}.cmdk-item .hint{font-family:var(--font-mono);font-size:var(--t-12);color:var(--text-3);margin-left:auto}.cmdk-item.is-active{background:var(--surface-2);color:var(--text)}.cmdk-foot{border-top:1px solid var(--stroke);font-size:var(--t-12);color:var(--text-3);gap:16px;padding:10px 16px;display:flex}.app{min-height:100dvh;display:flex}.app-main{flex:1;min-width:0}.statusbar{display:none}html.is-framed .statusbar{z-index:200;pointer-events:none;height:47px;color:var(--text);letter-spacing:-.01em;justify-content:space-between;align-items:flex-end;padding:0 28px 13px 36px;font-size:16px;font-weight:600;display:flex;position:fixed;top:0;left:0;right:0}html.is-framed .statusbar .sb-icons{align-items:center;gap:6px;display:flex}html.is-framed .statusbar .sb-icons .ic{width:17px;height:17px}html.is-framed .homebar{z-index:200;pointer-events:none;background:#edededd9;border-radius:3px;width:134px;height:5px;display:block;position:fixed;bottom:8px;left:50%;transform:translate(-50%)}.homebar{display:none}.sidebar{border-right:1px solid var(--stroke);background:var(--bg);flex-direction:column;flex:none;gap:16px;width:248px;height:100dvh;padding:16px 12px;display:flex;position:sticky;top:0}.brand{letter-spacing:.04em;font-weight:700;font-size:var(--t-15);align-items:center;gap:10px;padding:4px 8px;display:flex}.brand-mark{object-fit:contain;width:30px;height:24px;display:block}.brand-logo{width:auto;height:32px;display:block}.search-btn{border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--stroke);height:36px;color:var(--text-3);font-size:var(--t-13);cursor:pointer;align-items:center;gap:8px;width:100%;padding:0 10px;display:flex}.search-btn:hover{border-color:var(--stroke-2);color:var(--text-2)}.search-btn .kbd{margin-left:auto}.nav{flex-direction:column;gap:2px;display:flex}.nav a{height:38px;color:var(--text-2);font-weight:500;font-size:var(--t-15);border-radius:9px;align-items:center;gap:12px;padding:0 10px;display:flex}.nav a:hover{background:var(--surface);color:var(--text)}.nav a.is-active{background:var(--surface-2);color:var(--text);box-shadow:inset 0 0 0 1px var(--stroke)}.nav a .ic{width:18px;height:18px}.nav a .meta{font-family:var(--font-mono);color:var(--text-3);margin-left:auto;font-size:11px}.sidebar-foot{flex-direction:column;gap:8px;margin-top:auto;display:flex}.rail{border-right:1px solid var(--stroke);background:var(--bg);flex-direction:column;flex:none;align-items:center;gap:6px;width:60px;padding:12px 0;display:flex}.rail a{width:44px;height:44px;color:var(--text-2);border-radius:10px;place-items:center;display:grid;position:relative}.rail a:hover{background:var(--surface);color:var(--text)}.rail a.is-active{background:var(--surface-2);color:var(--text);box-shadow:inset 0 0 0 1px var(--stroke)}.rail .ic{width:20px;height:20px}.rail .brand-mark{margin-bottom:10px}.tabbar{z-index:40;height:calc(56px + var(--safe-bottom));padding-bottom:var(--safe-bottom);border-top:1px solid var(--stroke);backdrop-filter:blur(20px)saturate(140%);background:#131416f0;display:none;position:fixed;bottom:0;left:0;right:0}:root[data-theme=light] .tabbar{background:#f2f1ecf0}.tabbar a{text-align:center;min-width:0;color:var(--text-3);flex-direction:column;flex:1;justify-content:flex-start;align-items:center;gap:2px;min-height:44px;padding-top:4px;font-size:11px;font-weight:500;line-height:1.1;display:flex}.tabbar a .ic{width:22px;height:22px}.tabbar a.is-active{color:var(--text)}@media (width<=767px){.sidebar,.rail{display:none}.tabbar{display:flex}.app.has-tabbar .app-main{padding-bottom:calc(64px + var(--safe-bottom))}}.page-head{padding:calc(var(--safe-top) + 12px) var(--s-4) var(--s-3);align-items:center;gap:var(--s-3);display:flex}.page-title{font-size:var(--t-28);letter-spacing:-.02em;font-weight:700;line-height:1.15}.page-sub{color:var(--text-2);font-size:var(--t-15);margin-top:4px}.topbar{align-items:center;gap:var(--s-3);height:56px;padding:0 var(--s-5);border-bottom:1px solid var(--stroke);background:var(--bg);z-index:20;display:flex;position:sticky;top:0}.crumbs{color:var(--text-2);font-size:var(--t-13);align-items:center;gap:6px;min-width:0;display:flex}.crumbs a:hover{color:var(--text)}.crumbs .ic{width:14px;height:14px;color:var(--text-3)}.crumbs .here{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}[data-tip]{position:relative}@media (hover:hover){[data-tip]:hover:after{content:attr(data-tip);color:var(--text);font-size:var(--t-12);white-space:nowrap;z-index:90;pointer-events:none;box-shadow:var(--shadow-float);font-weight:500;font-family:var(--font-ui);letter-spacing:0;text-transform:none;background:#2a2b30;border-radius:7px;padding:5px 8px;position:absolute;top:calc(100% + 8px);left:50%;transform:translate(-50%)}[data-tip-side=right][data-tip]:hover:after{top:50%;left:calc(100% + 8px);transform:translateY(-50%)}[data-tip-side=left][data-tip]:hover:after{top:50%;left:auto;right:calc(100% + 8px);transform:translateY(-50%)}[data-tip-side=top][data-tip]:hover:after{top:auto;bottom:calc(100% + 8px)}}.stage{border-radius:var(--r-md);border:1px solid var(--stroke);isolation:isolate;background:#121315;position:relative;overflow:hidden}.stage-tag{z-index:3;font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-2);border:1px dashed var(--stroke-3);background:#0f1012b3;border-radius:6px;align-items:center;gap:6px;padding:3px 7px;font-size:11px;display:inline-flex;position:absolute;top:12px;left:12px}.stage-tag .ic{width:13px;height:13px}:root[data-theme=light] .stage{background:radial-gradient(120% 95% at 50% 32%,#fbfaf7 0%,#ecebe6 62%,#e1e0da 100%)}:root[data-theme=light] .stage-tag{background:#f2f1ecd1}:root[data-theme=light] .in-label{background:#faf9f5f0;box-shadow:0 2px 8px #0000001f}.stage-floor{background:var(--stroke-2);height:1px;position:absolute;bottom:18%;left:8%;right:8%}.stage svg.drawing{width:100%;height:calc(100% - 112px);position:absolute;top:44px;left:0}.stage .in-label{z-index:4}.leader{stroke:#ededed73;stroke-width:1px;fill:none;vector-effect:non-scaling-stroke}.leader-dot{fill:var(--text)}.scroll-y{scrollbar-width:thin;scrollbar-color:var(--surface-3) transparent;overflow-y:auto}.scroll-y::-webkit-scrollbar{width:8px}.scroll-y::-webkit-scrollbar-thumb{background:var(--surface-3);border-radius:4px}