.unified-3d-panel{position:fixed;left:76px;top:135px;bottom:24px;width:380px;max-width:calc(100vw - 92px);z-index:var(--layer-stack-40);display:flex;flex-direction:column;background:var(--ws-surface);color:var(--ws-ink);border:1px solid var(--ws-border);border-radius:18px;box-shadow:0 14px 40px var(--shadow-ink);overflow:hidden}.unified-3d-panel.hidden{display:none}.u3d-head{display:flex;align-items:center;justify-content:space-between;padding:var(--space-3) var(--space-4)}.u3d-head h2{font-weight:750;font-size:16px}.u3d-head button{padding:var(--space-1) var(--space-2)}.u3d-tabs{display:flex;gap:var(--space-1);padding:0 var(--space-3) var(--space-2);border-bottom:1px solid var(--line)}.u3d-tabs button{flex:1;padding:var(--space-2);border-radius:8px;font-size:13px;font-weight:600}.u3d-tabs button[aria-selected=true]{background:var(--surface);color:var(--state-active-fg)}.u3d-content{flex:1;overflow:auto;min-height:0;padding:var(--space-3)}.u3d-content[hidden]{display:none}.u3d-hint{font-size:12px;line-height:1.7;color:var(--muted);margin-bottom:var(--space-2)}.u3d-command{font-size:12px;padding:var(--space-2) var(--space-2);border:1px solid var(--line);border-radius:8px;margin-bottom:var(--space-2)}.unified-3d-panel #panel3D.u3d-preview{position:static!important;width:auto!important;max-width:none!important;min-height:400px;height:auto;box-shadow:none!important;border:0!important;border-radius:0!important;background:transparent!important}.u3d-preview #view3D>div{min-height:360px}.unified-3d-panel #geometry-lab{position:static!important;width:auto!important;max-width:none!important;max-height:none!important;margin:0;box-shadow:none;border:0;padding:0;background:transparent}.u3d-filters{display:grid;gap:var(--space-2);margin-bottom:var(--space-3)}.u3d-filters input,.u3d-filters select{width:100%;padding:var(--space-2);border:1px solid var(--line);border-radius:8px;background:var(--ws-surface);font-size:13px}.u3d-status{font-size:12px;line-height:1.6;margin:var(--space-2) 0;color:var(--muted)}.u3d-model-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-2)}.u3d-model-card{border:1px solid var(--line);border-radius:12px;padding:var(--space-2);text-align:left;display:flex;flex-direction:column;gap:var(--space-2);background:var(--ws-surface);font-size:12px}.u3d-model-card img{width:100%;height:112px;object-fit:contain;background:var(--surface);border-radius:8px}.u3d-model-card strong{font-size:13px;line-height:1.5}.u3d-model-card small{color:var(--muted);font-size:10px}.u3d-model-detail img{width:100%;height:200px;object-fit:contain;background:var(--surface);border-radius:12px}.u3d-model-detail h3{font-weight:700;margin:var(--space-2) 0}.u3d-model-detail p{font-size:12px;line-height:1.7;margin:var(--space-2) 0}.u3d-model-detail button,.u3d-retry{padding:var(--space-2) var(--space-4);border:1px solid var(--line);border-radius:8px;font-size:12px}.u3d-model-detail [data-curated-use]{background:var(--state-active-fg);color:white;margin:var(--space-2) 0}.u3d-model-detail progress{width:100%;height:8px}.u3d-model-detail a{color:var(--state-active-fg);text-decoration:underline;font-size:11px}.dark .u3d-tabs button[aria-selected=true]{background:var(--surface-soft);color:var(--state-active-border)}.dark .u3d-model-card img,.dark .u3d-model-detail img{background:var(--surface-soft)}@media(max-width:640px){.unified-3d-panel{left:62px;top:122px;bottom:18px;width:calc(100vw - 72px);max-width:none;border-radius:14px}.u3d-content{padding:var(--space-2)}.u3d-model-card img{height:95px}.unified-3d-panel #panel3D.u3d-preview{min-height:340px}.u3d-preview #view3D>div{min-height:320px}}

.unified-3d-panel #formula-growth{position:static!important;width:auto!important;max-width:none!important;max-height:none!important;box-shadow:none;border:0;background:transparent;color:inherit;padding:0;margin:var(--space-2) 0}.u3d-growth{border-top:1px solid var(--line);margin-top:var(--space-4);padding-top:var(--space-4)}.u3d-growth summary{font-size:12px;font-weight:700;cursor:pointer}.u3d-growth .fs-row{flex-wrap:wrap}.u3d-growth .fs-label{max-width:100%}.u3d-growth input[type=range]{max-width:125px}.u3d-growth .fs-pad{width:100%;min-height:90px}.unified-3d-panel #geometry-lab [hidden]{display:none!important}
@media(min-width:768px){html.app-shell-open .unified-3d-panel{left:calc(var(--app-shell-w,260px) + 76px);max-width:calc(100vw - var(--app-shell-w,260px) - 92px)}}

/* The complete selected-object toolbar owns 3D actions in the redesigned shell. */
#redesignContext:has(#context3DViews){display:none}
.u3d-browse-all{display:block;width:100%;margin:var(--space-3) 0 var(--space-1);padding:var(--space-2) var(--space-3);border:1px solid var(--n-200);border-radius:8px;background:var(--n-0);color:var(--n-900);font-weight:500;font-size:14px;cursor:pointer}.u3d-browse-all:hover{border-color:var(--state-active-border);color:var(--state-active-fg)}
.viewer-ux-bar{display:flex;align-items:center;gap:var(--space-2);min-width:0;white-space:nowrap}.viewer-ux-title{color:var(--muted);font-size:12px}.viewer-display-segmented{display:inline-flex;align-items:center;gap:var(--space-1);padding:var(--space-1);border:1px solid var(--line);border-radius:8px;background:var(--surface-hover)}.viewer-display-segmented button{font-size:12px!important;padding:var(--space-1) var(--space-2)!important}.viewer-display-segmented button[aria-pressed=true]{background:var(--state-active-bg)!important;color:var(--state-active-fg)!important;font-weight:700}.viewer-display-segmented button:disabled{opacity:.4;cursor:not-allowed}.viewer-settings-popover{position:fixed;z-index:var(--layer-stack-90);display:grid;gap:var(--space-2);min-width:220px;padding:var(--space-3);border:1px solid var(--line);border-radius:10px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-modal,0 14px 36px var(--shadow-ink))}.viewer-settings-popover label{display:grid;grid-template-columns:80px 1fr;align-items:center;gap:var(--space-2);font-size:12px}.viewer-settings-popover select{min-width:0;padding:var(--space-1);border:1px solid var(--line);border-radius:6px;background:var(--surface-hover);color:inherit}.viewer-parts-panel{display:none}.viewer-ux-bar:has([data-view-mode][aria-pressed=true]) .viewer-parts-panel{display:none}.viewer-axis-widget{position:absolute;right:10px;top:10px;z-index:var(--layer-stack-12);display:grid;grid-template-columns:repeat(3,28px);gap:var(--space-1);padding:var(--space-1);border:1px solid var(--line);border-radius:9px;background:var(--surface);backdrop-filter:blur(10px)}.viewer-axis-widget button{width:28px!important;height:28px;padding:0!important;border:1px solid var(--line)!important;border-radius:7px!important;background:transparent!important;color:var(--ink)!important;font-size:11px!important;font-weight:700}.viewer-axis-widget button[data-axis=X]{color:var(--muted)!important}.viewer-axis-widget button[data-axis=Y]{color:var(--muted)!important}.viewer-axis-widget button[data-axis=Z]{color:var(--muted)!important}.viewer-ux-dock{position:absolute;inset:0;z-index:var(--layer-stack-10);pointer-events:none}.viewer-ux-dock button{pointer-events:auto}.viewer-action-rail{position:absolute;right:10px;top:112px;display:grid;gap:var(--space-1)}.viewer-action-rail button{min-width:54px;padding:var(--space-2) var(--space-2)!important;border:1px solid var(--line)!important;border-radius:8px!important;background:var(--surface)!important;color:var(--ink)!important;font-size:11px!important;backdrop-filter:blur(10px)}.viewer-loading-state{position:absolute;inset:0;z-index:var(--layer-stack-20);display:flex;align-items:center;justify-content:center;gap:var(--space-4);background:var(--glass-highlight);color:var(--ink);pointer-events:none;transition:opacity .34s ease}.viewer-loading-state.is-done{opacity:0}.viewer-loading-particles{position:relative;width:70px;height:70px}.viewer-loading-particles i{position:absolute;left:32px;top:32px;width:5px;height:5px;border-radius:50%;background:var(--muted);animation:viewer-particle-gather 1.1s ease-in-out infinite alternate;transform:rotate(calc(var(--i) * 30deg)) translateY(-27px)}@keyframes viewer-particle-gather{from{opacity:.3;transform:rotate(calc(var(--i) * 30deg)) translateY(-27px)}to{opacity:1;transform:rotate(calc(var(--i) * 30deg)) translateY(-11px)}}.viewer-loading-copy{display:grid;gap:var(--space-2);min-width:190px;font-size:12px}.viewer-loading-copy strong{font-size:13px}.viewer-loading-copy progress{width:100%;height:5px;accent-color:var(--muted)}.viewer-ux-guide{position:fixed;inset:0;z-index:var(--layer-stack-120);display:grid;place-items:center;padding:var(--space-5);background:var(--overlay-scrim)}.viewer-ux-guide-card{width:min(430px,calc(100vw - 32px));padding:var(--space-6);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--ink);box-shadow:0 18px 48px var(--shadow-ink)}.viewer-ux-guide-card h2{margin:0 0 var(--space-4);font-size:18px}.viewer-ux-guide-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--space-2)}.viewer-ux-guide-grid div{display:grid;justify-items:center;gap:var(--space-2);text-align:center;font-size:11px;color:var(--muted)}.viewer-ux-guide-grid svg{width:64px;height:42px;fill:none;stroke:currentColor;stroke-width:1.7}.viewer-ux-guide-card>button{width:100%;margin-top:var(--space-4);padding:var(--space-2) var(--space-3);border:0;border-radius:8px;background:var(--btn-primary-bg);color:var(--btn-primary-fg);font-weight:700}.viewer-part-row{display:grid;gap:var(--space-2);padding:var(--space-2);border-top:1px solid var(--line)}.viewer-part-top,.viewer-part-controls{display:flex;align-items:center;gap:var(--space-2)}.viewer-part-top input[type=text],.viewer-part-top input:not([type]){min-width:0;flex:1;padding:var(--space-1) var(--space-2);border:1px solid var(--line);border-radius:5px;background:var(--surface-hover);color:inherit}.viewer-part-select{padding:var(--space-1) var(--space-2)!important;font-size:11px!important}.viewer-part-controls{font-size:11px}.viewer-part-controls select{padding:var(--space-1);border:1px solid var(--line);border-radius:5px;background:var(--surface-hover);color:inherit}.viewer-part-controls input[type=range]{min-width:70px;flex:1}.viewer-part-row.is-selected{background:var(--surface-hover)}
@media(max-width:640px){.viewer-ux-bar{gap:var(--space-1)}.viewer-display-segmented button{padding:var(--space-1) var(--space-1)!important;font-size:11px!important}.viewer-ux-title{display:none}.viewer-axis-widget{right:6px;top:6px}.viewer-action-rail{right:6px;top:104px}.viewer-loading-state{flex-direction:column;gap:var(--space-1)}.viewer-loading-copy{min-width:160px}}
.viewer-parts-panel h3{margin:0 0 var(--space-2);font-size:12px}.viewer-parts-panel p{margin:0;font-size:11px;color:var(--muted)}.viewer-parts-panel:not([hidden]){display:block}
.viewer-ux-guide{inset:auto;left:50%;top:112px;right:auto;transform:translateX(-50%);place-items:start center;padding:0;background:transparent;pointer-events:none}.viewer-ux-guide-card{pointer-events:none;max-width:390px}.viewer-ux-guide-card>button{pointer-events:auto}
.viewer-ux-bar{position:absolute;left:12px;right:12px;top:12px;z-index:var(--layer-stack-41);display:flex!important;align-items:center;gap:var(--space-2);min-height:40px;padding:var(--space-2) var(--space-2);border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-panel,0 8px 24px var(--shadow-ink));pointer-events:auto}.viewer-ux-bar[hidden]{display:none!important}
.viewer-parts-panel{pointer-events:auto;position:static;flex:0 0 auto;width:auto;max-height:42%;overflow:auto;margin:var(--space-2) 0 0;padding:var(--space-2);border:1px solid var(--line);border-radius:9px;background:var(--surface);color:var(--ink);backdrop-filter:blur(10px)}
.viewer-ux-dock{z-index:var(--layer-stack-40)}.viewer-parts-panel{z-index:var(--layer-stack-41)}

/* Viewer UX review round two: keep the unified panel on the current neutral
   token system and make every text-bearing control fully opaque. */
.unified-3d-panel{--ws-surface:var(--surface);--ws-ink:var(--ink);--ws-border:var(--line);background:var(--surface)!important;color:var(--ink)!important;border-color:var(--line)!important;opacity:1!important}
.unified-3d-panel :is(h2,h3,p,button,label,summary,strong,small,span){opacity:1!important;color:var(--ink)}
.unified-3d-panel .u3d-hint,.unified-3d-panel .u3d-status,.unified-3d-panel .u3d-model-card small{color:var(--muted)!important}
.unified-3d-panel .u3d-tabs{border-color:var(--line)}
.unified-3d-panel .u3d-tabs button{background:transparent;color:var(--ink)!important;border:1px solid transparent}
.unified-3d-panel .u3d-tabs button[aria-selected=true]{background:var(--state-active-bg)!important;color:var(--state-active-fg)!important;border-color:var(--state-active-border)}
.unified-3d-panel .u3d-command,.unified-3d-panel .u3d-model-card,.unified-3d-panel .u3d-model-detail button{color:var(--ink);border-color:var(--line);background:var(--surface)}

/* The display modes share the existing context-toolbar lane. */
#redesignContext.viewer-ux-context{overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap}
#redesignContext.viewer-ux-context .viewer-ux-bar{position:static;left:auto;right:auto;top:auto;z-index:auto;flex:0 0 auto;min-height:28px;padding:0;border:0;background:transparent;box-shadow:none;color:var(--ink);display:flex!important}
#redesignContext.viewer-ux-context .viewer-display-segmented{background:var(--surface-hover);border-color:var(--line)}
#redesignContext.viewer-ux-context .viewer-display-segmented button{background:transparent;color:var(--ink)!important}
#redesignContext.viewer-ux-context .viewer-display-segmented button[aria-pressed=true]{background:var(--state-active-bg)!important;color:var(--state-active-fg)!important}

/* Parts are labels plus token dropdowns, never black native form fields. */
.viewer-part-name{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:600;color:var(--ink)}
.viewer-select{position:relative;min-width:58px;flex:0 0 auto}
.viewer-select-trigger{width:100%;padding:var(--space-1) var(--space-2)!important;border:1px solid var(--line)!important;border-radius:5px!important;background:var(--surface-hover)!important;color:var(--ink)!important;font-size:11px!important;white-space:nowrap}
.viewer-select-menu{position:absolute;left:0;top:calc(100% + 4px);z-index:var(--layer-stack-80);display:grid;min-width:100%;padding:var(--space-1);border:1px solid var(--line);border-radius:7px;background:var(--surface);box-shadow:var(--shadow-panel);white-space:nowrap}
.viewer-select-menu[hidden]{display:none!important}
.viewer-select-menu.opens-up{top:auto;bottom:calc(100% + 4px)}
.viewer-select-option{padding:var(--space-1) var(--space-2)!important;border:0!important;border-radius:4px!important;background:transparent!important;color:var(--ink)!important;text-align:left;font-size:11px!important}
.viewer-select-option:hover,.viewer-select-option[aria-selected=true]{background:var(--state-active-bg)!important;color:var(--state-active-fg)!important}
.viewer-part-top input[type=text],.viewer-part-top input:not([type]){display:none}
.viewer-part-controls select{display:none}
.viewer-part-controls{display:grid;grid-template-columns:auto minmax(58px,1fr) minmax(58px,1fr);align-items:center;gap:var(--space-2)}
.viewer-part-controls input[type=range]{grid-column:1/-1;width:100%;min-width:0;display:block}
.viewer-axis-widget{background:var(--surface)!important;color:var(--ink)!important}
.viewer-axis-widget button[data-axis]{background:var(--surface)!important;color:var(--ink)!important;border-color:var(--line)!important}
.viewer-action-rail button{background:var(--surface)!important;color:var(--ink)!important}
.viewer-parts-panel{background:var(--surface)!important;color:var(--ink)!important}
.viewer-loading-state{background:var(--surface)!important;color:var(--ink)!important}

/* Viewer UX round three: keep settings readable, keep parts in the panel flow,
   and anchor XYZ to the blackboard rather than the preview panel. */
.viewer-ux-bar [data-view-settings]{background:var(--surface-hover)!important;color:var(--ink)!important;border:1px solid var(--line)!important}
.viewer-parts-panel{position:static;display:block;flex:0 0 auto;width:auto;max-height:42%;overflow:auto;margin:var(--space-2) 0 0;padding:var(--space-2);border:1px solid var(--line);border-radius:9px;background:var(--surface)!important;color:var(--ink)!important}
.viewer-parts-panel[hidden]{display:none!important}
.viewer-parts-panel>summary{cursor:pointer;font-size:12px;font-weight:700;list-style:none;padding:var(--space-1) 0 var(--space-2)}
.viewer-parts-panel>summary::-webkit-details-marker{display:none}
.viewer-parts-panel>summary::before{content:'▸';display:inline-block;margin-right:var(--space-1);transition:transform .15s ease}
.viewer-parts-panel[open]>summary::before{transform:rotate(90deg)}
.viewer-axis-widget[data-viewer-board-axis]{right:14px;top:14px;z-index:var(--layer-stack-36)}
.ground-grid-control{display:grid;gap:var(--space-2);margin-top:var(--space-2);padding:var(--space-2);border:1px solid var(--ws-border);border-radius:10px;font-size:12px}.ground-grid-control legend{padding:0 var(--space-1);font-weight:700}.ground-grid-control label{display:flex;align-items:center;gap:var(--space-2);min-height:24px}.ground-grid-control input{accent-color:var(--state-active-fg)}.ground-grid-control small{margin-left:auto;color:var(--ws-muted);font-size:10px}
.ground-sky{display:flex;flex-wrap:wrap;gap:4px;align-items:center}.ground-sky>span{flex-basis:100%;font-weight:700}.ground-sky [data-sky]{min-height:32px;padding:0 10px;border:1px solid var(--ws-border);border-radius:8px;background:transparent;color:inherit;cursor:pointer}.ground-sky [data-sky][aria-checked="true"]{background:#edf1f4;color:#263440}
@media (pointer:coarse){.ground-sky [data-sky]{min-height:44px}}
.unified-3d-panel .u3d-tabs button[aria-selected=true], .unified-3d-panel.dark .u3d-tabs button[aria-selected=true]{background:var(--surface-soft);color:var(--ink)}
.u3d-tool-empty{display:grid;gap:var(--space-2)}.u3d-empty-intro{display:grid;gap:var(--space-1);padding:var(--space-2) var(--space-1);color:var(--ink)}.u3d-empty-intro strong{font-size:14px}.u3d-empty-intro span{font-size:12px;line-height:1.6;color:var(--muted)}.u3d-empty-card{display:grid;grid-template-columns:82px 1fr;gap:var(--space-2);align-items:center;padding:var(--space-2);border:1px solid var(--line);border-radius:12px;background:var(--surface)}.u3d-empty-card svg{width:82px;height:58px}.u3d-empty-card div{display:grid;gap:var(--space-1)}.u3d-empty-card strong{font-size:13px}.u3d-empty-card span{font-size:11px;line-height:1.5;color:var(--muted)}.u3d-empty-card button{justify-self:start;margin-top:var(--space-1);padding:var(--space-2) var(--space-2);border:1px solid var(--state-active-fg);border-radius:8px;background:var(--state-active-fg);color:var(--ink);font-size:11px;font-weight:700}.surface-paint-tools{margin-top:var(--space-3);padding:var(--space-3);border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink)}.surface-paint-head,.surface-paint-row{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.surface-paint-head{justify-content:space-between;margin-bottom:var(--space-2);font-size:13px}.surface-paint-head label{font-size:11px;color:var(--muted)}.surface-paint-controls{display:grid;gap:var(--space-2)}.surface-paint-row button{padding:var(--space-2) var(--space-2);border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--muted);font-size:11px}.surface-paint-row button.is-active{border-color:var(--state-active-border);background:var(--state-active-bg);color:var(--state-active-fg)}.surface-paint-row [data-paint-color]{width:22px;height:22px;padding:0;border-radius:999px}.surface-paint-row label{display:flex;align-items:center;gap:var(--space-1);font-size:11px}.surface-paint-row input[type=range]{width:100px;accent-color:var(--state-active-fg)}.surface-paint-tools [data-paint-status]{margin:0;color:var(--muted);font-size:11px;line-height:1.5}.surface-paint-empty{display:grid;justify-items:center;gap:var(--space-1);text-align:center;color:var(--muted);font-size:11px;line-height:1.5}.surface-paint-empty svg{width:100%;height:74px}.surface-paint-empty strong{color:var(--ink);font-size:13px}.surface-paint-empty button{margin-top:var(--space-1);padding:var(--space-2) var(--space-2);border:0;border-radius:8px;background:var(--state-active-fg);color:var(--ink);font-size:11px;font-weight:700}
.u3d-filter-chips{display:flex;flex-wrap:wrap;gap:var(--space-1)}.u3d-filter-chip{padding:var(--space-1) var(--space-2);border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--muted);font-size:11px;cursor:pointer}.u3d-filter-chip.is-on{border-color:var(--state-active-border);background:var(--state-active-bg);color:var(--state-active-fg);font-weight:700}.u3d-model-card{position:relative}.u3d-model-open{display:grid;gap:var(--space-2);text-align:left;background:transparent;color:inherit;border:0;padding:0;cursor:pointer}.u3d-model-open img{transition:transform 900ms ease}.u3d-model-card:hover .u3d-model-open img,.u3d-model-card:focus-within .u3d-model-open img{transform:rotateY(12deg) rotateX(3deg)}.u3d-model-favorite{position:absolute;right:8px;top:8px;width:26px;height:26px;padding:0;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--warning-ink);font-size:16px;line-height:1;cursor:pointer}.u3d-model-favorite[aria-pressed=true]{background:var(--warning-soft);border-color:var(--warning-ink)}@media(prefers-reduced-motion:reduce){.u3d-model-open img{transition:none}.u3d-model-card:hover .u3d-model-open img,.u3d-model-card:focus-within .u3d-model-open img{transform:none}}

/* Round 2: model categories use the same token-menu pattern as the solid picker. */
.u3d-model-category{position:relative}.u3d-model-category>select{display:none!important;position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;margin:-1px}.u3d-model-category [data-model-category-trigger]{width:100%;display:flex;align-items:center;justify-content:space-between;padding:var(--space-2) var(--space-2);border:1px solid var(--n-200);border-radius:8px;background:var(--n-0);color:var(--n-900);font-size:13px;text-align:left}.u3d-model-category [data-model-category-trigger]::after{content:'⌄';color:var(--n-500)}.u3d-model-category-menu{position:absolute;z-index:var(--layer-stack-5);left:0;right:0;top:calc(100% + 4px);display:grid;gap:var(--space-1);padding:var(--space-1);border:1px solid var(--n-200);border-radius:8px;background:var(--n-0);box-shadow:0 12px 24px var(--shadow-ink)}.u3d-model-category-menu[hidden]{display:none}.u3d-model-category-menu [data-model-category-option]{padding:var(--space-2) var(--space-2);border-radius:6px;background:transparent;color:var(--n-900);font-size:12px;text-align:left}.u3d-model-category-menu [data-model-category-option]:hover,.u3d-model-category-menu [data-model-category-option][aria-selected=true]{background:var(--n-100)}

/* Round 2: mint is reserved for logo/one primary action/focus. */
.u3d-empty-card button,.surface-paint-empty button{border:1px solid var(--n-200);background:var(--n-0);color:var(--n-900);font-weight:600}.u3d-empty-card button:hover,.surface-paint-empty button:hover{border-color:var(--n-500);background:var(--n-50)}.surface-paint-row button.is-active{border-color:var(--n-900);background:var(--n-900);color:var(--ink)}.u3d-filter-chip.is-on{border-color:var(--n-900);background:var(--n-900);color:var(--ink)}.u3d-model-detail [data-curated-use]{background:var(--btn-primary-bg);color:var(--btn-primary-fg);border-color:var(--btn-primary-border)}.u3d-empty-card svg,.u3d-empty-card canvas{width:82px;height:58px}.u3d-empty-card canvas{display:block;border-radius:8px;background:var(--n-50)}

/* Viewer UX round four: geometry-tab buttons and labels use the design-token
   secondary / primary button styles so they stay readable in dark and light. */
.unified-3d-panel .u3d-btn,.u3d-btn{padding:var(--space-1) var(--space-2);border:1px solid var(--btn-secondary-border);border-radius:8px;background:var(--btn-secondary-bg);color:var(--btn-secondary-fg);font-size:12px;line-height:1.4;cursor:pointer;transition:transform var(--motion-fast) var(--motion-ease),opacity var(--motion-fast) var(--motion-ease)}
.unified-3d-panel .u3d-btn:hover,.u3d-btn:hover{background:var(--surface-hover);border-color:var(--muted)}
.unified-3d-panel .u3d-btn[aria-pressed=true],.u3d-btn[aria-pressed=true]{background:var(--state-active-bg);color:var(--state-active-fg);border-color:var(--ink)}
.unified-3d-panel .u3d-btn.u3d-btn-primary,.u3d-btn.u3d-btn-primary{background:var(--btn-primary-bg);color:var(--btn-primary-fg);border-color:var(--btn-primary-border);font-weight:700}
.unified-3d-panel .u3d-btn:focus-visible,.u3d-btn:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
.unified-3d-panel .u3d-label,.u3d-label{font-size:12px;color:var(--muted)}
.u3d-range{accent-color:var(--ink)}
/* Lab and model-library controls hosted inside the panel follow the same tokens
   (their standalone stylesheets hard-code white buttons for the old light UI). */
.unified-3d-panel .gl-panel button,.unified-3d-panel .fs-panel button,.unified-3d-panel .u3d-browse-all{background:var(--btn-secondary-bg);color:var(--btn-secondary-fg);border-color:var(--btn-secondary-border)}
.unified-3d-panel .gl-panel button:hover,.unified-3d-panel .fs-panel button:hover,.unified-3d-panel .u3d-browse-all:hover{background:var(--surface-hover);border-color:var(--muted)}
.unified-3d-panel .gl-panel .gl-active{background:var(--state-active-bg);color:var(--state-active-fg);border-color:var(--ink)}
.unified-3d-panel .gl-panel select{background:var(--surface);color:var(--ink);border-color:var(--line)}
.unified-3d-panel .gl-light-pad{background:var(--surface-hover)}
.unified-3d-panel .u3d-growth .fs-pad{color:var(--muted);background:var(--surface-hover);border-color:var(--line)}
/* Physics Kit (#57) mounts inside this panel; its stylesheet uses raw --n-*
   palette steps that do not flip in dark mode. Map it to semantic tokens here. */
.unified-3d-panel .physics-kit-section,.unified-3d-panel .physics-kit-player{border-top-color:var(--line)}
.unified-3d-panel .physics-kit-section h3{color:var(--ink)}
.unified-3d-panel .physics-kit-section p,.unified-3d-panel .physics-kit-card small,.unified-3d-panel .physics-kit-graph small{color:var(--muted)}
.unified-3d-panel .physics-kit-status{color:var(--muted)!important}
.unified-3d-panel .physics-kit-card,.unified-3d-panel .physics-kit-player button,.unified-3d-panel .physics-kit-graph{background:var(--btn-secondary-bg);color:var(--btn-secondary-fg);border-color:var(--btn-secondary-border)}
.unified-3d-panel .physics-kit-card:hover,.unified-3d-panel .physics-kit-card:focus-visible{background:var(--surface-hover);border-color:var(--muted)}
.unified-3d-panel .physics-kit-card canvas{background:var(--surface-hover)}
.unified-3d-panel .physics-kit-control output{color:var(--ink)}
.unified-3d-panel .physics-kit-graph canvas{--graph-ink:var(--ink);--graph-cursor:var(--ink)}
.unified-3d-panel .physics-kit-player button[data-primary],.unified-3d-panel .physics-kit-insert{background:var(--btn-primary-bg);color:var(--btn-primary-fg);border-color:var(--btn-primary-border)}
.unified-3d-panel .physics-kit-control input,.unified-3d-panel .physics-kit-player input[type=range]{accent-color:var(--ink)}
/* Model-library filter chips and favourite stars (curated library) hard-code
   white backgrounds; keep them on the same secondary / active tokens. */
.unified-3d-panel .u3d-filter-chip,.unified-3d-panel .u3d-model-favorite{background:var(--btn-secondary-bg);color:var(--btn-secondary-fg);border-color:var(--btn-secondary-border)}
.unified-3d-panel .u3d-filter-chip.is-on,.unified-3d-panel .u3d-model-favorite[aria-pressed=true]{background:var(--state-active-bg);color:var(--state-active-fg);border-color:var(--ink)}
/* Lab empty state and surface paint tools (#65) use fixed light greens; inside
   the panel they follow the semantic surface / ink / muted tokens instead. */
.unified-3d-panel .u3d-empty-intro,.unified-3d-panel .u3d-empty-intro strong,.unified-3d-panel .surface-paint-empty strong{color:var(--ink)}
.unified-3d-panel .u3d-empty-intro span,.unified-3d-panel .u3d-empty-card span,.unified-3d-panel .surface-paint-head label,.unified-3d-panel .surface-paint-tools [data-paint-status],.unified-3d-panel .surface-paint-empty{color:var(--muted)}
.unified-3d-panel .u3d-empty-card,.unified-3d-panel .surface-paint-tools{background:var(--surface);color:var(--ink);border-color:var(--line)}
.unified-3d-panel .u3d-empty-card canvas{background:var(--surface-hover)}
.unified-3d-panel .u3d-empty-card button,.unified-3d-panel .surface-paint-empty button,.unified-3d-panel .surface-paint-row button:not([data-paint-color]){background:var(--btn-secondary-bg);color:var(--btn-secondary-fg);border-color:var(--btn-secondary-border)}
.unified-3d-panel .u3d-empty-card button:hover,.unified-3d-panel .surface-paint-empty button:hover,.unified-3d-panel .surface-paint-row button:not([data-paint-color]):hover{background:var(--surface-hover);border-color:var(--muted)}
.unified-3d-panel .surface-paint-row button.is-active:not([data-paint-color]){background:var(--state-active-bg);color:var(--state-active-fg);border-color:var(--ink)}
.unified-3d-panel .surface-paint-row input[type=range]{accent-color:var(--ink)}

/* Dark mode keeps the right-side 3D workspace controls readable against the panel surface. */
html body:not(.theme-light) .unified-3d-panel,
html body:not(.theme-light) .unified-3d-panel #panel3D,
html body:not(.theme-light) .unified-3d-panel #geometry-lab{background:var(--surface)!important;color:var(--ink)!important;border-color:var(--line)!important}
html body:not(.theme-light) .unified-3d-panel :is(button,input,select,textarea){background:var(--surface-hover)!important;color:var(--ink)!important;border-color:var(--line)!important}
html body:not(.theme-light) .unified-3d-panel :is(.u3d-hint,.u3d-status,.u3d-empty-card span,.surface-paint-tools [data-paint-status],.surface-paint-empty){color:var(--muted)!important}
html body:not(.theme-light) .unified-3d-panel :is(h2,h3,h4,strong,legend,.u3d-empty-card strong,.surface-paint-empty strong){color:var(--ink)!important}
html body:not(.theme-light) .unified-3d-panel button:disabled{color:var(--muted)!important;opacity:.9}

/* The legacy right-side 3D viewport remains a separate panel during the shell migration. */
html body:not(.theme-light) #panel3D{background:var(--surface)!important;color:var(--ink)!important;border-color:var(--line)!important}
html body:not(.theme-light) #panel3D :is(button,input,select,textarea){color:var(--ink)!important;border-color:var(--line)!important}
html body:not(.theme-light) #panel3D button:disabled{color:var(--muted)!important;opacity:.9}

/* Editable display name uses the existing neutral layer input tokens. */
.viewer-part-name input[type=text]{display:block;box-sizing:border-box;width:100%;min-width:0;padding:var(--space-1) var(--space-2);border:1px solid var(--line);border-radius:5px;background:var(--surface-hover);color:var(--ink);font:inherit}

/* 手机 3D 面板在底部工具栏（z-index:var(--layer-stack-85)）上方，几何体与重试按钮必须能真实点击。 */
@media(max-width:640px){#panel3DTools{z-index:var(--layer-stack-90)}}
/* Desktop: the floating AI command bar overlaps the lower part of this panel.
   Leave scroll room so the last controls (the parts list) can sit above it. */
@media (min-width:641px){.unified-3d-panel .u3d-content{padding-bottom:152px}}

/* 预渲染缩略图是 1024² 白底正方形：卡片按正方形显示，不拉伸 */
.u3d-model-card img{height:auto;aspect-ratio:1/1;object-fit:contain;background:#fff}
.gl-model img{background:#fff}

/* 复选框连同关联标签提供完整的移动端触控区域。 */
.ground-grid-control > label{display:flex;align-items:center;min-height:44px}
