/* fivemlab-vehicle-viewer — viewer styles. Component rules ported from the optimiser's 3D viewer; the tokens are
 * fivemlab.com's palette (dark, orange accents #FCA32E #FC7201 #E65201, Manrope / JetBrains Mono). */
:root{
  --bg:#0b0c10; --bg2:#0b0c10; --card:#14161c; --card2:#1a1d25; --border:#262a35;
  --accent:#fc7201; --accent2:#fca32e; --accent3:#e65201; --text:#eceef3; --fg:#eceef3; --muted:#858b9b;
  --red:#ff6b6b; --yellow:#fbbf24; --green:#4ade80;
  --font:'Manrope',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --on-accent:#1a0d00; --accent-rgb:252,114,1;
  --hover-bg:rgba(255,255,255,.06); --hover-bg2:rgba(252,114,1,.16);
  --radius:8px; --radius-panel:12px; --ctl-h:28px;
  --b-red:255,107,107; --b-orange:252,163,46; --b-yellow:251,191,36; --b-green:74,222,128; --b-blue:96,165,250;
  --b-cyan:34,211,238; --b-violet:167,139,250; --b-pink:249,168,212; --b-slate:133,139,155;
  color-scheme:dark; accent-color:var(--accent);
}
*{scrollbar-width:thin;scrollbar-color:var(--border) transparent}
*::-webkit-scrollbar{width:9px;height:9px}
*::-webkit-scrollbar-track,*::-webkit-scrollbar-corner{background:transparent}
*::-webkit-scrollbar-thumb{background:var(--border);border-radius:8px;border:2px solid transparent;background-clip:padding-box}
*::-webkit-scrollbar-thumb:hover{background:var(--muted);border:2px solid transparent;background-clip:padding-box}
/* ═══════════════════════════════════════════════════════════════════════════
   3D viewer — visual system. Tokens come from /theme.css (shared with the
   dashboard); everything below is component styling. Rhythm: 4/8/12/16 px,
   controls 28px tall, radius 6 (controls) / 8 (panels) / 10 (overlays).
   Icons are inline SVG masks painted with currentColor so every theme works.
   ═══════════════════════════════════════════════════════════════════════════ */
:root{
  --surface:var(--bg,#0d1117);
  --surface2:var(--card,#161b22);
  --surface3:var(--card2,#21262d);
  --line:var(--border,#30363d);
  --line-soft:var(--border,#30363d);
  --glass:var(--card,#161b22);
  --glass-line:var(--border,#30363d);
  --shadow:0 6px 24px rgba(0,0,0,.35);
  --shadow-sm:0 2px 8px rgba(0,0,0,.25);
  --r:6px; --r-panel:8px; --r-ovl:10px; --ctl:28px;
  --danger:#dc2626; --danger-soft:rgba(var(--b-red),.14); --danger-ink:var(--red,#fca5a5);
  --warn:#f59e0b; --warn-soft:rgba(var(--b-yellow),.12); --warn-ink:var(--yellow,#fbbf24);
  --ok:var(--green,#22c55e);
  /* icon library */
  --ico-cube:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 2.5l8 4.5v10l-8 4.5-8-4.5V7z'/><path d='M12 12l8-4.5M12 12L4 7.5M12 12v9.5'/></svg>"); --ico-target:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='8'/><circle cx='12' cy='12' r='2.5'/><path d='M12 2v3M12 19v3M2 12h3M19 12h3'/></svg>"); --ico-history:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='9'/><path d='M12 7v5l3.5 2'/></svg>"); --ico-sliders:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M4 7h9M17 7h3M4 12h3M11 12h9M4 17h12M20 17h0'/><circle cx='15' cy='7' r='2'/><circle cx='9' cy='12' r='2'/><circle cx='18' cy='17' r='2'/></svg>"); --ico-tree:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M7 4v16M7 9h6M7 15h10'/><circle cx='7' cy='4' r='1.5'/><circle cx='15' cy='9' r='1.5'/><circle cx='19' cy='15' r='1.5'/></svg>");
  --ico-palette:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 3a9 9 0 1 0 0 18c1.2 0 2-.8 2-2 0-.6-.3-1-.6-1.4-.3-.4-.4-.8-.4-1.2 0-1 .8-1.8 1.8-1.8H17a4 4 0 0 0 4-4c0-4.4-4-7.6-9-7.6z'/><circle cx='7.5' cy='11' r='1.2'/><circle cx='10.5' cy='7' r='1.2'/><circle cx='15.5' cy='7.5' r='1.2'/></svg>"); --ico-sun:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='4'/><path d='M12 2v2.5M12 19.5V22M2 12h2.5M19.5 12H22M4.9 4.9l1.8 1.8M17.3 17.3l1.8 1.8M4.9 19.1l1.8-1.8M17.3 6.7l1.8-1.8'/></svg>"); --ico-wrench:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M14.5 6.5a4.5 4.5 0 0 0-5.8 5.8L3 18l3 3 5.7-5.7a4.5 4.5 0 0 0 5.8-5.8L15 12l-3-3z'/></svg>"); --ico-tag:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M20.5 13l-8.5 8.5L3 12.5V3h9.5z'/><circle cx='7.5' cy='7.5' r='1.5'/></svg>"); --ico-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='4' width='18' height='16' rx='2'/><circle cx='9' cy='9.5' r='1.8'/><path d='M21 16l-5-5-8 8'/></svg>"); --ico-puzzle:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 4h6v3.5a2 2 0 1 0 0 3.5V15h-3.5a2 2 0 1 1-3.5 0H4V11a2 2 0 1 0 0-3.5V4z'/></svg>"); --ico-layers:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 3l9 4.5-9 4.5-9-4.5z'/><path d='M3 12l9 4.5 9-4.5M3 16.5L12 21l9-4.5'/></svg>");
  --ico-trash:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M3 6h18M8 6V4h8v2M6 6l1 14h10l1-14M10 11v6M14 11v6'/></svg>");
  --ico-scissors:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='6' cy='6' r='3'/><circle cx='6' cy='18' r='3'/><path d='M20 4L8.1 15.9M8.1 8.1L20 20'/></svg>"); --ico-frame:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M4 9V4h5M15 4h5v5M20 15v5h-5M9 20H4v-5'/></svg>"); --ico-camera:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M4 8h3.5l2-3h5l2 3H20v11H4z'/><circle cx='12' cy='13' r='3.5'/></svg>"); --ico-grid:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='3' width='18' height='18' rx='1'/><path d='M3 9h18M3 15h18M9 3v18M15 3v18'/></svg>"); --ico-map:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M3 6l6-3 6 3 6-3v15l-6 3-6-3-6 3z'/><path d='M9 3v15M15 6v15'/></svg>"); --ico-bg:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='3' width='18' height='18' rx='2'/><path d='M3 16l5-5 4 4 3-3 6 6'/></svg>"); --ico-alert:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M12 3.5L21.5 20h-19z'/><path d='M12 10v4.5M12 17.2h.01'/></svg>"); --ico-info:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='12' cy='12' r='9'/><path d='M12 11v5.5M12 7.8h.01'/></svg>"); --ico-eye:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M2 12s3.6-7 10-7 10 7 10 7-3.6 7-10 7S2 12 2 12z'/><circle cx='12' cy='12' r='3'/></svg>"); --ico-undo:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 14L4 9l5-5'/><path d='M4 9h10.5a5.5 5.5 0 0 1 0 11H11'/></svg>"); --ico-redo:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M15 14l5-5-5-5'/><path d='M20 9H9.5a5.5 5.5 0 0 0 0 11H13'/></svg>"); --ico-bone:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M7.5 16.5l9-9'/><path d='M7.8 20.2a2.4 2.4 0 1 1-3.3-3.1 2.4 2.4 0 1 1 3.1-3.3l2.1 2.1-1.9 1.9z'/><path d='M16.2 3.8a2.4 2.4 0 1 1 3.3 3.1 2.4 2.4 0 1 1-3.1 3.3l-2.1-2.1 1.9-1.9z'/></svg>"); --ico-chev:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M9 6l6 6-6 6'/></svg>");
}
:root{--r:var(--radius);--r-panel:var(--radius-panel);--r-ovl:var(--radius-panel)}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%;background:var(--bg,#0d1117);color:var(--text,#c9d1d9);font:13px/1.45 var(--font,'Segoe UI',system-ui,sans-serif);overflow:hidden;-webkit-font-smoothing:antialiased}
::selection{background:rgba(var(--accent-rgb),.35)}
/* scrollbars: theme.css (one rule for every page). Solid tokens or rgba(var(--x-rgb),a) only: the user's browser drops CSS colour mixing */
:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.ico{display:inline-block;width:14px;height:14px;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;flex:none;vertical-align:-2px}

/* ── Layout ─────────────────────────────────────────────────────────────── */
#app{display:grid;grid-template-columns:1fr 6px var(--sb-w,400px);grid-template-rows:minmax(0,1fr);height:100vh;height:100dvh;overflow:hidden}
#viewport,#sidebar{min-height:0;max-height:100%}
#viewport{position:relative;background:var(--bg2,#0a0d12);min-width:200px}
#viewport canvas{display:block;width:100%;height:100%}
#splitter{background:var(--line);cursor:col-resize;position:relative;transition:background .15s}
#splitter:hover,#splitter.dragging{background:var(--accent)}
#splitter::after{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:2px;height:32px;background:var(--muted);border-radius:1px;opacity:.6}
#app.sb-hidden{grid-template-columns:1fr 0 0}
#app.sb-hidden #sidebar,#app.sb-hidden #splitter{display:none}

/* ── Viewport overlays: one glass language ───────────────────────────────── */
#hud,#status,#viewport-toolbar,#db-chip,#sb-toggle{background:var(--glass);border:1px solid var(--glass-line);backdrop-filter:blur(10px) saturate(1.2);-webkit-backdrop-filter:blur(10px) saturate(1.2);box-shadow:var(--shadow-sm)}
#hud{position:absolute;top:12px;left:12px;border-radius:var(--r-ovl);padding:9px 12px 8px;font-size:12px;color:var(--muted);max-width:60%;line-height:1.4}
#hud strong{color:var(--text);font-size:13px;letter-spacing:.01em}
#hud-help{display:block;margin-top:2px;font-size:11px;opacity:.85}
#hud .stats{margin-top:5px;padding-top:5px;border-top:1px solid var(--line-soft);font-family:var(--mono);font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
#viewport.db-mode #hud{max-width:max(160px,calc(50% - 345px))}
#status{position:absolute;top:12px;right:12px;border-radius:var(--r-ovl);padding:8px 12px;font-size:12px;max-width:46%}
#status:empty{display:none}
#status.loading{color:var(--accent)}
#status.error{color:var(--danger-ink);border-color:var(--danger)}
#viewport.db-mode #status{transition:top .15s}
#viewport-toolbar{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);display:flex;gap:2px;flex-wrap:wrap;justify-content:center;align-items:center;width:max-content;max-width:calc(100% - 24px);border-radius:var(--r-ovl);padding:4px;z-index:4}
#viewport-toolbar button{display:inline-flex;align-items:center;gap:6px;height:26px;min-height:0;padding:0 9px;font-size:11.5px;font-weight:500;border:1px solid transparent;border-radius:var(--r);background:transparent;color:var(--text)}
#viewport-toolbar button:hover{background:var(--hover-bg,rgba(255,255,255,.07));border-color:var(--line)}
#viewport-toolbar button.active{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
#viewport-toolbar button::before{content:'';display:none;width:13px;height:13px;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat;flex:none;opacity:.9}
#btn-debadge{--i:var(--ico-scissors);color:var(--danger-ink);border-color:rgba(var(--b-red),.45)!important}
#btn-debadge.active{background:var(--danger)!important;border-color:var(--danger)!important;color:#fff}
#btn-reset-view{--i:var(--ico-frame)} #tb-export>summary{--i:var(--ico-camera)} #btn-bg{--i:var(--ico-bg)} #btn-wire{--i:var(--ico-grid)} #btn-snap,#btn-snap-alpha{--i:var(--ico-camera)}
#btn-debadge::before,#btn-reset-view::before,#btn-bg::before,#btn-wire::before,#btn-snap::before,#btn-snap-alpha::before{display:inline-block}
#build-badge{font-family:var(--mono);font-size:10px;color:var(--muted);user-select:all;cursor:default;white-space:nowrap}
#uv-pop{display:flex;flex-direction:column;gap:8px;font-size:11.5px}
#uv-pop .uv-row{display:flex;align-items:center;gap:8px;justify-content:space-between}
#uv-pop .uv-row select{min-width:0}
.rail-btn.rail-bottom{margin-top:auto}
#uv-pop .uv-row > span{flex:0 0 108px;color:var(--muted)}
#uv-pop .uv-row > input[type=checkbox]{margin:0 auto 0 0}
#uv-pop select{flex:1;font-size:11.5px}
#uv-pop button{font-size:11.5px;padding:0 12px}
#uv-pop #uv-preview{display:block;width:100%;object-fit:contain;background:#222 url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16'><rect width='8' height='8' fill='%23333'/><rect x='8' y='8' width='8' height='8' fill='%23333'/></svg>") repeat;border:1px solid var(--line);border-radius:var(--r)}
#uv-pop #uv-preview[hidden]{display:none}
#sb-toggle{position:absolute;top:50%;right:0;transform:translateY(-50%);z-index:6;width:18px;height:64px;padding:0;min-height:0;border-radius:var(--r) 0 0 var(--r);border-right:0;color:var(--muted);font-size:11px;cursor:pointer}
#sb-toggle:hover{color:var(--text);background:var(--surface3)}

/* ── Controls ────────────────────────────────────────────────────────────── */
select,input,button{background:var(--surface3);color:var(--text);border:1px solid var(--line);border-radius:var(--r);padding:0 10px;font:inherit;font-size:12px;min-height:var(--ctl);line-height:1.2;transition:border-color .12s,background .12s,color .12s}
input[type=text]{padding:0 10px}
input[type=checkbox],input[type=radio],input[type=color],input[type=range]{min-height:0;padding:0}
input[type=checkbox],input[type=radio]{accent-color:var(--accent);width:14px;height:14px;margin:0;cursor:pointer}
input[type=range]{accent-color:var(--accent);height:18px;cursor:pointer;background:transparent;border:0}
input[type=color]{width:34px;height:24px;border:1px solid var(--line);border-radius:var(--r);background:transparent;cursor:pointer;padding:2px}
input[type=color]::-webkit-color-swatch-wrapper{padding:0}
input[type=color]::-webkit-color-swatch{border:0;border-radius:3px}
select:focus,input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px rgba(var(--accent-rgb),.18)}
select{flex:1;min-width:0;cursor:pointer;appearance:none;-webkit-appearance:none;padding-right:26px;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");background-repeat:no-repeat;background-position:right 8px center;background-size:13px}
button{cursor:pointer;font-weight:500}
button:hover{background:var(--hover-bg,rgba(255,255,255,.07));border-color:rgba(var(--b-slate),.5)}
button:active{transform:translateY(.5px)}
button:disabled{opacity:.45;cursor:default;transform:none}
button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:600}
button.primary:hover{background:var(--accent);filter:brightness(1.12)}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.spin{display:inline-block;width:12px;height:12px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite;vertical-align:-2px;margin-right:6px}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation-duration:.01ms!important}}

/* ── Sidebar & panels ────────────────────────────────────────────────────── */
#sidebar{background:var(--surface);border-left:1px solid var(--line);padding:0;overflow:hidden;display:grid;grid-template-columns:58px minmax(0,1fr);min-width:0}
#sidebar h2{font-size:11px;font-weight:700;margin:0;text-transform:uppercase;letter-spacing:.09em;color:var(--muted)}
#sidebar h3{font-size:12.5px;font-weight:600;margin:0 0 4px}
.panel{background:var(--surface2);border:1px solid var(--line);border-radius:var(--r-panel);padding:10px 12px 12px}
/* Panel header: icon · title · (controls) · chevron. Click collapses. */
.panel>h2{cursor:pointer;user-select:none;display:flex;align-items:center;gap:8px;color:var(--text);min-height:24px}
.panel>h2::before{content:'';width:14px;height:14px;flex:none;background:var(--accent);-webkit-mask:var(--i,var(--ico-cube)) center/contain no-repeat;mask:var(--i,var(--ico-cube)) center/contain no-repeat}
.panel>h2::after{content:'';width:12px;height:12px;flex:none;margin-left:auto;background:var(--muted);-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transform:rotate(90deg);transition:transform .15s;opacity:.8}
.panel.collapsed>h2::after{transform:rotate(0deg)}
.panel.collapsed>h2{margin:0}
.panel.collapsed>*:not(h2){display:none!important}
.panel[data-sb="drawable"]>h2{--i:var(--ico-cube)}
.panel[data-sb="sel"]>h2{--i:var(--ico-target)}
.panel[data-sb="edits"]>h2{--i:var(--ico-history)}
.panel[data-sb="vmenu"]>h2,.panel:has(#vmenu)>h2{--i:var(--ico-sliders)}
.panel[data-sb="parts"]>h2{--i:var(--ico-tree)}
.panel>h2 #parts-count{color:var(--muted);font-weight:600;font-variant-numeric:tabular-nums}
.panel>h2 button{font-size:10.5px;min-height:0;height:20px;padding:0 8px;letter-spacing:.02em;text-transform:none}
.panel>h2 #btn-collision-toggle{margin-left:0!important}
#sel-clear{margin-left:auto;flex:none;font-size:10.5px;padding:0 8px;min-height:0;height:20px;border:1px solid var(--line);border-radius:var(--r);background:transparent;color:var(--muted);cursor:pointer}
#sel-clear:hover{color:var(--text);border-color:var(--accent)}
.meta-grid{display:grid;grid-template-columns:auto 1fr;gap:3px 12px;font-size:12px;margin:6px 0 0}
.meta-grid dt{color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;padding-top:1px}
.meta-grid dd{margin:0;color:var(--text);word-break:break-word;font-family:var(--mono);font-size:11.5px}
#yft-picker{font-family:var(--mono);font-size:11.5px}
#reload-btn{width:var(--ctl);padding:0;font-size:15px;flex:none}
.opts{display:grid;grid-template-columns:1fr 1fr;gap:5px 10px}
.opts label{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;padding:2px 0}
.opts label:hover{color:var(--text)}
.opts-adv{margin-top:6px}
.opts-adv>summary{cursor:pointer;user-select:none;font-size:11px;color:var(--muted);padding:3px 0;list-style:none;display:flex;align-items:center;gap:6px}
.opts-adv>summary::-webkit-details-marker{display:none}
.opts-adv>summary::before{content:'';width:10px;height:10px;background:var(--muted);-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transition:transform .15s}
.opts-adv[open]>summary::before{transform:rotate(90deg)}
.opts-adv>summary:hover{color:var(--text)}
.opts-adv[open]>summary{margin-bottom:4px}
#missing-tex-list{font-family:var(--mono)}

/* Material debug (details) */
.dbg-row{display:flex;justify-content:space-between;align-items:center;padding:1px 0;gap:8px}
.dbg-lbl{color:var(--muted);font-family:var(--font);font-size:11px}
.dbg-val{color:var(--text);font-weight:600;text-align:right;max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}

/* Samplers */
#sample-list{display:grid;grid-template-columns:1fr 1fr;gap:8px;font-size:12px;margin-top:6px}
.sample-row{position:relative;display:flex;flex-direction:column;gap:4px;background:var(--surface3);border:1px solid var(--line-soft);border-radius:var(--r);padding:7px;overflow:hidden}
.sample-row .lbl{color:var(--muted);font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;font-weight:600}
.sample-row .tn{font-size:11px;word-break:break-all;color:var(--text);font-family:var(--mono)}
.sample-row .tn em{color:var(--muted);font-style:normal;font-size:10px}
.sample-row .delta{color:var(--muted);font-size:10px;font-family:var(--mono);margin-top:2px}
.sample-row .delta.warn{color:var(--warn-ink)}
.sample-row .delta.warn b{color:var(--warn-ink);font-weight:600}
.sample-row img{width:100%;aspect-ratio:1;object-fit:contain;background:#222;border-radius:4px;image-rendering:pixelated;cursor:zoom-in}
.sample-row img[src=""]{visibility:hidden}
.sample-row .img-pair{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:2px}
.sample-row .img-pair > div{display:flex;flex-direction:column;gap:3px;min-width:0}
.sample-row .img-pair > div img{width:100%;aspect-ratio:1;object-fit:contain;background:#222;border-radius:4px;image-rendering:pixelated;cursor:zoom-in}
.sample-row .img-pair .pair-cap{color:var(--muted);font-size:9px;text-transform:uppercase;text-align:center;letter-spacing:.06em}
.sample-row .img-pair .pair-cap.local{color:var(--warn-ink)}
.sample-row .img-pair .pair-meta{color:var(--muted);font-size:9px;font-family:var(--mono);text-align:center;line-height:1.3}
.sample-row .img-pair .pair-meta.warn{color:var(--warn-ink)}
.sample-row .tex-view-btns{display:flex;flex-wrap:wrap;gap:3px;margin-top:3px;justify-content:flex-end}
.sample-row .tex-view-btn{padding:1px 5px;min-height:0;font-size:9.5px;font-weight:600;border:1px solid var(--line);border-radius:3px;background:var(--surface2);color:var(--muted);cursor:pointer;letter-spacing:.2px;text-transform:uppercase;transition:border-color .1s,color .1s}
.sample-row .tex-view-btn:hover{border-color:var(--accent);color:var(--text)}
.sample-row a.tex-view-btn{text-decoration:none}
.sample-row.smpl-bg-light img{background:#cccccc!important}
.sample-row.smpl-bg-alpha img{background:repeating-conic-gradient(#888 0% 25%,#ccc 0% 50%) 0 0/16px 16px!important}
.sample-row.smpl-bg-light .img-pair>div>img{background:#cccccc!important}
.sample-row.smpl-bg-alpha .img-pair>div>img{background:repeating-conic-gradient(#888 0% 25%,#ccc 0% 50%) 0 0/16px 16px!important}
.sample-row .tex-menu-btn{position:absolute;top:3px;right:3px;min-height:0;width:22px;height:16px;padding:0;line-height:1;font-size:14px;font-weight:700;border:1px solid transparent;border-radius:3px;background:transparent;color:var(--muted);cursor:pointer;z-index:2}
.sample-row .tex-menu-btn:hover,.sample-row .tex-menu-btn.open{border-color:var(--line);background:var(--surface2);color:var(--text)}
.sample-row .tex-menu{display:none;position:absolute;top:21px;right:3px;z-index:6;flex-direction:column;gap:1px;min-width:132px;padding:3px;background:var(--surface2);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.sample-row .tex-menu.open{display:flex}
.sample-row .tex-menu-item{font-size:11px;padding:5px 8px;border-radius:3px;color:var(--text);text-decoration:none;cursor:pointer;white-space:nowrap}
.sample-row .tex-menu-item:hover{background:rgba(var(--accent-rgb),.15);color:var(--accent)}
.tex-lightbox{position:fixed;inset:0;background:rgba(0,0,0,.85);display:flex;align-items:center;justify-content:center;z-index:9999;cursor:zoom-out;padding:30px;flex-direction:column;gap:12px}
.tex-lightbox .tex-lightbox-frame{width:min(80vmin,800px);height:min(80vmin,800px);background:#222;border-radius:var(--r-panel);box-shadow:0 8px 40px rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;overflow:hidden}
.tex-lightbox .tex-lightbox-frame img{width:100%;height:100%;object-fit:contain;image-rendering:pixelated}
.tex-lightbox .tex-lightbox-cap{color:var(--text,#ddd);font-family:var(--mono);font-size:12px;text-align:center}

/* ── Parts tree ──────────────────────────────────────────────────────────── */
.tree-controls{display:flex;gap:4px;margin:8px 0 6px;font-size:11px;flex-wrap:wrap;align-items:center}
.tree-controls button{padding:0 9px;font-size:11px;min-height:0;height:24px}
.tree-controls label{font-size:11px;color:var(--muted);display:flex;align-items:center;gap:5px;margin-left:auto;cursor:pointer}
#parts-list{max-height:55vh;overflow-y:auto;overflow-x:auto;font-size:12px;display:flex;flex-direction:column;gap:0;border:1px solid var(--line-soft);border-radius:var(--r);padding:3px;background:var(--surface2)}
#parts-list .tn{display:flex;align-items:center;gap:5px;padding:2px 5px;border-radius:4px;white-space:nowrap;min-height:22px}
#parts-list .tn:hover{background:var(--hover-bg,rgba(255,255,255,.07))}
#parts-list .tn.selected{background:rgba(var(--accent-rgb),.22);color:var(--text);box-shadow:inset 3px 0 0 var(--accent)}
#parts-list .tn.selected .lbl{color:var(--accent);font-weight:700}
#parts-list .tn.selected .pc{color:var(--text)}
#parts-list .tn.selected:hover{background:rgba(var(--accent-rgb),.3)}
#parts-list .tn.has-sel .lbl{color:var(--accent);opacity:.8}
#parts-list .tn .twist{display:inline-block;width:12px;color:var(--muted);cursor:pointer;flex-shrink:0;font-family:var(--mono);text-align:center}
#parts-list .tn .twist.empty{visibility:hidden}
#parts-list .tn input[type=checkbox]{margin:0;flex-shrink:0;cursor:pointer;width:13px;height:13px}
#parts-list .tn .lbl{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;cursor:pointer;font-family:var(--mono);font-size:11.5px}
#parts-list .tn .lbl.has-mesh{font-weight:600}
#parts-list .tn .pc{color:var(--muted);font-size:10px;flex-shrink:0;font-variant-numeric:tabular-nums;font-family:var(--mono)}
#parts-list .tn .bico{display:inline-block;width:14px;color:var(--muted);flex-shrink:0;font-family:var(--mono);text-align:center;font-size:11px}
#parts-list .tn.phys-header{margin-top:6px;border-top:1px solid var(--line);padding-top:4px;font-weight:600;color:var(--accent)}
#parts-list .kids{padding-left:12px;border-left:1px solid var(--line-soft);margin-left:8px}
#parts-list .kids.collapsed{display:none}

/* ── Customization menu (vMenu-style) ────────────────────────────────────── */
.vmenu{margin:0;padding:0}
.vmenu-section{margin-top:10px}
.vmenu-section > .vmenu-title{font-size:10.5px;font-weight:700;letter-spacing:.09em;color:var(--text);text-transform:uppercase;padding:7px 0 6px;border-bottom:1px solid var(--line);cursor:pointer;user-select:none;display:flex;align-items:center;gap:8px}
.vmenu-section > .vmenu-title::before{content:'';width:13px;height:13px;flex:none;background:var(--accent);-webkit-mask:var(--i,var(--ico-sliders)) center/contain no-repeat;mask:var(--i,var(--ico-sliders)) center/contain no-repeat}
.vmenu-section > .vmenu-title::after{content:'';width:11px;height:11px;flex:none;margin-left:auto;background:var(--muted);-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transform:rotate(90deg);transition:transform .15s;opacity:.8}
.vmenu-section.collapsed > .vmenu-title::after{transform:rotate(0deg)}
.vmenu-section.collapsed > .vmenu-body{display:none}
.vmenu-section[data-key="colors"]>.vmenu-title{--i:var(--ico-palette)}
.vmenu-section[data-key="lighting"]>.vmenu-title{--i:var(--ico-sun)}
.vmenu-section[data-key="mods"]>.vmenu-title{--i:var(--ico-wrench)}
.vmenu-section[data-key="livery"]>.vmenu-title{--i:var(--ico-tag)}
.vmenu-section[data-key="embed-livery"]>.vmenu-title{--i:var(--ico-image)}
.vmenu-section[data-key="extras"]>.vmenu-title{--i:var(--ico-puzzle)}
.vmenu-section[data-key="cats"]>.vmenu-title{--i:var(--ico-layers)}
.vmenu-section[data-key="bonecheck"]>.vmenu-title{--i:var(--ico-bone)}
.vmenu-row[hidden]{display:none}
.vmenu-section[hidden]{display:none}
#texcheck-sec,#condition-sec{margin-bottom:12px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.sel-name-row{display:flex;align-items:center;gap:8px}
.sel-name-row h3{flex:1 1 auto;min-width:0;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}   /* .vmenu-row's display:flex beat the hidden attribute */
.dirt-uv-row .vm-lbl{flex:1 1 0;min-width:0}
.sel-move{flex-direction:column;align-items:stretch;gap:6px}
.sel-move select{width:100%}
.sel-move .hint{text-align:left}
.sel-move button{align-self:flex-start}
.dirt-uv-row .vm-lbl>span:first-child{color:var(--danger-ink)}
.vmenu-row.dirt-uv-row{background:var(--danger-soft);border-radius:var(--r);margin-bottom:4px}
.dirt-uv-row .row-btn{margin-left:6px}
.sb-page[data-page="bones"] .page-h{display:flex;align-items:center;gap:10px}
.bk-show{margin-left:auto;display:flex;align-items:center;gap:8px;font-size:11.5px;color:var(--muted);cursor:pointer;white-space:nowrap}
.bk-hint{display:flex;align-items:center;gap:8px;margin:-2px 0 10px;padding:6px 6px 6px 10px;border-radius:var(--r);background:rgba(var(--accent-rgb),.12);box-shadow:inset 2px 0 0 var(--accent);font-size:11.5px;color:var(--text)}
.bk-hint b{font-family:var(--mono);font-weight:600}
.bk-hint span{flex:1 1 auto;min-width:0}
.bk-hint:empty{display:none}
.bk-segs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border:1px solid var(--line);border-radius:var(--r);overflow:hidden;margin-bottom:8px}
.bk-seg{min-height:0;height:44px;padding:4px 2px;border:0;border-radius:0;background:transparent;color:var(--muted);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;cursor:pointer;font-size:10.5px;font-weight:600;letter-spacing:.02em}
.bk-seg+.bk-seg{border-left:1px solid var(--line)}
.bk-seg b{font-size:15px;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums;line-height:1.1}
.bk-seg.bad b{color:var(--danger-ink)} .bk-seg.miss b{color:var(--warn-ink)}
.bk-seg:hover:not(:disabled){background:var(--surface3)}
.bk-seg.on{background:var(--surface3);color:var(--text);box-shadow:inset 0 -2px 0 var(--accent)}
.bk-seg:disabled{opacity:.45;cursor:default} .bk-seg:disabled b{color:var(--muted)}
.bk-search{position:relative;margin-bottom:10px}
.bk-search::before{content:'';position:absolute;left:9px;top:50%;width:13px;height:13px;transform:translateY(-50%);background:var(--muted);-webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='M20 20l-4-4'/></svg>") center/contain no-repeat;mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.4' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='M20 20l-4-4'/></svg>") center/contain no-repeat;pointer-events:none}
.bk-q{display:block;width:100%;min-height:0;height:30px;padding:0 10px 0 28px;border-radius:var(--r);border:1px solid var(--line);background:var(--surface);color:var(--text);font-size:12px;box-sizing:border-box}
.bk-q:focus{outline:none;border-color:var(--accent)}
.bk-attn{border:1px solid rgba(var(--b-red),.35);background:rgba(var(--b-red),.08);border-radius:var(--r);padding:4px 4px 6px;margin-bottom:10px}
.bk-attn-h{display:flex;align-items:center;gap:6px;padding:4px 6px 4px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--danger-ink)}
.bk-attn-h b{margin-left:auto;font-size:11px}
.bk-list{display:flex;flex-direction:column;gap:1px}
.bk-gh{display:flex;align-items:center;gap:6px;width:100%;height:30px;min-height:0;padding:0 6px;border:0;background:transparent;color:var(--muted);font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;text-align:left;cursor:pointer;border-radius:var(--r)}
.bk-gh:hover{background:var(--surface3);color:var(--text)}
.bk-chev{width:9px;height:9px;background:currentColor;-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transition:transform .15s}
.bk-g.open .bk-chev{transform:rotate(90deg)}
.bk-gn{margin-left:auto;min-width:22px;height:18px;padding:0 7px;border-radius:999px;background:var(--surface3);border:1px solid var(--line);color:var(--text);font-size:10.5px;font-weight:700;letter-spacing:0;line-height:16px;text-align:center;box-sizing:border-box;font-variant-numeric:tabular-nums}
.bk-rows{display:none;padding:0 0 6px}
.bk-g.open .bk-rows{display:block}
.bk-row{display:flex;align-items:center;gap:8px;min-height:28px;padding:0 6px 0 8px;border-radius:var(--r);font-size:12px;cursor:pointer}
.bk-row:hover,.bk-row.hov{background:var(--surface3)}
.bk-row.only{background:rgba(var(--accent-rgb),.14);box-shadow:inset 2px 0 0 var(--accent)}
.bk-row[data-bone=""]{cursor:default}
.bk-dot{flex:none;width:6px;height:6px;border-radius:50%;background:var(--muted)}
.st-bad .bk-dot{background:var(--danger);box-shadow:0 0 0 3px var(--danger-soft)}
.st-miss .bk-dot{background:transparent;border:1.5px solid var(--warn-ink);box-sizing:border-box;width:7px;height:7px}
.bk-name{flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--mono);font-size:11.5px}
.st-miss .bk-name{color:var(--muted)}
.bk-copy{font-style:normal;font-family:inherit;font-size:10px;font-weight:600;color:var(--warn-ink);background:var(--warn-soft);border-radius:999px;padding:0 6px;margin-left:6px}
.bk-tag{flex:none;min-width:54px;text-align:right;display:flex;align-items:center;justify-content:flex-end;line-height:1}
.bk-tag:empty{min-width:0}
.bk-key{font-size:10px;color:var(--muted);opacity:.8}
.bk-off{font-size:11px;white-space:nowrap;font-weight:600;color:var(--danger-ink);font-variant-numeric:tabular-nums}
.bk-miss{font-size:11px;font-weight:600;color:var(--warn-ink)}
.bk-empty{padding:10px 8px;color:var(--muted);font-size:12px}
.bk-edit{flex:none;height:22px;min-height:0;padding:0 9px;font-size:11px;font-weight:600;border:1px solid var(--line);border-radius:var(--r);background:var(--surface3);color:var(--text);cursor:pointer;opacity:0}
.bk-row:hover .bk-edit,.bk-edit:focus-visible,.bk-edit.bad{opacity:1}
.bk-edit:hover{border-color:var(--accent)}
.bk-edit.bad{border-color:rgba(var(--b-red),.45);background:var(--danger-soft);color:var(--danger-ink)}
#bk-edit{margin:0 0 10px;padding:10px;border:1px solid var(--accent);border-radius:var(--r-panel,10px);background:var(--surface);display:flex;flex-direction:column;gap:8px}
#bk-edit[hidden]{display:none}
.bke-h{display:flex;flex-direction:column;gap:2px}.bke-h b{font-size:12.5px;font-family:var(--mono)}.bke-h span{font-size:11px;color:var(--muted)}
.bke-mode{display:grid;grid-template-columns:1fr 1fr;gap:0;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.bke-m{min-height:0;height:28px;border:0;border-radius:0;background:transparent;color:var(--muted);font-size:11.5px;font-weight:600;cursor:pointer}
.bke-m+.bke-m{border-left:1px solid var(--line)}
.bke-m.on{background:var(--surface3);color:var(--text);box-shadow:inset 0 -2px 0 var(--accent)}
.bke-xyz{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.bke-xyz label{display:flex;flex-direction:column;gap:2px;font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.bke-xyz input{width:100%;min-width:0;height:26px;font-family:var(--mono);font-size:11.5px;box-sizing:border-box;padding:0 6px}
.bke-ctr{display:flex;align-items:center;gap:8px}
.bke-ctr span{flex:1 1 auto;font-size:11.5px;color:var(--warn-ink)} .bke-ctr span.ok{color:var(--ok)}
.bke-ctr button:disabled{opacity:.45;cursor:default}
.bke-was{font-size:10.5px;color:var(--muted);font-family:var(--mono)}
.bke-sh{font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.bke-sugg{display:flex;flex-direction:column;gap:3px}
.bke-s{min-height:0;height:auto;padding:5px 8px;text-align:left;font-size:11.5px;background:transparent;border:1px solid var(--line);border-radius:var(--r);color:var(--text);cursor:pointer}
.bke-s:hover{border-color:var(--accent)} .bke-s.on{border-color:var(--accent);background:var(--surface3)}
.bke-act{display:flex;gap:6px;justify-content:flex-end}
.bke-save{border-color:var(--accent)!important;color:var(--accent)}
.vmenu-section > .vmenu-title #focus-all-btn{margin-left:8px!important;margin-right:4px;text-transform:none;letter-spacing:0}
.vmenu-row{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:var(--r);min-height:30px;font-size:12px}
.vmenu-body{display:flex;flex-direction:column;gap:2px;padding-top:6px}
.vmenu-row:last-child{border-bottom:0}
.vmenu-row:hover{background:rgba(var(--accent-rgb),.06)}
.vmenu-row .vm-lbl{flex:0 0 auto;color:var(--text);min-width:96px;display:flex;flex-direction:column;gap:1px;font-size:12px}
.vmenu-row .vm-lbl-vmt{font-size:9.5px;color:var(--muted);opacity:.75;font-family:var(--mono);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:96px}
.vmenu-row .vm-val{flex:1;text-align:right;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;font-variant-numeric:tabular-nums;font-family:var(--mono)}
.vmenu-row .vm-val.has-sub{white-space:normal;line-height:1.25}
.vmenu-row .vm-val .vm-sub{display:block;font-size:9.5px;opacity:.6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.vmenu-row .vm-arrow{flex:0 0 auto;width:24px;height:24px;min-height:0;border:1px solid var(--line);background:var(--surface3);color:var(--text);border-radius:var(--r);cursor:pointer;font-family:var(--mono);padding:0;line-height:1;font-size:13px;display:inline-flex;align-items:center;justify-content:center}
.vmenu-row .vm-arrow:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.vmenu-row .vm-focus{flex:0 0 auto;width:24px;height:24px;min-height:0;border:1px solid var(--line);background:var(--surface3);color:var(--muted);border-radius:var(--r);cursor:pointer;padding:0;line-height:22px;font-size:12px;text-align:center;transition:background .15s,color .15s,border-color .15s}
.vmenu-row .vm-focus:hover{border-color:var(--accent);color:var(--text)}
.vmenu-row .vm-focus.active{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.vmenu-row input[type=color]{flex:0 0 auto}
.vmenu-row input[type=range]{flex:1;min-width:60px}
.vmenu-row select{font-size:11.5px;min-height:24px}
.vmenu-row .swatches{display:flex;gap:3px;flex-wrap:wrap;flex:1;justify-content:flex-end}
.vmenu-row .swatches .sw{width:14px;height:14px;border-radius:3px;border:1px solid var(--line);cursor:pointer;transition:transform .1s}
.vmenu-row .swatches .sw:hover{transform:scale(1.35);border-color:var(--accent);position:relative;z-index:2}
.vmenu-row.empty .vm-val{color:var(--muted);opacity:.5;font-style:italic}
.vmenu-row.empty .vm-arrow{opacity:.3;cursor:not-allowed}
.vmenu-row.slot-selected{background:rgba(var(--accent-rgb),.15);box-shadow:inset 3px 0 0 var(--accent)}
.vmenu-row.slot-selected .vm-lbl::after{content:' ← sel';font-size:9px;color:var(--accent);font-weight:600;margin-left:4px}
.vm-overlap-warn{flex:0 0 auto;color:var(--warn-ink);cursor:default;font-size:13px;line-height:22px;padding:0 3px;border-radius:3px;white-space:pre}
.vm-overlap-warn:hover{filter:brightness(1.2)}
#mod-extras,#mod-cats{display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;gap:6px;margin-top:0;padding-top:8px}
#mod-extras .ex,#mod-cats .ex{font-size:11px;font-weight:600;padding:3px 9px;border:1px solid var(--line);border-radius:999px;background:var(--surface3);cursor:pointer;color:var(--muted);line-height:1.2}
#mod-extras .ex:hover,#mod-cats .ex:hover{background:var(--hover-bg,rgba(255,255,255,.07));color:var(--text)}
#mod-extras .ex.on,#mod-cats .ex.on{background:rgba(var(--accent-rgb),.18);border-color:var(--accent);color:var(--text)}
#mod-extras .ex.empty{opacity:.4;cursor:not-allowed}
#mod-extras .ex.ex-view{background:transparent;border-style:dashed;color:var(--muted)}
#mod-extras .ex.ex-view:hover{border-style:solid;color:var(--text)}
/* Callouts inside the menu (the paint-slot notice) */
.vmenu-row.callout{flex-wrap:wrap;gap:6px;font-size:11px;line-height:1.4;color:var(--text);border-radius:var(--r);padding:8px 10px;margin:6px 0}
.vmenu-row.callout.warn{background:var(--warn-soft);border:1px solid rgba(var(--b-yellow),.45)}
.vmenu-row.callout.warn:hover{background:var(--warn-soft)}
.vmenu-row.callout>span:first-child{flex:1 1 100%}
.vmenu-row.callout .vm-arrow{width:auto;padding:0 10px;font-family:var(--font);font-size:11px;font-weight:600}

/* ── Sidebar: icon rail + one page at a time ─────────────────────────────── */
#sb-rail{display:flex;flex-direction:column;align-items:stretch;gap:2px;padding:8px 5px;background:var(--surface2);border-right:1px solid var(--line);overflow-y:auto;overflow-x:hidden}
.rail-btn{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;height:54px;min-height:0;padding:0;border:1px solid transparent;border-radius:var(--r);background:transparent;color:var(--muted);font-size:9.5px;font-weight:600;letter-spacing:.03em;cursor:pointer;box-shadow:none}
.rail-btn[hidden]{display:none}
.rail-btn::before{content:'';width:19px;height:19px;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat}
.rail-btn:hover{color:var(--text);background:var(--surface3)}
.rail-btn.active{color:var(--accent);background:var(--surface);border-color:var(--line)}
.rail-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.rail-dot{position:absolute;top:8px;right:11px;width:7px;height:7px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 2px var(--surface2);display:none}
.rail-dot.on{display:block}
/* a page with something wrong on it (misplaced bones → Scene and Parts) */
.rail-btn.has-issue::after{content:'';position:absolute;top:4px;right:5px;width:6px;height:6px;border-radius:50%;background:var(--red);opacity:.85}
#sb-main{display:flex;flex-direction:column;min-width:0;min-height:0}
#sb-head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 6px;padding:10px 14px;border-bottom:1px solid var(--line);background:var(--surface)}
#sb-head .sb-head-k{grid-column:1/-1;font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
#sb-head #yft-filter{grid-column:1/-1}
#sb-head .row{display:contents}
#sb-head #yft-picker{width:100%;min-width:0;height:30px}
#vmenu{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;scrollbar-gutter:stable}
.sb-page{display:none;flex-direction:column;gap:14px;padding:12px 14px 24px}
.sb-page.active{display:flex}
.page-h{display:flex;align-items:center;gap:8px;min-height:26px}
#sidebar .page-h h2{font-size:15px;font-weight:650;letter-spacing:0;text-transform:none;color:var(--text);margin:0;display:flex;align-items:baseline;gap:6px}
.page-h h2 .count{font-size:11px;font-weight:600;color:var(--muted);font-family:var(--mono);font-variant-numeric:tabular-nums}
.page-h .page-act{margin-left:auto;height:24px;min-height:0;padding:0 10px;font-size:11px;background:transparent;color:var(--muted);border:1px solid var(--line);border-radius:var(--r)}
.page-h .page-act:hover{color:var(--text);border-color:var(--accent)}
.page-h>#btn-collision-toggle{height:24px!important;padding:0 8px!important;border:1px solid var(--line)!important;border-radius:var(--r)!important}
.sb-page>.vmenu-section{margin-top:0}
.sb-page .vmenu-section:has(>.vmenu-body:empty){display:none}
.page-empty{margin:0;color:var(--muted);font-size:12px;line-height:1.5}
.sb-page:has(.vmenu-section:not([data-key=condition]) .vmenu-body:not(:empty)) .page-empty{display:none}
.dirt-row input[type=color]{width:26px;height:22px}
.vmenu-section[data-key="finish"]>.vmenu-title{--i:var(--ico-bg)}
.vmenu-section[data-key="condition"]>.vmenu-title{--i:var(--ico-sun)}
.vmenu-section[data-key="display"]>.vmenu-title{--i:var(--ico-cube)}
.sb-page .tree-controls{margin:0!important}
.sb-note{margin:4px 0 0;font-size:10.5px;color:var(--muted);line-height:1.5;opacity:.8}
.sb-note #build-badge{display:block;margin-top:4px}
#edits-panel #edits-list{margin-top:0!important}
#sel-panel .sel-head{margin-top:0}
#sel-panel .sel-empty{margin:0;font-size:12px;line-height:1.5}
/* Colour rows: one line each; the GTA palette opens under its row on demand */
.vmenu-row[data-slot]{flex-wrap:wrap}
.vmenu-row[data-slot]:has(>.sw-toggle){cursor:pointer}
.vmenu-row[data-slot]:has(>.sw-toggle) .vm-lbl-vmt{cursor:pointer}
.vmenu-row[data-slot]>.vm-lbl{flex:1 1 0;min-width:0}
.vmenu-row[data-slot]>input[type=color]{order:2}
.vmenu-row[data-slot]>.sw-toggle{order:3}
.vmenu-row[data-slot]>.swatches{order:4;flex:1 1 100%;display:none;justify-content:flex-start;gap:4px;padding:8px 0 4px}
.vmenu-row[data-slot].open>.swatches{display:flex}
.vmenu-row[data-slot]>.swatches .sw{width:16px;height:16px}
.sw-toggle{width:24px;height:24px;min-height:0;padding:0;border:1px solid var(--line);border-radius:var(--r);background:var(--surface3);color:var(--muted);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.sw-toggle::before{content:'';width:10px;height:10px;background:currentColor;-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transform:rotate(90deg);transition:transform .15s}
.sw-toggle:hover{color:var(--text);border-color:var(--accent)}
.vmenu-row.open>.sw-toggle{color:var(--accent);border-color:var(--accent)}
.vmenu-row.open>.sw-toggle::before{transform:rotate(-90deg)}
.vmenu-row[data-slot] .vm-lbl-vmt{max-width:100%!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:help}
.vmenu-row[data-slot]>input[type=color],.vmenu-row[data-slot]>.sw-toggle{flex:none}

/* Display / Advanced / Textures: switch rows like the rest of the menu */
.sw-row{cursor:pointer;justify-content:space-between}
.vm-hint{font-size:10.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sw-row .vm-lbl,.vmenu-section[data-key="texcheck"] .vm-lbl{flex:1 1 0;min-width:0}
input.switch{appearance:none;-webkit-appearance:none;flex:none;position:relative;width:32px;height:18px;margin:0;border-radius:999px;background:var(--surface3);border:1px solid var(--line);cursor:pointer;transition:background .15s,border-color .15s}
input.switch::after{content:'';position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}
input.switch:checked{background:var(--accent);border-color:var(--accent)}
input.switch:checked::after{transform:translateX(14px);background:var(--on-accent)}
input.switch:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cnt-badge{flex:none;min-width:22px;height:20px;padding:0 7px;border-radius:999px;background:var(--warn-soft);color:var(--warn-ink);font:600 11px/20px var(--mono);text-align:center;font-variant-numeric:tabular-nums}
.cnt-badge.none{background:var(--surface3);color:var(--muted)}
.row-btn{flex:none;height:24px;min-height:0;padding:0 12px;font-size:11px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface3);color:var(--text);cursor:pointer}
.row-btn:hover{border-color:var(--accent)}
#missing-tex-list{font-family:var(--font,system-ui,sans-serif);margin:4px 0 0;padding:4px;max-height:360px;overflow-y:auto;border:1px solid var(--line-soft);border-radius:var(--r);font-size:11.5px;color:var(--text)}
#missing-tex-list .mt-head{padding:4px 6px 6px;color:var(--muted);font-size:11px;line-height:1.4}
#missing-tex-list .mt-item>summary{list-style:none;display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:var(--r);cursor:pointer;font-family:var(--mono);font-size:11.5px}
#missing-tex-list .mt-item>summary::-webkit-details-marker{display:none}
#missing-tex-list .mt-item>summary::before{content:'';width:9px;height:9px;flex:none;background:var(--muted);-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transition:transform .15s}
#missing-tex-list .mt-item[open]>summary::before{transform:rotate(90deg)}
#missing-tex-list .mt-item>summary:hover{background:rgba(var(--accent-rgb),.06)}
#missing-tex-list .mt-tag{font-family:inherit;font-size:9.5px;padding:1px 5px;border-radius:3px;background:rgba(var(--accent-rgb),.12);color:var(--accent)}
#missing-tex-list .mt-why{margin:2px 6px 6px 23px;color:var(--text);font-size:11px;line-height:1.45}
#missing-tex-list .mt-fix{margin:0 6px 6px 23px}
#missing-tex-list .mt-item pre{margin:2px 6px 6px 23px;padding:6px 8px;background:var(--surface3);border-radius:var(--r);color:var(--muted);font-size:10px;line-height:1.45;overflow-x:auto;white-space:pre}
.vmenu-section[data-key="advanced"]>.vmenu-title{--i:var(--ico-sliders)}
.vmenu-section[data-key="texcheck"]>.vmenu-title{--i:var(--ico-image)}

/* ── Viewport toolbar: grouped, exports behind one menu ─────────────────── */
#viewport-toolbar .tb-sep{width:1px;height:18px;background:var(--line);margin:0 4px}
#viewport-toolbar .tb-seg{display:inline-flex;gap:1px;padding:1px;border:1px solid var(--line-soft);border-radius:var(--r)}
#viewport-toolbar .tb-seg button{height:22px;padding:0 8px;font-size:11px;color:var(--muted)}
#viewport-toolbar .tb-seg button:hover{color:var(--text)}
#btn-debadge:not([style*="none"])+#btn-reset-view{margin-left:6px}
#tb-export{position:relative}
#tb-export>summary{list-style:none;display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 9px;font-size:11.5px;font-weight:500;border:1px solid transparent;border-radius:var(--r);color:var(--text);cursor:pointer;user-select:none}
#tb-export>summary::-webkit-details-marker{display:none}
#tb-export>summary::before{content:'';width:13px;height:13px;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat}
#tb-export>summary::after{content:'';width:9px;height:9px;background:var(--muted);-webkit-mask:var(--ico-chev) center/contain no-repeat;mask:var(--ico-chev) center/contain no-repeat;transform:rotate(-90deg)}
#tb-export>summary:hover,#tb-export[open]>summary{background:var(--hover-bg,rgba(255,255,255,.07));border-color:var(--line)}
#tb-export .tb-menu{position:absolute;bottom:calc(100% + 10px);right:-4px;min-width:210px;display:flex;flex-direction:column;gap:1px;padding:4px;background:var(--surface2);border:1px solid var(--line);border-radius:var(--r-ovl);box-shadow:var(--shadow)}
#tb-export .tb-menu button{justify-content:flex-start;width:100%;height:30px}

/* ── Selected part inspector ─────────────────────────────────────────────── */
#sel-panel .sel-empty{display:none;margin:6px 0 2px;color:var(--muted);font-size:11.5px;line-height:1.4}
#sel-panel.no-sel .sel-empty{display:block}
#sel-panel.no-sel .sel-body{display:none}
.sel-head{margin-top:8px}
#sel-name{font-family:var(--mono);font-size:13px;font-weight:600;color:var(--text);word-break:break-all;margin:0 0 6px;line-height:1.3}
.sel-sub{display:flex;flex-wrap:wrap;gap:4px}
.sel-chip{display:inline-flex;align-items:center;max-width:100%;height:20px;padding:0 8px;border:1px solid var(--line);border-radius:999px;background:var(--surface3);font-size:10.5px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sel-chip.mono{font-family:var(--mono);font-weight:500;color:var(--muted)}
.sel-tabs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:2px;margin-top:10px;padding:2px;background:var(--surface3);border:1px solid var(--line);border-radius:var(--r)}
.sel-tab-btn{display:flex;align-items:center;justify-content:center;gap:5px;height:26px;min-height:0;padding:0 4px;border:1px solid transparent;border-radius:4px;background:transparent;color:var(--muted);font-size:10.5px;font-weight:600;letter-spacing:.02em;cursor:pointer;min-width:0;box-shadow:none}
.sel-tab-btn::before{content:'';width:12px;height:12px;flex:none;background:currentColor;-webkit-mask:var(--i) center/contain no-repeat;mask:var(--i) center/contain no-repeat}
.sel-tab-btn>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sel-tab-btn:hover{color:var(--text);background:transparent}
.sel-tab-btn.active{background:var(--surface);border-color:var(--line);color:var(--accent);box-shadow:var(--shadow-sm)}
.sel-tab-btn .badge{font-family:var(--mono);font-weight:600;font-size:9.5px;min-width:15px;height:15px;padding:0 4px;border-radius:999px;background:var(--surface3);color:var(--text);display:inline-flex;align-items:center;justify-content:center;flex:none}
.sel-tab-btn .badge:empty{display:none}
.sel-tab{display:none;margin-top:10px}
.sel-tab.active{display:block}
.sel-kv{display:grid;grid-template-columns:auto minmax(0,1fr);margin:0;border:1px solid var(--line-soft);border-radius:var(--r);overflow:hidden}
.sel-kv>div{display:contents}
.sel-kv dt,.sel-kv dd{margin:0;padding:4px 8px;border-top:1px solid var(--line-soft);font-size:11px;line-height:1.4;min-width:0}
.sel-kv>div:first-child dt,.sel-kv>div:first-child dd{border-top:0}
.sel-kv dt{display:flex;align-items:center;color:var(--muted);font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;font-weight:600;white-space:nowrap;background:var(--surface2)}
.sel-kv dd{font-family:var(--mono);color:var(--text);word-break:break-word;font-variant-numeric:tabular-nums}
.sel-stats{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:8px}
.sel-stats>div{display:flex;flex-direction:column;gap:1px;background:var(--surface3);border:1px solid var(--line-soft);border-radius:var(--r);padding:5px 8px;min-width:0}
.sel-stats .k{color:var(--muted);font-size:9.5px;text-transform:uppercase;letter-spacing:.07em;font-weight:600}
.sel-stats .v{font-family:var(--mono);font-size:12px;color:var(--text);font-variant-numeric:tabular-nums}
.sel-note{margin:0 0 8px;font-size:10.5px;color:var(--muted);line-height:1.4}
.sel-group{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.sel-group:first-child,.sel-note+.sel-group{margin-top:0}
.sel-group-h{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--muted)}
.sel-color{display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.sel-color input[type=color]{width:34px;height:24px;padding:0}
.sel-color .v{font-family:var(--mono);font-size:11px;color:var(--text)}
.sel-color .presets{display:inline-flex;gap:4px;margin-left:auto}
.sel-color .presets button{height:22px;min-height:0;padding:0 8px;font-size:10.5px}
.sel-sliders{display:flex;flex-direction:column;gap:2px}
.sel-sliders label{display:grid;grid-template-columns:78px minmax(0,1fr) 46px;align-items:center;gap:8px;min-height:24px;font-size:11px;color:var(--muted)}
.sel-sliders input[type=range]{width:100%;min-width:0;height:16px;margin:0}
.sel-sliders .v{text-align:right;font-family:var(--mono);font-size:11px;color:var(--text);font-variant-numeric:tabular-nums}
.sel-yft{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
.sel-yft>div{display:flex;flex-direction:column;gap:1px;padding:4px 5px;border:1px solid var(--line-soft);border-radius:var(--r);min-width:0;text-align:center}
.sel-yft .k{color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:.05em;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sel-yft .v{font-family:var(--mono);font-size:11px;color:var(--text);font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis}
.sel-actions{display:flex;flex-wrap:wrap;gap:6px 8px;align-items:center}
.sel-actions .toggle{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--text);cursor:pointer;white-space:nowrap;margin-right:auto}
.sel-actions .toggle input{margin:0}
.sel-actions .hint{flex:1 1 100%;font-size:10.5px;color:var(--muted);line-height:1.35}
button.ghost{background:transparent;color:var(--muted);height:24px;min-height:0;padding:0 9px;font-size:11px}
button.ghost:hover{color:var(--text);background:var(--surface3)}
button.btn-danger{display:inline-flex;align-items:center;gap:6px;height:26px;min-height:0;padding:0 11px;font-size:11.5px;font-weight:600;border-color:rgba(var(--b-red),.55);color:var(--danger-ink);background:var(--danger-soft)}
button.btn-danger::before{content:'';width:12px;height:12px;background:currentColor;-webkit-mask:var(--ico-scissors) center/contain no-repeat;mask:var(--ico-scissors) center/contain no-repeat}
button.btn-danger:hover{background:var(--danger);border-color:var(--danger);color:#fff}
.sel-tab #sample-list{margin-top:0}

/* ── Footer note & responsive ────────────────────────────────────────────── */
@media (max-width:760px){
  #app{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto minmax(0,50vh)}
  #sidebar{border-left:0;border-top:1px solid var(--line);max-height:50vh}
  #hud{max-width:70%}
}

