:root{--bg:#eef2f6;--panel:#fff;--ink:#1f2b3a;--muted:#6b7b8c;--line:#d8e0e8;--accent:#1f5fa8;--accent-soft:#e8f0fa;--accent-2:#2f8f6b;--warn:#c96a1e;--shadow:0 1px 3px #1f2b3a14, 0 6px 18px #1f2b3a0f;--shadow-lg:0 8px 30px #1f2b3a2e, 0 2px 8px #1f2b3a1a;--r:12px}*{box-sizing:border-box}html,body{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:Segoe UI,system-ui,-apple-system,Roboto,Arial,sans-serif;font-size:14px}#root{height:100%}button{font-family:inherit}.app{flex-direction:column;height:100vh;min-height:720px;display:flex}.topbar{background:var(--panel);border-bottom:1px solid var(--line);box-shadow:var(--shadow);z-index:5;align-items:center;gap:16px;padding:10px 16px;display:flex}.logo{letter-spacing:.2px;align-items:center;gap:10px;font-size:17px;font-weight:800;display:flex}.logo .glogo{height:27px;display:block}.badge3d{color:var(--accent);letter-spacing:.5px;font-size:18px;font-weight:800}.proj{color:var(--muted);border-left:1px solid var(--line);padding-left:14px;font-size:13px}.proj-name{cursor:text;color:var(--ink);border-radius:4px;padding:1px 3px}.proj-name:hover{background:var(--accent-soft)}.proj-name-input{font:inherit;color:var(--ink);border:1px solid var(--accent);border-radius:4px;width:160px;padding:0 3px;font-weight:700}.visually-hidden{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.spacer{flex:1}.topbtn{border:1px solid var(--line);cursor:pointer;color:var(--ink);background:#fff;border-radius:9px;align-items:center;gap:7px;padding:8px 12px;font-size:13px;font-weight:600;display:flex}.topbtn svg{width:17px;height:17px}.topbtn.ghost{background:0 0;border-color:#0000;padding:8px}.topbtn.primary{background:var(--accent);color:#fff;border-color:var(--accent);box-shadow:0 2px 8px #1f5fa84d}.topbtn:disabled{opacity:.45;cursor:not-allowed}.toolbar{background:var(--panel);border-bottom:1px solid var(--line);align-items:stretch;gap:0;padding:8px 14px;display:flex;overflow-x:auto}.group{border-right:1px solid var(--line);flex-direction:column;padding:0 14px;display:flex}.group:last-child{border-right:none}.group-row{gap:6px;display:flex}.group-name{text-transform:uppercase;letter-spacing:.6px;color:var(--muted);text-align:center;margin-top:6px;font-size:10.5px;font-weight:700}.tool{cursor:pointer;width:58px;height:52px;color:var(--ink);background:0 0;border:1px solid #0000;border-radius:10px;flex-direction:column;justify-content:center;align-items:center;gap:4px;transition:all .12s;display:flex}.tool:hover:not(:disabled){background:var(--accent-soft);border-color:#cfe0f2}.tool.active{background:var(--accent-soft);border-color:var(--accent)}.tool svg{width:24px;height:24px}.tool span{font-size:10.5px;font-weight:600;line-height:1}.tool.big svg{width:26px;height:26px}.tool:disabled{opacity:.4;cursor:not-allowed}.body{flex:1;grid-template-columns:248px 1fr 268px;min-height:0;display:grid}.panel{background:var(--panel);flex-direction:column;min-height:0;display:flex}.panel.left{border-right:1px solid var(--line)}.panel.right{border-left:1px solid var(--line)}.panel-head{border-bottom:1px solid var(--line);align-items:center;gap:8px;padding:12px 14px;font-size:13px;font-weight:700;display:flex}.panel-head svg{width:16px;height:16px;color:var(--accent)}.panel-head .count{color:var(--muted);margin-left:auto;font-size:12px;font-weight:600}.tree{padding:6px;overflow:auto}.node{cursor:pointer;border-radius:9px;align-items:center;gap:9px;padding:9px 10px;font-size:13px;font-weight:600;display:flex}.node:hover{background:#f3f7fb}.node.sel{background:var(--accent-soft);outline:1px solid #cfe0f2}.node svg{width:18px;height:18px;color:var(--accent);flex:none}.node .sub{color:var(--muted);margin-left:auto;font-size:11.5px;font-weight:500}.node.root{color:var(--muted);text-transform:uppercase;letter-spacing:.5px;cursor:default;padding:10px 10px 4px;font-size:11px;font-weight:700}.node.root:hover{background:0 0}.node.empty{color:var(--muted);cursor:default;padding:14px 12px;font-size:12.5px;font-weight:500}.node.empty:hover{background:0 0}.node.future{opacity:.5;cursor:default}.node.future:hover{background:0 0}.viewport-cell{min-width:0;min-height:0;display:flex;position:relative}.viewport-cell>.viewport{flex:1;min-width:0;min-height:0}.viewport{position:relative;overflow:hidden}.viewport canvas{width:100%;height:100%;display:block}.vhint{border:1px solid var(--line);color:var(--muted);pointer-events:none;background:#ffffffd9;border-radius:20px;align-items:center;gap:8px;padding:6px 12px;font-size:12px;font-weight:600;display:flex;position:absolute;bottom:14px;left:16px}.vhint svg{width:15px;height:15px}.vhint--error{color:#c0392b;background:#fff5f4eb;border-color:#e3b3ac}.app-toast{z-index:1000;color:#c0392b;background:#fff5f4fa;border:1px solid #e3b3ac;border-radius:12px;align-items:center;gap:10px;max-width:min(560px,100vw - 32px);padding:10px 14px;font-size:13px;font-weight:600;display:flex;position:fixed;bottom:24px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0000001f}.app-toast-close{color:inherit;cursor:pointer;background:0 0;border:none;padding:0 2px;font-size:18px;line-height:1}.app-banner{z-index:1000;background:var(--accent-soft);border:1px solid var(--accent);max-width:min(560px,100vw - 32px);color:var(--ink);border-radius:12px;align-items:center;gap:12px;padding:10px 14px;font-size:13px;font-weight:600;display:flex;position:fixed;top:76px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0000001f}.app-banner-actions{gap:8px;display:flex}.app-banner button{border:1px solid var(--accent);color:var(--accent);cursor:pointer;background:#fff;border-radius:8px;padding:5px 10px;font-size:13px;font-weight:600}.app-banner button.primary{background:var(--accent);color:#fff}.vp-loading{color:var(--muted);background:radial-gradient(120% 120% at 50% 0,#f7fafd 0%,#dfe8f1 100%);flex-direction:column;justify-content:center;align-items:center;gap:16px;font-size:13px;font-weight:600;display:flex;position:absolute;inset:0}.vp-loading-text{text-align:center;max-width:360px}.vp-loading-text--error{color:#c0392b}.vp-spinner{width:64px;height:64px;position:relative}.vp-spinner svg{width:100%;height:100%;transform:rotate(-90deg)}.vp-spinner-track{fill:none;stroke:var(--line);stroke-width:6px}.vp-spinner-arc{fill:none;stroke:var(--accent);stroke-width:6px;stroke-linecap:round}.vp-spinner-percent{color:var(--accent);justify-content:center;align-items:center;font-size:13px;font-weight:700;display:flex;position:absolute;inset:0}.vp-spinner--spin svg{transform-origin:50%;animation:1s linear infinite vp-spin}.vp-spinner--error .vp-spinner-arc{stroke:#c0392b}@keyframes vp-spin{0%{transform:rotate(-90deg)}to{transform:rotate(270deg)}}.tabs{gap:6px;padding:10px 12px 4px;display:flex}.tab{text-align:center;cursor:pointer;color:var(--muted);background:0 0;border:1px solid #0000;border-radius:8px;flex:1;padding:8px 6px;font-size:12px;font-weight:700}.tab.active{background:var(--accent-soft);color:var(--accent);border-color:#cfe0f2}.assets{grid-template-columns:1fr 1fr;gap:10px;padding:10px 12px;display:grid;overflow:auto}.asset{border:1px solid var(--line);cursor:not-allowed;opacity:.55;background:#f6f9fc;border-radius:12px;flex-direction:column;align-items:center;gap:8px;padding:12px 8px 9px;display:flex}.asset svg{width:52px;height:52px}.asset span{text-align:center;color:var(--ink);font-size:11.5px;font-weight:600;line-height:1.15}.asset .badge{color:var(--accent-2);text-transform:uppercase;letter-spacing:.4px;font-size:9px;font-weight:700}.assets-empty{color:var(--muted);text-align:center;padding:24px 16px;font-size:12.5px}.field{flex-direction:column;gap:4px;display:flex}.field label{color:var(--muted);text-transform:uppercase;letter-spacing:.4px;font-size:10.5px;font-weight:700}.field .inp{border:1.5px solid var(--line);background:#f4f7fb;border-radius:9px;align-items:center;display:flex;overflow:hidden}.field .inp input{width:74px;color:var(--ink);background:0 0;border:none;outline:none;padding:8px;font-size:14px;font-weight:700}.field .inp .unit{color:var(--muted);background:#e9eff5;align-self:stretch;align-items:center;padding:0 9px;font-size:12px;font-weight:600;display:flex}.field .inp.focus{border-color:var(--accent);background:#fff}.field .inp .checkbox{color:var(--ink);cursor:pointer;align-items:center;gap:7px;padding:8px 10px;font-size:13px;font-weight:700;display:flex}.field .inp .checkbox input{width:auto;accent-color:var(--accent);cursor:pointer}.params-empty{color:var(--muted);font-size:12.5px}.inspector{background:var(--panel);border:1px solid var(--line);width:298px;max-height:calc(100% - 28px);box-shadow:var(--shadow-lg,0 8px 30px #1f2b3a2e, 0 2px 8px #1f2b3a1a);z-index:15;border-radius:16px;flex-direction:column;display:flex;position:absolute;top:14px;right:14px;overflow:visible}.insp-head{border-bottom:1px solid var(--line);background:linear-gradient(#fbfdff,#f4f8fc);border-radius:16px 16px 0 0;align-items:center;gap:9px;padding:12px 12px 11px;display:flex}.insp-type{background:var(--accent-soft);width:32px;height:32px;color:var(--accent);border-radius:9px;flex:none;justify-content:center;align-items:center;display:flex}.insp-type svg{width:18px;height:18px}.insp-name{color:var(--ink);background:0 0;border:1px solid #0000;border-radius:8px;outline:none;flex:1;min-width:0;padding:6px 8px;font-size:15px;font-weight:700}.insp-name:hover{border-color:var(--line);background:#fff}.insp-name:focus{border-color:var(--accent);background:#fff}.icon-btn{border:1px solid var(--line);cursor:pointer;width:30px;height:30px;color:var(--muted);background:#fff;border-radius:8px;flex:none;justify-content:center;align-items:center;display:flex}.icon-btn svg{width:16px;height:16px}.icon-btn:hover{border-color:var(--accent);color:var(--accent)}.icon-btn.danger:hover{color:#c0392b;border-color:#c0392b}.insp-body{padding:6px 14px 14px;overflow:auto}.sec{border-bottom:1px solid #eef3f8;padding:12px 0}.sec:last-child{border-bottom:none}.sec-t{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin-bottom:10px;font-size:10.5px;font-weight:800}.dim{margin-bottom:14px}.dim:last-child{margin-bottom:0}.dim-top{justify-content:space-between;align-items:center;margin-bottom:3px;display:flex}.dim-top label{color:var(--ink);font-size:12px;font-weight:700}.dim-val{border:1.5px solid var(--line);background:#f4f7fb;border-radius:8px;align-items:center;display:flex;overflow:hidden}.dim-val input{text-align:right;width:62px;color:var(--ink);background:0 0;border:none;outline:none;padding:4px 6px;font-size:13px;font-weight:700}.dim-val .u{color:var(--muted);background:#e9eff5;align-self:stretch;align-items:center;padding:0 7px;font-size:11px;display:flex}.ruler{height:22px;margin-top:3px;position:relative}.ruler .ticks{background-image:repeating-linear-gradient(90deg,#c2cedb 0 1px,#0000 1px 8.33%);height:5px;position:absolute;top:0;left:3px;right:3px}.ruler input[type=range]{-webkit-appearance:none;background:0 0;width:100%;height:16px;margin:0;position:absolute;bottom:0;left:0;right:0}.ruler input[type=range]::-webkit-slider-runnable-track{background:linear-gradient(90deg, var(--accent) var(--fill,40%), #dbe4ee var(--fill,40%));border-radius:4px;height:4px}.ruler input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--accent);cursor:pointer;background:#fff;border-radius:50%;width:18px;height:18px;margin-top:-7px;box-shadow:0 1px 4px #1f5fa859}.xyz{grid-template-columns:repeat(3,1fr);gap:7px;display:grid}.xyz .f{border:1.5px solid var(--line);background:#f4f7fb;border-radius:8px;align-items:center;display:flex;overflow:hidden}.xyz .f .ax{color:#fff;align-self:stretch;align-items:center;padding:0 6px;font-size:11px;font-weight:800;display:flex}.xyz .f.x .ax{background:#d9534f}.xyz .f.y .ax{background:#4a9e5e}.xyz .f.z .ax{background:#3d86d6}.xyz .f input{background:0 0;border:none;outline:none;width:100%;min-width:0;padding:6px 4px;font-size:12px;font-weight:700}.rrow{align-items:center;gap:8px;margin-bottom:8px;display:flex}.rrow:last-child{margin-bottom:0}.rax{color:#fff;border-radius:6px;flex:none;justify-content:center;align-items:center;width:20px;height:20px;font-size:11px;font-weight:800;display:flex}.rrow.x .rax{background:#d9534f}.rrow.y .rax{background:#4a9e5e}.rrow.z .rax{background:#3d86d6}.rrow .rl{width:74px;height:16px;position:relative}.rrow .rl .ticks{background-image:repeating-linear-gradient(90deg,#c2cedb 0 1px,#0000 1px 12.5%);height:4px;position:absolute;top:0;left:2px;right:2px}.rrow input[type=range]{-webkit-appearance:none;background:0 0;width:100%;height:14px;margin:0;position:absolute;bottom:0;left:0;right:0}.rrow input[type=range]::-webkit-slider-runnable-track{background:#dbe4ee;border-radius:3px;height:3px}.rrow input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--accent);cursor:pointer;background:#fff;border-radius:50%;width:15px;height:15px;margin-top:-6px;box-shadow:0 1px 3px #1f5fa859}.rrow .rnum{border:1.5px solid var(--line);background:#f4f7fb;border-radius:7px;flex:none;align-items:center;width:68px;display:flex;overflow:hidden}.rrow .rnum input{text-align:right;background:0 0;border:none;outline:none;width:100%;min-width:0;padding:4px 2px 4px 6px;font-size:12px;font-weight:700}.rrow .rnum .u{color:var(--muted);padding:0 5px;font-size:11px}.cmbar{border:1.5px solid var(--line);cursor:pointer;-webkit-user-select:none;user-select:none;background:#fbfdff;border-radius:11px;align-items:center;gap:11px;padding:9px 11px;display:flex}.cmbar:hover{background:var(--accent-soft);border-color:#cfe0f2}.cmbar.open{border-color:var(--accent)}.cm-dot{background:var(--col,#8fb8e0);border:1px solid #0000001f;border-radius:8px;flex:none;width:30px;height:30px}.cm-dot.mat-gloss{background:linear-gradient(135deg, var(--col), color-mix(in srgb, var(--col), #fff 55%), var(--col))}.cm-dot.mat-metal{background:linear-gradient(160deg, color-mix(in srgb, var(--col), #000 25%), color-mix(in srgb, var(--col), #fff 60%), color-mix(in srgb, var(--col), #000 15%))}.cm-dot.mat-glass{background:color-mix(in srgb, var(--col), #fff 30%);opacity:.7;box-shadow:inset 0 0 10px #ffffffb3}.cm-dot.mat-rubber{background:color-mix(in srgb, var(--col), #000 8%)}.cm-meta{flex:1;min-width:0}.cm-meta .c1{color:var(--ink);font-size:13px;font-weight:700;line-height:1.15}.cm-meta .c2{color:var(--muted);font-size:11.5px;font-weight:600}.cm-chev{color:var(--muted);font-size:12px;transition:all .15s}.cmbar.open .cm-chev{color:var(--accent);transform:rotate(90deg)}.cm-pop{border:1px solid var(--line);box-shadow:var(--shadow);background:#fff;border-radius:12px;margin-top:9px;padding:11px 12px}.cm-sub{text-transform:uppercase;letter-spacing:.5px;color:var(--muted);margin:2px 0 8px;font-size:10px;font-weight:800}.cm-sub.mt{margin-top:13px}.swatches{grid-template-columns:repeat(7,1fr);gap:7px;display:grid}.sw{aspect-ratio:1;cursor:pointer;border:2px solid #0000;border-radius:8px;position:relative}.sw.sel{border-color:var(--ink);box-shadow:inset 0 0 0 2px #fff}.sw.custom{color:#fff;background:conic-gradient(red,#ff0,#0f0,#0ff,#00f,#f0f,red);justify-content:center;align-items:center;font-size:14px;font-weight:700;display:flex;overflow:hidden}.sw.custom input{opacity:0;cursor:pointer;position:absolute;inset:0}.chips{flex-wrap:wrap;gap:7px;display:flex}.chip{border:1.5px solid var(--line);cursor:pointer;color:var(--ink);background:#fff;border-radius:20px;padding:7px 11px;font-size:12px;font-weight:600}.chip:hover{background:var(--accent-soft);border-color:#cfe0f2}.chip.sel{border-color:var(--accent);background:var(--accent-soft);color:var(--accent)}.seg{background:#eef3f8;border-radius:10px;gap:3px;padding:3px;display:flex}.seg button{cursor:pointer;color:var(--muted);background:0 0;border:none;border-radius:8px;flex:1;padding:7px 4px;font-size:11.5px;font-weight:700}.seg button.sel{color:var(--accent);box-shadow:var(--shadow);background:#fff}.hint{color:var(--muted);margin-top:7px;font-size:11px;line-height:1.35}.srow{align-items:center;gap:10px;display:flex}.srow input[type=range]{-webkit-appearance:none;background:0 0;flex:1;height:18px}.srow input[type=range]::-webkit-slider-runnable-track{background:linear-gradient(90deg, var(--accent) var(--fill,0%), #dbe4ee var(--fill,0%));border-radius:4px;height:4px}.srow input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;border:2px solid var(--accent);cursor:pointer;background:#fff;border-radius:50%;width:18px;height:18px;margin-top:-7px;box-shadow:0 1px 4px #1f5fa859}.srow .sv{text-align:right;width:44px;font-size:12px;font-weight:700}
