:root{
  --bg:#303030;--header:#393939;--topbar:#28282b;--panel:#353535;--region:#2b2b2b;
  --line:#1d1d1d;--line-soft:#3f3f3f;--ink:#e6e6e6;--ink-dim:#a8a8a8;--ink-faint:#727272;
  --select:#4772b3;--select-bg:#2a3a52;--accent:#e08a3c;--tool-active:#4772b3;
  --viewport:#3d4450;--viewport2:#7a8290;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden}
body{background:var(--line);color:var(--ink);font-family:'Segoe UI',Roboto,'Helvetica Neue',sans-serif;font-size:12px;-webkit-font-smoothing:antialiased;user-select:none}
#app{display:grid;grid-template-rows:28px 94px 30px minmax(0,1fr) 24px;height:100vh;width:100vw;overflow:hidden;gap:1px;background:var(--line)}
#app.ribbon-collapsed{grid-template-rows:28px 22px 30px minmax(0,1fr) 24px}
#app.ribbon-collapsed .ribbon .ribbon-panel{display:none}
#app.ribbon-collapsed .ribbon-ws{align-self:center;padding-top:0;padding-bottom:0}
#app.ribbon-collapsed .ribbon-ws-label{display:none}
#app.ribbon-collapsed .ribbon-ws-tabs .ws-tab{padding:2px 9px}
#app.ribbon-collapsed .ribbon{height:22px;padding:0}
/* Pin each real layout child to its row explicitly. Fixed/absolute children
   (menu popup, float panels) are taken out of grid flow so they can never
   consume a row and collapse the viewport. */
#app > .topbar{grid-row:1;height:28px}
#app > .ribbon{grid-row:2}
#app > .enginebar-row{grid-row:3}
#app > .workarea{grid-row:4;min-height:0}
#app > .statusbar{grid-row:5;height:22px;overflow:hidden}
#app > .menu-popup,#app > .float-panel{grid-row:1;position:fixed}
/* ===== Permanent ENGINES bar (always visible, scrolls horizontally) ===== */
.enginebar-row{display:flex;align-items:stretch;background:linear-gradient(180deg,#343434,#2c2c2c);border-bottom:1px solid var(--line);min-width:0;height:30px}
#app.engbar-hidden{grid-template-rows:28px 94px 0 minmax(0,1fr) 24px}
#app.engbar-hidden.ribbon-collapsed{grid-template-rows:28px 22px 0 minmax(0,1fr) 24px}
#app.engbar-hidden .enginebar-row{display:none}
.ebr-label{display:flex;align-items:center;padding:0 10px;font-size:9px;font-weight:700;letter-spacing:1px;color:var(--accent);background:#262626;border-right:1px solid var(--line);flex-shrink:0}
.ebr-scroll{display:flex;align-items:center;gap:1px;overflow-x:auto;overflow-y:hidden;padding:0 4px;flex:1;min-width:0;scrollbar-width:thin;scrollbar-color:#555 #2a2a2a}
.ebr-scroll::-webkit-scrollbar{height:6px}
.ebr-scroll::-webkit-scrollbar-track{background:#2a2a2a}
.ebr-scroll::-webkit-scrollbar-thumb{background:#555;border-radius:4px}
.ebr-scroll button{background:none;border:none;color:var(--ink-dim);font:inherit;font-size:11px;padding:3px 8px;border-radius:3px;cursor:pointer;white-space:nowrap;flex-shrink:0}
.ebr-scroll button:hover{background:#454545;color:var(--ink)}
.ebr-scroll button.on{background:var(--bg);color:var(--accent)}
.topbar{display:flex;align-items:center;background:var(--topbar);padding:0 6px;gap:2px;min-width:0}
.tb-logo{display:flex;align-items:center;gap:6px;font-weight:700;letter-spacing:1px;padding:0 8px 0 4px;font-size:12px;white-space:nowrap;flex-shrink:0}
.tb-logo .m{width:15px;height:15px;border-radius:3px;background:linear-gradient(135deg,var(--accent),#c45)}
.tb-qat{display:flex;align-items:center;gap:1px;padding:0 6px;margin-right:4px;border-right:1px solid #444}
.tb-qat button{background:none;border:none;color:var(--ink-dim);font-size:12px;padding:2px 5px;border-radius:3px;cursor:pointer;line-height:1}
.tb-qat button:hover{background:#3f3f3f;color:var(--ink)}
.tb-doctitle{color:var(--ink-dim);font-size:11px;white-space:nowrap;opacity:.85;flex-shrink:0;margin-left:auto}
.tb-menu{display:flex}
.tb-menu button{background:none;border:none;color:var(--ink-dim);font:inherit;font-size:11px;padding:3px 8px;border-radius:3px;cursor:pointer}
.tb-menu button:hover{background:#3f3f3f;color:var(--ink)}
.tb-menu button.open{background:#3f3f3f;color:var(--ink)}
.tb-menu-div{width:1px;height:16px;background:var(--line-soft);margin:0 5px;align-self:center;flex-shrink:0}
.tb-menu button.tb-wsmenu{color:var(--ink);font-weight:500}
.tb-menu button.tb-wsmenu:hover{background:var(--accent);color:#1a1a1a}
.tb-menu button.tb-wsmenu-eng{color:var(--accent);font-weight:600}
.tb-menu button.tb-wsmenu-eng:hover{color:#1a1a1a}
.menu-popup{position:fixed;z-index:120;background:#3a3a3a;border:1px solid #111;border-radius:5px;
  box-shadow:0 10px 30px #000a;padding:4px;min-width:220px;display:none;
  max-height:calc(100vh - 96px);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;scrollbar-color:#555 #2a2a2a}
.menu-popup::-webkit-scrollbar{width:9px}
.menu-popup::-webkit-scrollbar-track{background:#2a2a2a;border-radius:5px}
.menu-popup::-webkit-scrollbar-thumb{background:#555;border-radius:5px;border:2px solid #2a2a2a}
.menu-popup::-webkit-scrollbar-thumb:hover{background:#6a6a6a}
.menu-popup.show{display:block}
/* group header (collapsible section) */
.menu-popup .mgrp{display:flex;align-items:center;gap:6px;padding:5px 8px 3px;margin-top:2px;
  cursor:pointer;color:var(--ink-faint);font-size:9.5px;text-transform:uppercase;letter-spacing:.5px;
  border-top:1px solid #2c2c2c;user-select:none}
.menu-popup .mgrp:first-child{border-top:none;margin-top:0}
.menu-popup .mgrp:hover{color:var(--ink)}
.menu-popup .mgrp .mg-tw{font-size:8px;width:9px;display:inline-block;transition:transform .12s;opacity:.7}
.menu-popup .mgrp.collapsed .mg-tw{transform:rotate(-90deg)}
.menu-popup .mgrp .mg-label{flex:1}
.menu-popup .mgrp .mg-count{font-size:8.5px;color:#888;background:#2a2a2a;border-radius:8px;padding:0 6px;min-width:16px;text-align:center}
.menu-popup .mgrp .mg-count.on{color:var(--accent,#e0762e);background:#3a2c1c}
/* ===== Settings panel ===== */
.settings-tabs{display:flex;gap:2px;padding:4px 6px 0;background:var(--header);border-bottom:1px solid var(--line);flex-wrap:wrap}
.settings-tabs button{background:#333;border:none;color:var(--ink-dim);font:inherit;font-size:10px;padding:4px 9px;border-radius:4px 4px 0 0;cursor:pointer}
.settings-tabs button.on{background:var(--panel);color:var(--accent)}
.settings-tabs button:hover{color:var(--ink)}
.settings-foot{display:flex;align-items:center;gap:8px;padding:7px 10px;border-top:1px solid var(--line);background:var(--header)}
.set-sec{font-size:9.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--ink-faint);margin:12px 0 5px;font-weight:600;border-bottom:1px solid var(--line-soft);padding-bottom:3px}
.set-sec:first-child{margin-top:2px}
.set-row{display:flex;align-items:center;gap:10px;padding:5px 2px;font-size:11px;color:var(--ink)}
.set-row .set-label{flex:1;line-height:1.3}
.set-row .set-label small{display:block;color:var(--ink-faint);font-size:9px;margin-top:1px}
/* iOS-style switch */
.set-switch{position:relative;width:34px;height:18px;flex-shrink:0;cursor:pointer}
.set-switch input{opacity:0;width:0;height:0;position:absolute}
.set-switch .sl{position:absolute;inset:0;background:#444;border-radius:18px;transition:.18s}
.set-switch .sl::before{content:'';position:absolute;width:14px;height:14px;left:2px;top:2px;background:#ccc;border-radius:50%;transition:.18s}
.set-switch input:checked + .sl{background:var(--accent)}
.set-switch input:checked + .sl::before{transform:translateX(16px);background:#fff}
.set-seg{display:flex;gap:2px;flex-shrink:0}
.set-seg button{background:#2c2c2c;border:1px solid var(--line-soft);color:var(--ink-dim);font:inherit;font-size:10px;padding:3px 9px;cursor:pointer;border-radius:0}
.set-seg button:first-child{border-radius:4px 0 0 4px}
.set-seg button:last-child{border-radius:0 4px 4px 0}
.set-seg button.on{background:var(--accent);color:#1a1a1a;font-weight:600;border-color:var(--accent)}
.set-row input[type=range]{flex:1;max-width:130px}
.set-row .set-num{width:42px;text-align:right;font-variant-numeric:tabular-nums;color:var(--accent);font-size:10px}
.set-swatches{display:flex;gap:6px;flex-wrap:wrap}
.set-swatch{width:22px;height:22px;border-radius:5px;cursor:pointer;border:2px solid transparent}
.set-swatch.on{border-color:#fff;box-shadow:0 0 0 1px #000}
.set-row input[type=color]{width:30px;height:22px;padding:0;border:1px solid var(--line-soft);border-radius:4px;background:none;cursor:pointer}
body.ui-compact .prow{padding-top:2px;padding-bottom:2px}
body.ui-compact .set-row{padding-top:3px;padding-bottom:3px}
body.ui-compact .fp-body{padding:6px 8px}
body.ui-compact .menu-popup .mi{padding:4px 9px}
.menu-popup .mi{display:flex;align-items:center;justify-content:space-between;gap:18px;
  padding:6px 10px;border-radius:4px;cursor:pointer;color:var(--ink);font-size:12px}
.menu-popup .mi:hover{background:var(--select)}
.menu-popup .mi .sc{color:var(--ink-faint);font-size:10px;font-variant-numeric:tabular-nums}
.menu-popup .mi:hover .sc{color:#cdd6e0}
.menu-popup .mi .mi-check{display:inline-flex;width:14px;flex:0 0 14px;justify-content:center;color:var(--accent,#e0762e);font-size:11px;margin-right:-10px}
.menu-popup .mi .mi-label{flex:1}
.menu-popup .mi.active{color:#fff}
.menu-popup .mi.active .mi-label{font-weight:600}
.menu-popup .mi.dim .mi-check{display:none}
.menu-popup .sep{height:1px;background:#222;margin:4px 6px}
.menu-popup .mi.dim{color:var(--ink-faint);cursor:default}
.menu-popup .mi.dim:hover{background:none}
.tb-sp{flex:1}
.tb-wslabel{font-size:8.5px;font-weight:700;letter-spacing:1px;color:var(--ink-faint);text-transform:uppercase;padding:0 8px 0 10px;border-left:1px solid var(--line-soft);margin-left:4px;flex-shrink:0;align-self:center}
.tb-ws{display:flex;gap:1px;align-items:center;flex-shrink:0}
.ws-tab{background:#333;border:none;color:var(--ink-dim);font:inherit;padding:3px 11px;cursor:pointer;border-radius:3px 3px 0 0;font-size:10px}
.ws-tab.on{background:var(--bg);color:var(--ink)}
.ws-tab:hover{color:var(--ink)}
.ws-tab.ws-engines{color:var(--accent);font-weight:600}
.ws-tab.ws-engines.on{background:var(--bg);color:var(--accent)}
.ribbon-toggle{display:flex;align-items:center;gap:5px;background:#3a3a3a;border:1px solid var(--line-soft);color:var(--ink-dim);cursor:pointer;font-size:10px;padding:4px 10px;border-radius:4px;line-height:1;font-weight:700;align-self:center;flex-shrink:0}
.opt-mode{flex:1;background:#2b2b2b;border:1px solid #383838;color:var(--ink-dim);font:inherit;font-size:10px;padding:5px 2px;border-radius:4px;cursor:pointer}
.opt-mode:hover{color:var(--ink);border-color:#4a4a4a}
.opt-mode.on{background:var(--accent);color:#1a1a1a;border-color:var(--accent);font-weight:700}
.ribbon-toggle:hover{color:#fff;background:var(--accent);border-color:var(--accent)}
.ribbon-toggle .rt-chev{font-size:9px;transition:transform .15s}
.ribbon-toggle .rt-label{text-transform:uppercase;letter-spacing:.7px}
#app.ribbon-collapsed .ribbon-toggle .rt-chev{transform:rotate(-90deg)}
.toolsettings{display:flex;align-items:center;background:var(--header);padding:0 8px;gap:14px;font-size:11px;color:var(--ink-dim)}
.toolsettings .seg{display:flex;align-items:center;gap:6px}
.toolsettings b{color:var(--ink);font-weight:500}
.ts-mode{background:var(--bg);border:1px solid var(--line);border-radius:3px;padding:3px 8px;color:var(--ink);cursor:pointer}
.toolbar{background:var(--bg);display:flex;flex-direction:column;align-items:center;padding:4px 0;gap:2px;overflow-y:auto}
.tbtn{width:28px;height:28px;border:none;border-radius:4px;background:transparent;color:var(--ink-dim);cursor:pointer;display:flex;align-items:center;justify-content:center;position:relative}
.tbtn:hover{background:#444}
.tbtn.on{background:var(--tool-active);color:#fff}
.tbtn svg{width:16px;height:16px}
.float-tip{position:fixed;z-index:200;background:#111;color:#fff;padding:5px 10px;border-radius:4px;white-space:nowrap;font-size:11px;border:1px solid #000;pointer-events:none;opacity:0;transform:translateY(-50%) translateX(-4px);transition:opacity .12s,transform .12s;box-shadow:0 4px 14px #0008}
.float-tip.show{opacity:1;transform:translateY(-50%) translateX(0)}
.float-tip::before{content:'';position:absolute;left:-5px;top:50%;transform:translateY(-50%);border:5px solid transparent;border-right-color:#111}
.tb-div{width:24px;height:1px;background:var(--line-soft);margin:4px 0}
.viewport{position:relative;background:#000;display:flex;flex-direction:column;min-width:0}
.vp-header{display:flex;align-items:center;background:var(--header);padding:0 8px;height:26px;gap:10px;font-size:11px;color:var(--ink-dim);flex-shrink:0}
/* ---- GRAB-SCROLL: reachable menus when the window is narrow ---- */
.grabx{display:block;overflow-x:auto;overflow-y:hidden;white-space:nowrap;scrollbar-width:none;-ms-overflow-style:none;cursor:grab;scroll-behavior:smooth;min-width:0}
.grabx::-webkit-scrollbar{height:0;display:none}
.grabx.grabbing{cursor:grabbing;scroll-behavior:auto}
.grabx.grabbing *{pointer-events:none}
.grab-track{display:inline-flex;align-items:center;width:max-content;min-width:100%;height:100%}
.vp-header.grabx .grab-track{gap:10px}
.topbar.grabx .grab-track{gap:2px}
.grab-track > *{flex-shrink:0}
/* edge-fade hints via mask — pinned to the scroll viewport, never scrolls away */
.grabx.fade-r{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 24px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 24px),transparent)}
.grabx.fade-l{-webkit-mask-image:linear-gradient(to left,#000 calc(100% - 24px),transparent);mask-image:linear-gradient(to left,#000 calc(100% - 24px),transparent)}
.grabx.fade-lr{-webkit-mask-image:linear-gradient(to right,transparent,#000 24px,#000 calc(100% - 24px),transparent);mask-image:linear-gradient(to right,transparent,#000 24px,#000 calc(100% - 24px),transparent)}
.vp-header .grp{display:flex;gap:2px;align-items:center}
.vp-header button{background:none;border:none;color:var(--ink-dim);font:inherit;padding:3px 7px;border-radius:3px;cursor:pointer}
.vp-header button:hover{background:#454545;color:var(--ink)}
.vp-header button.on{background:var(--bg);color:var(--accent)}
.vp-header .sep{width:1px;height:14px;background:var(--line-soft)}
.vp-canvas-wrap{flex:1;position:relative;min-height:0}
.vp-controlbar{position:absolute;left:0;right:0;bottom:0;height:24px;display:flex;align-items:center;gap:2px;
  background:rgba(28,30,36,.92);border-top:1px solid #000;padding:0 8px;font-size:10px;color:var(--ink-dim);backdrop-filter:blur(3px);z-index:6}
.vp-controlbar .vcb-name{color:var(--ink);font-weight:600;white-space:nowrap}
.vp-controlbar .vcb-sep{width:1px;height:13px;background:#444;margin:0 6px}
.vp-controlbar .vcb-sp{flex:1}
.vp-controlbar .vcb-item{background:none;border:none;color:var(--ink-dim);font:inherit;font-size:10px;padding:2px 7px;border-radius:3px;cursor:pointer;white-space:nowrap}
.vp-controlbar .vcb-item:hover{background:#3a4150;color:var(--ink)}
.vp-controlbar .vcb-item.on{color:var(--accent)}
#canvas{display:block;width:100%;height:100%}
.viewcube{position:absolute;top:10px;right:10px;display:flex;flex-direction:column;gap:3px;
  background:rgba(20,23,30,.82);border:1px solid var(--line);border-radius:6px;padding:5px;backdrop-filter:blur(4px)}
.viewcube .vc-title{display:flex;align-items:center;justify-content:center;gap:4px;width:54px;
  font-size:8px;letter-spacing:1.5px;color:var(--ink-faint);padding:2px 0;font-weight:700;
  background:none;border:none;cursor:pointer;font-family:inherit}
.viewcube .vc-title:hover{color:var(--ink)}
.viewcube .vc-chev{font-size:8px;transition:transform .15s}
.viewcube.collapsed .vc-chev{transform:rotate(-90deg)}
.viewcube.collapsed .vc-buttons{display:none}
.vc-buttons{display:flex;flex-direction:column;gap:2px}
.vc-buttons button{display:block;width:54px;padding:4px 0;border:1px solid var(--line-soft);border-radius:4px;
  background:#2c2c2c;color:var(--ink-dim);font:inherit;font-size:11px;font-weight:600;cursor:pointer;text-align:center}
.vc-buttons button:hover{background:var(--accent);color:#160600;border-color:var(--accent)}
.vc-buttons button[data-v="iso"]{background:#363b46;color:var(--ink);margin-bottom:2px}
.vc-buttons button[data-v="iso"]:hover{background:var(--accent);color:#160600}
.vp-tools{position:absolute;top:8px;right:92px;display:flex;flex-direction:row;align-items:center;gap:4px}
.vp-tools button{width:26px;height:26px;border-radius:4px;background:#2b2b2bcc;border:1px solid #000;color:var(--ink-dim);cursor:pointer;font-size:12px}
.vp-tools button:hover{color:var(--accent)}
.vp-tools .vp-tools-toggle{font-size:13px;line-height:1}
.zoom-slider{-webkit-appearance:none;appearance:none;width:120px;height:4px;border-radius:3px;background:#11111199;border:1px solid #000;outline:none;cursor:pointer}
.zoom-slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:13px;height:13px;border-radius:50%;background:var(--accent);border:1px solid #000;cursor:grab}
.zoom-slider::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--accent);border:1px solid #000;cursor:grab}
.vp-tools.collapsed #zoomIn,
.vp-tools.collapsed #zoomOut,
.vp-tools.collapsed #zoomSlider,
.vp-tools.collapsed #fitBtn{display:none}
.float-panel{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:80;display:none;
  background:#2b2b2bf2;border:1px solid var(--line);border-radius:7px;width:300px;max-height:70vh;
  box-shadow:0 18px 60px #000b;backdrop-filter:blur(6px);flex-direction:column}
.float-panel.show{display:flex}
#matGraphPanel.show{flex-direction:column}
.mat-engine{flex:1;display:flex;min-height:0;overflow:hidden}
.mat-lib{flex:0 0 230px;border-right:1px solid var(--line);padding:10px;overflow-y:auto;display:flex;flex-direction:column}
.mat-lib-h{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--ink-dim);margin-bottom:8px}
.mat-lib-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.mat-swatch{background:#23272f;border:1px solid #353b45;border-radius:6px;padding:6px;cursor:pointer;text-align:center;transition:border-color .12s}
.mat-swatch:hover{border-color:var(--accent)}
.mat-swatch canvas{width:100%;aspect-ratio:1;border-radius:5px;display:block;background:#15171c}
.mat-swatch .ms-name{font-size:9.5px;color:var(--ink);margin-top:4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mat-swatch .ms-cat{font-size:8px;color:var(--ink-faint)}
.mat-swatch .ms-btns{display:flex;gap:3px;margin-top:4px}
.mat-swatch .ms-btns button{flex:1;background:#363c46;border:1px solid #444;color:var(--ink-dim);font:inherit;font-size:8.5px;padding:2px;border-radius:3px;cursor:pointer}
.mat-swatch .ms-btns button:hover{background:var(--select);color:#fff}
.mat-center{flex:1;min-width:0;position:relative}
.mat-center .node-wrap{height:100%;border-radius:0}
.mat-preview{flex:0 0 200px;border-left:1px solid var(--line);padding:12px;display:flex;flex-direction:column;align-items:center}
.acou-sec{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);margin:14px 0 4px;border-top:1px solid #2a2f38;padding-top:8px}
.wind-ctrls{background:#1c1f26;border:1px solid #2a2f38;border-radius:7px;padding:8px 12px;margin-bottom:6px}
.wind-crow{display:flex;align-items:center;gap:8px;margin:5px 0;font-size:11px;color:var(--ink-dim)}
.wind-crow label{min-width:96px}
.wind-crow input[type=range]{flex:1;height:3px}
.wind-crow select{flex:1;background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:2px 5px;font:inherit;font-size:11px}
.wind-crow span{min-width:60px;text-align:right;color:var(--ink);font-weight:600}
/* ===== HANDOFF ===== */
.ho-modes{display:flex;gap:8px;margin-bottom:12px}
.dim-ainote{background:linear-gradient(135deg,#1e2530,#23201a);border:1px solid var(--accent);border-radius:7px;padding:10px 12px;margin-bottom:10px;font-size:11px;line-height:1.6;color:var(--ink-dim)}
.dim-ainote::before{content:'⚡ AI ANALYSIS';display:block;font-size:8.5px;letter-spacing:.08em;color:var(--accent);font-weight:700;margin-bottom:4px}
.ho-modes button{text-align:center;line-height:1.3}
.ho-selrow{display:flex;align-items:center;gap:6px;margin-bottom:8px}
.minibtn{background:#2a2f38;border:1px solid #3a4150;color:var(--ink-dim);font:inherit;font-size:10px;padding:3px 8px;border-radius:4px;cursor:pointer}
.minibtn:hover{background:var(--select);color:#fff}
.ho-stagegroup{margin:8px 0}
.ho-stagehdr{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);margin:10px 0 4px;border-bottom:1px solid #2a2f38;padding-bottom:3px}
.ho-item{display:flex;align-items:center;gap:8px;padding:4px 6px;border-radius:4px;font-size:11.5px;color:var(--ink-dim)}
.ho-item:hover{background:#23272f}
.ho-item input{width:auto}
.ho-item .ho-id{color:var(--ink-faint);font-size:10px;min-width:42px}
.ho-item .ho-st{margin-left:auto;font-size:9px;padding:1px 6px;border-radius:8px}
.ho-st-model{background:#1d3a24;color:#7ad88f} .ho-st-partial{background:#3a3115;color:#e0c060} .ho-st-coordination{background:#2a2d31;color:#9aa3b0}
/* ===== MESH EDIT ===== */
.edit-row{display:flex;align-items:center;gap:5px;margin:5px 0}
.edit-row input[type=number]{background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:3px 5px;font:inherit;font-size:11px}
.edit-sec{font-size:10px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.5px;margin:10px 0 3px}
.edit-sec b{color:var(--accent);text-transform:none}
/* ===== RESOURCES ===== */
#resourcePanel.show{flex-direction:column}
.res-body{flex:1;display:flex;min-height:0;overflow:hidden}
.res-nav{flex:0 0 260px;border-right:1px solid var(--line);overflow-y:auto;padding:10px}
.res-nav .res-group{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--ink-faint);margin:12px 6px 4px}
.res-nav .res-group:first-child{margin-top:0}
.res-nav .res-link{display:block;padding:5px 8px;border-radius:4px;font-size:11.5px;color:var(--ink);cursor:pointer}
.res-nav .res-link:hover{background:#2a2f38}
.res-nav .res-link.active{background:var(--select);color:#fff}
.res-article{flex:1;overflow-y:auto;padding:22px 28px;line-height:1.65}
.res-article h2{font-size:19px;color:var(--ink);margin:0 0 4px}
.res-article .res-tag{display:inline-block;font-size:9px;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);border:1px solid var(--accent);border-radius:3px;padding:1px 6px;margin-bottom:14px}
.res-article h3{font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--accent);margin:18px 0 5px}
.res-article p{font-size:13px;color:var(--ink);margin:0 0 6px}
.res-article ol{margin:4px 0 0;padding-left:20px}
.res-article ol li{font-size:13px;color:var(--ink-dim);margin-bottom:4px}
.res-article .res-howto{background:#1c1f26;border:1px solid #2a2f38;border-radius:7px;padding:12px 16px;margin-top:6px}
.mat-node .nc-body{padding:6px}
.mat-prow{display:flex;align-items:center;gap:5px;margin:3px 0;font-size:10px;color:var(--ink-faint)}
.mat-prow label{min-width:46px;text-transform:capitalize}
.mat-prow input[type=range]{flex:1;height:3px}
.mat-prow input[type=number]{width:48px;background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:1px 4px;font:inherit;font-size:10px}
.mat-prow input[type=color]{width:28px;height:18px;padding:0;border:1px solid #333;border-radius:3px;background:none}
.mat-prow select{flex:1;background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:1px 4px;font:inherit;font-size:10px}
.mat-node .nc-out{font-size:9px;color:var(--accent);text-align:right;padding:2px 4px 0;border-top:1px solid #2a2f38;margin-top:3px}
/* ===== SCHEDULES ===== */
#schedPanel.show{flex-direction:column}
.sched-bar{display:flex;align-items:center;gap:6px;padding:7px 12px;border-bottom:1px solid var(--line);flex-shrink:0;font-size:11px}
.sched-bar label{color:var(--ink-faint);font-size:10px}
.sched-bar select{background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:4px;padding:3px 6px;font:inherit;font-size:11px}
.sched-colpick{display:none;flex-wrap:wrap;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line);background:#1c1f26;flex-shrink:0}
.sched-colpick.show{display:flex}
.sched-colpick label{font-size:10px;color:var(--ink);display:flex;align-items:center;gap:3px;cursor:pointer}
.sched-wrap{flex:1;overflow:auto;min-height:0}
.sched-table{width:100%;border-collapse:collapse;font-size:11px}
.sched-table th{position:sticky;top:0;background:#23272f;color:var(--ink-dim);text-align:left;padding:5px 9px;border-bottom:2px solid #3a4150;cursor:pointer;white-space:nowrap;font-weight:600;z-index:1}
.sched-table th:hover{color:var(--accent)}
.sched-table th .arr{color:var(--accent);font-size:9px;margin-left:3px}
.sched-table td{padding:4px 9px;border-bottom:1px solid #262a31;color:var(--ink);white-space:nowrap;font-variant-numeric:tabular-nums}
.sched-table td.num,.sched-table th.num{text-align:right}
.sched-table tr:hover td{background:#2a2f38;cursor:pointer}
.sched-table tr.sel td{background:#2d3a52}
.sched-grouprow td{background:#1f242c;color:var(--accent);font-weight:600;border-top:1px solid #3a4150}
.sched-foot{flex-shrink:0;padding:6px 12px;border-top:2px solid #3a4150;background:#23272f;font-size:11px;color:var(--ink);font-variant-numeric:tabular-nums;display:flex;gap:18px;flex-wrap:wrap}
.sched-foot b{color:var(--accent)}
/* ===== DESIGN OPTIONS ===== */
#optPanel.show{flex-direction:column}
.opt-body{flex:1;overflow:auto;min-height:0;display:flex;flex-direction:column}
.opt-list{display:flex;flex-wrap:wrap;gap:6px;padding:4px 12px 8px}
.opt-chip{display:flex;align-items:center;gap:6px;background:#23272f;border:1px solid #353b45;border-radius:5px;padding:4px 8px;font-size:11px}
.opt-chip.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.opt-chip .on{width:8px;height:8px;border-radius:50%;background:#555}.opt-chip.active .on{background:var(--accent)}
.opt-chip button{background:#363c46;border:1px solid #444;color:var(--ink-dim);font:inherit;font-size:9px;padding:2px 6px;border-radius:3px;cursor:pointer}
.opt-chip button:hover{background:var(--select);color:#fff}
.opt-chip .odel:hover{background:#a33}
.opt-cmp-wrap{flex:1;overflow:auto;padding:0 12px 12px}
.opt-cmp{width:100%;border-collapse:collapse;font-size:11px}
.opt-cmp th{position:sticky;top:0;background:#23272f;color:var(--ink-dim);text-align:left;padding:6px 10px;border-bottom:2px solid #3a4150;font-weight:600;white-space:nowrap}
.opt-cmp th.opt-col{text-align:right;color:var(--ink)}
.opt-cmp td{padding:5px 10px;border-bottom:1px solid #262a31;color:var(--ink);font-variant-numeric:tabular-nums}
.opt-cmp td.metric{color:var(--ink-dim)}
.opt-cmp td.val{text-align:right}
.opt-cmp td.best{color:#5fb85f;font-weight:700}
.opt-cmp td.best::after{content:" ★";color:#e0a92e}
.opt-cmp tr:hover td{background:#2a2f38}
.opt-empty{padding:20px;text-align:center;color:#666;font-size:12px}
/* ===== WORKSETS ===== */
.ws-list{display:flex;flex-direction:column;gap:4px}
.ws-row{display:flex;align-items:center;gap:8px;background:#23272f;border:1px solid #353b45;border-radius:5px;padding:6px 9px}
.ws-row.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.ws-row .ws-sw{width:11px;height:11px;border-radius:3px;flex:0 0 auto}
.ws-row .ws-name{flex:1;font-size:12px;font-weight:600;color:var(--ink);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws-row .ws-disc{font-size:9px;color:var(--ink-faint);background:#1a1d23;border:1px solid #333;border-radius:3px;padding:1px 5px}
.ws-row .ws-count{font-size:10px;color:var(--ink-dim);font-variant-numeric:tabular-nums;min-width:46px;text-align:right}
.ws-row .ws-tog{background:#363c46;border:1px solid #444;color:var(--ink-dim);cursor:pointer;font-size:10px;width:26px;height:22px;border-radius:3px;padding:0}
.ws-row .ws-tog.on{background:var(--select);color:#fff;border-color:var(--select)}
.ws-row .ws-tog.lock-on{background:#5a4a2a;color:#e0c060;border-color:#6a5a30}
.ws-row .ws-active-btn{background:none;border:1px solid #444;color:var(--ink-faint);cursor:pointer;font-size:9px;padding:2px 6px;border-radius:3px}
.ws-row.active .ws-active-btn{background:var(--accent);color:#15171c;border-color:var(--accent);font-weight:700}
.ws-row .ws-del{background:none;border:none;color:var(--ink-faint);cursor:pointer;font-size:11px;padding:0 2px}
.ws-row .ws-del:hover{color:#e0796e}
.ws-newrow{display:flex;gap:6px;margin-top:10px;border-top:1px solid #333;padding-top:10px}
/* ===== ANIMATION TIMELINE ===== */
.anim-transport{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.anim-transport input{background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:2px 5px;font:inherit;font-size:11px}
.anim-time{font-size:12px;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums;min-width:46px}
.anim-track{position:relative;height:46px;background:#1a1d23;border:1px solid #353b45;border-radius:5px;cursor:pointer;overflow:hidden}
.anim-key{position:absolute;top:50%;width:12px;height:12px;background:var(--accent);border:1px solid #1a1d23;transform:translate(-50%,-50%) rotate(45deg);cursor:grab;z-index:2}
.anim-key:hover{background:#fff}
.anim-key.sel{background:#fff;box-shadow:0 0 0 2px var(--accent)}
.anim-playhead{position:absolute;top:0;bottom:0;width:2px;background:#5fb85f;left:0;z-index:3;pointer-events:none}
.anim-track .anim-tick{position:absolute;top:0;bottom:0;width:1px;background:#2a2f38}
.anim-presets{display:flex;align-items:center;gap:6px;margin-top:10px}
/* ===== MODIFIER STACK ===== */
.mod-stack{display:flex;flex-direction:column;gap:5px}
.mod-card{background:#23272f;border:1px solid #353b45;border-radius:5px;overflow:hidden}
.mod-card.mod-off{opacity:.5}
.mod-head{display:flex;align-items:center;gap:5px;padding:4px 6px;background:#2a2f38}
.mod-toggle{background:none;border:none;color:var(--accent);cursor:pointer;font-size:13px;padding:0 2px;line-height:1}
.mod-card.mod-off .mod-toggle{color:#777}
.mod-name{flex:1;font-size:11px;font-weight:600;color:var(--ink)}
.mod-actions{display:flex;gap:1px}
.mod-actions button{background:#363c46;border:1px solid #444;color:var(--ink-dim);cursor:pointer;font-size:9px;width:18px;height:18px;border-radius:3px;padding:0;line-height:1}
.mod-actions button:hover:not([disabled]){background:var(--select);color:#fff}
.mod-actions button[disabled]{opacity:.3;cursor:default}
.mod-actions .mod-del:hover{background:#a33;color:#fff}
.mod-body{padding:4px 6px;display:flex;flex-wrap:wrap;gap:4px}
.mrow{display:flex;align-items:center;gap:4px}
.mrow label{font-size:9.5px;color:var(--ink-faint);min-width:30px;text-transform:capitalize}
.mrow input,.mrow select{width:62px;background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:1px 4px;font:inherit;font-size:10px}
.float-panel .fp-head{display:flex;align-items:center;justify-content:space-between;padding:9px 12px;border-bottom:1px solid var(--line-soft);background:var(--header);border-radius:7px 7px 0 0}
.float-panel .fp-head b{font-size:11px;letter-spacing:.5px;text-transform:uppercase;color:var(--ink-dim)}
.float-panel .fp-head button{background:none;border:none;color:var(--ink-faint);font-size:14px;cursor:pointer;padding:0 4px}
.float-panel .fp-head button:hover{color:var(--ink)}
.float-panel .fp-body{padding:8px;overflow-y:auto}
.grid-legend{position:absolute;left:10px;bottom:10px;background:rgba(20,23,30,.78);border:1px solid var(--line);
  border-radius:5px;padding:5px 8px;font-size:10px;color:var(--ink-dim);line-height:1.6;backdrop-filter:blur(4px);z-index:6}
.grid-legend .lg-head{display:flex;align-items:center;gap:5px;cursor:pointer;color:var(--ink-faint);
  font-size:8px;letter-spacing:1.2px;font-weight:700;text-transform:uppercase;user-select:none}
.grid-legend .lg-head:hover{color:var(--ink)}
.grid-legend .lg-chev{font-size:8px}
.grid-legend .lg-body{margin-top:3px}
.grid-legend.collapsed .lg-body{display:none}
.grid-legend.collapsed .lg-head{margin:0}
.grid-labels{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:5}
.axis-gizmo{position:absolute;left:10px;bottom:64px;z-index:6;pointer-events:none;overflow:visible}
.axis-gizmo text{font:700 11px 'Segoe UI',sans-serif}
.grid-labels .glevel{position:absolute;transform:translateY(-50%);display:flex;align-items:center;gap:5px;
  background:rgba(30,34,44,.82);border:1px solid #3f6fb0;border-left:3px solid #3f6fb0;border-radius:3px;
  padding:2px 7px;font-size:10px;color:#cdd9ee;white-space:nowrap;box-shadow:0 1px 4px #0006}
.grid-labels .glevel .gy{color:#6f93c8;font-variant-numeric:tabular-nums}
.grid-legend .lg-row{display:flex;align-items:center;gap:6px}
.grid-legend .sw{width:14px;height:3px;border-radius:1px;display:inline-block}
.gtoggle{display:flex;align-items:center;justify-content:space-between;background:#383838;border:1px solid var(--line-soft);border-radius:4px;padding:7px 10px;margin:3px 0;cursor:pointer;font-size:12px}
.gtoggle:hover{border-color:var(--accent)}
.gtoggle .state{font-size:10px;color:var(--ink-faint)}
.gtoggle.on .state{color:var(--accent)}
.pchip{display:flex;align-items:center;justify-content:space-between;background:#383838;border:1px solid var(--line-soft);border-radius:4px;padding:7px 10px;margin:3px 0;cursor:pointer;font-size:12px}
.pchip:hover{border-color:var(--accent);background:#404040}
.pchip .pct{font-size:10px;color:var(--accent);font-variant-numeric:tabular-nums}
.vp-readout{position:absolute;left:10px;top:8px;font-size:10px;color:#cdd6e0;text-shadow:0 1px 2px #000;line-height:1.6;font-variant-numeric:tabular-nums}
.chr-kpi{background:rgba(0,0,0,.18);border:1px solid var(--line-soft);border-radius:6px;padding:6px 8px}
.chr-kpi-l{font-size:8.5px;color:var(--ink-faint);letter-spacing:.3px}
.chr-kpi-v{font-size:14px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
#sketchToolbar{position:absolute;left:8px;top:50%;transform:translateY(-50%);z-index:8;display:none;flex-direction:column;gap:3px;background:rgba(18,22,28,.94);border:1px solid #2a3744;border-radius:9px;padding:6px 5px;box-shadow:0 6px 22px #000a;align-items:center}
#sketchToolbar .sk-grp{display:flex;flex-direction:column;gap:3px;align-items:center}
#sketchToolbar .sk-sep{width:30px;height:1px;background:#2a3744;margin:3px 0}
#sketchToolbar .sk-btn{width:34px;height:34px;display:flex;align-items:center;justify-content:center;flex-direction:column;background:#1b212a;border:1px solid #2a3744;border-radius:6px;color:#cdd6e0;font-size:16px;cursor:pointer;line-height:1;transition:.12s;padding:0}
#sketchToolbar .sk-btn.sk-sm{font-size:12px;height:28px}
#sketchToolbar .sk-btn:hover{background:#243042;border-color:#3d5165;color:#fff}
#sketchToolbar .sk-btn.on{background:var(--accent);border-color:var(--accent);color:#10151b}
#sketchToolbar .sk-btn.sk-go{background:#2a6f4a;border-color:#3c9a68;color:#eafff2;font-size:14px;height:40px}
#sketchToolbar .sk-btn.sk-go:hover{background:#368a5d}
.asst-chip{background:rgba(255,255,255,.06);border:1px solid var(--line-soft);color:var(--ink-dim);border-radius:14px;padding:5px 11px;font-size:10.5px;cursor:pointer;transition:.12s}
.asst-chip:hover{background:var(--accent);color:#10151b;border-color:var(--accent)}
.lib-card{background:rgba(255,255,255,.04);border:1px solid var(--line-soft);border-radius:8px;padding:10px;cursor:pointer;transition:.12s}
.lib-card:hover{background:rgba(255,255,255,.07);border-color:var(--accent)}
.lib-chip{background:rgba(255,255,255,.06);border:1px solid var(--line-soft);color:var(--ink-dim);border-radius:13px;padding:4px 11px;font-size:10.5px;cursor:pointer;transition:.12s}
.lib-chip:hover{color:var(--ink)}
.lib-chip.on{background:var(--accent);color:#10151b;border-color:var(--accent);font-weight:600}
.measure-label{position:fixed;transform:translate(-50%,-130%);background:var(--accent);color:#1a1a1a;font-size:11px;font-weight:700;padding:2px 7px;border-radius:4px;pointer-events:none;z-index:60;display:none;white-space:nowrap;box-shadow:0 2px 6px rgba(0,0,0,.5);font-variant-numeric:tabular-nums}
.measure-label.show{display:block}
.vp-readout b{color:var(--accent)}
.rightcol{display:flex;flex-direction:column;background:var(--line);min-height:0;gap:1px}
.rightcol .region{display:flex;flex-direction:column;min-height:0;flex:1 1 0;overflow:hidden;background:var(--region)}
.rightcol .region.collapsed{flex:0 0 auto}
.rightcol .region.collapsed .rbody,
.rightcol .region.collapsed .prop-split{display:none}
.rightcol .region-sep{height:1px;background:var(--line);flex:0 0 auto}
.reg-chev{background:none;border:none;color:var(--ink-faint);cursor:pointer;font-size:11px;padding:0 4px 0 0;line-height:1}
.reg-chev:hover{color:var(--ink)}
.region.collapsed .reg-chev{transform:rotate(-90deg)}
.region{background:var(--region);display:flex;flex-direction:column;min-height:0}
.region .rhead{display:flex;align-items:center;gap:6px;background:var(--header);padding:5px 8px;flex-shrink:0}
.region .rhead .ttl{font-size:11px;color:var(--ink-dim);display:flex;align-items:center;gap:6px}
.region .rhead .sp{flex:1}
.region .rhead button{background:none;border:none;color:var(--ink-faint);cursor:pointer;padding:2px 5px;border-radius:3px;font-size:12px}
.region .rhead button:hover{color:var(--ink);background:#454545}
.region .rbody{flex:1;overflow-y:auto;padding:4px}
.layer-add{background:#333;border:none;color:var(--ink-dim);font-size:14px;width:20px;height:20px;border-radius:3px;cursor:pointer;line-height:1}
.layer-add:hover{background:#444;color:#fff}
#regionLayers{max-height:230px;display:flex;flex-direction:column}
.lrow{display:flex;align-items:center;gap:5px;padding:4px 5px;border-radius:4px;font-size:11px;cursor:pointer;border:1px solid transparent}
.lrow:hover{background:#2a2a2a}
.lrow.active{background:#2d3340;border-color:#3a4456}
.lrow .lswatch{width:12px;height:12px;border-radius:3px;flex-shrink:0;border:1px solid #0004;cursor:pointer}
.lrow .lname{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#ddd;background:none;border:none;outline:none;font-size:11px;font-family:inherit}
.lrow .lname:focus{background:#1a1a1a;border-radius:2px}
.lrow .lcount{font-size:9px;color:#777;flex-shrink:0}
.lrow .lbtn{background:none;border:none;cursor:pointer;font-size:12px;padding:0 1px;flex-shrink:0;opacity:.65;color:#bbb}
.lrow .lbtn:hover{opacity:1}
.lrow .lbtn.on{opacity:1;color:var(--accent)}
.lrow.lay-hidden .lname{color:#666;text-decoration:line-through}
.lopacity{width:42px;height:3px;flex-shrink:0}
.tnode{display:flex;align-items:center;gap:6px;padding:3px 6px;border-radius:3px;cursor:pointer;font-size:12px}
.tnode:hover{background:#3a3a3a}
.tnode.sel{background:var(--select-bg);outline:1px solid var(--select)}
.tnode .ti{width:15px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-dim)}
.tnode .col{width:9px;height:9px;border-radius:2px;flex-shrink:0}
.tnode .sp{flex:1}
.tnode .eye{color:var(--ink-faint);font-size:11px}
.tnode.scene-root{color:var(--ink-dim);font-weight:600}
.prop-tabs{display:flex;flex-direction:column;background:var(--header);width:30px;flex-shrink:0;padding-top:4px;gap:1px}
.prop-tabs button{width:30px;height:28px;border:none;background:none;color:var(--ink-faint);cursor:pointer;font-size:13px;border-left:2px solid transparent}
.prop-tabs button.on{color:var(--accent);background:var(--region);border-left-color:var(--accent)}
.prop-tabs button:hover{color:var(--ink)}
.prop-split{display:flex;flex:1;min-height:0}
.prop-content{flex:1;overflow-y:auto;padding:8px}
/* Revit-style Properties header: type thumbnail + element name + Edit Type */
.prop-header{display:flex;align-items:center;gap:8px;background:#2a2a2a;border:1px solid var(--line);border-radius:4px;padding:7px 8px;margin-bottom:8px}
.prop-header .ph-thumb{width:38px;height:38px;flex:0 0 38px;border-radius:3px;background:linear-gradient(135deg,#3a4250,#2b313c);border:1px solid #444;display:flex;align-items:center;justify-content:center;color:var(--ink-dim)}
.prop-header .ph-meta{flex:1;min-width:0}
.prop-header .ph-cat{font-size:9px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.5px}
.prop-header .ph-name{font-size:12px;color:var(--ink);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.prop-header .ph-edit{flex:0 0 auto;background:#333;border:1px solid var(--line-soft);color:var(--ink-dim);font:inherit;font-size:10px;padding:3px 8px;border-radius:3px;cursor:pointer}
.prop-header .ph-edit:hover{background:var(--select);color:#fff;border-color:var(--select)}
/* section header as a Revit grey band */
.psec .pt{background:#2c2c2c;border-left:2px solid var(--accent);padding:3px 7px;font-size:10px;color:var(--ink-dim);font-weight:600;margin:8px 0 5px;border-radius:0 3px 3px 0}
.psec{margin-bottom:12px}
.psec .pt{font-size:11px;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.prow{display:flex;align-items:center;gap:8px;margin:5px 0}
.prow label{flex:0 0 64px;color:var(--ink-dim);font-size:11px}
.prow input[type=range]{flex:1;accent-color:var(--accent);height:3px}
.prow .pv{flex:0 0 42px;text-align:right;font-variant-numeric:tabular-nums;color:var(--ink);font-size:11px}
.prow input[type=number]{flex:1;background:#252525;border:1px solid var(--line);color:var(--ink);border-radius:3px;padding:4px 6px;font:inherit}
.field{background:#252525;border:1px solid var(--line);border-radius:3px;padding:5px 8px;width:100%;color:var(--ink);cursor:pointer;display:flex;justify-content:space-between;align-items:center}
.matgrid{display:flex;gap:5px;flex-wrap:wrap;margin-top:4px}
.sw{width:22px;height:22px;border-radius:4px;cursor:pointer;border:2px solid #0004}
.sw.on{border-color:#fff}
.bigbtn{width:100%;background:#3a3a3a;border:1px solid var(--line-soft);color:var(--ink);padding:7px;border-radius:4px;cursor:pointer;font:inherit;margin-top:6px;display:flex;align-items:center;justify-content:center;gap:6px}
.bigbtn:hover{background:#454545;border-color:var(--accent)}
.bigbtn.primary{background:var(--accent);color:#1a0e00;border-color:var(--accent);font-weight:600}
.statusbar{display:flex;align-items:center;gap:14px;background:var(--header);padding:0 10px;font-size:11px;color:var(--ink-faint)}
.statusbar .dot{width:6px;height:6px;border-radius:50%;background:#5fa83a}
.statusbar .sp{flex:1}
.statusbar .sb-pill{font-size:10px;color:var(--ink-faint);background:#2b2b2b;border:1px solid #383838;border-radius:3px;padding:1px 8px;white-space:nowrap}
/* ===== LIVE MODEL KPI DASHBOARD ===== */
.kpi-dash{background:linear-gradient(180deg,#23262e,#1c1f26);border-bottom:1px solid var(--line);padding:7px 8px 8px;flex-shrink:0}
.kpi-title{font-size:8.5px;letter-spacing:1.5px;color:var(--accent);font-weight:700;margin-bottom:6px;opacity:.9}
.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.kpi{background:#262a33;border:1px solid #31363f;border-radius:4px;padding:4px 7px;position:relative;overflow:hidden}
.kpi .kl{font-size:8.5px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}
.kpi .kv{font-size:13px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi .kv .ku{font-size:9px;color:var(--ink-faint);font-weight:400;margin-left:2px}
.kpi .kdot{position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:50%}
.kpi.h2 .kdot{background:#4caf50;box-shadow:0 0 5px #4caf5066}
.kpi.h1 .kdot{background:#e0a92e;box-shadow:0 0 5px #e0a92e66}
.kpi.h0 .kdot{background:#e05a4e;box-shadow:0 0 6px #e05a4e88}
.kpi .kdelta{font-size:9px;font-weight:600;margin-left:4px}
.kpi .kdelta.up{color:#5fb85f}.kpi .kdelta.down{color:#e0796e}
@keyframes kpiPulse{0%{background:#2f3947}100%{background:#262a33}}
.kpi.changed{animation:kpiPulse .6s ease}
/* ===== RIPPLE READOUT ===== */
.ripple-card{position:absolute;left:50%;bottom:38px;transform:translateX(-50%) translateY(8px);z-index:40;
  background:rgba(26,29,36,.97);border:1px solid var(--select);border-radius:8px;padding:10px 14px;
  min-width:420px;max-width:680px;box-shadow:0 8px 30px rgba(0,0,0,.5);opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;backdrop-filter:blur(6px)}
.ripple-card.show{opacity:1;transform:translateX(-50%) translateY(0)}
.ripple-card .rc-head{font-size:11px;color:var(--accent);font-weight:700;margin-bottom:6px;letter-spacing:.3px}
.ripple-card .rc-chain{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.ripple-card .rc-item{font-size:11px;color:var(--ink);white-space:nowrap}
.ripple-card .rc-item .d{font-weight:700}
.ripple-card .rc-item .d.up{color:#5fb85f}.ripple-card .rc-item .d.down{color:#e0796e}.ripple-card .rc-item .d.bad{color:#e05a4e}
.ripple-card .rc-arrow{color:var(--ink-faint);font-size:11px}
/* ===== FABRICATION PANEL ===== */
.fab-kpis{display:grid;grid-template-columns:1fr 1fr 1fr;gap:4px;margin-bottom:6px}
.fab-kpis .fk{background:#262a33;border:1px solid #31363f;border-radius:4px;padding:4px 6px}
.fab-kpis .fk .l{font-size:8px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.3px}
.fab-kpis .fk .v{font-size:13px;color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.fabtab.on{background:var(--select)!important;color:#fff!important}
.fab-table{width:100%;border-collapse:collapse;font-size:10px}
.fab-table th{text-align:left;color:var(--ink-faint);font-weight:600;padding:3px 5px;border-bottom:1px solid #3a3a3a;position:sticky;top:0;background:#222}
.fab-table td{padding:3px 5px;border-bottom:1px solid #2a2a2a;color:var(--ink);font-variant-numeric:tabular-nums}
.fab-table tr:hover td{background:#2a2f38}
.fab-waste{display:inline-block;padding:0 5px;border-radius:8px;font-size:9px;font-weight:600}
.fab-waste.good{background:#1f3a1f;color:#7fd47f}.fab-waste.mid{background:#3a341f;color:#e0c060}.fab-waste.bad{background:#3a1f1f;color:#e07a6e}
.fab-nest{position:relative;background:#1a1d23;border:1px solid #333;border-radius:4px;margin:4px 0;overflow:hidden}
.fab-nest .pc{position:absolute;background:#3a567f;border:1px solid #6f9fd8;box-sizing:border-box}
.fab-nest .drop{position:absolute;background:repeating-linear-gradient(45deg,#2a2a2a,#2a2a2a 4px,#222 4px,#222 8px)}
.fab-bar{position:relative;height:22px;background:#1a1d23;border:1px solid #333;border-radius:3px;margin:3px 0;overflow:hidden;display:flex}
.fab-bar .cut{height:100%;border-right:1px solid #11141a;background:#34507a;display:flex;align-items:center;justify-content:center;font-size:8px;color:#cdd;overflow:hidden;white-space:nowrap}
.fab-bar .bdrop{height:100%;background:repeating-linear-gradient(45deg,#2a2a2a,#2a2a2a 3px,#1e1e1e 3px,#1e1e1e 6px)}
/* ===== NODE EDITOR ===== */
.node-wrap{flex:1;position:relative;overflow:hidden;background:#15171c;background-image:radial-gradient(circle,#262a31 1px,transparent 1px);background-size:22px 22px;border-radius:0 0 8px 8px}
.node-edges{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}
.node-canvas{position:absolute;inset:0;z-index:2}
.node-card{position:absolute;width:170px;background:#23272f;border:1px solid #3a4150;border-radius:7px;box-shadow:0 4px 14px rgba(0,0,0,.4);font-size:11px;user-select:none}
.node-card.sel{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent)55,0 4px 14px rgba(0,0,0,.5)}
.node-card .nc-head{padding:5px 8px;border-radius:6px 6px 0 0;font-weight:600;color:#fff;cursor:grab;display:flex;justify-content:space-between;align-items:center}
.node-card .nc-head .nx{opacity:.5;cursor:pointer;font-size:12px}
.node-cat-Source .nc-head{background:#2f6b46}.node-cat-Transform .nc-head{background:#3a567f}
.node-cat-Distribute .nc-head{background:#7a5a2e}.node-cat-Logic .nc-head{background:#6b3a6b}.node-cat-Output .nc-head{background:#8a3030}
.node-card .nc-body{padding:5px 4px}
.node-row{display:flex;align-items:center;gap:4px;position:relative;min-height:20px;margin:2px 0}
.node-row .sock{width:11px;height:11px;border-radius:50%;border:2px solid #1a1a1a;cursor:crosshair;flex-shrink:0;position:absolute}
.node-row .sock.in{left:-11px}.node-row .sock.out{right:-11px}
.sock.t-GEO{background:#6fd0e0}.sock.t-NUM{background:#a0d048}.sock.t-VEC{background:#d090e0}.sock.t-STR{background:#e0b060}.sock.t-BOOL{background:#e07070}
.node-row label{font-size:9.5px;color:var(--ink-dim);flex:0 0 42px}
.node-row input,.node-row select{flex:1;min-width:0;background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:1px 4px;font:inherit;font-size:10px}
.node-row .olbl{font-size:9.5px;color:var(--ink-dim);margin-left:auto;text-align:right}
.node-addmenu{position:absolute;display:none;background:#23272f;border:1px solid #444;border-radius:6px;padding:4px;z-index:20;max-height:60vh;overflow-y:auto;box-shadow:0 6px 20px rgba(0,0,0,.5)}
.node-addmenu.show{display:block}
.node-addmenu .nam-cat{font-size:8.5px;color:var(--ink-faint);text-transform:uppercase;letter-spacing:.5px;padding:5px 8px 2px}
.node-addmenu button{display:block;width:100%;text-align:left;background:none;border:none;color:var(--ink);font:inherit;font-size:11px;padding:4px 10px;border-radius:4px;cursor:pointer}
.node-addmenu button:hover{background:var(--select)}
.node-status{position:absolute;left:8px;bottom:8px;font-size:10px;color:var(--ink-faint);background:rgba(20,22,27,.8);padding:3px 8px;border-radius:4px;z-index:5}
.statusbar b{color:var(--ink-dim);font-weight:500}
.modal-bg{position:fixed;inset:0;background:#000b;display:none;align-items:center;justify-content:center;z-index:80}
.modal-bg.show{display:flex}
.modal{background:var(--panel);border:1px solid var(--line);border-radius:6px;width:min(720px,92vw);max-height:88vh;overflow:auto;box-shadow:0 20px 70px #000c}
.modal .mh{display:flex;justify-content:space-between;align-items:center;background:var(--header);padding:10px 14px;border-radius:6px 6px 0 0}
.modal .mh h2{font-size:14px}
.modal .mh button{background:none;border:none;color:var(--ink-dim);font-size:18px;cursor:pointer}
.modal .mb{padding:16px}
.bpgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}
.bp{background:#eef0e8;border-radius:4px;padding:10px;color:#1a2330;aspect-ratio:1.4}
.bp .bt{font-size:8px;letter-spacing:.5px;text-transform:uppercase;color:#5a6b82;border-bottom:1px solid #c9d2e0;padding-bottom:3px;margin-bottom:5px;font-weight:700}
.bp svg{width:100%;height:calc(100% - 22px)}
/* ===== SHEET-SET COMPOSER ===== */
.sheet-layout{display:flex;gap:12px;align-items:flex-start}
.sheet-side{flex:0 0 210px;display:flex;flex-direction:column}
.sheet-side-h{font-size:11px;font-weight:700;color:var(--ink-dim);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}
.sheet-list{display:flex;flex-direction:column;gap:3px;max-height:48vh;overflow-y:auto}
.sheet-item{display:flex;align-items:center;gap:7px;background:#23272f;border:1px solid #353b45;border-radius:4px;padding:5px 8px;cursor:pointer}
.sheet-item.active{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.sheet-item .sh-num{font-size:10px;font-weight:700;color:var(--accent);font-variant-numeric:tabular-nums;flex:0 0 auto}
.sheet-item .sh-name{flex:1;font-size:11px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sheet-item .sh-del{background:none;border:none;color:var(--ink-faint);cursor:pointer;font-size:11px;padding:0 2px}
.sheet-item .sh-del:hover{color:#e0796e}
.sheet-main{flex:1;min-width:0}
.sheet-props{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:8px}
.sheet-props label{font-size:10px;color:var(--ink-faint);display:flex;flex-direction:column;gap:2px}
.sheet-props input,.sheet-props select{background:#1a1d23;border:1px solid #333;color:var(--ink);border-radius:3px;padding:3px 6px;font:inherit;font-size:11px}
.sheet-preview{background:#555;border-radius:4px;padding:10px;display:flex;justify-content:center;max-height:52vh;overflow:auto}
.sheet-preview svg{width:100%;height:auto;max-height:50vh;box-shadow:0 4px 18px rgba(0,0,0,.5)}
.toast{position:fixed;bottom:36px;left:50%;transform:translateX(-50%) translateY(15px);background:#2b2b2b;border:1px solid var(--accent);padding:9px 16px;border-radius:5px;font-size:12px;opacity:0;transition:.25s;z-index:90;pointer-events:none}
.lib-preview{position:fixed;z-index:130;display:none;background:rgba(22,26,33,.97);border:1px solid var(--line-soft);
  border-radius:8px;padding:6px;box-shadow:0 14px 50px #000c;backdrop-filter:blur(6px);pointer-events:none}
.lib-preview.show{display:block}
.lib-preview canvas{display:block;border-radius:5px;background:linear-gradient(180deg,#1a1f29,#2b3340)}
.lib-preview .lp-label{font-size:11px;color:var(--ink);text-align:center;padding:5px 2px 2px;font-weight:600}
.lib-inspector{position:fixed;z-index:200;display:none;left:50%;top:50%;transform:translate(-50%,-50%);
  background:rgba(20,24,31,.985);border:1px solid var(--line-soft);border-radius:10px;padding:10px;
  box-shadow:0 18px 60px rgba(0,0,0,.6);width:440px}
.lib-inspector.show{display:block}
.lib-inspector .li-head{display:flex;align-items:center;justify-content:space-between;margin:0 2px 8px;font-weight:700;color:var(--ink);font-size:13px}
.lib-inspector .li-x{background:none;border:none;color:var(--ink-soft);font-size:14px;cursor:pointer;padding:2px 6px;border-radius:4px}
.lib-inspector .li-x:hover{background:rgba(255,255,255,.08);color:var(--ink)}
.lib-inspector canvas{display:block;width:420px;height:320px;border-radius:7px;cursor:grab;
  background:radial-gradient(120% 120% at 50% 30%,#2b3340,#161a21);touch-action:none}
.lib-inspector canvas:active{cursor:grabbing}
.lib-inspector .li-hint{text-align:center;font-size:10.5px;color:var(--ink-soft);padding:6px 0 2px;letter-spacing:.02em}
.lib-inspector .li-actions{display:flex;gap:8px;margin-top:6px}
.lib-inspector .li-tog{background:rgba(255,255,255,.08);color:var(--ink);border:1px solid var(--line-soft);border-radius:6px;padding:9px 12px;font-weight:600;font-size:12px;cursor:pointer;white-space:nowrap}
.lib-inspector .li-tog:hover{background:rgba(255,255,255,.14)}
.lib-inspector .li-tog.on{background:var(--accent,#3a7bd5);color:#fff;border-color:transparent}
.lib-inspector .li-add{flex:1;background:var(--accent,#3a7bd5);color:#fff;border:none;border-radius:6px;padding:9px;font-weight:700;font-size:12.5px;cursor:pointer}
.lib-inspector .li-add:hover{filter:brightness(1.08)}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
::-webkit-scrollbar{width:11px;height:11px}::-webkit-scrollbar-thumb{background:#222;border:3px solid var(--region);border-radius:6px}::-webkit-scrollbar-track{background:transparent}
.errbox{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:#222;z-index:200;padding:40px;text-align:center;flex-direction:column;gap:12px;color:var(--ink)}
.errbox.show{display:flex}
/* ===== REVIT RIBBON (compact, professional) ===== */
.ribbon{background:linear-gradient(180deg,#3a3a3a,#2d2d2d);border-bottom:1px solid var(--line);display:flex;align-items:stretch;padding:3px 4px 0;gap:0;height:94px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}
.ribbon::-webkit-scrollbar{height:5px}.ribbon::-webkit-scrollbar-thumb{background:#555;border-radius:3px}
.ribbon-panel{display:flex;flex-direction:column;align-items:stretch;padding:0;position:relative;border-right:1px solid #232323;min-width:0}
.ribbon-panel:last-child{border-right:none}
.ribbon-panel .rp-tools{display:flex;gap:1px;flex:1;align-items:stretch;padding:4px 7px 2px;justify-content:center}
.ribbon-panel .rp-label{font-size:8.5px;color:var(--ink-faint);text-transform:none;letter-spacing:.3px;text-align:center;padding:2px 0 3px;font-weight:500;width:100%;border-top:1px solid #333;margin-top:auto;position:relative}
.ribbon-panel .rp-label::after{content:'▾';font-size:6px;margin-left:3px;opacity:.5}
/* Workspace tabs living in the empty space at the right of the ribbon */
.ribbon-ws{margin-left:auto;display:flex;flex-direction:column;justify-content:center;align-items:flex-end;padding:0 12px 0 16px;flex-shrink:0;align-self:stretch}
.ribbon-ws-label{font-size:8.5px;font-weight:700;letter-spacing:1px;color:var(--ink-faint);text-transform:uppercase;margin-bottom:6px}
.ribbon-ws-tabs{display:flex;gap:2px;flex-wrap:wrap;justify-content:flex-end;max-width:560px}
.ribbon-ws-tabs .ws-tab{background:#333;border:1px solid var(--line-soft);color:var(--ink-dim);font:inherit;font-size:11px;padding:5px 12px;cursor:pointer;border-radius:4px}
.ribbon-ws-tabs .ws-tab:hover{color:var(--ink);background:#454545}
.ribbon-ws-tabs .ws-tab.on{background:var(--accent);color:#1a1a1a;font-weight:600;border-color:var(--accent)}
.ribbon-ws-tabs .ws-tab.ws-engines{color:var(--accent);font-weight:600}
.ribbon-ws-tabs .ws-tab.ws-engines.on{color:#1a1a1a}
/* a sub-group = a column of stacked small buttons, divider between groups */
.rp-group{display:flex;flex-direction:column;gap:1px;justify-content:center;padding:0 2px;border-right:1px solid #2a2a2a}
.rp-group:last-child{border-right:none}
.rp-group.cols{flex-direction:row;align-items:flex-start}
/* LARGE button: icon over label, prominent */
.rbtn.lg{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:3px;
  background:none;border:1px solid transparent;border-radius:3px;color:var(--ink);cursor:pointer;
  padding:5px 7px 3px;min-width:52px;font:inherit;line-height:1.05}
.rbtn.lg .ic{display:inline-flex;align-items:center;justify-content:center;opacity:.92;margin-bottom:1px}
.rbtn.lg .tx{font-size:9.5px;color:var(--ink-dim);text-align:center;max-width:58px;line-height:1.15;white-space:normal;word-break:break-word}
/* SMALL button: icon + label in a row, compact stack */
.rbtn.sm{display:flex;flex-direction:row;align-items:center;gap:5px;
  background:none;border:1px solid transparent;border-radius:3px;color:var(--ink);cursor:pointer;
  padding:2px 6px 2px 4px;min-width:78px;font:inherit;line-height:1;height:21px}
.rbtn.sm .ic{display:inline-flex;align-items:center;justify-content:center;opacity:.88;width:15px;flex:0 0 15px}
.rbtn.sm .tx{font-size:10px;color:var(--ink-dim);text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rbtn:hover{background:#3f567f;border-color:#5a82c4}
.rbtn:hover .tx{color:#fff}
.rbtn:active{background:var(--select)}
/* legacy fallback for any plain .rbtn */
.rbtn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:none;border:1px solid transparent;border-radius:3px;color:var(--ink);cursor:pointer;padding:4px 6px;min-width:42px;font:inherit;line-height:1}
.rbtn .ic{display:inline-flex;align-items:center;justify-content:center;line-height:1;opacity:.9}
.rbtn .tx{font-size:9px;color:var(--ink-dim);text-align:center;max-width:52px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* ===== PROJECT BROWSER (Revit) ===== */
.workarea{display:flex;gap:1px;background:var(--line);min-height:0;width:100%;max-width:100vw;overflow:hidden}
.workarea > .toolbar{flex:0 0 38px;width:38px}
.workarea > .browser{flex:0 0 196px;width:196px;transition:flex-basis .18s ease,width .18s ease}
.workarea > .viewport{flex:1 1 0;min-width:0;overflow:hidden}
.workarea > .rightcol{flex:0 0 280px;width:280px;transition:flex-basis .18s ease,width .18s ease}
.workarea.browser-collapsed > .browser{flex:0 0 22px;width:22px}
.workarea.right-collapsed > .rightcol{flex:0 0 22px;width:22px}
.workarea > *{min-width:0;overflow:hidden}
.browser{background:var(--region);display:flex;flex-direction:column;min-height:0;overflow:hidden;position:relative}
.browser .rhead{display:flex;align-items:center;justify-content:space-between;gap:6px;background:var(--header);padding:4px 6px 4px 8px;flex-shrink:0;font-size:11px;color:var(--ink-dim)}
.browser .bcollapse{background:none;border:none;color:var(--ink-faint);cursor:pointer;font-size:15px;line-height:1;padding:0 3px;border-radius:3px}
.browser .bcollapse:hover{color:var(--ink);background:#454545}
.browser .bexpand{display:none}
.workarea.browser-collapsed .browser .rhead,
.workarea.browser-collapsed .browser .bbody{display:none}
.workarea.browser-collapsed .browser .bexpand{display:flex;flex-direction:column;align-items:center;gap:10px;
  width:100%;height:100%;background:var(--region);border:none;cursor:pointer;color:var(--ink-dim);padding:8px 0}
.workarea.browser-collapsed .browser .bexpand:hover{color:var(--ink);background:#333}
.browser .bexpand .chev{font-size:15px;line-height:1}
.browser .bexpand .vlabel{writing-mode:vertical-rl;text-orientation:mixed;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-faint)}
.browser .bbody{flex:1;overflow-y:auto;padding:3px}
/* right column collapse */
.rightcol{position:relative}
.rcollapse{background:none;border:none;color:var(--ink-faint);cursor:pointer;font-size:15px;line-height:1;padding:0 3px;border-radius:3px}
.rcollapse:hover{color:var(--ink);background:#454545}
.rexpand{display:none}
.workarea.right-collapsed .rightcol > .region,
.workarea.right-collapsed .rightcol > .region-sep{display:none}
.workarea.right-collapsed .rightcol .rexpand{display:flex;flex-direction:column;align-items:center;gap:10px;
  width:100%;height:100%;background:var(--region);border:none;cursor:pointer;color:var(--ink-dim);padding:8px 0}
.workarea.right-collapsed .rightcol .rexpand:hover{color:var(--ink);background:#333}
.rexpand .chev{font-size:15px;line-height:1}
.rexpand .vlabel{writing-mode:vertical-rl;text-orientation:mixed;font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-faint)}
.bnode{display:flex;align-items:center;gap:5px;padding:2px 6px;border-radius:3px;cursor:pointer;font-size:11px;color:var(--ink)}
.bnode:hover{background:#3a3a3a}
.bnode.sel{background:var(--select-bg);outline:1px solid var(--select)}
.bnode.grp{color:var(--ink-dim);font-weight:600}
.bnode .tw{width:11px;text-align:center;color:var(--ink-faint);font-size:9px}
.bnode .ic{width:14px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-faint)}
.bnode.child{padding-left:18px}
.bnode.child2,.bnode.child2v{padding-left:32px}
.bnode.child3{padding-left:46px}
.bnode.root{color:var(--ink);font-weight:700;font-size:11.5px}
.bnode.dim{color:var(--ink-faint);font-style:italic;cursor:default;padding-left:32px}
.bnode.dim:hover{background:none}
.bnode.grp .tw{transition:transform .12s}
.bnode.grp.collapsed .tw{transform:rotate(-90deg)}
.bnode.child2v{color:var(--ink-dim);font-weight:600}
.bsearch{padding:4px 6px;border-bottom:1px solid var(--line)}
.bsearch input{width:100%;background:#252525;border:1px solid #3a3a3a;color:var(--ink);border-radius:4px;padding:4px 8px;font:inherit;font-size:11px;outline:none}
.bsearch input:focus{border-color:var(--select)}
.bsearch input::placeholder{color:var(--ink-faint)}
.ecochk{display:flex;flex-direction:column;gap:3px;margin:4px 0}
.ecochk label{display:flex;align-items:center;gap:6px;font-size:10px;color:#bbb;cursor:pointer}
.ecochk input{margin:0}
.aitheme2{background:#2a2a2a;border:1px solid #444;color:#ccc;font-size:10px;padding:5px 2px;border-radius:4px;cursor:pointer}
.aitheme2:hover{background:#333;border-color:#666}
.cmd-palette{position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:9999;display:none;align-items:flex-start;justify-content:center}
.cmd-palette.show{display:flex}
.cmd-box{margin-top:12vh;width:560px;max-width:90vw;background:#1e1f24;border:1px solid #3a3d45;border-radius:10px;box-shadow:0 20px 60px rgba(0,0,0,0.6);overflow:hidden}
#cmdInput{width:100%;box-sizing:border-box;background:#26282e;border:none;border-bottom:1px solid #3a3d45;color:#eee;font-size:15px;padding:14px 16px;outline:none}
.cmd-list{max-height:48vh;overflow-y:auto;padding:4px}
.cmd-item{display:flex;justify-content:space-between;align-items:center;padding:9px 12px;border-radius:6px;cursor:pointer;font-size:13px;color:#ddd}
.cmd-item.sel{background:var(--accent,#e0762e);color:#fff}
.cmd-item.sel .cmd-meta{color:rgba(255,255,255,0.8)}
.cmd-meta{font-size:11px;color:#888}
.cmd-empty{padding:18px;text-align:center;color:#888;font-size:13px}
.cmd-sec{padding:8px 12px 3px;font-size:9.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:var(--ink-faint,#888)}
.cmd-sec:first-child{padding-top:4px}
.cmd-hint{padding:8px 14px;font-size:10px;color:#777;border-top:1px solid #2e3038;background:#1a1b20}
.quad-overlay{position:absolute;inset:0;pointer-events:none;z-index:5;display:none}
.quad-overlay .quad-vline{position:absolute;left:50%;top:0;bottom:0;width:1px;background:rgba(224,118,46,0.5);transform:translateX(-0.5px)}
.quad-overlay .quad-hline{position:absolute;top:50%;left:0;right:0;height:1px;background:rgba(224,118,46,0.5);transform:translateY(-0.5px)}
.quad-overlay .quad-label{position:absolute;font:600 10px 'Segoe UI',sans-serif;color:#9aa3ad;background:rgba(16,18,22,0.7);padding:2px 7px;border-radius:0 0 5px 0;letter-spacing:0.04em}
.quad-overlay .quad-label.active{color:#fff;background:rgba(224,118,46,0.85)}
.quad-overlay .q0{left:0;top:0}.quad-overlay .q1{left:50%;top:0}
.quad-overlay .q2{left:0;top:50%}.quad-overlay .q3{left:50%;top:50%}

/* ============================================================================
   MOBILE / SMALL-SCREEN RESPONSIVE LAYOUT
   The app is a dense desktop CAD UI. On phones the desktop ribbon + side docks
   overlap and crush the viewport. These rules reflow it into something usable:
   single-row scrollable ribbon, scrollable menu bar, overlay side panels, and
   larger tap targets. Desktop (>820px) is completely unaffected.
   ============================================================================ */
@media (max-width:820px){
  /* let content breathe; allow pinch-zoom */
  html,body{ -webkit-text-size-adjust:100%; }

  /* --- overall grid: slimmer top rows, give the viewport the screen --- */
  #app{ grid-template-rows:34px 64px 34px minmax(0,1fr) 22px !important; }
  #app.engbar-hidden{ grid-template-rows:34px 64px 0 minmax(0,1fr) 22px !important; }
  #app.ribbon-collapsed{ grid-template-rows:34px 30px 34px minmax(0,1fr) 22px !important; }

  /* --- top menu bar: horizontal scroll, real tap targets, no overlap --- */
  .topbar{ overflow-x:auto; overflow-y:hidden; white-space:nowrap; gap:1px; -webkit-overflow-scrolling:touch; }
  .topbar::-webkit-scrollbar{ height:0; }
  .topbar > *{ flex:0 0 auto; }
  .topbar button, .topbar .mitem, .topbar a{ min-height:30px; padding:6px 9px; font-size:13px; }

  /* --- RIBBON: one horizontal scrolling strip; panels never wrap/overlap --- */
  .ribbon{ height:64px !important; padding:2px 4px 0; -webkit-overflow-scrolling:touch; align-items:stretch; }
  .ribbon-panel{ flex:0 0 auto; }
  .ribbon-panel .rp-tools{ flex-wrap:nowrap; padding:3px 6px 2px; }
  .ribbon-panel .rp-label{ font-size:8px; padding:1px 0 2px; }
  /* the workspace-tabs block: stop it floating over the tools — make it inline + scroll with the ribbon */
  .ribbon-ws{ margin-left:8px !important; flex-direction:row !important; align-items:center !important;
    padding:0 8px !important; flex:0 0 auto; }
  .ribbon-ws-label{ display:none !important; }
  .ribbon-ws-tabs{ flex-wrap:nowrap !important; max-width:none !important; }
  .ribbon-ws-tabs .ws-tab{ padding:7px 12px; font-size:12px; }

  /* ribbon tool buttons: bigger touch targets */
  .ribbon-panel .rp-tools button{ min-width:42px; min-height:42px; }

  /* --- ENGINE BAR: taller, scrollable, tappable --- */
  .enginebar-row{ height:34px !important; }
  .ebr-scroll{ -webkit-overflow-scrolling:touch; }
  .ebr-scroll button{ min-height:28px; padding:4px 9px; font-size:12px; }
  .ebr-label{ font-size:9px; padding:0 6px; }

  /* --- WORKAREA: side docks become slim/overlay so the viewport owns the screen --- */
  .workarea{ position:relative; }
  .workarea > .toolbar{ flex:0 0 34px !important; width:34px !important; }
  /* browser + right column overlay the viewport instead of stealing its width */
  .workarea > .browser{
    position:absolute; left:0; top:0; bottom:0; z-index:40;
    flex:0 0 78vw !important; width:78vw !important; max-width:300px;
    box-shadow:2px 0 18px #000a; }
  .workarea > .rightcol{
    position:absolute; right:0; top:0; bottom:0; z-index:40;
    flex:0 0 82vw !important; width:82vw !important; max-width:320px;
    box-shadow:-2px 0 18px #000a; }
  /* when collapsed they shrink to a slim reopen tab pinned to the edge */
  .workarea.browser-collapsed > .browser{ flex:0 0 26px !important; width:26px !important; box-shadow:none; }
  .workarea.right-collapsed > .rightcol{ flex:0 0 26px !important; width:26px !important; box-shadow:none; }
  .workarea > .viewport{ flex:1 1 auto !important; width:100% !important; }

  /* viewport header: scrollable, tappable */
  .vp-header{ overflow-x:auto; overflow-y:hidden; white-space:nowrap; height:30px; }
  .vp-header::-webkit-scrollbar{ height:0; }
  .vp-header button{ min-height:26px; padding:4px 8px; }
  .vp-header .grab-track{ width:max-content; }

  /* left tool rail: bigger icons */
  .workarea > .toolbar button{ min-height:38px; }

  /* --- FLOATING STUDIO / FEATURE PANELS: near-full-width, centered, scrollable --- */
  .float-panel{ width:94vw !important; max-width:94vw !important; left:3vw !important; right:3vw !important;
    max-height:84vh !important; }
  .float-panel .fp-head{ min-height:40px; }
  .float-panel .fp-head button{ min-width:34px; min-height:34px; }

  /* modals fill the screen */
  .modal{ width:94vw !important; max-width:94vw !important; max-height:88vh !important; }

  /* generic: make small buttons easier to hit without breaking desktop look */
  .bigbtn{ min-height:42px; }
  select.field, input.field{ min-height:34px; font-size:13px; }
}

/* very narrow phones */
@media (max-width:430px){
  #app{ grid-template-rows:32px 58px 32px minmax(0,1fr) 20px !important; }
  .ribbon{ height:58px !important; }
  .ribbon-panel .rp-tools button{ min-width:38px; min-height:38px; }
  .float-panel{ width:96vw !important; max-width:96vw !important; left:2vw !important; }
}

/* ===== Ribbon width-allocation fix (root cause, measured) =====
   The ribbon was squeezing panels to equal flex:1 widths narrower than their
   content, and .rp-tools used justify-content:center which overflows BOTH sides
   into neighbours instead of flowing left and letting the ribbon scroll.
   Fix the mechanism: panels size to content, tools flow from the left, the
   ribbon's existing overflow-x:auto handles total width. Labels stay readable;
   no cross-panel bleed. Scoped to the top .ribbon only. */
.ribbon > .ribbon-panel{flex:0 0 auto;overflow:hidden}
.ribbon > .ribbon-panel .rp-tools{justify-content:flex-start;flex:0 0 auto}
.ribbon > .ribbon-panel .rbtn.sm{min-width:78px}
.ribbon > .ribbon-panel .rbtn.sm .tx{min-width:0}
/* flyout (my BIM Studio menu) — same clean behaviour */
#revitRibbonStrip .ribbon-panel{overflow:hidden}
#revitRibbonStrip .rp-tools{justify-content:flex-start}

/* ===== Right-side collapsed rail → MATCH the left side (BIM Studio rail).
   The left collapsed rail shows an accent-coloured vertical label with a filled
   "on" state. Mirror that on the right "PANELS" rail (.rexpand) so both collapsed
   rails look and behave consistently. ===== */
.workarea.right-collapsed .rightcol .rexpand .vlabel{
  color:#4a9eff;font-weight:700;font-size:9px;letter-spacing:1.5px;text-transform:uppercase}
.workarea.right-collapsed .rightcol .rexpand:hover .vlabel{color:#7db4ff}
.workarea.right-collapsed .rightcol .rexpand.on .vlabel,
.workarea.right-collapsed .rightcol .rexpand:active .vlabel{color:#0c1016}
.workarea.right-collapsed .rightcol .rexpand.on{background:var(--accent,#4a9eff);border-radius:4px}
/* (kept) when an individual region is collapsed with the column still open,
   its title reads vertically — harmless sub-case, matches the vertical style. */
.rightcol .region.collapsed .rhead{flex-direction:column;align-items:center;gap:6px;padding:8px 2px}
.rightcol .region.collapsed .rhead .ttl{writing-mode:vertical-rl;text-orientation:mixed;
  font-size:9px;letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-faint);white-space:nowrap}
.rightcol .region.collapsed .rhead .sp{display:none}
.rightcol .region.collapsed .reg-chev{transform:rotate(-90deg)}
