:root{--bg: #11141a;--panel: rgba(22, 26, 34, .92);--panel-border: rgba(255, 255, 255, .08);--text: #e8ebef;--text-dim: #9aa3ad;--accent: #1794d1;--accent-soft: rgba(23, 148, 209, .16);--ok: #2fbf71;--warn: #e6a817;--err: #e5484d;--radius: 12px}*{box-sizing:border-box}html,body{margin:0;height:100%;overflow:hidden}body{font-family:Segoe UI,system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--text);font-size:13px}#app{position:fixed;inset:0}#app canvas{display:block}.hidden{display:none!important}body.embed #statusbar{display:none}h3{margin:14px 0 8px;font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)}.btn{background:#262c36;color:var(--text);border:1px solid var(--panel-border);border-radius:8px;padding:6px 12px;cursor:pointer;font-size:12px;transition:background .15s}.btn:hover{background:#303845}.btn.small{padding:3px 9px;font-size:11px}.btn.danger:hover{background:#4a2528;border-color:var(--err)}.btn.attention{border-color:var(--warn);box-shadow:0 0 0 2px #e6a81740}input[type=range]{-webkit-appearance:none;appearance:none;flex:1;height:4px;border-radius:2px;background:#333b47;outline:none}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:14px;height:14px;border-radius:50%;background:var(--accent);cursor:pointer;border:2px solid #0d1116}#pendant{position:fixed;top:12px;right:12px;bottom:44px;width:350px;z-index:10;transition:transform .25s,bottom .25s}#pendant.pip-clear{bottom:268px}#pendant.collapsed{transform:translate(312px)}#pendant.collapsed .pendant-toggle{transform:rotate(180deg)}#pendant.collapsed .pendant-shell{background:none;border-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:none}#pendant.collapsed .pendant-shell>:not(.pendant-head),#pendant.collapsed .pendant-head>:not(.brand),#pendant.collapsed .brand>:not(.pendant-toggle){display:none}#pendant.collapsed .pendant-head{border-bottom:none}#pendant.collapsed .pendant-toggle{pointer-events:auto}.pendant-toggle{background:none;border:none;color:var(--text-dim);font-size:16px;line-height:1;padding:0 4px 2px 0;cursor:pointer;transition:transform .25s}.pendant-toggle:hover{color:var(--text)}.pendant-shell{display:flex;flex-direction:column;height:100%;background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);overflow:hidden}.pendant-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--panel-border)}.brand{display:flex;align-items:center;gap:7px;font-weight:600}.brand-dot{width:9px;height:9px;border-radius:50%;background:var(--accent)}.brand-sub{color:var(--text-dim);font-weight:400;font-size:11px}.head-right{display:flex;align-items:center;gap:8px}.state-pill{font-size:10px;font-weight:700;letter-spacing:.06em;padding:3px 8px;border-radius:20px;background:var(--accent-soft)}.state-pill.ok{color:var(--ok);background:#2fbf7124}.state-pill.warn{color:var(--warn);background:#e6a81729}.state-pill.err{color:var(--err);background:#e5484d29}.estop{width:40px;height:40px;border-radius:50%;border:3px solid #7d1a1d;background:radial-gradient(circle at 35% 30%,#ff5a57,#c22125 65%);color:#fff;font-size:8px;font-weight:800;cursor:pointer;box-shadow:0 2px 8px #00000080}.estop:active{transform:scale(.94)}.speed-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid var(--panel-border)}.speed-row .lbl{color:var(--text-dim);font-size:11px;width:38px}.speed-val{width:36px;text-align:right;font-variant-numeric:tabular-nums}.tabbar{display:flex;border-bottom:1px solid var(--panel-border)}.tab{flex:1;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-dim);padding:9px 0;font-size:12px;cursor:pointer}.tab.active{color:var(--text);border-bottom-color:var(--accent)}.pane-wrap{flex:1;overflow:hidden;display:flex;flex-direction:column}.pane{display:none}.pane.active{display:block;flex:1;min-height:0;overflow-y:auto;padding:4px 12px 16px}.pane.active::-webkit-scrollbar,.cat-body::-webkit-scrollbar{width:8px}.pane.active::-webkit-scrollbar-thumb,.cat-body::-webkit-scrollbar-thumb{background:#333b47;border-radius:4px}.pane.active::-webkit-scrollbar-track,.cat-body::-webkit-scrollbar-track{background:transparent}.jog-row,.ctl-row{display:flex;align-items:center;gap:7px;margin:5px 0}.jname{width:74px;font-size:12px;color:var(--text-dim);flex-shrink:0}.jval{width:58px;text-align:right;font-variant-numeric:tabular-nums;font-size:12px}.jval.limit{color:var(--err)}.ro-val{font-variant-numeric:tabular-nums;font-size:12px}button.jog{width:30px;height:28px;border-radius:7px;border:1px solid var(--panel-border);background:#262c36;color:var(--text);font-size:15px;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;flex-shrink:0}button.jog:hover{background:var(--accent-soft);border-color:var(--accent)}button.jog:active{background:var(--accent);color:#fff}.cart-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.cart-cell{display:flex;align-items:center;justify-content:space-between;gap:4px;background:#ffffff08;border:1px solid var(--panel-border);border-radius:8px;padding:5px 6px}.cart-lbl{font-size:11px;color:var(--text-dim)}.tcp-readout{margin-top:10px;padding:8px 10px;background:#ffffff0a;border-radius:8px;font-size:11px;font-variant-numeric:tabular-nums;color:var(--text-dim);line-height:1.5}.row-btns{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}.stop-reason{margin:8px 0 2px;padding:8px 10px;border-radius:8px;background:#e5484d1f;border:1px solid rgba(229,72,77,.4);color:#ff9a9d;font-size:12px}button.toggle{min-width:52px;padding:5px 10px;border-radius:20px;border:1px solid var(--panel-border);background:#262c36;color:var(--text-dim);font-size:11px;font-weight:700;cursor:pointer}button.toggle.on{background:#2fbf712e;border-color:var(--ok);color:var(--ok)}.empty{padding:12px;color:var(--text-dim);font-size:12px;line-height:1.55;background:#ffffff08;border-radius:8px;margin-top:10px}.wp-list{margin-top:10px;display:flex;flex-direction:column;gap:5px}.wp-item{display:flex;align-items:center;gap:8px;padding:6px 9px;background:#ffffff0a;border-radius:8px;font-size:11px}.wp-q{flex:1;color:var(--text-dim);font-variant-numeric:tabular-nums}#pendant.wide{width:min(720px,calc(100vw - 24px))}#pendant.wide .code-editor{height:320px}#pendant.wide .code-console{height:200px}#pendant{transition:transform .25s,bottom .25s,width .25s}.code-toolbar{display:flex;align-items:center;flex-wrap:wrap;gap:7px;margin:2px 0 8px}.code-examples{background:#262c36;color:var(--text);border:1px solid var(--panel-border);border-radius:8px;padding:5px 8px;font-size:12px;cursor:pointer}.code-status{margin-left:auto;font-size:11px;color:var(--text-dim)}.code-editor{width:100%;height:200px;resize:vertical;background:#0d1116;color:#dce3ea;border:1px solid var(--panel-border);border-radius:8px;padding:8px 10px;font:12px/1.55 Consolas,Cascadia Mono,monospace;white-space:pre;overflow:auto;tab-size:4}.code-editor:focus{outline:none;border-color:var(--accent)}.code-banner{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding:7px 10px;background:var(--accent-soft);border:1px solid var(--accent);border-radius:8px;font-size:11.5px}.code-console{margin-top:8px;height:150px;overflow-y:auto;background:#0b0e12;border:1px solid var(--panel-border);border-radius:8px;padding:7px 10px;font:11px/1.55 Consolas,Cascadia Mono,monospace;color:#b8c4ce;overflow-wrap:anywhere}.code-console .err{color:#ff9a9d}.code-console .sys{color:#7e8b97;font-style:italic}.status-body{display:flex;flex-direction:column;gap:3px}.status-row{display:flex;justify-content:space-between;gap:8px;padding:4px 8px;background:#ffffff08;border-radius:6px;font-size:12px;font-variant-numeric:tabular-nums}.status-row .dim{color:var(--text-dim)}.about{color:var(--text-dim);font-size:12px;line-height:1.55}#catalogue{position:fixed;top:12px;left:12px;bottom:44px;width:270px;z-index:10;transition:transform .25s}#catalogue.collapsed{transform:translate(-238px)}#catalogue.collapsed .cat-toggle{transform:rotate(180deg)}#catalogue.collapsed .cat-shell{background:none;border-color:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:none}#catalogue.collapsed .cat-body{display:none}#catalogue.collapsed .cat-head{border-bottom:none}#catalogue.collapsed .cat-head>span{visibility:hidden}#catalogue.collapsed .cat-toggle{pointer-events:auto}.cat-shell{display:flex;flex-direction:column;max-height:100%;background:var(--panel);border:1px solid var(--panel-border);border-radius:var(--radius);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);overflow:hidden}.cat-head{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;font-weight:600;border-bottom:1px solid var(--panel-border)}.cat-toggle{background:none;border:none;color:var(--text-dim);font-size:16px;cursor:pointer;transition:transform .25s}.cat-body{overflow-y:auto;padding:2px 12px 14px}.cat-card{display:block;width:100%;text-align:left;background:#ffffff08;border:1px solid var(--panel-border);border-radius:10px;padding:9px 11px;margin-bottom:7px;color:var(--text);cursor:pointer;transition:border-color .15s,background .15s}.cat-card:hover,.cat-card.active{border-color:var(--accent);background:var(--accent-soft)}.cat-card-head{display:flex;justify-content:space-between;align-items:center}.cat-name{font-weight:600;font-size:12.5px}.cat-badge{display:none;font-size:9px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--accent)}.cat-card.active .cat-badge{display:inline}.cat-desc{color:var(--text-dim);font-size:11px;margin-top:3px;line-height:1.45}.cat-mass{color:var(--text-dim);font-size:10px;margin-top:4px}.cat-hint{color:var(--text-dim);font-size:10.5px;font-style:italic;margin:2px 0 10px}#statusbar{position:fixed;left:0;right:0;bottom:0;z-index:10;background:#0e1116f2;border-top:1px solid var(--panel-border)}.sb-inner{display:flex;align-items:center;gap:10px;padding:7px 16px;font-size:11.5px;font-variant-numeric:tabular-nums;color:var(--text-dim)}.sb-state{font-weight:700;letter-spacing:.04em}.sb-state.ok{color:var(--ok)}.sb-state.warn{color:var(--warn)}.sb-state.err{color:var(--err)}.sep{width:1px;height:14px;background:var(--panel-border)}.warn-text{color:var(--err)}#pip-frame{position:fixed;z-index:9;pointer-events:none;border:1px solid var(--accent);border-radius:2px}#pip-frame span{position:absolute;top:-18px;left:0;font-size:9px;font-weight:700;letter-spacing:.1em;color:var(--accent)}
