@nice2dev/ui-3d 1.2.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { NiceIcon } from '@nice2dev/ui';
2
+ import { NiceIcon, clickOnActivationKey } from '@nice2dev/ui';
3
3
  import React from 'react';
4
4
  import { useNiceTranslation } from '../core/i18n.js';
5
5
  import styles from './ModelEditor.module.css.js';
@@ -16,7 +16,7 @@ const ModelEditorViewport = /* @__PURE__ */ Object.assign(
16
16
  /* @__PURE__ */ React.memo(({ api }) => {
17
17
  const { t } = useNiceTranslation();
18
18
  const { mountRef, dragOver, handleDragOver, handleDragLeave, handleDrop, handleViewportClick, handleContextMenu, editorMode, polyCount, meshCount, boneCount, shadingMode, setShadingMode, gizmoSpace, setGizmoSpace, contextMenu, closeContextMenu, addPrimitive, addSceneLight, duplicateSelected, deleteSelected, selectedNode, rootObjectRef, focusOnObject, snapEnabled, setSnapEnabled, } = api;
19
- return (jsxs(Fragment, { children: [jsxs("div", { ref: mountRef, className: `${styles.viewportContainer} ${dragOver ? styles.dragOver : ''}`, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, onClick: handleViewportClick, onContextMenu: handleContextMenu, children: [jsxs("div", { className: styles.viewportOverlay, children: [jsx("span", { className: styles.viewportBadge, children: t(...MODE_BADGE[editorMode]) }), jsx("span", { className: styles.viewportBadge, children: t('modelEditorViewport.trisMeshesBones', '{polyCount} tris · {meshCount} meshes · {boneCount} bones')
19
+ return (jsxs(Fragment, { children: [jsxs("div", { role: "presentation", ref: mountRef, className: `${styles.viewportContainer} ${dragOver ? styles.dragOver : ''}`, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, onClick: handleViewportClick, onContextMenu: handleContextMenu, children: [jsxs("div", { className: styles.viewportOverlay, children: [jsx("span", { className: styles.viewportBadge, children: t(...MODE_BADGE[editorMode]) }), jsx("span", { className: styles.viewportBadge, children: t('modelEditorViewport.trisMeshesBones', '{polyCount} tris · {meshCount} meshes · {boneCount} bones')
20
20
  .replace('{polyCount}', String(polyCount.toLocaleString()))
21
21
  .replace('{meshCount}', String(meshCount))
22
22
  .replace('{boneCount}', String(boneCount)) })] }), jsx("div", { className: styles.viewportShadingBar, children: ['wireframe', 'solid', 'material', 'rendered'].map((m) => (jsx("button", { className: `${styles.shadingBtn} ${shadingMode === m ? styles.shadingBtnActive : ''}`, onClick: (e) => {
@@ -31,11 +31,11 @@ const ModelEditorViewport = /* @__PURE__ */ Object.assign(
31
31
  : 'lightbulb', size: 16 }) }, m))) }), jsx("div", { className: styles.viewportGizmoInfo, children: jsx("button", { className: styles.shadingBtn, onClick: (e) => {
32
32
  e.stopPropagation();
33
33
  setGizmoSpace((s) => (s === 'local' ? 'world' : 'local'));
34
- }, title: t('modelEditorViewport.orientation', 'Orientation: {gizmoSpace}').replace('{gizmoSpace}', String(gizmoSpace)), "aria-label": t('modelEditorViewport.orientation', 'Orientation: {gizmoSpace}').replace('{gizmoSpace}', String(gizmoSpace)), children: gizmoSpace === 'local' ? (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "target", size: 14 }), " ", t('modelEditorViewport.local', 'Local')] })) : (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "globe", size: 14 }), " ", t('modelEditorViewport.world', 'World')] })) }) }), dragOver && (jsx("div", { className: styles.viewportDropZone, children: jsx("span", { children: t('modelEditorViewport.drop3dFilesHere', 'Drop 3D files here') }) }))] }), contextMenu && (jsxs("div", { className: styles.contextMenu, style: { top: contextMenu.y, left: contextMenu.x }, onClick: closeContextMenu, children: [jsxs("div", { className: styles.contextItem, onClick: () => addPrimitive('cube'), children: [jsx("span", { children: t('modelEditorViewport.addCube', 'Add Cube') }), jsx("span", { className: styles.contextKey, children: "Shift+A" })] }), jsx("div", { className: styles.contextItem, onClick: () => addPrimitive('sphere'), children: jsx("span", { children: t('modelEditorViewport.addSphere', 'Add Sphere') }) }), jsx("div", { className: styles.contextItem, onClick: () => addSceneLight('point'), children: jsx("span", { children: t('modelEditorViewport.addPointLight', 'Add Point Light') }) }), jsx("div", { className: styles.contextSep }), jsxs("div", { className: styles.contextItem, onClick: duplicateSelected, style: !selectedNode ? { opacity: 0.4, pointerEvents: 'none' } : {}, children: [jsx("span", { children: t('modelEditorViewport.duplicate', 'Duplicate') }), jsx("span", { className: styles.contextKey, children: "Shift+D" })] }), jsxs("div", { className: styles.contextItem, onClick: deleteSelected, style: !selectedNode ? { opacity: 0.4, pointerEvents: 'none' } : {}, children: [jsx("span", { children: t('modelEditorViewport.delete', 'Delete') }), jsx("span", { className: styles.contextKey, children: "Del" })] }), jsx("div", { className: styles.contextSep }), jsxs("div", { className: styles.contextItem, onClick: () => {
34
+ }, title: t('modelEditorViewport.orientation', 'Orientation: {gizmoSpace}').replace('{gizmoSpace}', String(gizmoSpace)), "aria-label": t('modelEditorViewport.orientation', 'Orientation: {gizmoSpace}').replace('{gizmoSpace}', String(gizmoSpace)), children: gizmoSpace === 'local' ? (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "target", size: 14 }), " ", t('modelEditorViewport.local', 'Local')] })) : (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "globe", size: 14 }), " ", t('modelEditorViewport.world', 'World')] })) }) }), dragOver && (jsx("div", { className: styles.viewportDropZone, children: jsx("span", { children: t('modelEditorViewport.drop3dFilesHere', 'Drop 3D files here') }) }))] }), contextMenu && (jsxs("div", { role: "presentation", className: styles.contextMenu, style: { top: contextMenu.y, left: contextMenu.x }, onClick: closeContextMenu, children: [jsxs("div", { role: "button", tabIndex: 0, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: () => addPrimitive('cube'), children: [jsx("span", { children: t('modelEditorViewport.addCube', 'Add Cube') }), jsx("span", { className: styles.contextKey, children: "Shift+A" })] }), jsx("div", { role: "button", tabIndex: 0, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: () => addPrimitive('sphere'), children: jsx("span", { children: t('modelEditorViewport.addSphere', 'Add Sphere') }) }), jsx("div", { role: "button", tabIndex: 0, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: () => addSceneLight('point'), children: jsx("span", { children: t('modelEditorViewport.addPointLight', 'Add Point Light') }) }), jsx("div", { className: styles.contextSep }), jsxs("div", { role: "button", tabIndex: 0, "aria-disabled": !selectedNode, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: duplicateSelected, style: !selectedNode ? { opacity: 0.4, pointerEvents: 'none' } : {}, children: [jsx("span", { children: t('modelEditorViewport.duplicate', 'Duplicate') }), jsx("span", { className: styles.contextKey, children: "Shift+D" })] }), jsxs("div", { role: "button", tabIndex: 0, "aria-disabled": !selectedNode, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: deleteSelected, style: !selectedNode ? { opacity: 0.4, pointerEvents: 'none' } : {}, children: [jsx("span", { children: t('modelEditorViewport.delete', 'Delete') }), jsx("span", { className: styles.contextKey, children: "Del" })] }), jsx("div", { className: styles.contextSep }), jsxs("div", { role: "button", tabIndex: 0, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: () => {
35
35
  if (rootObjectRef.current) {
36
36
  focusOnObject(rootObjectRef.current);
37
37
  }
38
- }, children: [jsx("span", { children: t('modelEditorViewport.focusCamera', 'Focus Camera') }), jsx("span", { className: styles.contextKey, children: "F" })] }), jsx("div", { className: styles.contextItem, onClick: () => setSnapEnabled((v) => !v), children: jsxs("span", { children: [snapEnabled && jsx(NiceIcon, { name: "check", size: 14 }), ' ', t('modelEditorViewport.snapToGrid', 'Snap to Grid')] }) })] }))] }));
38
+ }, children: [jsx("span", { children: t('modelEditorViewport.focusCamera', 'Focus Camera') }), jsx("span", { className: styles.contextKey, children: "F" })] }), jsx("div", { role: "button", tabIndex: 0, onKeyDown: clickOnActivationKey, className: styles.contextItem, onClick: () => setSnapEnabled((v) => !v), children: jsxs("span", { children: [snapEnabled && jsx(NiceIcon, { name: "check", size: 14 }), ' ', t('modelEditorViewport.snapToGrid', 'Snap to Grid')] }) })] }))] }));
39
39
  }), { displayName: 'ModelEditorViewport' });
40
40
 
41
41
  export { ModelEditorViewport as default };
@@ -947,12 +947,34 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
947
947
  Keyboard shortcuts
948
948
  ───────────────────────────────────────── */
949
949
  useEffect(() => {
950
+ // Escape, then Tab, leaves the viewport, where Tab cycles the mode (WCAG 2.1.2)
951
+ let tabEscape = false;
950
952
  const handleKey = (e) => {
951
- var _a, _b, _c;
952
- const tag = (_a = e.target) === null || _a === void 0 ? void 0 : _a.tagName;
953
- if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') {
953
+ var _a, _b, _c, _d;
954
+ // a key sent to the window itself counts as the body's
955
+ const target = e.target instanceof HTMLElement ? e.target : null;
956
+ const tag = target === null || target === void 0 ? void 0 : target.tagName;
957
+ if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT' || (target === null || target === void 0 ? void 0 : target.isContentEditable)) {
954
958
  return;
955
959
  }
960
+ // The shortcuts are this editor's: keys elsewhere on the page are not, and Tab / Space on
961
+ // one of its controls move focus and press it. They listened on the whole page — Tab moved
962
+ // focus nowhere on a page with the editor and Space pressed no button (TODO_1.3.0 I4).
963
+ const root = (_b = (_a = mountRef.current) === null || _a === void 0 ? void 0 : _a.closest('.nice-app-shell')) !== null && _b !== void 0 ? _b : mountRef.current;
964
+ if (target && target !== document.body && !(root === null || root === void 0 ? void 0 : root.contains(target))) {
965
+ return;
966
+ }
967
+ if ((e.key === 'Tab' || e.key === ' ') &&
968
+ (target === null || target === void 0 ? void 0 : target.closest('button, a[href], [role="button"], [role="combobox"], [role="menuitem"], [role="tab"], [role="option"], [role="checkbox"], [role="switch"], [role="slider"], [role="treeitem"]'))) {
969
+ return;
970
+ }
971
+ if (e.key === 'Tab' && tabEscape) {
972
+ tabEscape = false;
973
+ return;
974
+ }
975
+ if (!['Shift', 'Control', 'Alt', 'Meta'].includes(e.key)) {
976
+ tabEscape = e.key === 'Escape';
977
+ }
956
978
  switch (e.key.toLowerCase()) {
957
979
  case 'g':
958
980
  setTransformMode('translate');
@@ -979,7 +1001,7 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
979
1001
  const sel = findNodeById(sceneTree, selectedId);
980
1002
  if (sel) {
981
1003
  sel.object.removeFromParent();
982
- (_b = transformRef.current) === null || _b === void 0 ? void 0 : _b.detach();
1004
+ (_c = transformRef.current) === null || _c === void 0 ? void 0 : _c.detach();
983
1005
  setSelectedId(null);
984
1006
  rebuildTree();
985
1007
  }
@@ -990,7 +1012,7 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
990
1012
  const sel = findNodeById(sceneTree, selectedId);
991
1013
  if (sel) {
992
1014
  sel.object.removeFromParent();
993
- (_c = transformRef.current) === null || _c === void 0 ? void 0 : _c.detach();
1015
+ (_d = transformRef.current) === null || _d === void 0 ? void 0 : _d.detach();
994
1016
  setSelectedId(null);
995
1017
  rebuildTree();
996
1018
  }
@@ -1603,9 +1625,20 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
1603
1625
  const canRedo = undoRedoRef.current.canRedo();
1604
1626
  const undoLabel = undoRedoRef.current.undoLabel;
1605
1627
  const redoLabel = undoRedoRef.current.redoLabel;
1606
- // Keyboard shortcuts for undo/redo
1628
+ // Keyboard shortcuts for undo/redo — in this editor only, and not in a text field, whose own
1629
+ // undo they took (on the whole page before)
1607
1630
  useEffect(() => {
1608
1631
  const handleKeyDown = (e) => {
1632
+ var _a, _b;
1633
+ const target = e.target instanceof HTMLElement ? e.target : null;
1634
+ const tag = target === null || target === void 0 ? void 0 : target.tagName;
1635
+ const root = (_b = (_a = mountRef.current) === null || _a === void 0 ? void 0 : _a.closest('.nice-app-shell')) !== null && _b !== void 0 ? _b : mountRef.current;
1636
+ if (tag === 'INPUT' ||
1637
+ tag === 'TEXTAREA' ||
1638
+ (target === null || target === void 0 ? void 0 : target.isContentEditable) ||
1639
+ (target && target !== document.body && !(root === null || root === void 0 ? void 0 : root.contains(target)))) {
1640
+ return;
1641
+ }
1609
1642
  if ((e.ctrlKey || e.metaKey) && e.key === 'z' && !e.shiftKey) {
1610
1643
  e.preventDefault();
1611
1644
  undo();
@@ -1,4 +1,4 @@
1
- import { resolveCssColor } from '@nice2dev/ui';
1
+ import { resolveCssColor, getInputEngine } from '@nice2dev/ui';
2
2
  import { useRef, useState, useEffect, useCallback } from 'react';
3
3
  import * as THREE from 'three';
4
4
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
@@ -162,7 +162,7 @@ function useModelViewer(props = {}) {
162
162
  ro.observe(mount);
163
163
  // Animation loop
164
164
  const animate = () => {
165
- var _a, _b, _c, _d, _e, _f, _g;
165
+ var _a, _b, _c, _d, _e, _f;
166
166
  if (disposeRef.current) {
167
167
  return;
168
168
  }
@@ -170,12 +170,12 @@ function useModelViewer(props = {}) {
170
170
  const dt = (_b = (_a = clockRef.current) === null || _a === void 0 ? void 0 : _a.getDelta()) !== null && _b !== void 0 ? _b : 0;
171
171
  // Gamepad FPS-style nav
172
172
  if (gamepad && navMode === 'fps') {
173
- const pads = (_c = navigator.getGamepads) === null || _c === void 0 ? void 0 : _c.call(navigator);
174
- const gp = (_d = pads === null || pads === void 0 ? void 0 : pads[0]) !== null && _d !== void 0 ? _d : null;
173
+ // The pads the input engine read this frame (1.3.0: the engine is the only pad reader).
174
+ const gp = (_c = getInputEngine().gamepadSnapshot[0]) !== null && _c !== void 0 ? _c : null;
175
175
  if (gp) {
176
- const lx = (_e = gp.axes[0]) !== null && _e !== void 0 ? _e : 0;
177
- const ly = (_f = gp.axes[1]) !== null && _f !== void 0 ? _f : 0;
178
- const rx = (_g = gp.axes[2]) !== null && _g !== void 0 ? _g : 0;
176
+ const lx = (_d = gp.axes[0]) !== null && _d !== void 0 ? _d : 0;
177
+ const ly = (_e = gp.axes[1]) !== null && _e !== void 0 ? _e : 0;
178
+ const rx = (_f = gp.axes[2]) !== null && _f !== void 0 ? _f : 0;
179
179
  const fwd = new THREE.Vector3();
180
180
  camera.getWorldDirection(fwd);
181
181
  fwd.y = 0;
@@ -1 +1 @@
1
- .ModelEditor-module_root__Aiqom{background:var(--nice-bg-primary);color:var(--nice-text-primary);display:flex;flex-direction:column;font-family:Segoe UI,Consolas,monospace;font-size:12px;height:100%;overflow:hidden;user-select:none}.ModelEditor-module_menuBar__5P6Wi{align-items:center;background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:0;height:28px;padding:0 var(--nice-space-1,4px)}.ModelEditor-module_menuBtn__f1u-N{background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-2-5,10px);white-space:nowrap}.ModelEditor-module_menuBtn__f1u-N:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.ModelEditor-module_menuBtn__f1u-N:disabled{cursor:default;opacity:.4}.ModelEditor-module_menuSep__Jilgu{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.ModelEditor-module_menuLabel__gn6yQ{color:var(--nice-text-secondary);font-size:10px;margin:0 var(--nice-space-1-5,6px);white-space:nowrap}.ModelEditor-module_menuRight__YQWk7{align-items:center;display:flex;gap:var(--nice-space-1,4px);margin-left:auto}.ModelEditor-module_leftPanel__sVsxG{background:var(--nice-bg-primary);overflow:hidden;width:240px}.ModelEditor-module_leftPanel__sVsxG,.ModelEditor-module_toolbar__l8uKC{border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0}.ModelEditor-module_toolbar__l8uKC{background:var(--nice-bg-elevated);gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.ModelEditor-module_toolBtn__8DzAf{align-items:center;background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:16px;height:32px;justify-content:center;transition:all .1s;width:32px}.ModelEditor-module_toolBtn__8DzAf:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.ModelEditor-module_toolBtnActive__ek-nN{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.ModelEditor-module_toolSep__5I72j{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-1,4px) var(--nice-space-0-5,2px)}.ModelEditor-module_viewportContainer__O-e-6{background:var(--nice-bg-inset);flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.ModelEditor-module_viewportContainer__O-e-6 canvas{display:block;height:100%;width:100%}.ModelEditor-module_viewportOverlay__LXDnT{display:flex;gap:var(--nice-space-1,4px);left:8px;position:absolute;top:8px;z-index:10}.ModelEditor-module_viewportBadge__-5C9w{background:var(--nice-overlay-80,rgba(20,20,40,.8));border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);font-size:10px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.ModelEditor-module_viewportDropZone__PBrTo{align-items:center;background:rgba(85,102,204,.15);border:2px dashed var(--nice-color-primary);display:flex;inset:0;justify-content:center;pointer-events:none;position:absolute;z-index:20}.ModelEditor-module_viewportDropZone__PBrTo span{background:rgba(20,20,40,.9);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-muted,#aab);font-size:14px;padding:var(--nice-space-3,12px) var(--nice-space-6,24px)}.ModelEditor-module_rightPanel__oJf3N{background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:280px}.ModelEditor-module_panelSection__yb-jc{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.ModelEditor-module_panelTitle__rp8tH{align-items:center;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.ModelEditor-module_panelTitle__rp8tH button{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:14px;line-height:1;padding:0 var(--nice-space-0-5,2px)}.ModelEditor-module_panelTitle__rp8tH button:hover{color:var(--nice-text-muted)}.ModelEditor-module_panelCollapsed__xBsUg .ModelEditor-module_panelContent__IMNnR{display:none}.ModelEditor-module_panelContent__IMNnR{padding-top:var(--nice-space-1,4px)}.ModelEditor-module_treeItem__MiVWT{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);overflow:hidden;padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px) var(--nice-space-0-75,3px) 0;text-overflow:ellipsis;white-space:nowrap}.ModelEditor-module_treeItem__MiVWT:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.ModelEditor-module_treeItemActive__4ntXK{background:var(--nice-surface)!important;outline:1px solid var(--nice-color-primary-hover)}.ModelEditor-module_treeIcon__PzniU{flex-shrink:0;font-size:12px;opacity:.6;text-align:center;width:16px}.ModelEditor-module_treeIndent__ISBk-{display:inline-block;flex-shrink:0;width:16px}.ModelEditor-module_treeToggle__Ge5PW{color:var(--nice-text-muted);cursor:pointer;flex-shrink:0;font-size:8px;text-align:center;width:12px}.ModelEditor-module_treeVisibility__BjKaL{cursor:pointer;flex-shrink:0;font-size:10px;opacity:.5;padding:0 var(--nice-space-0-5,2px)}.ModelEditor-module_treeVisibility__BjKaL:hover{opacity:1}.ModelEditor-module_propRow__AONtp{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-0-75,3px)}.ModelEditor-module_propLabel__bwkAK{color:var(--nice-text-muted);flex-shrink:0;font-size:10px;min-width:50px}.ModelEditor-module_propInput__aFI4Q{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.ModelEditor-module_propInput__aFI4Q:focus{border-color:var(--nice-color-primary);outline:none}.ModelEditor-module_propVec3__2FcMf{display:flex;flex:1;gap:var(--nice-space-0-5,2px)}.ModelEditor-module_propVec3__2FcMf input{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:10px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-0-75,3px);text-align:center}.ModelEditor-module_propVec3__2FcMf input:focus{border-color:var(--nice-color-primary);outline:none}.ModelEditor-module_propVec3X__lfQtN{border-left:2px solid #c44!important}.ModelEditor-module_propVec3Y__PmF5p{border-left:2px solid #4c4!important}.ModelEditor-module_propVec3Z__swB76{border-left:2px solid #48c!important}.ModelEditor-module_propColorSwatch__SMg9F{border:1px solid var(--nice-overlay-light-15,hsla(0,0%,100%,.15));border-radius:var(--nice-radius-sm,3px);cursor:pointer;flex-shrink:0;height:24px;position:relative;width:24px}.ModelEditor-module_propColorSwatch__SMg9F input{cursor:pointer;height:100%;inset:0;opacity:0;position:absolute;width:100%}.ModelEditor-module_propCheckbox__-eSHl{accent-color:var(--nice-color-primary)}.ModelEditor-module_propSelect__1YXcX{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.ModelEditor-module_bottomPanel__ojUaN{background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;height:200px;overflow:hidden}.ModelEditor-module_bottomPanelCollapsed__P2I6E{height:28px}.ModelEditor-module_bottomPanelHeader__z9D6b{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:var(--nice-space-1,4px);height:28px;padding:0 var(--nice-space-2,8px)}.ModelEditor-module_bottomPanelTitle__0P32m{color:var(--nice-text-secondary);cursor:pointer;font-size:10px;letter-spacing:.5px;text-transform:uppercase}.ModelEditor-module_bottomToggle__fsUEB{color:var(--nice-text-muted);cursor:pointer;font-size:8px;margin-right:var(--nice-space-1,4px)}.ModelEditor-module_transportBar__bh6Sb{align-items:center;display:flex;gap:var(--nice-space-0-5,2px)}.ModelEditor-module_transportBtn__egXSB{background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;font-size:14px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.ModelEditor-module_transportBtn__egXSB:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.ModelEditor-module_transportBtnActive__j6Y94{color:var(--nice-color-primary)!important}.ModelEditor-module_transportTime__7RzUh{color:var(--nice-text-muted);font-size:10px;font-variant-numeric:tabular-nums;margin:0 var(--nice-space-2,8px)}.ModelEditor-module_animListArea__rzc1e{display:flex;flex:1;min-height:0;overflow:hidden}.ModelEditor-module_animList__lGNt5{border-right:1px solid var(--nice-border-color);flex-shrink:0;overflow-y:auto;width:200px}.ModelEditor-module_animItem__lZGOY{align-items:center;border-left:2px solid transparent;cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px)}.ModelEditor-module_animItem__lZGOY:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.ModelEditor-module_animItemActive__8pKLd{background:var(--nice-surface)!important;border-left-color:var(--nice-color-primary)}.ModelEditor-module_animDuration__CAwuG{color:var(--nice-text-muted);font-size:9px;margin-left:auto}.ModelEditor-module_timelineArea__WFBHa{flex:1;overflow-x:auto;overflow-y:hidden;position:relative}.ModelEditor-module_timelineRuler__jlW8F{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);height:20px;position:relative}.ModelEditor-module_rulerTick__VhJRA{background:var(--nice-bg-secondary);height:100%;position:absolute;top:0;width:1px}.ModelEditor-module_rulerLabel__Pwl9a{color:var(--nice-text-muted);font-size:8px;position:absolute;top:2px;transform:translateX(-50%)}.ModelEditor-module_playhead__Rd4rh{background:var(--nice-color-primary);pointer-events:none;position:absolute;top:0;width:2px;z-index:3}.ModelEditor-module_playheadHandle__rIBHA{background:var(--nice-color-primary);clip-path:polygon(0 0,100% 0,50% 100%);height:8px;position:absolute;top:0;transform:translateX(-3px);width:8px}.ModelEditor-module_timelineTracks__joMHo{position:relative}.ModelEditor-module_keyframeDiamond__kffdC{background:#e8a030;cursor:pointer;height:8px;position:absolute;transform:rotate(45deg);width:8px;z-index:2}.ModelEditor-module_keyframeDiamond__kffdC:hover{background:#f0c060}.ModelEditor-module_keyframeDiamondSelected__xURk4{background:var(--nice-color-white)!important}.ModelEditor-module_statusBar__AJMzx{align-items:center;background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);color:var(--nice-text-muted);display:flex;flex-shrink:0;font-size:10px;gap:var(--nice-space-3,12px);height:20px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.ModelEditor-module_materialCard__1IGe7{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);margin-bottom:var(--nice-space-1-5,6px);padding:var(--nice-space-1-5,6px)}.ModelEditor-module_materialCardActive__VEnBX{border-color:var(--nice-color-primary)}.ModelEditor-module_materialHeader__WtTh3{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.ModelEditor-module_materialPreview__IF7qd{border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);flex-shrink:0;height:32px;overflow:hidden;width:32px}.ModelEditor-module_materialPreview__IF7qd canvas{height:100%;width:100%}.ModelEditor-module_materialName__TvRhs{flex:1;font-size:11px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ModelEditor-module_textureSlot__PLqef{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.ModelEditor-module_textureThumb__PdCTD{background:#0a0a15;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);flex-shrink:0;height:28px;overflow:hidden;width:28px}.ModelEditor-module_textureThumb__PdCTD img{height:100%;object-fit:cover;width:100%}.ModelEditor-module_textureInfo__XOzZI{flex:1;min-width:0}.ModelEditor-module_textureName__H-2d3{font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ModelEditor-module_textureBtn__zUt3m{background:none;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1-5,6px)}.ModelEditor-module_textureBtn__zUt3m:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.ModelEditor-module_btnPrimary__IAz0U{background:var(--nice-color-primary);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-color-white);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-3,12px);white-space:nowrap}.ModelEditor-module_btnPrimary__IAz0U:hover{background:var(--nice-primary,#67d)}.ModelEditor-module_btnPrimary__IAz0U:disabled{cursor:default;opacity:.4}.ModelEditor-module_btnSecondary__nJpgi{background:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-3,12px);white-space:nowrap}.ModelEditor-module_btnSecondary__nJpgi:hover{background:#3a3a5a;color:var(--nice-text-primary)}.ModelEditor-module_btnIcon__Qq9nz{background:none;border:none;color:var(--nice-text-muted);cursor:pointer;font-size:14px;line-height:1;padding:var(--nice-space-0-5,2px)}.ModelEditor-module_btnIcon__Qq9nz:hover{color:var(--nice-text-secondary)}.ModelEditor-module_aiPanel__-U1jO{background:linear-gradient(135deg,var(--nice-bg,#1a1a3e),#1e1a2e);border:1px solid var(--nice-bg-secondary,#4a3a6a);border-radius:var(--nice-radius-md,6px);margin:var(--nice-space-1,4px) 0;padding:var(--nice-space-2,8px)}.ModelEditor-module_aiHeader__WMZF5{align-items:center;color:#b88adf;display:flex;font-size:11px;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-1-5,6px)}.ModelEditor-module_aiInput__-23jT{background:var(--nice-bg-canvas);border:1px solid var(--nice-bg-secondary,#4a3a6a);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:11px;margin-bottom:var(--nice-space-1,4px);min-height:28px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);resize:vertical;width:100%}.ModelEditor-module_aiInput__-23jT:focus{border-color:#86c;outline:none}.ModelEditor-module_aiBtnRow__F-S-Z{display:flex;gap:var(--nice-space-1,4px)}.ModelEditor-module_aiBtn__8dcrE{background:linear-gradient(135deg,#54a,#64c);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-color-white);cursor:pointer;font-size:10px;padding:var(--nice-space-0-75,3px) var(--nice-space-2-5,10px)}.ModelEditor-module_aiBtn__8dcrE:hover{background:linear-gradient(135deg,#65b,#75d)}.ModelEditor-module_aiBtn__8dcrE:disabled{opacity:.4}.ModelEditor-module_aiStatus__Y5g59{color:#86a;font-size:10px;margin-top:var(--nice-space-1,4px)}.ModelEditor-module_dragOver__2VGIz{outline:2px dashed var(--nice-color-primary);outline-offset:-2px}.ModelEditor-module_contextMenu__sEb9s{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);box-shadow:0 4px 16px var(--nice-overlay-50,rgba(0,0,0,.5));min-width:180px;padding:var(--nice-space-1,4px) 0;position:fixed;z-index:999}.ModelEditor-module_contextItem__W90fc{align-items:center;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-25,5px) var(--nice-space-3,12px)}.ModelEditor-module_contextItem__W90fc:hover{background:var(--nice-surface)}.ModelEditor-module_contextSep__QCWTX{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-0-5,2px) 0}.ModelEditor-module_contextKey__HxGV6{color:var(--nice-text-muted);font-size:10px;margin-left:auto}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar{height:6px;width:6px}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar-track,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar-track,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar-track,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar-track{background:transparent}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar-thumb,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar-thumb,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar-thumb,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar-thumb{background:var(--nice-bg-secondary);border-radius:var(--nice-radius-sm,3px)}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar-thumb:hover,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar-thumb:hover,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar-thumb:hover,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar-thumb:hover{background:var(--nice-bg-tertiary)}.ModelEditor-module_resizeHandle__CyDw4{background:transparent;cursor:ns-resize;height:4px;transition:background .1s}.ModelEditor-module_resizeHandle__CyDw4:hover{background:var(--nice-color-primary)}.ModelEditor-module_modeSelect__KroPg{background:var(--nice-bg,#224);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:#b0b0d0;cursor:pointer;font-size:11px;font-weight:600;outline:none;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.ModelEditor-module_modeSelect__KroPg:focus{border-color:var(--nice-color-primary)}.ModelEditor-module_modeSelect__KroPg option{background:var(--nice-bg-primary)}.ModelEditor-module_menuDropdownWrap__6dicW{position:relative}.ModelEditor-module_dropdownMenu__ixJxD{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);box-shadow:0 6px 24px var(--nice-overlay-60,rgba(0,0,0,.6));left:0;max-height:420px;min-width:200px;overflow-y:auto;padding:var(--nice-space-1,4px) 0;position:absolute;top:100%;z-index:999}.ModelEditor-module_dropdownTitle__zzdA6{color:var(--nice-color-primary);font-size:9px;font-weight:700;letter-spacing:1px;padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px) var(--nice-space-0-5,2px);text-transform:uppercase}.ModelEditor-module_dropdownItem__4dllG{align-items:center;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-1-25,5px) var(--nice-space-4,16px);transition:background .08s}.ModelEditor-module_dropdownItem__4dllG:hover{background:var(--nice-surface);color:var(--nice-color-white)}.ModelEditor-module_dropdownSep__oFx30{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-1,4px) 0}.ModelEditor-module_dropdownMenu__ixJxD::-webkit-scrollbar{width:6px}.ModelEditor-module_dropdownMenu__ixJxD::-webkit-scrollbar-track{background:transparent}.ModelEditor-module_dropdownMenu__ixJxD::-webkit-scrollbar-thumb{background:var(--nice-bg-tertiary);border-radius:var(--nice-radius-sm,3px)}.ModelEditor-module_viewportShadingBar__NOK0h{background:var(--nice-overlay-80,rgba(20,20,40,.8));border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px);position:absolute;right:8px;top:8px;z-index:10}.ModelEditor-module_shadingBtn__SAIR9{background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;font-size:12px;padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px);transition:all .1s;white-space:nowrap}.ModelEditor-module_shadingBtn__SAIR9:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.ModelEditor-module_shadingBtnActive__ST5YT{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.ModelEditor-module_viewportGizmoInfo__k0ily{position:absolute;right:8px;top:44px;z-index:10}.ModelEditor-module_propTabs__Vw0-u{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0}.ModelEditor-module_propTabBtn__s8xDE{background:none;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:14px;padding:var(--nice-space-1-5,6px) var(--nice-space-1,4px);transition:all .15s}.ModelEditor-module_propTabBtn__s8xDE:hover{background:var(--nice-bg-elevated);color:var(--nice-text-muted)}.ModelEditor-module_propTabBtnActive__-woXw{background:var(--nice-bg-elevated)!important;border-bottom-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.ModelEditor-module_outlinerSearch__p5L46{padding:var(--nice-space-1,4px) var(--nice-space-2,8px) 0}.ModelEditor-module_outlinerSearch__p5L46 input{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary);font-size:11px;padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px)}.ModelEditor-module_outlinerSearch__p5L46 input:focus{border-color:var(--nice-color-primary);outline:none}.ModelEditor-module_outlinerSearch__p5L46 input::placeholder{color:var(--nice-text-muted)}.ModelViewer-module_root__6Fbj3{background:var(--nice-bg-primary,#1a1a2e);color:var(--nice-text-primary,#e0e0e0);display:flex;flex-direction:column;font-family:Segoe UI,Consolas,monospace;font-size:12px;height:100%;overflow:hidden;position:relative;user-select:none}.ModelViewer-module_toolbar__EQJRN{align-items:center;background:var(--nice-bg-canvas,#12122a);border-bottom:1px solid var(--nice-border-color,#252545);display:flex;flex-shrink:0;gap:var(--nice-space-0-5,2px);height:32px;padding:0 var(--nice-space-1-5,6px);z-index:2}.ModelViewer-module_toolBtn__f9833{align-items:center;background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#ccc);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px);white-space:nowrap}.ModelViewer-module_toolBtn__f9833:hover{background:var(--nice-bg-secondary,#252545);color:var(--nice-text-primary,#fff)}.ModelViewer-module_toolBtn__f9833.ModelViewer-module_active__MgURC{background:var(--nice-color-primary,#57f);color:var(--nice-text-on-primary,#fff)}.ModelViewer-module_toolBtn__f9833:disabled{cursor:default;opacity:.4}.ModelViewer-module_toolSep__5zuAK{background:var(--nice-bg-secondary,#333);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.ModelViewer-module_toolLabel__PcpJC{color:var(--nice-text-secondary,#888);font-size:10px;margin:0 var(--nice-space-1,4px);white-space:nowrap}.ModelViewer-module_toolRight__VSuzD{align-items:center;display:flex;gap:var(--nice-space-0-5,2px);margin-left:auto}.ModelViewer-module_viewport__-1llx{flex:1;outline:none;overflow:hidden;position:relative}.ModelViewer-module_viewport__-1llx canvas{display:block;height:100%!important;width:100%!important}.ModelViewer-module_loadingOverlay__Ayyci{align-items:center;background:var(--nice-overlay-85,rgba(20,20,40,.85));display:flex;flex-direction:column;inset:0;justify-content:center;position:absolute;z-index:10}.ModelViewer-module_loadingBar__RDqVv{background:var(--nice-bg-tertiary,#444);border-radius:var(--nice-radius-sm,2px);height:4px;margin-top:var(--nice-space-3,12px);overflow:hidden;width:200px}.ModelViewer-module_loadingBarFill__zvIoP{background:var(--nice-color-primary,#57f);height:100%;transition:width .2s}.ModelViewer-module_loadingText__6OGeA{color:var(--nice-text-secondary,#ccc);font-size:13px;margin-bottom:var(--nice-space-2,8px)}.ModelViewer-module_errorOverlay__ASUqN{align-items:center;background:var(--nice-overlay-85,rgba(20,20,40,.85));color:var(--nice-danger,#ff6b6b);display:flex;flex-direction:column;inset:0;justify-content:center;position:absolute;z-index:10}.ModelViewer-module_sidePanel__-QFkd{background:var(--nice-bg-canvas,#12122a);border-left:1px solid var(--nice-border-color,#252545);bottom:24px;display:flex;flex-direction:column;font-size:11px;gap:var(--nice-space-3,12px);overflow-y:auto;padding:var(--nice-space-2,8px);position:absolute;right:0;top:32px;width:240px;z-index:5}.ModelViewer-module_sidePanel__-QFkd.ModelViewer-module_hidden__yoMuq{display:none}.ModelViewer-module_panelSection__bH-O3{display:flex;flex-direction:column;gap:var(--nice-space-1,4px)}.ModelViewer-module_panelTitle__xsn3e{color:var(--nice-text-secondary,#888);font-size:10px;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.ModelViewer-module_panelRow__3QxnD{align-items:center;display:flex;gap:var(--nice-space-1-5,6px)}.ModelViewer-module_panelRow__3QxnD label{color:var(--nice-text-secondary,#aaa);flex:0 0 70px;font-size:10px}.ModelViewer-module_panelRow__3QxnD span{color:var(--nice-text-primary,#e0e0e0);font-size:11px}.ModelViewer-module_animBar__qcYi5{align-items:center;background:var(--nice-bg-canvas,#12122a);border-top:1px solid var(--nice-border-color,#252545);display:flex;flex-shrink:0;gap:var(--nice-space-1,4px);height:28px;padding:0 var(--nice-space-2,8px)}.ModelViewer-module_animBar__qcYi5.ModelViewer-module_hidden__yoMuq{display:none}.ModelViewer-module_animSlider__9AQzN{appearance:none;background:var(--nice-bg-tertiary,#444);border-radius:var(--nice-radius-sm,2px);cursor:pointer;flex:1;height:4px}.ModelViewer-module_animSlider__9AQzN::-webkit-slider-thumb{appearance:none;background:var(--nice-color-primary,#57f);border-radius:var(--nice-radius-full,50%);cursor:pointer;height:10px;width:10px}.ModelViewer-module_animSelect__LhFWD{background:var(--nice-bg-secondary,#252545);border:1px solid var(--nice-border-color,#555);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary,#e0e0e0);font-size:10px;max-width:120px;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.ModelViewer-module_statusBar__-3uuA{align-items:center;background:var(--nice-bg-canvas,#12122a);border-top:1px solid var(--nice-border-color,#252545);color:var(--nice-text-muted,#888);display:flex;flex-shrink:0;font-size:10px;gap:var(--nice-space-2,8px);height:22px;padding:0 var(--nice-space-2,8px)}.ModelViewer-module_statusRight__vI51s{display:flex;gap:var(--nice-space-3,12px);margin-left:auto}.ModelViewer-module_annotationLayer__-NzZF{inset:0;pointer-events:none;position:absolute;z-index:3}.ModelViewer-module_annotation__H6DgR{background:color-mix(in srgb,var(--nice-color-primary,#57f) 85%,transparent);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-on-primary,#fff);cursor:pointer;font-size:10px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);pointer-events:auto;position:absolute;transform:translate(-50%,-100%);white-space:nowrap}.ModelViewer-module_annotation__H6DgR:hover{background:var(--nice-color-primary,#57f)}.ModelViewer-module_dropZone__eNrPo{align-items:center;background:color-mix(in srgb,var(--nice-color-primary,#57f) 15%,transparent);border:2px dashed var(--nice-color-primary,#57f);color:var(--nice-color-primary,#57f);display:flex;font-size:16px;inset:0;justify-content:center;pointer-events:none;position:absolute;z-index:20}.UVEditor-module_uvEditor__9yahO{background:var(--nice-bg-secondary,#1e1e1e);border:1px solid var(--nice-border,#333);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text,#e0e0e0);font-family:var(--nice-font-family,system-ui,sans-serif);font-size:12px;overflow:hidden}.UVEditor-module_toolbar__wPDkZ{align-items:center;background:var(--nice-bg-tertiary,#252526);border-bottom:1px solid var(--nice-border,#333);display:flex;flex-wrap:wrap;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.UVEditor-module_toolGroup__hzVqv{border-right:1px solid var(--nice-border,#444);display:flex;gap:var(--nice-space-0-5,2px);padding:0 var(--nice-space-1,4px)}.UVEditor-module_toolGroup__hzVqv:last-child{border-right:none}.UVEditor-module_toolBtn__oIzVq{align-items:center;background:var(--nice-bg-secondary,#2d2d2d);border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#aaa);cursor:pointer;display:flex;font-size:11px;font-weight:500;height:24px;justify-content:center;min-width:28px;padding:0 var(--nice-space-1-5,6px);transition:all .15s ease}.UVEditor-module_toolBtn__oIzVq:hover:not(:disabled){background:var(--nice-bg-hover,#3c3c3c);color:var(--nice-text,#fff)}.UVEditor-module_toolBtn__oIzVq.UVEditor-module_active__gahDI{background:var(--nice-primary,#007acc);border-color:var(--nice-primary-hover,#0098ff);color:var(--nice-text-on-primary,#fff)}.UVEditor-module_toolBtn__oIzVq:disabled{cursor:not-allowed;opacity:.5}.UVEditor-module_select__cd9Xa{background:var(--nice-bg-secondary,#2d2d2d);border:1px solid var(--nice-border,#444);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text,#e0e0e0);cursor:pointer;font-size:11px;height:24px;padding:0 var(--nice-space-1-5,6px)}.UVEditor-module_select__cd9Xa:focus{border-color:var(--nice-primary,#007acc);outline:none}.UVEditor-module_viewport__0S2EF{background:var(--nice-bg-secondary,#2a2a2a);cursor:crosshair;flex:1;overflow:hidden;position:relative}.UVEditor-module_canvas__L8eJJ{display:block;height:100%;width:100%}.UVEditor-module_noGeometry__J0MOa{align-items:center;color:var(--nice-text-muted,#666);display:flex;font-size:14px;inset:0;justify-content:center;pointer-events:none;position:absolute}.UVEditor-module_sidebar__zcI1d{background:var(--nice-bg-tertiary,#252526);border-left:1px solid var(--nice-border,#333);overflow-y:auto;width:200px}.UVEditor-module_panel__wRBD0{border-bottom:1px solid var(--nice-border,#333);padding:var(--nice-space-2-5,10px)}.UVEditor-module_panelTitle__5oDRo{color:var(--nice-text-muted,#888);font-size:11px;font-weight:600;letter-spacing:.5px;margin:0 0 var(--nice-space-2,8px) 0;text-transform:uppercase}.UVEditor-module_checkbox__P2anI{align-items:center;cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1-5,6px)}.UVEditor-module_checkbox__P2anI input{accent-color:var(--nice-primary,#007acc);cursor:pointer;height:14px;margin:0;width:14px}.UVEditor-module_stat__j2lxJ{display:flex;font-size:11px;justify-content:space-between;padding:var(--nice-space-0-75,3px) 0}.UVEditor-module_stat__j2lxJ span:first-child{color:var(--nice-text-muted,#888)}.UVEditor-module_stat__j2lxJ span:last-child{color:var(--nice-text,#e0e0e0);font-weight:500}.UVEditor-module_rangeLabel__6OS0o{display:block;font-size:11px;margin-top:var(--nice-space-2,8px)}.UVEditor-module_rangeLabel__6OS0o input{accent-color:var(--nice-primary,#007acc);margin-top:var(--nice-space-1,4px);width:100%}.UVEditor-module_statusBar__KYYrx{background:var(--nice-bg-inset,#1a1a1a);border-top:1px solid var(--nice-border,#333);color:var(--nice-text-muted,#888);display:flex;font-size:11px;gap:var(--nice-space-4,16px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px)}.UVEditor-module_statusBar__KYYrx span{white-space:nowrap}@media (max-width:768px){.UVEditor-module_sidebar__zcI1d{display:none}.UVEditor-module_toolbar__wPDkZ{overflow-x:auto}}.MaterialEditor-module_materialEditor__RjU0e{--bg-primary:var(--nice-bg,#1e1e1e);--bg-secondary:var(--nice-bg-secondary,#252526);--bg-tertiary:var(--nice-bg-secondary,#2d2d2d);--bg-hover:var(--nice-bg-secondary,#3a3a3a);--bg-active:var(--nice-bg-secondary,#4a4a4a);--text-primary:var(--nice-text-primary,#fff);--text-secondary:var(--nice-text-secondary,#ccc);--text-muted:var(--nice-text-secondary,#888);--border-color:var(--nice-bg-secondary,#3a3a3a);--border-light:var(--nice-bg-secondary,#4a4a4a);--accent-color:var(--nice-primary,#0078d4);--accent-hover:#1084d8;--error-color:var(--nice-danger,#f44336);--warning-color:var(--nice-warning,#ff9800);--success-color:var(--nice-success,#4caf50);--shadow-sm:0 1px 3px var(--nice-overlay-30,rgba(0,0,0,.3));--shadow-md:0 4px 6px var(--nice-overlay-40,rgba(0,0,0,.4));--shadow-lg:0 10px 20px var(--nice-overlay-50,rgba(0,0,0,.5));--node-shadow:0 4px 12px var(--nice-overlay-50,rgba(0,0,0,.5));--transition-fast:0.1s ease;--transition-normal:0.2s ease;--border-radius-sm:3px;--border-radius-md:6px;--border-radius-lg:10px}.MaterialEditor-module_materialEditor__RjU0e.MaterialEditor-module_light__zSnpW{--bg-primary:var(--nice-bg-secondary,#f5f5f5);--bg-secondary:var(--nice-bg,#fff);--bg-tertiary:var(--nice-border,#e0e0e0);--bg-hover:var(--nice-border,#d0d0d0);--bg-active:var(--nice-border,silver);--text-primary:var(--nice-text-primary,#1e1e1e);--text-secondary:var(--nice-text,#333);--text-muted:var(--nice-text-secondary,#666);--border-color:var(--nice-border,#d0d0d0);--border-light:var(--nice-border,#e0e0e0);--shadow-sm:0 1px 3px var(--nice-overlay-10,rgba(0,0,0,.1));--shadow-md:0 4px 6px var(--nice-overlay-15,rgba(0,0,0,.15));--shadow-lg:0 10px 20px var(--nice-overlay-20,rgba(0,0,0,.2));--node-shadow:0 4px 12px var(--nice-overlay-20,rgba(0,0,0,.2))}.MaterialEditor-module_materialEditor__RjU0e{background-color:var(--nice-bg-primary);border-radius:var(--nice-radius-lg);color:var(--nice-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;overflow:hidden;user-select:none}.MaterialEditor-module_toolbar__qqDbE{align-items:center;background-color:var(--nice-bg-secondary);border-bottom:1px solid var(--nice-border-color);display:flex;gap:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px)}.MaterialEditor-module_toolbarGroup__fgE2r{align-items:center;display:flex;gap:var(--nice-space-0-5,2px)}.MaterialEditor-module_toolbarSeparator__Z9B1i{background-color:var(--nice-border-color);height:20px;margin:0 var(--nice-space-1-5,6px);width:1px}.MaterialEditor-module_toolbar__qqDbE button{align-items:center;background-color:transparent;border:none;border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;padding:0;transition:background-color var(--transition-fast);width:28px}.MaterialEditor-module_toolbar__qqDbE button:active:not(:disabled),.MaterialEditor-module_toolbar__qqDbE button:hover:not(:disabled){background-color:var(--nice-hover-bg)}.MaterialEditor-module_toolbar__qqDbE button:disabled{cursor:not-allowed;opacity:.4}.MaterialEditor-module_toolbar__qqDbE button.MaterialEditor-module_active__DEZaw{background-color:var(--nice-color-accent);color:#fff}.MaterialEditor-module_palette__VNmnu{background-color:var(--nice-bg-secondary);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;width:220px}.MaterialEditor-module_paletteSearch__rE-c5{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-2,8px)}.MaterialEditor-module_searchInput__H7FJt{background-color:var(--nice-bg-tertiary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);color:var(--nice-text-primary);font-size:12px;outline:none;padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px);transition:border-color var(--transition-fast);width:100%}.MaterialEditor-module_searchInput__H7FJt:focus{border-color:var(--nice-color-accent)}.MaterialEditor-module_searchInput__H7FJt::placeholder{color:var(--nice-text-muted)}.MaterialEditor-module_paletteCategories__sbn9d{flex:1;overflow-y:auto;padding:var(--nice-space-1,4px) 0}.MaterialEditor-module_paletteCategory__LgsIy{margin-bottom:var(--nice-space-0-5,2px)}.MaterialEditor-module_categoryHeader__8M6DH{align-items:center;background-color:transparent;border:none;border-left:3px solid transparent;color:var(--nice-text-primary);cursor:pointer;display:flex;font-size:12px;font-weight:600;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-2,8px) var(--nice-space-2-5,10px);text-align:left;transition:background-color var(--transition-fast);width:100%}.MaterialEditor-module_categoryHeader__8M6DH:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_categoryIcon__coBim{color:var(--nice-text-muted);font-size:10px;width:14px}.MaterialEditor-module_categoryCount__rnYwK{background-color:var(--nice-bg-tertiary);border-radius:var(--nice-radius-lg,10px);color:var(--nice-text-muted);font-size:10px;font-weight:400;margin-left:auto;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.MaterialEditor-module_categoryNodes__GMJz6{padding:var(--nice-space-0-5,2px) 0}.MaterialEditor-module_paletteNode__4-ncg{align-items:center;cursor:grab;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px) var(--nice-space-1-5,6px) var(--nice-space-7,28px);transition:background-color var(--transition-fast)}.MaterialEditor-module_paletteNode__4-ncg:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_paletteNode__4-ncg:active{cursor:grabbing}.MaterialEditor-module_nodeColor__ql5xb{border-radius:var(--nice-radius-sm,3px);flex-shrink:0;height:12px;width:12px}.MaterialEditor-module_nodeName__K0Rqi{color:var(--nice-text-secondary);flex:1;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.MaterialEditor-module_graphCanvas__guLj7{background-color:var(--nice-bg-primary);cursor:grab;flex:1;overflow:hidden;position:relative}.MaterialEditor-module_graphCanvas__guLj7:active{cursor:grabbing}.MaterialEditor-module_connectionsSvg__9SyYo{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.MaterialEditor-module_connection__x9F9U{cursor:pointer;pointer-events:stroke;transition:stroke-width var(--transition-fast),stroke var(--transition-fast)}.MaterialEditor-module_connection__x9F9U:hover{stroke-width:4px}.MaterialEditor-module_pendingConnection__NCBtj{animation:MaterialEditor-module_dashAnimation__YLpH3 .5s linear infinite;pointer-events:none}@keyframes MaterialEditor-module_dashAnimation__YLpH3{to{stroke-dashoffset:-10}}.MaterialEditor-module_graphNode__pCqYA{background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);box-shadow:var(--node-shadow);cursor:move;overflow:visible;position:absolute;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.MaterialEditor-module_graphNode__pCqYA:hover{border-color:var(--nice-border-light)}.MaterialEditor-module_graphNode__pCqYA.MaterialEditor-module_selected__ozIqt{border-color:var(--nice-color-accent);box-shadow:0 0 0 2px var(--nice-color-accent),var(--node-shadow)}.MaterialEditor-module_graphNode__pCqYA.MaterialEditor-module_locked__8RRAH{cursor:not-allowed;opacity:.8}.MaterialEditor-module_nodeHeader__-PBFg{align-items:center;border-radius:var(--nice-radius-md) var(--nice-radius-md) 0 0;color:#fff;display:flex;font-size:11px;font-weight:600;justify-content:space-between;padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px);text-shadow:0 1px 2px var(--nice-overlay-30,rgba(0,0,0,.3))}.MaterialEditor-module_nodeTitle__i2PcO{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.MaterialEditor-module_lockIcon__tPzIi{font-size:10px;margin-left:var(--nice-space-1-5,6px)}.MaterialEditor-module_nodePorts__APKPN{padding:var(--nice-space-1,4px) 0;position:relative}.MaterialEditor-module_inputPorts__7MVX4{left:0;position:absolute;top:0}.MaterialEditor-module_outputPorts__GUwXJ{position:absolute;right:0;top:0}.MaterialEditor-module_port__zc4vm{align-items:center;display:flex;font-size:10px;height:20px;position:absolute;white-space:nowrap}.MaterialEditor-module_inputPorts__7MVX4 .MaterialEditor-module_port__zc4vm{left:0;padding-left:var(--nice-space-3-5,14px)}.MaterialEditor-module_outputPorts__GUwXJ .MaterialEditor-module_port__zc4vm{justify-content:flex-end;padding-right:var(--nice-space-3-5,14px);right:0}.MaterialEditor-module_portHandle__oNh4P{border:2px solid var(--nice-bg-secondary);border-radius:var(--nice-radius-full,50%);box-sizing:border-box;cursor:crosshair;height:10px;position:absolute;transition:transform var(--transition-fast);width:10px}.MaterialEditor-module_portHandle__oNh4P:hover{transform:scale(1.3)}.MaterialEditor-module_inputHandle__6lz91{left:-5px}.MaterialEditor-module_outputHandle__8-r1i{right:-5px}.MaterialEditor-module_portHandle__oNh4P.MaterialEditor-module_connected__qo4za{border-color:transparent}.MaterialEditor-module_portLabel__T8daS{color:var(--nice-text-secondary)}.MaterialEditor-module_nodeComment__wkIoF{background-color:rgba(255,235,59,.15);border:1px solid rgba(255,235,59,.4);border-radius:var(--nice-radius-sm);bottom:-24px;color:var(--nice-warning,#ffeb3b);font-size:10px;left:0;overflow:hidden;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px);position:absolute;right:0;text-overflow:ellipsis;white-space:nowrap}.MaterialEditor-module_previewPanel__lqiI0{background-color:var(--nice-bg-secondary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;width:220px}.MaterialEditor-module_previewHeader__vkqDk{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.MaterialEditor-module_previewModeSelect__qbL8f{background-color:var(--nice-bg-tertiary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);cursor:pointer;font-size:11px;padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px)}.MaterialEditor-module_previewCanvas__q91ue{align-items:center;aspect-ratio:1;background-color:var(--nice-bg-primary);border-bottom:1px solid var(--nice-border-color);display:flex;justify-content:center;position:relative}.MaterialEditor-module_previewCanvas__q91ue canvas{max-height:100%;max-width:100%}.MaterialEditor-module_previewCompiling__GVFRq{align-items:center;animation:MaterialEditor-module_pulse__6IS0P 1s ease infinite;background-color:var(--nice-overlay-60,rgba(0,0,0,.6));bottom:0;color:#fff;display:flex;font-size:12px;justify-content:center;left:0;position:absolute;right:0;top:0}@keyframes MaterialEditor-module_pulse__6IS0P{0%,to{opacity:1}50%{opacity:.6}}.MaterialEditor-module_previewErrors__6JZfZ{flex:1;overflow-y:auto;padding:var(--nice-space-2-5,10px)}.MaterialEditor-module_previewError__Rotpo{background-color:rgba(244,67,54,.15);border:1px solid rgba(244,67,54,.4);border-radius:var(--nice-radius-sm);color:var(--nice-color-error);font-size:11px;margin-bottom:var(--nice-space-1-5,6px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);word-break:break-word}.MaterialEditor-module_propertiesPanel__H3Lej{background-color:var(--nice-bg-secondary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;width:280px}.MaterialEditor-module_propertiesHeader__ZLXL2{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;font-size:12px;font-weight:600;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.MaterialEditor-module_propertiesContent__3LWte{flex:1;overflow-y:auto;padding:var(--nice-space-3,12px)}.MaterialEditor-module_propertyGroup__3Rz-K{margin-bottom:var(--nice-space-4,16px)}.MaterialEditor-module_propertyGroupTitle__Wsswl{color:var(--nice-text-muted);font-size:11px;font-weight:600;letter-spacing:.5px;margin-bottom:var(--nice-space-2,8px);text-transform:uppercase}.MaterialEditor-module_propertyRow__eAshz{display:flex;flex-direction:column;margin-bottom:var(--nice-space-2-5,10px)}.MaterialEditor-module_propertyLabel__wwNGL{color:var(--nice-text-secondary);font-size:11px;margin-bottom:var(--nice-space-1,4px)}.MaterialEditor-module_propertyInput__oK2eE{background-color:var(--nice-bg-tertiary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);font-size:12px;outline:none;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:border-color var(--transition-fast)}.MaterialEditor-module_propertyInput__oK2eE:focus{border-color:var(--nice-color-accent)}.MaterialEditor-module_propertyColorPreview__1L-S5{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.MaterialEditor-module_colorSwatch__rHMga{border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm);cursor:pointer;height:24px;width:24px}.MaterialEditor-module_propertySlider__NztWp{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.MaterialEditor-module_propertySlider__NztWp input[type=range]{-webkit-appearance:none;background:var(--nice-bg-tertiary);border-radius:var(--nice-radius-sm,2px);flex:1;height:4px;outline:none}.MaterialEditor-module_propertySlider__NztWp input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--nice-color-accent);border-radius:var(--nice-radius-full,50%);cursor:pointer;height:14px;width:14px}.MaterialEditor-module_propertySlider__NztWp .MaterialEditor-module_sliderValue__HeKO-{color:var(--nice-text-secondary);font-size:11px;text-align:right;width:50px}.MaterialEditor-module_minimap__mPE-C{background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);bottom:10px;box-shadow:var(--nice-shadow-md);height:100px;overflow:hidden;position:absolute;right:10px;width:150px}.MaterialEditor-module_minimapNodes__DCW6r{height:100%;position:relative;width:100%}.MaterialEditor-module_minimapNode__EoDhh{border-radius:var(--nice-radius-sm,2px);position:absolute}.MaterialEditor-module_minimapViewport__qUyIg{border:1px solid var(--nice-color-accent)}.MaterialEditor-module_minimapViewport__qUyIg,.MaterialEditor-module_selectionBox__5-dcw{background-color:var(--nice-primary-tint-10,rgba(0,120,212,.1));pointer-events:none;position:absolute}.MaterialEditor-module_selectionBox__5-dcw{border:1px dashed var(--nice-color-accent)}.MaterialEditor-module_contextMenu__jMJ2-{background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);box-shadow:var(--nice-shadow-lg);min-width:160px;padding:var(--nice-space-1,4px) 0;position:fixed;z-index:1000}.MaterialEditor-module_contextMenuItem__NltnJ{align-items:center;cursor:pointer;display:flex;font-size:12px;justify-content:space-between;padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px);transition:background-color var(--transition-fast)}.MaterialEditor-module_contextMenuItem__NltnJ:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_contextMenuItem__NltnJ.MaterialEditor-module_disabled__NnXkq{color:var(--nice-text-muted);cursor:not-allowed}.MaterialEditor-module_contextMenuItem__NltnJ.MaterialEditor-module_disabled__NnXkq:hover{background-color:transparent}.MaterialEditor-module_contextMenuShortcut__2-fdl{color:var(--nice-text-muted);font-size:11px;margin-left:var(--nice-space-5,20px)}.MaterialEditor-module_contextMenuSeparator__yYjvC{background-color:var(--nice-border-color);height:1px;margin:var(--nice-space-1,4px) 0}.MaterialEditor-module_zoomControls__7PATW{align-items:center;background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);bottom:10px;box-shadow:var(--nice-shadow-sm);display:flex;gap:var(--nice-space-1,4px);left:10px;padding:var(--nice-space-1,4px);position:absolute}.MaterialEditor-module_zoomControls__7PATW button{align-items:center;background-color:transparent;border:none;border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);cursor:pointer;display:flex;font-size:14px;height:26px;justify-content:center;padding:0;transition:background-color var(--transition-fast);width:26px}.MaterialEditor-module_zoomControls__7PATW button:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_zoomLevel__Rw6xW{color:var(--nice-text-secondary);font-size:11px;min-width:50px;text-align:center}.MaterialEditor-module_tooltip__lTpIH{word-wrap:break-word;background-color:var(--nice-text-primary,#333);border-radius:var(--nice-radius-sm);box-shadow:var(--nice-shadow-md);color:var(--nice-text-inverse,#fff);font-size:11px;max-width:250px;padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px);pointer-events:none;position:fixed;white-space:pre-wrap;z-index:9999}.MaterialEditor-module_tooltip__lTpIH:before{border-color:var(--nice-border-color,#333) transparent transparent transparent;border-style:solid;border-width:5px;content:"";left:50%;position:absolute;top:100%;transform:translateX(-50%)}.MaterialEditor-module_emptyState__Kpa84{color:var(--nice-text-muted);left:50%;position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.MaterialEditor-module_emptyStateIcon__67zsA{font-size:48px;margin-bottom:var(--nice-space-4,16px);opacity:.5}.MaterialEditor-module_emptyStateTitle__0NQ65{color:var(--nice-text-secondary);font-size:16px;font-weight:600;margin-bottom:var(--nice-space-2,8px)}.MaterialEditor-module_emptyStateDescription__QgVz5{font-size:13px;line-height:1.5;max-width:300px}@media (max-width:900px){.MaterialEditor-module_palette__VNmnu{bottom:0;left:0;position:absolute;top:0;transform:translateX(-100%);transition:transform var(--transition-normal);z-index:100}.MaterialEditor-module_palette__VNmnu.MaterialEditor-module_open__DG5-R{transform:translateX(0)}.MaterialEditor-module_previewPanel__lqiI0{bottom:0;position:absolute;right:0;top:0;transform:translateX(100%);transition:transform var(--transition-normal);z-index:100}.MaterialEditor-module_previewPanel__lqiI0.MaterialEditor-module_open__DG5-R{transform:translateX(0)}}@media (max-width:600px){.MaterialEditor-module_toolbar__qqDbE{flex-wrap:wrap;padding:var(--nice-space-1,4px)}.MaterialEditor-module_toolbarGroup__fgE2r{flex-wrap:wrap}.MaterialEditor-module_toolbar__qqDbE button{font-size:16px;height:32px;width:32px}.MaterialEditor-module_palette__VNmnu,.MaterialEditor-module_previewPanel__lqiI0{max-width:280px;width:100%}}@keyframes MaterialEditor-module_nodeAppear__4vHEB{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.MaterialEditor-module_graphNode__pCqYA{animation:MaterialEditor-module_nodeAppear__4vHEB .2s ease}@keyframes MaterialEditor-module_connectionDraw__xvI66{0%{stroke-dashoffset:1000}to{stroke-dashoffset:0}}.MaterialEditor-module_connection__x9F9U{stroke-dasharray:1000;animation:MaterialEditor-module_connectionDraw__xvI66 .3s ease forwards}.MaterialEditor-module_materialEditor__RjU0e:focus-visible{outline:2px solid var(--nice-color-accent);outline-offset:-2px}.MaterialEditor-module_categoryHeader__8M6DH:focus-visible,.MaterialEditor-module_paletteNode__4-ncg:focus-visible,.MaterialEditor-module_toolbar__qqDbE button:focus-visible{outline:2px solid var(--nice-color-accent);outline-offset:-2px}@media (prefers-reduced-motion:reduce){.MaterialEditor-module_connection__x9F9U,.MaterialEditor-module_graphNode__pCqYA,.MaterialEditor-module_pendingConnection__NCBtj{animation:none}*,:after,:before{animation-duration:.01ms!important;transition-duration:.01ms!important}}@media print{.MaterialEditor-module_minimap__mPE-C,.MaterialEditor-module_palette__VNmnu,.MaterialEditor-module_previewPanel__lqiI0,.MaterialEditor-module_toolbar__qqDbE,.MaterialEditor-module_zoomControls__7PATW{display:none!important}.MaterialEditor-module_materialEditor__RjU0e{border:1px solid var(--nice-border,#ccc)}.MaterialEditor-module_graphCanvas__guLj7{background-color:#fff}.MaterialEditor-module_graphNode__pCqYA{border:1px solid var(--nice-border-color,#333);box-shadow:none}.MaterialEditor-module_connection__x9F9U{stroke:var(--nice-text,#333)!important}}.ParticleEditor-module_particleEditor__HiTCi{--pe-bg-primary:var(--nice-bg,#1a1a1a);--pe-bg-secondary:var(--nice-bg-secondary,#252525);--pe-bg-tertiary:var(--nice-bg-secondary,#2d2d2d);--pe-bg-hover:var(--nice-bg-secondary,#3a3a3a);--pe-bg-active:var(--nice-bg-secondary,#4a4a4a);--pe-border-color:var(--nice-border,#404040);--pe-text-primary:var(--nice-text-primary,#fff);--pe-text-secondary:var(--nice-text-muted,#b0b0b0);--pe-text-muted:#707070;--pe-accent:#4fc3f7;--pe-accent-hover:#29b6f6;--pe-success:#66bb6a;--pe-warning:var(--nice-warning,#ffa726);--pe-error:#ef5350;--pe-toolbar-height:40px;--pe-panel-width:260px;--pe-radius:4px;--pe-transition:150ms ease}.ParticleEditor-module_particleEditor__HiTCi.ParticleEditor-module_light__AiNYo{--pe-bg-primary:var(--nice-bg-secondary,#f5f5f5);--pe-bg-secondary:var(--nice-bg,#fff);--pe-bg-tertiary:var(--nice-bg-secondary,#fafafa);--pe-bg-hover:var(--nice-border,#eee);--pe-bg-active:var(--nice-border,#e0e0e0);--pe-border-color:var(--nice-border,#d0d0d0);--pe-text-primary:var(--nice-text,#212121);--pe-text-secondary:var(--nice-text-secondary,#616161);--pe-text-muted:var(--nice-text-secondary,#9e9e9e);--pe-accent:var(--nice-primary-hover,#1976d2);--pe-accent-hover:var(--nice-primary-dark,#1565c0)}.ParticleEditor-module_particleEditor__HiTCi{background-color:var(--pe-bg-primary);border-radius:var(--pe-radius);color:var(--pe-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;overflow:hidden;user-select:none}.ParticleEditor-module_toolbar__KptWe{align-items:center;background-color:var(--pe-bg-secondary);border-bottom:1px solid var(--pe-border-color);display:flex;gap:var(--nice-space-1,4px);height:var(--pe-toolbar-height);padding:0 var(--nice-space-2,8px)}.ParticleEditor-module_toolbarGroup__-N0jI{align-items:center;display:flex;gap:var(--nice-space-0-5,2px)}.ParticleEditor-module_toolbarSeparator__kIZmD{background-color:var(--pe-border-color);height:20px;margin:0 var(--nice-space-1-5,6px);width:1px}.ParticleEditor-module_toolbar__KptWe button{align-items:center;background:transparent;border:none;border-radius:var(--pe-radius);color:var(--pe-text-secondary);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:all var(--pe-transition);width:28px}.ParticleEditor-module_toolbar__KptWe button:hover:not(:disabled){background-color:var(--pe-bg-hover);color:var(--pe-text-primary)}.ParticleEditor-module_toolbar__KptWe button:active:not(:disabled){background-color:var(--pe-bg-active)}.ParticleEditor-module_toolbar__KptWe button.ParticleEditor-module_active__81dHl{background-color:var(--pe-accent);color:#fff}.ParticleEditor-module_toolbar__KptWe button:disabled{cursor:not-allowed;opacity:.4}.ParticleEditor-module_speedSelect__vZO0v{background-color:var(--pe-bg-tertiary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);cursor:pointer;font-size:11px;height:24px;padding:0 var(--nice-space-1-5,6px)}.ParticleEditor-module_timeDisplay__tl1Qv{color:var(--pe-text-secondary);font-family:monospace;font-size:11px;min-width:50px;padding:0 var(--nice-space-2,8px);text-align:right}.ParticleEditor-module_systemList__Vaiea{background-color:var(--pe-bg-secondary);border-right:1px solid var(--pe-border-color);display:flex;flex-direction:column;min-width:var(--pe-panel-width);overflow:hidden;width:var(--pe-panel-width)}.ParticleEditor-module_systemListHeader__I9W61{align-items:center;border-bottom:1px solid var(--pe-border-color);color:var(--pe-text-secondary);display:flex;font-size:12px;font-weight:600;justify-content:space-between;letter-spacing:.5px;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px);text-transform:uppercase}.ParticleEditor-module_systemListActions__C289h{display:flex;gap:var(--nice-space-1,4px)}.ParticleEditor-module_systemListActions__C289h button{align-items:center;background:transparent;border:none;border-radius:var(--pe-radius);color:var(--pe-text-secondary);cursor:pointer;display:flex;font-size:12px;height:22px;justify-content:center;width:22px}.ParticleEditor-module_systemListActions__C289h button:hover{background-color:var(--pe-bg-hover);color:var(--pe-text-primary)}.ParticleEditor-module_presetMenu__FXV-m{background-color:var(--pe-bg-tertiary);border-bottom:1px solid var(--pe-border-color);display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px)}.ParticleEditor-module_presetItem__zt9wm{background-color:var(--pe-bg-secondary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-secondary);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-2-5,10px);transition:all var(--pe-transition)}.ParticleEditor-module_presetItem__zt9wm:hover{background-color:var(--pe-accent);border-color:var(--pe-accent);color:#fff}.ParticleEditor-module_systemItems__a4eQN{flex:1;overflow-y:auto;padding:var(--nice-space-1-5,6px)}.ParticleEditor-module_systemItem__y-cTZ{align-items:center;border-radius:var(--pe-radius);cursor:pointer;display:flex;justify-content:space-between;padding:var(--nice-space-2,8px) var(--nice-space-2-5,10px);transition:all var(--pe-transition)}.ParticleEditor-module_systemItem__y-cTZ:hover{background-color:var(--pe-bg-hover)}.ParticleEditor-module_systemItem__y-cTZ.ParticleEditor-module_selected__wzmRZ{background-color:var(--pe-accent);color:#fff}.ParticleEditor-module_systemItem__y-cTZ.ParticleEditor-module_selected__wzmRZ .ParticleEditor-module_systemItemActions__Dc1Bw button{color:var(--nice-overlay-light-70,hsla(0,0%,100%,.7))}.ParticleEditor-module_systemItem__y-cTZ.ParticleEditor-module_selected__wzmRZ .ParticleEditor-module_systemItemActions__Dc1Bw button:hover{color:#fff}.ParticleEditor-module_systemName__-EAlQ{flex:1;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ParticleEditor-module_systemItemActions__Dc1Bw{display:flex;gap:var(--nice-space-0-5,2px);opacity:0;transition:opacity var(--pe-transition)}.ParticleEditor-module_systemItem__y-cTZ:hover .ParticleEditor-module_systemItemActions__Dc1Bw{opacity:1}.ParticleEditor-module_systemItemActions__Dc1Bw button{align-items:center;background:transparent;border:none;color:var(--pe-text-muted);cursor:pointer;display:flex;font-size:11px;height:20px;justify-content:center;width:20px}.ParticleEditor-module_systemItemActions__Dc1Bw button:hover:not(:disabled){color:var(--pe-text-primary)}.ParticleEditor-module_systemItemActions__Dc1Bw button:disabled{cursor:not-allowed;opacity:.3}.ParticleEditor-module_renameInput__jUWw2{background-color:var(--pe-bg-primary);border:1px solid var(--pe-accent);border-radius:var(--pe-radius);color:var(--pe-text-primary);font-size:12px;outline:none;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px);width:100%}.ParticleEditor-module_inspector__qP8Gq{background-color:var(--pe-bg-secondary);border-left:1px solid var(--pe-border-color);display:flex;flex-direction:column;min-width:280px;overflow:hidden;width:320px}.ParticleEditor-module_inspectorHeader__l6Uxn{border-bottom:1px solid var(--pe-border-color);font-size:13px;font-weight:600;overflow:hidden;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px);text-overflow:ellipsis;white-space:nowrap}.ParticleEditor-module_inspectorModules__pTVRa{flex:1;overflow-y:auto}.ParticleEditor-module_emptyInspector__JYoth{align-items:center;color:var(--pe-text-muted);display:flex;font-style:italic;height:100%;justify-content:center}.ParticleEditor-module_moduleSection__dQhZv{border-bottom:1px solid var(--pe-border-color)}.ParticleEditor-module_moduleHeader__u-Jjw{align-items:center;cursor:pointer;display:flex;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-2,8px) var(--nice-space-3,12px);transition:background-color var(--pe-transition)}.ParticleEditor-module_moduleHeader__u-Jjw:hover{background-color:var(--pe-bg-hover)}.ParticleEditor-module_moduleHeader__u-Jjw.ParticleEditor-module_selected__wzmRZ{background-color:var(--pe-bg-tertiary)}.ParticleEditor-module_moduleIcon__iVDB-{color:var(--pe-text-muted);font-size:10px;width:12px}.ParticleEditor-module_moduleCheckbox__0B4Md{accent-color:var(--pe-accent);cursor:pointer;height:14px;margin:0;width:14px}.ParticleEditor-module_moduleName__m8AJX{flex:1;font-size:12px;font-weight:500}.ParticleEditor-module_moduleContent__pE2Ux{background-color:var(--pe-bg-tertiary);border-top:1px solid var(--pe-border-color);padding:var(--nice-space-2,8px) var(--nice-space-3,12px)}.ParticleEditor-module_moduleNotImplemented__NZDCG{color:var(--pe-text-muted);font-size:11px;font-style:italic;padding:var(--nice-space-3,12px);text-align:center}.ParticleEditor-module_propertyRow__TzuYo{align-items:center;display:flex;gap:var(--nice-space-2,8px);margin-bottom:var(--nice-space-2,8px)}.ParticleEditor-module_propertyRow__TzuYo:last-child{margin-bottom:0}.ParticleEditor-module_propertyRow__TzuYo>label{color:var(--pe-text-secondary);flex:0 0 100px;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ParticleEditor-module_numberInput__cKItO{background-color:var(--pe-bg-primary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);flex:1;font-family:monospace;font-size:11px;height:24px;min-width:50px;padding:0 var(--nice-space-1-5,6px)}.ParticleEditor-module_numberInput__cKItO:focus{border-color:var(--pe-accent);outline:none}.ParticleEditor-module_selectInput__RhZly{background-color:var(--pe-bg-primary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);cursor:pointer;flex:1;font-size:11px;height:24px;padding:0 var(--nice-space-1-5,6px)}.ParticleEditor-module_selectInput__RhZly:focus{border-color:var(--pe-accent);outline:none}.ParticleEditor-module_toggleInput__seU4y{accent-color:var(--pe-accent);cursor:pointer;height:16px;width:16px}.ParticleEditor-module_distributionInput__M5ciH{align-items:center;display:flex;flex:1;gap:var(--nice-space-1,4px)}.ParticleEditor-module_distributionType__NTuwm{background-color:var(--pe-bg-primary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);cursor:pointer;font-size:11px;height:24px;padding:0 var(--nice-space-1,4px);width:80px}.ParticleEditor-module_addButton__nSODD{background-color:var(--pe-accent);border:none;border-radius:var(--pe-radius);color:#fff;cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-3,12px);transition:background-color var(--pe-transition)}.ParticleEditor-module_addButton__nSODD:hover{background-color:var(--pe-accent-hover)}.ParticleEditor-module_previewPanel__sCCsm{align-items:center;background-color:var(--pe-bg-primary);display:flex;flex:1;justify-content:center;min-width:200px}.ParticleEditor-module_previewCanvas__b8PcH{background-color:var(--nice-bg,#1a1a1a);border-radius:var(--pe-radius)}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar{height:8px;width:8px}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar-track{background:var(--pe-bg-tertiary)}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar-thumb{background:var(--pe-border-color);border-radius:var(--nice-radius-sm,4px)}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar-thumb:hover{background:var(--pe-text-muted)}@media (max-width:900px){.ParticleEditor-module_systemList__Vaiea{min-width:200px;width:200px}.ParticleEditor-module_inspector__qP8Gq{min-width:220px;width:260px}.ParticleEditor-module_propertyRow__TzuYo>label{flex:0 0 80px}}@media (max-width:700px){.ParticleEditor-module_systemList__Vaiea{border-bottom:1px solid var(--pe-border-color);border-right:none;max-height:150px;min-width:unset;width:100%}.ParticleEditor-module_inspector__qP8Gq{border-left:none;border-top:1px solid var(--pe-border-color);min-width:unset;width:100%}}
1
+ .ModelEditor-module_root__Aiqom{background:var(--nice-bg-primary);color:var(--nice-text-primary);display:flex;flex-direction:column;font-family:Segoe UI,Consolas,monospace;font-size:12px;height:100%;overflow:hidden;user-select:none}.ModelEditor-module_menuBar__5P6Wi{align-items:center;background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:0;height:28px;padding:0 var(--nice-space-1,4px)}.ModelEditor-module_menuBtn__f1u-N{background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-2-5,10px);white-space:nowrap}.ModelEditor-module_menuBtn__f1u-N:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.ModelEditor-module_menuBtn__f1u-N:disabled{cursor:default;opacity:.4}.ModelEditor-module_menuSep__Jilgu{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.ModelEditor-module_menuLabel__gn6yQ{color:var(--nice-text-secondary);font-size:10px;margin:0 var(--nice-space-1-5,6px);white-space:nowrap}.ModelEditor-module_menuRight__YQWk7{align-items:center;display:flex;gap:var(--nice-space-1,4px);margin-left:auto}.ModelEditor-module_leftPanel__sVsxG{background:var(--nice-bg-primary);overflow:hidden;width:240px}.ModelEditor-module_leftPanel__sVsxG,.ModelEditor-module_toolbar__l8uKC{border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0}.ModelEditor-module_toolbar__l8uKC{background:var(--nice-bg-elevated);gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.ModelEditor-module_toolBtn__8DzAf{align-items:center;background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:16px;height:32px;justify-content:center;transition:all .1s;width:32px}.ModelEditor-module_toolBtn__8DzAf:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.ModelEditor-module_toolBtnActive__ek-nN{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.ModelEditor-module_toolSep__5I72j{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-1,4px) var(--nice-space-0-5,2px)}.ModelEditor-module_viewportContainer__O-e-6{background:var(--nice-bg-inset);flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.ModelEditor-module_viewportContainer__O-e-6 canvas{display:block;height:100%;width:100%}.ModelEditor-module_viewportOverlay__LXDnT{display:flex;gap:var(--nice-space-1,4px);left:8px;position:absolute;top:8px;z-index:10}.ModelEditor-module_viewportBadge__-5C9w{background:var(--nice-overlay-80,rgba(20,20,40,.8));border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);font-size:10px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.ModelEditor-module_viewportDropZone__PBrTo{align-items:center;background:rgba(85,102,204,.15);border:2px dashed var(--nice-color-primary);display:flex;inset:0;justify-content:center;pointer-events:none;position:absolute;z-index:20}.ModelEditor-module_viewportDropZone__PBrTo span{background:rgba(20,20,40,.9);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-muted,#aab);font-size:14px;padding:var(--nice-space-3,12px) var(--nice-space-6,24px)}.ModelEditor-module_rightPanel__oJf3N{background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:280px}.ModelEditor-module_panelSection__yb-jc{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.ModelEditor-module_panelTitle__rp8tH{align-items:center;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.ModelEditor-module_panelTitle__rp8tH button{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:14px;line-height:1;padding:0 var(--nice-space-0-5,2px)}.ModelEditor-module_panelTitle__rp8tH button:hover{color:var(--nice-text-muted)}.ModelEditor-module_panelCollapsed__xBsUg .ModelEditor-module_panelContent__IMNnR{display:none}.ModelEditor-module_panelContent__IMNnR{padding-top:var(--nice-space-1,4px)}.ModelEditor-module_treeItem__MiVWT{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);overflow:hidden;padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px) var(--nice-space-0-75,3px) 0;text-overflow:ellipsis;white-space:nowrap}.ModelEditor-module_treeItem__MiVWT:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.ModelEditor-module_treeItemActive__4ntXK{background:var(--nice-surface)!important;outline:1px solid var(--nice-color-primary-hover)}.ModelEditor-module_treeIcon__PzniU{flex-shrink:0;font-size:12px;opacity:.6;text-align:center;width:16px}.ModelEditor-module_treeIndent__ISBk-{display:inline-block;flex-shrink:0;width:16px}.ModelEditor-module_treeToggle__Ge5PW{color:var(--nice-text-muted);cursor:pointer;flex-shrink:0;font-size:8px;text-align:center;width:12px}.ModelEditor-module_treeVisibility__BjKaL{cursor:pointer;flex-shrink:0;font-size:10px;opacity:.5;padding:0 var(--nice-space-0-5,2px)}.ModelEditor-module_treeVisibility__BjKaL:hover{opacity:1}.ModelEditor-module_propRow__AONtp{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-0-75,3px)}.ModelEditor-module_propLabel__bwkAK{color:var(--nice-text-muted);flex-shrink:0;font-size:10px;min-width:50px}.ModelEditor-module_propInput__aFI4Q{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.ModelEditor-module_propInput__aFI4Q:focus{border-color:var(--nice-color-primary);outline:none}.ModelEditor-module_propVec3__2FcMf{display:flex;flex:1;gap:var(--nice-space-0-5,2px)}.ModelEditor-module_propVec3__2FcMf input{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:10px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-0-75,3px);text-align:center}.ModelEditor-module_propVec3__2FcMf input:focus{border-color:var(--nice-color-primary);outline:none}.ModelEditor-module_propVec3X__lfQtN{border-left:2px solid #c44!important}.ModelEditor-module_propVec3Y__PmF5p{border-left:2px solid #4c4!important}.ModelEditor-module_propVec3Z__swB76{border-left:2px solid #48c!important}.ModelEditor-module_propColorSwatch__SMg9F{border:1px solid var(--nice-overlay-light-15,hsla(0,0%,100%,.15));border-radius:var(--nice-radius-sm,3px);cursor:pointer;flex-shrink:0;height:24px;position:relative;width:24px}.ModelEditor-module_propColorSwatch__SMg9F input{cursor:pointer;height:100%;inset:0;opacity:0;position:absolute;width:100%}.ModelEditor-module_propCheckbox__-eSHl{accent-color:var(--nice-color-primary)}.ModelEditor-module_propSelect__1YXcX{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.ModelEditor-module_bottomPanel__ojUaN{background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;height:200px;overflow:hidden}.ModelEditor-module_bottomPanelCollapsed__P2I6E{height:28px}.ModelEditor-module_bottomPanelHeader__z9D6b{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:var(--nice-space-1,4px);height:28px;padding:0 var(--nice-space-2,8px)}.ModelEditor-module_bottomPanelTitle__0P32m{color:var(--nice-text-secondary);cursor:pointer;font-size:10px;letter-spacing:.5px;text-transform:uppercase}.ModelEditor-module_bottomToggle__fsUEB{color:var(--nice-text-muted);cursor:pointer;font-size:8px;margin-right:var(--nice-space-1,4px)}.ModelEditor-module_transportBar__bh6Sb{align-items:center;display:flex;gap:var(--nice-space-0-5,2px)}.ModelEditor-module_transportBtn__egXSB{background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;font-size:14px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.ModelEditor-module_transportBtn__egXSB:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.ModelEditor-module_transportBtnActive__j6Y94{color:var(--nice-color-primary)!important}.ModelEditor-module_transportTime__7RzUh{color:var(--nice-text-muted);font-size:10px;font-variant-numeric:tabular-nums;margin:0 var(--nice-space-2,8px)}.ModelEditor-module_animListArea__rzc1e{display:flex;flex:1;min-height:0;overflow:hidden}.ModelEditor-module_animList__lGNt5{border-right:1px solid var(--nice-border-color);flex-shrink:0;overflow-y:auto;width:200px}.ModelEditor-module_animItem__lZGOY{align-items:center;border-left:2px solid transparent;cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px)}.ModelEditor-module_animItem__lZGOY:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.ModelEditor-module_animItemActive__8pKLd{background:var(--nice-surface)!important;border-left-color:var(--nice-color-primary)}.ModelEditor-module_animDuration__CAwuG{color:var(--nice-text-muted);font-size:9px;margin-left:auto}.ModelEditor-module_timelineArea__WFBHa{flex:1;overflow-x:auto;overflow-y:hidden;position:relative}.ModelEditor-module_timelineRuler__jlW8F{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);height:20px;position:relative}.ModelEditor-module_rulerTick__VhJRA{background:var(--nice-bg-secondary);height:100%;position:absolute;top:0;width:1px}.ModelEditor-module_rulerLabel__Pwl9a{color:var(--nice-text-muted);font-size:8px;position:absolute;top:2px;transform:translateX(-50%)}.ModelEditor-module_playhead__Rd4rh{background:var(--nice-color-primary);pointer-events:none;position:absolute;top:0;width:2px;z-index:3}.ModelEditor-module_playheadHandle__rIBHA{background:var(--nice-color-primary);clip-path:polygon(0 0,100% 0,50% 100%);height:8px;position:absolute;top:0;transform:translateX(-3px);width:8px}.ModelEditor-module_timelineTracks__joMHo{position:relative}.ModelEditor-module_keyframeDiamond__kffdC{background:#e8a030;cursor:pointer;height:8px;position:absolute;transform:rotate(45deg);width:8px;z-index:2}.ModelEditor-module_keyframeDiamond__kffdC:hover{background:#f0c060}.ModelEditor-module_keyframeDiamondSelected__xURk4{background:var(--nice-color-white)!important}.ModelEditor-module_statusBar__AJMzx{align-items:center;background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);color:var(--nice-text-muted);display:flex;flex-shrink:0;font-size:10px;gap:var(--nice-space-3,12px);height:20px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.ModelEditor-module_materialCard__1IGe7{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);margin-bottom:var(--nice-space-1-5,6px);padding:var(--nice-space-1-5,6px)}.ModelEditor-module_materialCardActive__VEnBX{border-color:var(--nice-color-primary)}.ModelEditor-module_materialHeader__WtTh3{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.ModelEditor-module_materialPreview__IF7qd{border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);flex-shrink:0;height:32px;overflow:hidden;width:32px}.ModelEditor-module_materialPreview__IF7qd canvas{height:100%;width:100%}.ModelEditor-module_materialName__TvRhs{flex:1;font-size:11px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ModelEditor-module_textureSlot__PLqef{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.ModelEditor-module_textureThumb__PdCTD{background:#0a0a15;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);flex-shrink:0;height:28px;overflow:hidden;width:28px}.ModelEditor-module_textureThumb__PdCTD img{height:100%;object-fit:cover;width:100%}.ModelEditor-module_textureInfo__XOzZI{flex:1;min-width:0}.ModelEditor-module_textureName__H-2d3{font-size:10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ModelEditor-module_textureBtn__zUt3m{background:none;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1-5,6px)}.ModelEditor-module_textureBtn__zUt3m:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.ModelEditor-module_btnPrimary__IAz0U{background:var(--nice-color-primary);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-color-white);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-3,12px);white-space:nowrap}.ModelEditor-module_btnPrimary__IAz0U:hover{background:var(--nice-primary,#67d)}.ModelEditor-module_btnPrimary__IAz0U:disabled{cursor:default;opacity:.4}.ModelEditor-module_btnSecondary__nJpgi{background:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-3,12px);white-space:nowrap}.ModelEditor-module_btnSecondary__nJpgi:hover{background:#3a3a5a;color:var(--nice-text-primary)}.ModelEditor-module_btnIcon__Qq9nz{background:none;border:none;color:var(--nice-text-muted);cursor:pointer;font-size:14px;line-height:1;padding:var(--nice-space-0-5,2px)}.ModelEditor-module_btnIcon__Qq9nz:hover{color:var(--nice-text-secondary)}.ModelEditor-module_aiPanel__-U1jO{background:linear-gradient(135deg,var(--nice-bg,#1a1a3e),#1e1a2e);border:1px solid var(--nice-bg-secondary,#4a3a6a);border-radius:var(--nice-radius-md,6px);margin:var(--nice-space-1,4px) 0;padding:var(--nice-space-2,8px)}.ModelEditor-module_aiHeader__WMZF5{align-items:center;color:#b88adf;display:flex;font-size:11px;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-1-5,6px)}.ModelEditor-module_aiInput__-23jT{background:var(--nice-bg-canvas);border:1px solid var(--nice-bg-secondary,#4a3a6a);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:11px;margin-bottom:var(--nice-space-1,4px);min-height:28px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);resize:vertical;width:100%}.ModelEditor-module_aiInput__-23jT:focus{border-color:#86c;outline:none}.ModelEditor-module_aiBtnRow__F-S-Z{display:flex;gap:var(--nice-space-1,4px)}.ModelEditor-module_aiBtn__8dcrE{background:linear-gradient(135deg,#54a,#64c);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-color-white);cursor:pointer;font-size:10px;padding:var(--nice-space-0-75,3px) var(--nice-space-2-5,10px)}.ModelEditor-module_aiBtn__8dcrE:hover{background:linear-gradient(135deg,#65b,#75d)}.ModelEditor-module_aiBtn__8dcrE:disabled{opacity:.4}.ModelEditor-module_aiStatus__Y5g59{color:#86a;font-size:10px;margin-top:var(--nice-space-1,4px)}.ModelEditor-module_dragOver__2VGIz{outline:2px dashed var(--nice-color-primary);outline-offset:-2px}.ModelEditor-module_contextMenu__sEb9s{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);box-shadow:0 4px 16px var(--nice-overlay-50,rgba(0,0,0,.5));min-width:180px;padding:var(--nice-space-1,4px) 0;position:fixed;z-index:999}.ModelEditor-module_contextItem__W90fc{align-items:center;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-25,5px) var(--nice-space-3,12px)}.ModelEditor-module_contextItem__W90fc:hover{background:var(--nice-surface)}.ModelEditor-module_contextSep__QCWTX{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-0-5,2px) 0}.ModelEditor-module_contextKey__HxGV6{color:var(--nice-text-muted);font-size:10px;margin-left:auto}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar{height:6px;width:6px}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar-track,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar-track,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar-track,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar-track{background:transparent}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar-thumb,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar-thumb,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar-thumb,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar-thumb{background:var(--nice-bg-secondary);border-radius:var(--nice-radius-sm,3px)}.ModelEditor-module_animList__lGNt5::-webkit-scrollbar-thumb:hover,.ModelEditor-module_leftPanel__sVsxG::-webkit-scrollbar-thumb:hover,.ModelEditor-module_rightPanel__oJf3N::-webkit-scrollbar-thumb:hover,.ModelEditor-module_timelineArea__WFBHa::-webkit-scrollbar-thumb:hover{background:var(--nice-bg-tertiary)}.ModelEditor-module_resizeHandle__CyDw4{background:transparent;cursor:ns-resize;height:4px;transition:background .1s}.ModelEditor-module_resizeHandle__CyDw4:hover{background:var(--nice-color-primary)}.ModelEditor-module_modeSelect__KroPg{background:var(--nice-bg,#224);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:#b0b0d0;cursor:pointer;font-size:11px;font-weight:600;outline:none;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.ModelEditor-module_modeSelect__KroPg:focus{border-color:var(--nice-color-primary)}.ModelEditor-module_modeSelect__KroPg option{background:var(--nice-bg-primary)}.ModelEditor-module_menuDropdownWrap__6dicW{position:relative}.ModelEditor-module_dropdownMenu__ixJxD{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);box-shadow:0 6px 24px var(--nice-overlay-60,rgba(0,0,0,.6));left:0;max-height:420px;min-width:200px;overflow-y:auto;padding:var(--nice-space-1,4px) 0;position:absolute;top:100%;z-index:999}.ModelEditor-module_dropdownTitle__zzdA6{color:var(--nice-color-primary);font-size:9px;font-weight:700;letter-spacing:1px;padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px) var(--nice-space-0-5,2px);text-transform:uppercase}.ModelEditor-module_dropdownItem__4dllG{align-items:center;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-1-25,5px) var(--nice-space-4,16px);transition:background .08s}.ModelEditor-module_dropdownItem__4dllG:hover{background:var(--nice-surface);color:var(--nice-color-white)}.ModelEditor-module_dropdownSep__oFx30{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-1,4px) 0}.ModelEditor-module_dropdownMenu__ixJxD::-webkit-scrollbar{width:6px}.ModelEditor-module_dropdownMenu__ixJxD::-webkit-scrollbar-track{background:transparent}.ModelEditor-module_dropdownMenu__ixJxD::-webkit-scrollbar-thumb{background:var(--nice-bg-tertiary);border-radius:var(--nice-radius-sm,3px)}.ModelEditor-module_viewportShadingBar__NOK0h{background:var(--nice-overlay-80,rgba(20,20,40,.8));border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px);position:absolute;right:8px;top:8px;z-index:10}.ModelEditor-module_shadingBtn__SAIR9{background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;font-size:12px;padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px);transition:all .1s;white-space:nowrap}.ModelEditor-module_shadingBtn__SAIR9:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.ModelEditor-module_shadingBtnActive__ST5YT{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.ModelEditor-module_viewportGizmoInfo__k0ily{position:absolute;right:8px;top:44px;z-index:10}.ModelEditor-module_propTabs__Vw0-u{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0}.ModelEditor-module_propTabBtn__s8xDE{background:none;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:14px;padding:var(--nice-space-1-5,6px) var(--nice-space-1,4px);transition:all .15s}.ModelEditor-module_propTabBtn__s8xDE:hover{background:var(--nice-bg-elevated);color:var(--nice-text-muted)}.ModelEditor-module_propTabBtnActive__-woXw{background:var(--nice-bg-elevated)!important;border-bottom-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.ModelEditor-module_outlinerSearch__p5L46{padding:var(--nice-space-1,4px) var(--nice-space-2,8px) 0}.ModelEditor-module_outlinerSearch__p5L46 input{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary);font-size:11px;padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px)}.ModelEditor-module_outlinerSearch__p5L46 input:focus{border-color:var(--nice-color-primary);outline:none}.ModelEditor-module_outlinerSearch__p5L46 input::placeholder{color:var(--nice-text-muted)}.ModelViewer-module_root__6Fbj3{background:var(--nice-bg-primary,#1a1a2e);color:var(--nice-text-primary,#e0e0e0);display:flex;flex-direction:column;font-family:Segoe UI,Consolas,monospace;font-size:12px;height:100%;overflow:hidden;position:relative;user-select:none}.ModelViewer-module_toolbar__EQJRN{align-items:center;background:var(--nice-bg-canvas,#12122a);border-bottom:1px solid var(--nice-border-color,#252545);display:flex;flex-shrink:0;gap:var(--nice-space-0-5,2px);height:32px;padding:0 var(--nice-space-1-5,6px);z-index:2}.ModelViewer-module_toolBtn__f9833{align-items:center;background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#ccc);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px);white-space:nowrap}.ModelViewer-module_toolBtn__f9833:hover{background:var(--nice-bg-secondary,#252545);color:var(--nice-text-primary,#fff)}.ModelViewer-module_toolBtn__f9833.ModelViewer-module_active__MgURC{background:var(--nice-color-primary,#57f);color:var(--nice-text-on-primary,#fff)}.ModelViewer-module_toolBtn__f9833:disabled{cursor:default;opacity:.4}.ModelViewer-module_toolSep__5zuAK{background:var(--nice-bg-secondary,#333);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.ModelViewer-module_toolLabel__PcpJC{color:var(--nice-text-secondary,#888);font-size:10px;margin:0 var(--nice-space-1,4px);white-space:nowrap}.ModelViewer-module_toolRight__VSuzD{align-items:center;display:flex;gap:var(--nice-space-0-5,2px);margin-left:auto}.ModelViewer-module_viewport__-1llx{flex:1;outline:none;overflow:hidden;position:relative}.ModelViewer-module_viewport__-1llx:focus-visible:after{box-shadow:inset 0 0 0 2px var(--nice-color-primary,#3b82f6);content:"";inset:0;pointer-events:none;position:absolute}.ModelViewer-module_viewport__-1llx canvas{display:block;height:100%!important;width:100%!important}.ModelViewer-module_loadingOverlay__Ayyci{align-items:center;background:var(--nice-overlay-85,rgba(20,20,40,.85));display:flex;flex-direction:column;inset:0;justify-content:center;position:absolute;z-index:10}.ModelViewer-module_loadingBar__RDqVv{background:var(--nice-bg-tertiary,#444);border-radius:var(--nice-radius-sm,2px);height:4px;margin-top:var(--nice-space-3,12px);overflow:hidden;width:200px}.ModelViewer-module_loadingBarFill__zvIoP{background:var(--nice-color-primary,#57f);height:100%;transition:width .2s}.ModelViewer-module_loadingText__6OGeA{color:var(--nice-text-secondary,#ccc);font-size:13px;margin-bottom:var(--nice-space-2,8px)}.ModelViewer-module_errorOverlay__ASUqN{align-items:center;background:var(--nice-overlay-85,rgba(20,20,40,.85));color:var(--nice-danger,#ff6b6b);display:flex;flex-direction:column;inset:0;justify-content:center;position:absolute;z-index:10}.ModelViewer-module_sidePanel__-QFkd{background:var(--nice-bg-canvas,#12122a);border-left:1px solid var(--nice-border-color,#252545);bottom:24px;display:flex;flex-direction:column;font-size:11px;gap:var(--nice-space-3,12px);overflow-y:auto;padding:var(--nice-space-2,8px);position:absolute;right:0;top:32px;width:240px;z-index:5}.ModelViewer-module_sidePanel__-QFkd.ModelViewer-module_hidden__yoMuq{display:none}.ModelViewer-module_panelSection__bH-O3{display:flex;flex-direction:column;gap:var(--nice-space-1,4px)}.ModelViewer-module_panelTitle__xsn3e{color:var(--nice-text-secondary,#888);font-size:10px;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.ModelViewer-module_panelRow__3QxnD{align-items:center;display:flex;gap:var(--nice-space-1-5,6px)}.ModelViewer-module_panelRow__3QxnD label{color:var(--nice-text-secondary,#aaa);flex:0 0 70px;font-size:10px}.ModelViewer-module_panelRow__3QxnD span{color:var(--nice-text-primary,#e0e0e0);font-size:11px}.ModelViewer-module_animBar__qcYi5{align-items:center;background:var(--nice-bg-canvas,#12122a);border-top:1px solid var(--nice-border-color,#252545);display:flex;flex-shrink:0;gap:var(--nice-space-1,4px);height:28px;padding:0 var(--nice-space-2,8px)}.ModelViewer-module_animBar__qcYi5.ModelViewer-module_hidden__yoMuq{display:none}.ModelViewer-module_animSlider__9AQzN{appearance:none;background:var(--nice-bg-tertiary,#444);border-radius:var(--nice-radius-sm,2px);cursor:pointer;flex:1;height:4px}.ModelViewer-module_animSlider__9AQzN::-webkit-slider-thumb{appearance:none;background:var(--nice-color-primary,#57f);border-radius:var(--nice-radius-full,50%);cursor:pointer;height:10px;width:10px}.ModelViewer-module_animSelect__LhFWD{background:var(--nice-bg-secondary,#252545);border:1px solid var(--nice-border-color,#555);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary,#e0e0e0);font-size:10px;max-width:120px;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.ModelViewer-module_statusBar__-3uuA{align-items:center;background:var(--nice-bg-canvas,#12122a);border-top:1px solid var(--nice-border-color,#252545);color:var(--nice-text-muted,#888);display:flex;flex-shrink:0;font-size:10px;gap:var(--nice-space-2,8px);height:22px;padding:0 var(--nice-space-2,8px)}.ModelViewer-module_statusRight__vI51s{display:flex;gap:var(--nice-space-3,12px);margin-left:auto}.ModelViewer-module_annotationLayer__-NzZF{inset:0;pointer-events:none;position:absolute;z-index:3}.ModelViewer-module_annotation__H6DgR{background:color-mix(in srgb,var(--nice-color-primary,#57f) 85%,transparent);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-on-primary,#fff);cursor:pointer;font-size:10px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);pointer-events:auto;position:absolute;transform:translate(-50%,-100%);white-space:nowrap}.ModelViewer-module_annotation__H6DgR:hover{background:var(--nice-color-primary,#57f)}.ModelViewer-module_dropZone__eNrPo{align-items:center;background:color-mix(in srgb,var(--nice-color-primary,#57f) 15%,transparent);border:2px dashed var(--nice-color-primary,#57f);color:var(--nice-color-primary,#57f);display:flex;font-size:16px;inset:0;justify-content:center;pointer-events:none;position:absolute;z-index:20}.UVEditor-module_uvEditor__9yahO{background:var(--nice-bg-secondary,#1e1e1e);border:1px solid var(--nice-border,#333);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text,#e0e0e0);font-family:var(--nice-font-family,system-ui,sans-serif);font-size:12px;overflow:hidden}.UVEditor-module_toolbar__wPDkZ{align-items:center;background:var(--nice-bg-tertiary,#252526);border-bottom:1px solid var(--nice-border,#333);display:flex;flex-wrap:wrap;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.UVEditor-module_toolGroup__hzVqv{border-right:1px solid var(--nice-border,#444);display:flex;gap:var(--nice-space-0-5,2px);padding:0 var(--nice-space-1,4px)}.UVEditor-module_toolGroup__hzVqv:last-child{border-right:none}.UVEditor-module_toolBtn__oIzVq{align-items:center;background:var(--nice-bg-secondary,#2d2d2d);border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#aaa);cursor:pointer;display:flex;font-size:11px;font-weight:500;height:24px;justify-content:center;min-width:28px;padding:0 var(--nice-space-1-5,6px);transition:all .15s ease}.UVEditor-module_toolBtn__oIzVq:hover:not(:disabled){background:var(--nice-bg-hover,#3c3c3c);color:var(--nice-text,#fff)}.UVEditor-module_toolBtn__oIzVq.UVEditor-module_active__gahDI{background:var(--nice-primary,#007acc);border-color:var(--nice-primary-hover,#0098ff);color:var(--nice-text-on-primary,#fff)}.UVEditor-module_toolBtn__oIzVq:disabled{cursor:not-allowed;opacity:.5}.UVEditor-module_select__cd9Xa{background:var(--nice-bg-secondary,#2d2d2d);border:1px solid var(--nice-border,#444);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text,#e0e0e0);cursor:pointer;font-size:11px;height:24px;padding:0 var(--nice-space-1-5,6px)}.UVEditor-module_select__cd9Xa:focus{border-color:var(--nice-primary,#007acc);outline:none}.UVEditor-module_viewport__0S2EF{background:var(--nice-bg-secondary,#2a2a2a);cursor:crosshair;flex:1;overflow:hidden;position:relative}.UVEditor-module_canvas__L8eJJ{display:block;height:100%;width:100%}.UVEditor-module_noGeometry__J0MOa{align-items:center;color:var(--nice-text-muted,#666);display:flex;font-size:14px;inset:0;justify-content:center;pointer-events:none;position:absolute}.UVEditor-module_sidebar__zcI1d{background:var(--nice-bg-tertiary,#252526);border-left:1px solid var(--nice-border,#333);overflow-y:auto;width:200px}.UVEditor-module_panel__wRBD0{border-bottom:1px solid var(--nice-border,#333);padding:var(--nice-space-2-5,10px)}.UVEditor-module_panelTitle__5oDRo{color:var(--nice-text-muted,#888);font-size:11px;font-weight:600;letter-spacing:.5px;margin:0 0 var(--nice-space-2,8px) 0;text-transform:uppercase}.UVEditor-module_checkbox__P2anI{align-items:center;cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1-5,6px)}.UVEditor-module_checkbox__P2anI input{accent-color:var(--nice-primary,#007acc);cursor:pointer;height:14px;margin:0;width:14px}.UVEditor-module_stat__j2lxJ{display:flex;font-size:11px;justify-content:space-between;padding:var(--nice-space-0-75,3px) 0}.UVEditor-module_stat__j2lxJ span:first-child{color:var(--nice-text-muted,#888)}.UVEditor-module_stat__j2lxJ span:last-child{color:var(--nice-text,#e0e0e0);font-weight:500}.UVEditor-module_rangeLabel__6OS0o{display:block;font-size:11px;margin-top:var(--nice-space-2,8px)}.UVEditor-module_rangeLabel__6OS0o input{accent-color:var(--nice-primary,#007acc);margin-top:var(--nice-space-1,4px);width:100%}.UVEditor-module_statusBar__KYYrx{background:var(--nice-bg-inset,#1a1a1a);border-top:1px solid var(--nice-border,#333);color:var(--nice-text-muted,#888);display:flex;font-size:11px;gap:var(--nice-space-4,16px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px)}.UVEditor-module_statusBar__KYYrx span{white-space:nowrap}@media (max-width:768px){.UVEditor-module_sidebar__zcI1d{display:none}.UVEditor-module_toolbar__wPDkZ{overflow-x:auto}}.MaterialEditor-module_materialEditor__RjU0e{--bg-primary:var(--nice-bg,#1e1e1e);--bg-secondary:var(--nice-bg-secondary,#252526);--bg-tertiary:var(--nice-bg-secondary,#2d2d2d);--bg-hover:var(--nice-bg-secondary,#3a3a3a);--bg-active:var(--nice-bg-secondary,#4a4a4a);--text-primary:var(--nice-text-primary,#fff);--text-secondary:var(--nice-text-secondary,#ccc);--text-muted:var(--nice-text-secondary,#888);--border-color:var(--nice-bg-secondary,#3a3a3a);--border-light:var(--nice-bg-secondary,#4a4a4a);--accent-color:var(--nice-primary,#0078d4);--accent-hover:#1084d8;--error-color:var(--nice-danger,#f44336);--warning-color:var(--nice-warning,#ff9800);--success-color:var(--nice-success,#4caf50);--shadow-sm:0 1px 3px var(--nice-overlay-30,rgba(0,0,0,.3));--shadow-md:0 4px 6px var(--nice-overlay-40,rgba(0,0,0,.4));--shadow-lg:0 10px 20px var(--nice-overlay-50,rgba(0,0,0,.5));--node-shadow:0 4px 12px var(--nice-overlay-50,rgba(0,0,0,.5));--transition-fast:0.1s ease;--transition-normal:0.2s ease;--border-radius-sm:3px;--border-radius-md:6px;--border-radius-lg:10px}.MaterialEditor-module_materialEditor__RjU0e.MaterialEditor-module_light__zSnpW{--bg-primary:var(--nice-bg-secondary,#f5f5f5);--bg-secondary:var(--nice-bg,#fff);--bg-tertiary:var(--nice-border,#e0e0e0);--bg-hover:var(--nice-border,#d0d0d0);--bg-active:var(--nice-border,silver);--text-primary:var(--nice-text-primary,#1e1e1e);--text-secondary:var(--nice-text,#333);--text-muted:var(--nice-text-secondary,#666);--border-color:var(--nice-border,#d0d0d0);--border-light:var(--nice-border,#e0e0e0);--shadow-sm:0 1px 3px var(--nice-overlay-10,rgba(0,0,0,.1));--shadow-md:0 4px 6px var(--nice-overlay-15,rgba(0,0,0,.15));--shadow-lg:0 10px 20px var(--nice-overlay-20,rgba(0,0,0,.2));--node-shadow:0 4px 12px var(--nice-overlay-20,rgba(0,0,0,.2))}.MaterialEditor-module_materialEditor__RjU0e{background-color:var(--nice-bg-primary);border-radius:var(--nice-radius-lg);color:var(--nice-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;overflow:hidden;user-select:none}.MaterialEditor-module_toolbar__qqDbE{align-items:center;background-color:var(--nice-bg-secondary);border-bottom:1px solid var(--nice-border-color);display:flex;gap:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px)}.MaterialEditor-module_toolbarGroup__fgE2r{align-items:center;display:flex;gap:var(--nice-space-0-5,2px)}.MaterialEditor-module_toolbarSeparator__Z9B1i{background-color:var(--nice-border-color);height:20px;margin:0 var(--nice-space-1-5,6px);width:1px}.MaterialEditor-module_toolbar__qqDbE button{align-items:center;background-color:transparent;border:none;border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;padding:0;transition:background-color var(--transition-fast);width:28px}.MaterialEditor-module_toolbar__qqDbE button:active:not(:disabled),.MaterialEditor-module_toolbar__qqDbE button:hover:not(:disabled){background-color:var(--nice-hover-bg)}.MaterialEditor-module_toolbar__qqDbE button:disabled{cursor:not-allowed;opacity:.4}.MaterialEditor-module_toolbar__qqDbE button.MaterialEditor-module_active__DEZaw{background-color:var(--nice-color-accent);color:#fff}.MaterialEditor-module_palette__VNmnu{background-color:var(--nice-bg-secondary);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;width:220px}.MaterialEditor-module_paletteSearch__rE-c5{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-2,8px)}.MaterialEditor-module_searchInput__H7FJt{background-color:var(--nice-bg-tertiary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);color:var(--nice-text-primary);font-size:12px;outline:none;padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px);transition:border-color var(--transition-fast);width:100%}.MaterialEditor-module_searchInput__H7FJt:focus{border-color:var(--nice-color-accent)}.MaterialEditor-module_searchInput__H7FJt::placeholder{color:var(--nice-text-muted)}.MaterialEditor-module_paletteCategories__sbn9d{flex:1;overflow-y:auto;padding:var(--nice-space-1,4px) 0}.MaterialEditor-module_paletteCategory__LgsIy{margin-bottom:var(--nice-space-0-5,2px)}.MaterialEditor-module_categoryHeader__8M6DH{align-items:center;background-color:transparent;border:none;border-left:3px solid transparent;color:var(--nice-text-primary);cursor:pointer;display:flex;font-size:12px;font-weight:600;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-2,8px) var(--nice-space-2-5,10px);text-align:left;transition:background-color var(--transition-fast);width:100%}.MaterialEditor-module_categoryHeader__8M6DH:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_categoryIcon__coBim{color:var(--nice-text-muted);font-size:10px;width:14px}.MaterialEditor-module_categoryCount__rnYwK{background-color:var(--nice-bg-tertiary);border-radius:var(--nice-radius-lg,10px);color:var(--nice-text-muted);font-size:10px;font-weight:400;margin-left:auto;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.MaterialEditor-module_categoryNodes__GMJz6{padding:var(--nice-space-0-5,2px) 0}.MaterialEditor-module_paletteNode__4-ncg{align-items:center;cursor:grab;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px) var(--nice-space-1-5,6px) var(--nice-space-7,28px);transition:background-color var(--transition-fast)}.MaterialEditor-module_paletteNode__4-ncg:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_paletteNode__4-ncg:active{cursor:grabbing}.MaterialEditor-module_nodeColor__ql5xb{border-radius:var(--nice-radius-sm,3px);flex-shrink:0;height:12px;width:12px}.MaterialEditor-module_nodeName__K0Rqi{color:var(--nice-text-secondary);flex:1;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.MaterialEditor-module_graphCanvas__guLj7{background-color:var(--nice-bg-primary);cursor:grab;flex:1;overflow:hidden;position:relative}.MaterialEditor-module_graphCanvas__guLj7:active{cursor:grabbing}.MaterialEditor-module_connectionsSvg__9SyYo{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.MaterialEditor-module_connection__x9F9U{cursor:pointer;pointer-events:stroke;transition:stroke-width var(--transition-fast),stroke var(--transition-fast)}.MaterialEditor-module_connection__x9F9U:hover{stroke-width:4px}.MaterialEditor-module_pendingConnection__NCBtj{animation:MaterialEditor-module_dashAnimation__YLpH3 .5s linear infinite;pointer-events:none}@keyframes MaterialEditor-module_dashAnimation__YLpH3{to{stroke-dashoffset:-10}}.MaterialEditor-module_graphNode__pCqYA{background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);box-shadow:var(--node-shadow);cursor:move;overflow:visible;position:absolute;transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.MaterialEditor-module_graphNode__pCqYA:hover{border-color:var(--nice-border-light)}.MaterialEditor-module_graphNode__pCqYA.MaterialEditor-module_selected__ozIqt{border-color:var(--nice-color-accent);box-shadow:0 0 0 2px var(--nice-color-accent),var(--node-shadow)}.MaterialEditor-module_graphNode__pCqYA.MaterialEditor-module_locked__8RRAH{cursor:not-allowed;opacity:.8}.MaterialEditor-module_nodeHeader__-PBFg{align-items:center;border-radius:var(--nice-radius-md) var(--nice-radius-md) 0 0;color:#fff;display:flex;font-size:11px;font-weight:600;justify-content:space-between;padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px);text-shadow:0 1px 2px var(--nice-overlay-30,rgba(0,0,0,.3))}.MaterialEditor-module_nodeTitle__i2PcO{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.MaterialEditor-module_lockIcon__tPzIi{font-size:10px;margin-left:var(--nice-space-1-5,6px)}.MaterialEditor-module_nodePorts__APKPN{padding:var(--nice-space-1,4px) 0;position:relative}.MaterialEditor-module_inputPorts__7MVX4{left:0;position:absolute;top:0}.MaterialEditor-module_outputPorts__GUwXJ{position:absolute;right:0;top:0}.MaterialEditor-module_port__zc4vm{align-items:center;display:flex;font-size:10px;height:20px;position:absolute;white-space:nowrap}.MaterialEditor-module_inputPorts__7MVX4 .MaterialEditor-module_port__zc4vm{left:0;padding-left:var(--nice-space-3-5,14px)}.MaterialEditor-module_outputPorts__GUwXJ .MaterialEditor-module_port__zc4vm{justify-content:flex-end;padding-right:var(--nice-space-3-5,14px);right:0}.MaterialEditor-module_portHandle__oNh4P{border:2px solid var(--nice-bg-secondary);border-radius:var(--nice-radius-full,50%);box-sizing:border-box;cursor:crosshair;height:10px;position:absolute;transition:transform var(--transition-fast);width:10px}.MaterialEditor-module_portHandle__oNh4P:hover{transform:scale(1.3)}.MaterialEditor-module_inputHandle__6lz91{left:-5px}.MaterialEditor-module_outputHandle__8-r1i{right:-5px}.MaterialEditor-module_portHandle__oNh4P.MaterialEditor-module_connected__qo4za{border-color:transparent}.MaterialEditor-module_portLabel__T8daS{color:var(--nice-text-secondary)}.MaterialEditor-module_nodeComment__wkIoF{background-color:rgba(255,235,59,.15);border:1px solid rgba(255,235,59,.4);border-radius:var(--nice-radius-sm);bottom:-24px;color:var(--nice-warning,#ffeb3b);font-size:10px;left:0;overflow:hidden;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px);position:absolute;right:0;text-overflow:ellipsis;white-space:nowrap}.MaterialEditor-module_previewPanel__lqiI0{background-color:var(--nice-bg-secondary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;width:220px}.MaterialEditor-module_previewHeader__vkqDk{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;font-size:12px;font-weight:600;justify-content:space-between;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.MaterialEditor-module_previewModeSelect__qbL8f{background-color:var(--nice-bg-tertiary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);cursor:pointer;font-size:11px;padding:var(--nice-space-0-75,3px) var(--nice-space-2,8px)}.MaterialEditor-module_previewCanvas__q91ue{align-items:center;aspect-ratio:1;background-color:var(--nice-bg-primary);border-bottom:1px solid var(--nice-border-color);display:flex;justify-content:center;position:relative}.MaterialEditor-module_previewCanvas__q91ue canvas{max-height:100%;max-width:100%}.MaterialEditor-module_previewCompiling__GVFRq{align-items:center;animation:MaterialEditor-module_pulse__6IS0P 1s ease infinite;background-color:var(--nice-overlay-60,rgba(0,0,0,.6));bottom:0;color:#fff;display:flex;font-size:12px;justify-content:center;left:0;position:absolute;right:0;top:0}@keyframes MaterialEditor-module_pulse__6IS0P{0%,to{opacity:1}50%{opacity:.6}}.MaterialEditor-module_previewErrors__6JZfZ{flex:1;overflow-y:auto;padding:var(--nice-space-2-5,10px)}.MaterialEditor-module_previewError__Rotpo{background-color:rgba(244,67,54,.15);border:1px solid rgba(244,67,54,.4);border-radius:var(--nice-radius-sm);color:var(--nice-color-error);font-size:11px;margin-bottom:var(--nice-space-1-5,6px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);word-break:break-word}.MaterialEditor-module_propertiesPanel__H3Lej{background-color:var(--nice-bg-secondary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;width:280px}.MaterialEditor-module_propertiesHeader__ZLXL2{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;font-size:12px;font-weight:600;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.MaterialEditor-module_propertiesContent__3LWte{flex:1;overflow-y:auto;padding:var(--nice-space-3,12px)}.MaterialEditor-module_propertyGroup__3Rz-K{margin-bottom:var(--nice-space-4,16px)}.MaterialEditor-module_propertyGroupTitle__Wsswl{color:var(--nice-text-muted);font-size:11px;font-weight:600;letter-spacing:.5px;margin-bottom:var(--nice-space-2,8px);text-transform:uppercase}.MaterialEditor-module_propertyRow__eAshz{display:flex;flex-direction:column;margin-bottom:var(--nice-space-2-5,10px)}.MaterialEditor-module_propertyLabel__wwNGL{color:var(--nice-text-secondary);font-size:11px;margin-bottom:var(--nice-space-1,4px)}.MaterialEditor-module_propertyInput__oK2eE{background-color:var(--nice-bg-tertiary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);font-size:12px;outline:none;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:border-color var(--transition-fast)}.MaterialEditor-module_propertyInput__oK2eE:focus{border-color:var(--nice-color-accent)}.MaterialEditor-module_propertyColorPreview__1L-S5{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.MaterialEditor-module_colorSwatch__rHMga{border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm);cursor:pointer;height:24px;width:24px}.MaterialEditor-module_propertySlider__NztWp{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.MaterialEditor-module_propertySlider__NztWp input[type=range]{-webkit-appearance:none;background:var(--nice-bg-tertiary);border-radius:var(--nice-radius-sm,2px);flex:1;height:4px;outline:none}.MaterialEditor-module_propertySlider__NztWp input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--nice-color-accent);border-radius:var(--nice-radius-full,50%);cursor:pointer;height:14px;width:14px}.MaterialEditor-module_propertySlider__NztWp .MaterialEditor-module_sliderValue__HeKO-{color:var(--nice-text-secondary);font-size:11px;text-align:right;width:50px}.MaterialEditor-module_minimap__mPE-C{background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);bottom:10px;box-shadow:var(--nice-shadow-md);height:100px;overflow:hidden;position:absolute;right:10px;width:150px}.MaterialEditor-module_minimapNodes__DCW6r{height:100%;position:relative;width:100%}.MaterialEditor-module_minimapNode__EoDhh{border-radius:var(--nice-radius-sm,2px);position:absolute}.MaterialEditor-module_minimapViewport__qUyIg{border:1px solid var(--nice-color-accent)}.MaterialEditor-module_minimapViewport__qUyIg,.MaterialEditor-module_selectionBox__5-dcw{background-color:var(--nice-primary-tint-10,rgba(0,120,212,.1));pointer-events:none;position:absolute}.MaterialEditor-module_selectionBox__5-dcw{border:1px dashed var(--nice-color-accent)}.MaterialEditor-module_contextMenu__jMJ2-{background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);box-shadow:var(--nice-shadow-lg);min-width:160px;padding:var(--nice-space-1,4px) 0;position:fixed;z-index:1000}.MaterialEditor-module_contextMenuItem__NltnJ{align-items:center;cursor:pointer;display:flex;font-size:12px;justify-content:space-between;padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px);transition:background-color var(--transition-fast)}.MaterialEditor-module_contextMenuItem__NltnJ:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_contextMenuItem__NltnJ.MaterialEditor-module_disabled__NnXkq{color:var(--nice-text-muted);cursor:not-allowed}.MaterialEditor-module_contextMenuItem__NltnJ.MaterialEditor-module_disabled__NnXkq:hover{background-color:transparent}.MaterialEditor-module_contextMenuShortcut__2-fdl{color:var(--nice-text-muted);font-size:11px;margin-left:var(--nice-space-5,20px)}.MaterialEditor-module_contextMenuSeparator__yYjvC{background-color:var(--nice-border-color);height:1px;margin:var(--nice-space-1,4px) 0}.MaterialEditor-module_zoomControls__7PATW{align-items:center;background-color:var(--nice-bg-secondary);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md);bottom:10px;box-shadow:var(--nice-shadow-sm);display:flex;gap:var(--nice-space-1,4px);left:10px;padding:var(--nice-space-1,4px);position:absolute}.MaterialEditor-module_zoomControls__7PATW button{align-items:center;background-color:transparent;border:none;border-radius:var(--nice-radius-sm);color:var(--nice-text-primary);cursor:pointer;display:flex;font-size:14px;height:26px;justify-content:center;padding:0;transition:background-color var(--transition-fast);width:26px}.MaterialEditor-module_zoomControls__7PATW button:hover{background-color:var(--nice-hover-bg)}.MaterialEditor-module_zoomLevel__Rw6xW{color:var(--nice-text-secondary);font-size:11px;min-width:50px;text-align:center}.MaterialEditor-module_tooltip__lTpIH{word-wrap:break-word;background-color:var(--nice-text-primary,#333);border-radius:var(--nice-radius-sm);box-shadow:var(--nice-shadow-md);color:var(--nice-text-inverse,#fff);font-size:11px;max-width:250px;padding:var(--nice-space-1-5,6px) var(--nice-space-2-5,10px);pointer-events:none;position:fixed;white-space:pre-wrap;z-index:9999}.MaterialEditor-module_tooltip__lTpIH:before{border-color:var(--nice-border-color,#333) transparent transparent transparent;border-style:solid;border-width:5px;content:"";left:50%;position:absolute;top:100%;transform:translateX(-50%)}.MaterialEditor-module_emptyState__Kpa84{color:var(--nice-text-muted);left:50%;position:absolute;text-align:center;top:50%;transform:translate(-50%,-50%)}.MaterialEditor-module_emptyStateIcon__67zsA{font-size:48px;margin-bottom:var(--nice-space-4,16px);opacity:.5}.MaterialEditor-module_emptyStateTitle__0NQ65{color:var(--nice-text-secondary);font-size:16px;font-weight:600;margin-bottom:var(--nice-space-2,8px)}.MaterialEditor-module_emptyStateDescription__QgVz5{font-size:13px;line-height:1.5;max-width:300px}@media (max-width:900px){.MaterialEditor-module_palette__VNmnu{bottom:0;left:0;position:absolute;top:0;transform:translateX(-100%);transition:transform var(--transition-normal);z-index:100}.MaterialEditor-module_palette__VNmnu.MaterialEditor-module_open__DG5-R{transform:translateX(0)}.MaterialEditor-module_previewPanel__lqiI0{bottom:0;position:absolute;right:0;top:0;transform:translateX(100%);transition:transform var(--transition-normal);z-index:100}.MaterialEditor-module_previewPanel__lqiI0.MaterialEditor-module_open__DG5-R{transform:translateX(0)}}@media (max-width:600px){.MaterialEditor-module_toolbar__qqDbE{flex-wrap:wrap;padding:var(--nice-space-1,4px)}.MaterialEditor-module_toolbarGroup__fgE2r{flex-wrap:wrap}.MaterialEditor-module_toolbar__qqDbE button{font-size:16px;height:32px;width:32px}.MaterialEditor-module_palette__VNmnu,.MaterialEditor-module_previewPanel__lqiI0{max-width:280px;width:100%}}@keyframes MaterialEditor-module_nodeAppear__4vHEB{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.MaterialEditor-module_graphNode__pCqYA{animation:MaterialEditor-module_nodeAppear__4vHEB .2s ease}@keyframes MaterialEditor-module_connectionDraw__xvI66{0%{stroke-dashoffset:1000}to{stroke-dashoffset:0}}.MaterialEditor-module_connection__x9F9U{stroke-dasharray:1000;animation:MaterialEditor-module_connectionDraw__xvI66 .3s ease forwards}.MaterialEditor-module_materialEditor__RjU0e:focus-visible{outline:2px solid var(--nice-color-accent);outline-offset:-2px}.MaterialEditor-module_categoryHeader__8M6DH:focus-visible,.MaterialEditor-module_paletteNode__4-ncg:focus-visible,.MaterialEditor-module_toolbar__qqDbE button:focus-visible{outline:2px solid var(--nice-color-accent);outline-offset:-2px}@media (prefers-reduced-motion:reduce){.MaterialEditor-module_connection__x9F9U,.MaterialEditor-module_graphNode__pCqYA,.MaterialEditor-module_pendingConnection__NCBtj{animation:none}*,:after,:before{animation-duration:.01ms!important;transition-duration:.01ms!important}}@media print{.MaterialEditor-module_minimap__mPE-C,.MaterialEditor-module_palette__VNmnu,.MaterialEditor-module_previewPanel__lqiI0,.MaterialEditor-module_toolbar__qqDbE,.MaterialEditor-module_zoomControls__7PATW{display:none!important}.MaterialEditor-module_materialEditor__RjU0e{border:1px solid var(--nice-border,#ccc)}.MaterialEditor-module_graphCanvas__guLj7{background-color:#fff}.MaterialEditor-module_graphNode__pCqYA{border:1px solid var(--nice-border-color,#333);box-shadow:none}.MaterialEditor-module_connection__x9F9U{stroke:var(--nice-text,#333)!important}}.ParticleEditor-module_particleEditor__HiTCi{--pe-bg-primary:var(--nice-bg,#1a1a1a);--pe-bg-secondary:var(--nice-bg-secondary,#252525);--pe-bg-tertiary:var(--nice-bg-secondary,#2d2d2d);--pe-bg-hover:var(--nice-bg-secondary,#3a3a3a);--pe-bg-active:var(--nice-bg-secondary,#4a4a4a);--pe-border-color:var(--nice-border,#404040);--pe-text-primary:var(--nice-text-primary,#fff);--pe-text-secondary:var(--nice-text-muted,#b0b0b0);--pe-text-muted:#707070;--pe-accent:#4fc3f7;--pe-accent-hover:#29b6f6;--pe-success:#66bb6a;--pe-warning:var(--nice-warning,#ffa726);--pe-error:#ef5350;--pe-toolbar-height:40px;--pe-panel-width:260px;--pe-radius:4px;--pe-transition:150ms ease}.ParticleEditor-module_particleEditor__HiTCi.ParticleEditor-module_light__AiNYo{--pe-bg-primary:var(--nice-bg-secondary,#f5f5f5);--pe-bg-secondary:var(--nice-bg,#fff);--pe-bg-tertiary:var(--nice-bg-secondary,#fafafa);--pe-bg-hover:var(--nice-border,#eee);--pe-bg-active:var(--nice-border,#e0e0e0);--pe-border-color:var(--nice-border,#d0d0d0);--pe-text-primary:var(--nice-text,#212121);--pe-text-secondary:var(--nice-text-secondary,#616161);--pe-text-muted:var(--nice-text-secondary,#9e9e9e);--pe-accent:var(--nice-primary-hover,#1976d2);--pe-accent-hover:var(--nice-primary-dark,#1565c0)}.ParticleEditor-module_particleEditor__HiTCi{background-color:var(--pe-bg-primary);border-radius:var(--pe-radius);color:var(--pe-text-primary);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;overflow:hidden;user-select:none}.ParticleEditor-module_toolbar__KptWe{align-items:center;background-color:var(--pe-bg-secondary);border-bottom:1px solid var(--pe-border-color);display:flex;gap:var(--nice-space-1,4px);height:var(--pe-toolbar-height);padding:0 var(--nice-space-2,8px)}.ParticleEditor-module_toolbarGroup__-N0jI{align-items:center;display:flex;gap:var(--nice-space-0-5,2px)}.ParticleEditor-module_toolbarSeparator__kIZmD{background-color:var(--pe-border-color);height:20px;margin:0 var(--nice-space-1-5,6px);width:1px}.ParticleEditor-module_toolbar__KptWe button{align-items:center;background:transparent;border:none;border-radius:var(--pe-radius);color:var(--pe-text-secondary);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:all var(--pe-transition);width:28px}.ParticleEditor-module_toolbar__KptWe button:hover:not(:disabled){background-color:var(--pe-bg-hover);color:var(--pe-text-primary)}.ParticleEditor-module_toolbar__KptWe button:active:not(:disabled){background-color:var(--pe-bg-active)}.ParticleEditor-module_toolbar__KptWe button.ParticleEditor-module_active__81dHl{background-color:var(--pe-accent);color:#fff}.ParticleEditor-module_toolbar__KptWe button:disabled{cursor:not-allowed;opacity:.4}.ParticleEditor-module_speedSelect__vZO0v{background-color:var(--pe-bg-tertiary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);cursor:pointer;font-size:11px;height:24px;padding:0 var(--nice-space-1-5,6px)}.ParticleEditor-module_timeDisplay__tl1Qv{color:var(--pe-text-secondary);font-family:monospace;font-size:11px;min-width:50px;padding:0 var(--nice-space-2,8px);text-align:right}.ParticleEditor-module_systemList__Vaiea{background-color:var(--pe-bg-secondary);border-right:1px solid var(--pe-border-color);display:flex;flex-direction:column;min-width:var(--pe-panel-width);overflow:hidden;width:var(--pe-panel-width)}.ParticleEditor-module_systemListHeader__I9W61{align-items:center;border-bottom:1px solid var(--pe-border-color);color:var(--pe-text-secondary);display:flex;font-size:12px;font-weight:600;justify-content:space-between;letter-spacing:.5px;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px);text-transform:uppercase}.ParticleEditor-module_systemListActions__C289h{display:flex;gap:var(--nice-space-1,4px)}.ParticleEditor-module_systemListActions__C289h button{align-items:center;background:transparent;border:none;border-radius:var(--pe-radius);color:var(--pe-text-secondary);cursor:pointer;display:flex;font-size:12px;height:22px;justify-content:center;width:22px}.ParticleEditor-module_systemListActions__C289h button:hover{background-color:var(--pe-bg-hover);color:var(--pe-text-primary)}.ParticleEditor-module_presetMenu__FXV-m{background-color:var(--pe-bg-tertiary);border-bottom:1px solid var(--pe-border-color);display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px)}.ParticleEditor-module_presetItem__zt9wm{background-color:var(--pe-bg-secondary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-secondary);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-2-5,10px);transition:all var(--pe-transition)}.ParticleEditor-module_presetItem__zt9wm:hover{background-color:var(--pe-accent);border-color:var(--pe-accent);color:#fff}.ParticleEditor-module_systemItems__a4eQN{flex:1;overflow-y:auto;padding:var(--nice-space-1-5,6px)}.ParticleEditor-module_systemItem__y-cTZ{align-items:center;border-radius:var(--pe-radius);cursor:pointer;display:flex;justify-content:space-between;padding:var(--nice-space-2,8px) var(--nice-space-2-5,10px);transition:all var(--pe-transition)}.ParticleEditor-module_systemItem__y-cTZ:hover{background-color:var(--pe-bg-hover)}.ParticleEditor-module_systemItem__y-cTZ.ParticleEditor-module_selected__wzmRZ{background-color:var(--pe-accent);color:#fff}.ParticleEditor-module_systemItem__y-cTZ.ParticleEditor-module_selected__wzmRZ .ParticleEditor-module_systemItemActions__Dc1Bw button{color:var(--nice-overlay-light-70,hsla(0,0%,100%,.7))}.ParticleEditor-module_systemItem__y-cTZ.ParticleEditor-module_selected__wzmRZ .ParticleEditor-module_systemItemActions__Dc1Bw button:hover{color:#fff}.ParticleEditor-module_systemName__-EAlQ{flex:1;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ParticleEditor-module_systemItemActions__Dc1Bw{display:flex;gap:var(--nice-space-0-5,2px);opacity:0;transition:opacity var(--pe-transition)}.ParticleEditor-module_systemItem__y-cTZ:hover .ParticleEditor-module_systemItemActions__Dc1Bw{opacity:1}.ParticleEditor-module_systemItemActions__Dc1Bw button{align-items:center;background:transparent;border:none;color:var(--pe-text-muted);cursor:pointer;display:flex;font-size:11px;height:20px;justify-content:center;width:20px}.ParticleEditor-module_systemItemActions__Dc1Bw button:hover:not(:disabled){color:var(--pe-text-primary)}.ParticleEditor-module_systemItemActions__Dc1Bw button:disabled{cursor:not-allowed;opacity:.3}.ParticleEditor-module_renameInput__jUWw2{background-color:var(--pe-bg-primary);border:1px solid var(--pe-accent);border-radius:var(--pe-radius);color:var(--pe-text-primary);font-size:12px;outline:none;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px);width:100%}.ParticleEditor-module_inspector__qP8Gq{background-color:var(--pe-bg-secondary);border-left:1px solid var(--pe-border-color);display:flex;flex-direction:column;min-width:280px;overflow:hidden;width:320px}.ParticleEditor-module_inspectorHeader__l6Uxn{border-bottom:1px solid var(--pe-border-color);font-size:13px;font-weight:600;overflow:hidden;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px);text-overflow:ellipsis;white-space:nowrap}.ParticleEditor-module_inspectorModules__pTVRa{flex:1;overflow-y:auto}.ParticleEditor-module_emptyInspector__JYoth{align-items:center;color:var(--pe-text-muted);display:flex;font-style:italic;height:100%;justify-content:center}.ParticleEditor-module_moduleSection__dQhZv{border-bottom:1px solid var(--pe-border-color)}.ParticleEditor-module_moduleHeader__u-Jjw{align-items:center;cursor:pointer;display:flex;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-2,8px) var(--nice-space-3,12px);transition:background-color var(--pe-transition)}.ParticleEditor-module_moduleHeader__u-Jjw:hover{background-color:var(--pe-bg-hover)}.ParticleEditor-module_moduleHeader__u-Jjw.ParticleEditor-module_selected__wzmRZ{background-color:var(--pe-bg-tertiary)}.ParticleEditor-module_moduleIcon__iVDB-{color:var(--pe-text-muted);font-size:10px;width:12px}.ParticleEditor-module_moduleCheckbox__0B4Md{accent-color:var(--pe-accent);cursor:pointer;height:14px;margin:0;width:14px}.ParticleEditor-module_moduleName__m8AJX{flex:1;font-size:12px;font-weight:500}.ParticleEditor-module_moduleContent__pE2Ux{background-color:var(--pe-bg-tertiary);border-top:1px solid var(--pe-border-color);padding:var(--nice-space-2,8px) var(--nice-space-3,12px)}.ParticleEditor-module_moduleNotImplemented__NZDCG{color:var(--pe-text-muted);font-size:11px;font-style:italic;padding:var(--nice-space-3,12px);text-align:center}.ParticleEditor-module_propertyRow__TzuYo{align-items:center;display:flex;gap:var(--nice-space-2,8px);margin-bottom:var(--nice-space-2,8px)}.ParticleEditor-module_propertyRow__TzuYo:last-child{margin-bottom:0}.ParticleEditor-module_propertyRow__TzuYo>label{color:var(--pe-text-secondary);flex:0 0 100px;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ParticleEditor-module_numberInput__cKItO{background-color:var(--pe-bg-primary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);flex:1;font-family:monospace;font-size:11px;height:24px;min-width:50px;padding:0 var(--nice-space-1-5,6px)}.ParticleEditor-module_numberInput__cKItO:focus{border-color:var(--pe-accent);outline:none}.ParticleEditor-module_selectInput__RhZly{background-color:var(--pe-bg-primary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);cursor:pointer;flex:1;font-size:11px;height:24px;padding:0 var(--nice-space-1-5,6px)}.ParticleEditor-module_selectInput__RhZly:focus{border-color:var(--pe-accent);outline:none}.ParticleEditor-module_toggleInput__seU4y{accent-color:var(--pe-accent);cursor:pointer;height:16px;width:16px}.ParticleEditor-module_distributionInput__M5ciH{align-items:center;display:flex;flex:1;gap:var(--nice-space-1,4px)}.ParticleEditor-module_distributionType__NTuwm{background-color:var(--pe-bg-primary);border:1px solid var(--pe-border-color);border-radius:var(--pe-radius);color:var(--pe-text-primary);cursor:pointer;font-size:11px;height:24px;padding:0 var(--nice-space-1,4px);width:80px}.ParticleEditor-module_addButton__nSODD{background-color:var(--pe-accent);border:none;border-radius:var(--pe-radius);color:#fff;cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-3,12px);transition:background-color var(--pe-transition)}.ParticleEditor-module_addButton__nSODD:hover{background-color:var(--pe-accent-hover)}.ParticleEditor-module_previewPanel__sCCsm{align-items:center;background-color:var(--pe-bg-primary);display:flex;flex:1;justify-content:center;min-width:200px}.ParticleEditor-module_previewCanvas__b8PcH{background-color:var(--nice-bg,#1a1a1a);border-radius:var(--pe-radius)}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar{height:8px;width:8px}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar-track{background:var(--pe-bg-tertiary)}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar-thumb{background:var(--pe-border-color);border-radius:var(--nice-radius-sm,4px)}.ParticleEditor-module_particleEditor__HiTCi ::-webkit-scrollbar-thumb:hover{background:var(--pe-text-muted)}@media (max-width:900px){.ParticleEditor-module_systemList__Vaiea{min-width:200px;width:200px}.ParticleEditor-module_inspector__qP8Gq{min-width:220px;width:260px}.ParticleEditor-module_propertyRow__TzuYo>label{flex:0 0 80px}}@media (max-width:700px){.ParticleEditor-module_systemList__Vaiea{border-bottom:1px solid var(--pe-border-color);border-right:none;max-height:150px;min-width:unset;width:100%}.ParticleEditor-module_inspector__qP8Gq{border-left:none;border-top:1px solid var(--pe-border-color);min-width:unset;width:100%}}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import { NiceTutorialButton, resolveTutorial, NiceAppShell, resolveCssColor, NiceIcon } from '@nice2dev/ui';
2
+ import { NiceTutorialButton, resolveTutorial, NiceAppShell, resolveCssColor, clickOnActivationKey, NiceIcon } from '@nice2dev/ui';
3
3
  import { useRef, useMemo, useEffect, useReducer, useState } from 'react';
4
4
  import { useNiceTranslation } from '../core/i18n.js';
5
5
  import styles from './ParticleEditor.module.css.js';
@@ -298,7 +298,7 @@ function SystemListPanel({ systems, selectedId, onSelect, onAdd, onRemove, onDup
298
298
  return (jsxs("div", { className: styles.systemList, children: [jsxs("div", { className: styles.systemListHeader, children: [jsx("span", { children: t('particleEditor.systems', 'Systems ({systems})').replace('{systems}', String(systems.length)) }), jsxs("div", { className: styles.systemListActions, children: [jsx("button", { onClick: onAdd, title: t('particleEditor.newSystem', 'New System'), "aria-label": t('particleEditor.newSystem', 'New System'), children: jsx(NiceIcon, { name: "plus", size: 14 }) }), jsx("button", { onClick: () => setShowPresets(!showPresets), title: t('particleEditor.addPreset', 'Add Preset'), "aria-label": t('particleEditor.addPreset', 'Add Preset'), children: jsx(NiceIcon, { name: "clipboard", size: 14 }) })] })] }), showPresets && (jsx("div", { className: styles.presetMenu, children: Object.keys(PARTICLE_PRESETS).map((preset) => (jsx("button", { className: styles.presetItem, onClick: () => {
299
299
  onAddPreset(preset);
300
300
  setShowPresets(false);
301
- }, children: preset.charAt(0).toUpperCase() + preset.slice(1) }, preset))) })), jsx("div", { className: styles.systemItems, children: systems.map((system) => (jsx("div", { className: `${styles.systemItem} ${selectedId === system.id ? styles.selected : ''}`, onClick: () => onSelect(system.id), children: editingId === system.id ? (jsx("input", { type: "text", value: editName, onChange: (e) => setEditName(e.target.value), onBlur: handleFinishRename, onKeyDown: (e) => e.key === 'Enter' && handleFinishRename(), autoFocus: true, className: styles.renameInput })) : (jsxs(Fragment, { children: [jsx("span", { className: styles.systemName, onDoubleClick: () => handleStartRename(system), children: system.name }), jsxs("div", { className: styles.systemItemActions, children: [jsx("button", { onClick: (e) => {
301
+ }, children: preset.charAt(0).toUpperCase() + preset.slice(1) }, preset))) })), jsx("div", { className: styles.systemItems, children: systems.map((system) => (jsx("div", { role: "button", tabIndex: 0, onKeyDown: clickOnActivationKey, className: `${styles.systemItem} ${selectedId === system.id ? styles.selected : ''}`, onClick: () => onSelect(system.id), children: editingId === system.id ? (jsx("input", { type: "text", value: editName, onChange: (e) => setEditName(e.target.value), onBlur: handleFinishRename, onKeyDown: (e) => e.key === 'Enter' && handleFinishRename(), autoFocus: true, className: styles.renameInput })) : (jsxs(Fragment, { children: [jsx("span", { className: styles.systemName, onDoubleClick: () => handleStartRename(system), children: system.name }), jsxs("div", { className: styles.systemItemActions, children: [jsx("button", { onClick: (e) => {
302
302
  e.stopPropagation();
303
303
  onDuplicate(system.id);
304
304
  }, title: t('particleEditor.duplicate', 'Duplicate'), "aria-label": t('particleEditor.duplicate', 'Duplicate'), children: jsx(NiceIcon, { name: "clipboard", size: 14 }) }), jsx("button", { onClick: (e) => {
@@ -348,7 +348,7 @@ function InspectorPanel({ system, expandedModules, selectedModule, onToggleModul
348
348
  const current = system[key];
349
349
  onUpdateSystem({ [key]: { ...current, enabled } });
350
350
  };
351
- return (jsxs("div", { className: styles.inspector, children: [jsx("div", { className: styles.inspectorHeader, children: jsx("span", { children: system.name }) }), jsx("div", { className: styles.inspectorModules, children: modules.map((mod) => (jsxs("div", { className: styles.moduleSection, children: [jsxs("div", { className: `${styles.moduleHeader} ${selectedModule === mod.key ? styles.selected : ''}`, onClick: () => onToggleModule(mod.key), children: [jsx("span", { className: styles.moduleIcon, children: jsx(NiceIcon, { name: expandedModules.includes(mod.key) ? 'chevron-down' : 'chevron-right', size: 14 }) }), mod.hasEnabled && (jsx("input", { type: "checkbox", checked: mod.enabled, onChange: (e) => {
351
+ return (jsxs("div", { className: styles.inspector, children: [jsx("div", { className: styles.inspectorHeader, children: jsx("span", { children: system.name }) }), jsx("div", { className: styles.inspectorModules, children: modules.map((mod) => (jsxs("div", { className: styles.moduleSection, children: [jsxs("div", { role: "button", tabIndex: 0, "aria-expanded": expandedModules.includes(mod.key), onKeyDown: clickOnActivationKey, className: `${styles.moduleHeader} ${selectedModule === mod.key ? styles.selected : ''}`, onClick: () => onToggleModule(mod.key), children: [jsx("span", { className: styles.moduleIcon, children: jsx(NiceIcon, { name: expandedModules.includes(mod.key) ? 'chevron-down' : 'chevron-right', size: 14 }) }), mod.hasEnabled && (jsx("input", { type: "checkbox", checked: mod.enabled, onChange: (e) => {
352
352
  e.stopPropagation();
353
353
  handleModuleToggle(mod.key, e.target.checked);
354
354
  }, className: styles.moduleCheckbox })), jsx("span", { className: styles.moduleName, children: MODULE_NAMES[mod.key] || mod.key })] }), expandedModules.includes(mod.key) && (jsx("div", { className: styles.moduleContent, children: jsx(ModuleEditor, { system: system, moduleKey: mod.key, onUpdate: onUpdateSystem }) }))] }, mod.key))) })] }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice2dev/ui-3d",
3
- "version": "1.2.2",
3
+ "version": "1.3.0",
4
4
  "description": "Nice2Dev 3D Editor — Blender-style 3D model editor component for React, powered by Three.js",
5
5
  "author": "NiceToDev <contact@nicetodev.com>",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -59,13 +59,13 @@
59
59
  "nicetodev"
60
60
  ],
61
61
  "peerDependencies": {
62
- "@nice2dev/ui": "^1.2.0",
62
+ "@nice2dev/ui": "^1.3.0",
63
63
  "react": ">=17.0.0",
64
64
  "react-dom": ">=17.0.0",
65
65
  "three": ">=0.150.0"
66
66
  },
67
67
  "devDependencies": {
68
- "@nice2dev/ui": "^1.2.2",
68
+ "@nice2dev/ui": "^1.3.0",
69
69
  "@rollup/plugin-commonjs": "^29.0.3",
70
70
  "@rollup/plugin-node-resolve": "^16.0.3",
71
71
  "@rollup/plugin-typescript": "^12.3.0",