@nice2dev/ui-3d 1.1.10 → 1.2.1

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.
Files changed (86) hide show
  1. package/CHANGELOG.md +173 -0
  2. package/README.md +11 -15
  3. package/dist/cjs/core/editorAsk.js +48 -0
  4. package/dist/cjs/core/i18n.js +7 -3
  5. package/dist/cjs/core/threeCompat.js +52 -0
  6. package/dist/cjs/dance/DanceScoreEngine.js +7 -0
  7. package/dist/cjs/dance/PoseDetector.js +116 -64
  8. package/dist/cjs/index.js +0 -3
  9. package/dist/cjs/material/NiceMaterialEditor.js +7 -3
  10. package/dist/cjs/material/materialEditorTypes.js +1 -1
  11. package/dist/cjs/material/materialNodeDefinitions.js +14 -11
  12. package/dist/cjs/model/ModelEditor.js +3 -5
  13. package/dist/cjs/model/ModelEditorLeftPanel.js +10 -4
  14. package/dist/cjs/model/ModelEditorMenuBar.js +7 -5
  15. package/dist/cjs/model/ModelEditorRightPanel.js +18 -16
  16. package/dist/cjs/model/ModelEditorSubComponents.js +8 -6
  17. package/dist/cjs/model/ModelEditorTimeline.js +6 -4
  18. package/dist/cjs/model/ModelEditorToolbar.js +6 -4
  19. package/dist/cjs/model/ModelEditorViewport.js +16 -6
  20. package/dist/cjs/model/ModelViewer.js +6 -7
  21. package/dist/cjs/model/NiceArmatureEditor.js +8 -6
  22. package/dist/cjs/model/NiceMorphTargetEditor.js +5 -3
  23. package/dist/cjs/model/NiceOctree.js +3 -1
  24. package/dist/cjs/model/NicePhysicsSimulation.js +7 -5
  25. package/dist/cjs/model/NiceProceduralGeometry.js +5 -3
  26. package/dist/cjs/model/NiceTerrainEditor.js +10 -8
  27. package/dist/cjs/model/NiceWeightPainter.js +6 -4
  28. package/dist/cjs/model/NiceXRPreview.js +7 -5
  29. package/dist/cjs/model/useModelEditor.js +30 -18
  30. package/dist/cjs/model/useModelViewer.js +13 -9
  31. package/dist/cjs/nice2dev-ui-3d.css +1 -1
  32. package/dist/cjs/particle/NiceParticleEditor.js +14 -9
  33. package/dist/cjs/rendering/NiceCascadedShadows.js +3 -1
  34. package/dist/cjs/rendering/NiceRenderExport.js +11 -5
  35. package/dist/cjs/rendering/NiceSSAO.js +3 -1
  36. package/dist/cjs/rendering/NiceSSR.js +3 -1
  37. package/dist/cjs/rendering/NiceWebGPURenderer.js +7 -4
  38. package/dist/cjs/uv/NiceUVEditor.js +16 -12
  39. package/dist/cjs/uv/uvEditorTypes.js +1 -0
  40. package/dist/esm/core/editorAsk.js +45 -0
  41. package/dist/esm/core/i18n.js +8 -4
  42. package/dist/esm/core/threeCompat.js +30 -0
  43. package/dist/esm/dance/DanceScoreEngine.js +7 -0
  44. package/dist/esm/dance/PoseDetector.js +118 -65
  45. package/dist/esm/index.js +3 -3
  46. package/dist/esm/material/NiceMaterialEditor.js +7 -3
  47. package/dist/esm/material/materialEditorTypes.js +1 -1
  48. package/dist/esm/material/materialNodeDefinitions.js +14 -11
  49. package/dist/esm/model/ModelEditor.js +4 -5
  50. package/dist/esm/model/ModelEditorLeftPanel.js +10 -4
  51. package/dist/esm/model/ModelEditorMenuBar.js +7 -5
  52. package/dist/esm/model/ModelEditorRightPanel.js +18 -16
  53. package/dist/esm/model/ModelEditorSubComponents.js +8 -6
  54. package/dist/esm/model/ModelEditorTimeline.js +6 -4
  55. package/dist/esm/model/ModelEditorToolbar.js +6 -4
  56. package/dist/esm/model/ModelEditorViewport.js +16 -6
  57. package/dist/esm/model/ModelViewer.js +7 -7
  58. package/dist/esm/model/NiceArmatureEditor.js +9 -7
  59. package/dist/esm/model/NiceMorphTargetEditor.js +5 -3
  60. package/dist/esm/model/NiceOctree.js +3 -1
  61. package/dist/esm/model/NicePhysicsSimulation.js +7 -5
  62. package/dist/esm/model/NiceProceduralGeometry.js +5 -3
  63. package/dist/esm/model/NiceTerrainEditor.js +10 -8
  64. package/dist/esm/model/NiceWeightPainter.js +6 -4
  65. package/dist/esm/model/NiceXRPreview.js +7 -5
  66. package/dist/esm/model/useModelEditor.js +30 -18
  67. package/dist/esm/model/useModelViewer.js +13 -9
  68. package/dist/esm/nice2dev-ui-3d.css +1 -1
  69. package/dist/esm/particle/NiceParticleEditor.js +14 -9
  70. package/dist/esm/rendering/NiceCascadedShadows.js +3 -1
  71. package/dist/esm/rendering/NiceRenderExport.js +11 -5
  72. package/dist/esm/rendering/NiceSSAO.js +3 -1
  73. package/dist/esm/rendering/NiceSSR.js +3 -1
  74. package/dist/esm/rendering/NiceWebGPURenderer.js +7 -4
  75. package/dist/esm/uv/NiceUVEditor.js +16 -12
  76. package/dist/esm/uv/uvEditorTypes.js +1 -0
  77. package/dist/types/core/editorAsk.d.ts +26 -0
  78. package/dist/types/core/i18n.d.ts +1 -17
  79. package/dist/types/core/threeCompat.d.ts +14 -0
  80. package/dist/types/dance/DanceScoreEngine.d.ts +0 -6
  81. package/dist/types/dance/PoseDetector.d.ts +14 -13
  82. package/dist/types/index.d.ts +4 -4
  83. package/dist/types/model/ModelEditor.d.ts +0 -4
  84. package/dist/types/model/ModelViewer.d.ts +0 -4
  85. package/dist/types/model/useModelEditor.d.ts +3 -0
  86. package/package.json +3 -3
@@ -2,6 +2,7 @@ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { NiceIcon } from '@nice2dev/ui';
3
3
  import { useEffect, useState, useRef, useCallback } from 'react';
4
4
  import * as THREE from 'three';
5
+ import { useNiceTranslation } from '../core/i18n.js';
5
6
 
6
7
  /* ── Hook ── */
7
8
  function useXRPreview(renderer, scene, camera, onSessionStart, onSessionEnd) {
@@ -259,19 +260,20 @@ function useXRPreview(renderer, scene, camera, onSessionStart, onSessionEnd) {
259
260
  }
260
261
  /* ── Component ── */
261
262
  const NiceXRPreview = ({ renderer, scene, camera, mode: initialMode, onSessionStart, onSessionEnd, className = '', }) => {
263
+ const { t } = useNiceTranslation();
262
264
  const { isSupported, isSessionActive, mode, setMode, startSession, endSession, controllers, teleportEnabled, setTeleportEnabled, hitTestResult, } = useXRPreview(renderer, scene, camera, onSessionStart, onSessionEnd);
263
265
  useEffect(() => {
264
266
  if (initialMode) {
265
267
  setMode(initialMode);
266
268
  }
267
269
  }, [initialMode, setMode]);
268
- return (jsxs("div", { className: `nice-xr-preview ${className}`, style: { display: 'grid', gap: 8, fontSize: 13 }, children: [jsxs("strong", { children: [jsx(NiceIcon, { name: "eye", size: 14 }), " XR Preview"] }), !isSupported && (jsx("div", { style: { color: 'var(--nice-danger, #ef4444)', fontSize: 11 }, children: "WebXR is not supported in this browser." })), isSupported && (jsxs(Fragment, { children: [jsxs("div", { style: { display: 'flex', gap: 4 }, children: [jsxs("button", { type: "button", onClick: () => setMode('vr'), style: {
270
+ return (jsxs("div", { className: `nice-xr-preview ${className}`, style: { display: 'grid', gap: 8, fontSize: 13 }, children: [jsxs("strong", { children: [jsx(NiceIcon, { name: "eye", size: 14 }), " ", t('xrPreview.xrPreview', 'XR Preview')] }), !isSupported && (jsx("div", { style: { color: 'var(--nice-danger, #ef4444)', fontSize: 11 }, children: t('xrPreview.webxrIsNotSupportedIn', 'WebXR is not supported in this browser.') })), isSupported && (jsxs(Fragment, { children: [jsxs("div", { style: { display: 'flex', gap: 4 }, children: [jsxs("button", { type: "button", onClick: () => setMode('vr'), style: {
269
271
  flex: 1,
270
272
  padding: '5px 8px',
271
273
  borderRadius: 4,
272
274
  cursor: 'pointer',
273
275
  background: mode === 'vr' ? 'var(--nice-color-accent, #6366f1)' : 'transparent',
274
- color: mode === 'vr' ? 'var(--nice-text-on-primary, #fff)' : 'inherit',
276
+ color: mode === 'vr' ? 'var(--nice-color-white, #fff)' : 'inherit',
275
277
  border: '1px solid var(--nice-border, #e2e8f0)',
276
278
  }, children: [jsx(NiceIcon, { name: "eye", size: 14 }), " VR"] }), jsxs("button", { type: "button", onClick: () => setMode('ar'), style: {
277
279
  flex: 1,
@@ -279,18 +281,18 @@ const NiceXRPreview = ({ renderer, scene, camera, mode: initialMode, onSessionSt
279
281
  borderRadius: 4,
280
282
  cursor: 'pointer',
281
283
  background: mode === 'ar' ? 'var(--nice-color-accent, #6366f1)' : 'transparent',
282
- color: mode === 'ar' ? 'var(--nice-text-on-primary, #fff)' : 'inherit',
284
+ color: mode === 'ar' ? 'var(--nice-color-white, #fff)' : 'inherit',
283
285
  border: '1px solid var(--nice-border, #e2e8f0)',
284
286
  }, children: [jsx(NiceIcon, { name: "window", size: 14 }), " AR"] })] }), jsx("button", { type: "button", onClick: isSessionActive ? endSession : startSession, style: {
285
287
  background: isSessionActive
286
288
  ? 'var(--nice-danger, #ef4444)'
287
289
  : 'var(--nice-success, #22c55e)',
288
- color: 'var(--nice-text-on-primary, #fff)',
290
+ color: 'var(--nice-color-white, #fff)',
289
291
  border: 'none',
290
292
  borderRadius: 4,
291
293
  padding: '6px 12px',
292
294
  cursor: 'pointer',
293
- }, children: isSessionActive ? (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "stop", size: 14 }), " Exit XR"] })) : (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "play", size: 14 }), " Enter XR"] })) }), mode === 'vr' && (jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: 6 }, children: [jsx("input", { type: "checkbox", checked: teleportEnabled, onChange: (e) => setTeleportEnabled(e.target.checked) }), "Teleportation"] })), isSessionActive && (jsxs("div", { style: { fontSize: 11, opacity: 0.7 }, children: ["Controllers: ", controllers.length, jsx("br", {}), mode === 'ar' && hitTestResult && (jsxs(Fragment, { children: ["Hit: (", hitTestResult.x.toFixed(2), ", ", hitTestResult.y.toFixed(2), ",", ' ', hitTestResult.z.toFixed(2), ")"] }))] }))] }))] }));
295
+ }, children: isSessionActive ? (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "stop", size: 14 }), " ", t('xrPreview.exitXr', 'Exit XR')] })) : (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "play", size: 14 }), " ", t('xrPreview.enterXr', 'Enter XR')] })) }), mode === 'vr' && (jsxs("label", { style: { display: 'flex', alignItems: 'center', gap: 6 }, children: [jsx("input", { type: "checkbox", checked: teleportEnabled, onChange: (e) => setTeleportEnabled(e.target.checked) }), t('xrPreview.teleportation', 'Teleportation')] })), isSessionActive && (jsxs("div", { style: { fontSize: 11, opacity: 0.7 }, children: ["Controllers: ", controllers.length, jsx("br", {}), mode === 'ar' && hitTestResult && (jsxs(Fragment, { children: ["Hit: (", hitTestResult.x.toFixed(2), ", ", hitTestResult.y.toFixed(2), ",", ' ', hitTestResult.z.toFixed(2), ")"] }))] }))] }))] }));
294
296
  };
295
297
 
296
298
  export { NiceXRPreview, useXRPreview };
@@ -21,6 +21,8 @@ import { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';
21
21
  import { SVGLoader } from 'three/examples/jsm/loaders/SVGLoader.js';
22
22
  import { TDSLoader } from 'three/examples/jsm/loaders/TDSLoader.js';
23
23
  import { VTKLoader } from 'three/examples/jsm/loaders/VTKLoader.js';
24
+ import { useEditorAsk } from '../core/editorAsk.js';
25
+ import { createFrameClock, SOFT_SHADOW_MAP } from '../core/threeCompat.js';
24
26
  import { SUPPORTED_EXTENSIONS, pose3dToClip } from './modelEditorTypes.js';
25
27
  import { UndoRedoStack, createMaterialFromPreset, generateLOD, convertToInstanced, applyHDRIPreset, snapMulti, HDRI_PRESETS, PBR_PRESETS } from './modelEditorUtils.js';
26
28
 
@@ -31,7 +33,7 @@ import { UndoRedoStack, createMaterialFromPreset, generateLOD, convertToInstance
31
33
  *
32
34
  * Extracted from the original ModelEditor.tsx god-component.
33
35
  */
34
- const log = { error: console.error, warn: console.warn, info: console.info };
36
+ const log = { error: console.error, warn: console.warn };
35
37
  /* helpers */
36
38
  let _nid = 0;
37
39
  const nid = () => `n${++_nid}`;
@@ -52,6 +54,8 @@ function findNodeById(nodes, id) {
52
54
  Hook
53
55
  ═══════════════════════════════════════════ */
54
56
  function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
57
+ var _a;
58
+ const { pendingAsk, ask } = useEditorAsk();
55
59
  /* ── refs ── */
56
60
  const mountRef = useRef(null);
57
61
  const rendererRef = useRef(null);
@@ -59,7 +63,9 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
59
63
  const cameraRef = useRef(new THREE.PerspectiveCamera(50, 1, 0.01, 10000));
60
64
  const orbitRef = useRef(null);
61
65
  const transformRef = useRef(null);
62
- const clockRef = useRef(new THREE.Clock());
66
+ // Created once: useRef's argument runs on every render, and three r183 warns per Clock.
67
+ const clockRef = useRef(null);
68
+ (_a = clockRef.current) !== null && _a !== void 0 ? _a : (clockRef.current = createFrameClock());
63
69
  const mixerRef = useRef(null);
64
70
  const rafRef = useRef(0);
65
71
  const fileInputRef = useRef(null);
@@ -139,7 +145,7 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
139
145
  const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: false });
140
146
  renderer.setPixelRatio(window.devicePixelRatio);
141
147
  renderer.shadowMap.enabled = true;
142
- renderer.shadowMap.type = THREE.PCFSoftShadowMap;
148
+ renderer.shadowMap.type = SOFT_SHADOW_MAP;
143
149
  renderer.toneMapping = THREE.ACESFilmicToneMapping;
144
150
  renderer.toneMappingExposure = 1.2;
145
151
  renderer.outputColorSpace = THREE.SRGBColorSpace;
@@ -200,10 +206,9 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
200
206
  // goes into the scene is its helper.
201
207
  const tcHelper = tc.getHelper();
202
208
  tcHelper.name = '__transformControls';
203
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
204
- tc.addEventListener('dragging-changed', ((e) => {
209
+ tc.addEventListener('dragging-changed', (e) => {
205
210
  orbit.enabled = !e.value;
206
- }));
211
+ });
207
212
  scene.add(tcHelper);
208
213
  transformRef.current = tc;
209
214
  // Resize handler
@@ -222,8 +227,9 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
222
227
  onResize();
223
228
  // Animation loop
224
229
  const animate = () => {
230
+ var _a, _b;
225
231
  rafRef.current = requestAnimationFrame(animate);
226
- const dt = clockRef.current.getDelta();
232
+ const dt = (_b = (_a = clockRef.current) === null || _a === void 0 ? void 0 : _a.getDelta()) !== null && _b !== void 0 ? _b : 0;
227
233
  orbit.update();
228
234
  // Update mixer
229
235
  if (mixerRef.current && isPlayingRef.current) {
@@ -1221,11 +1227,8 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
1221
1227
  }
1222
1228
  });
1223
1229
  }, []);
1224
- const clearScene = useCallback(() => {
1230
+ const clearSceneNow = useCallback(() => {
1225
1231
  var _a;
1226
- if (!window.confirm('Clear the entire scene? This cannot be undone.')) {
1227
- return;
1228
- }
1229
1232
  const scene = sceneRef.current;
1230
1233
  const toRemove = [];
1231
1234
  scene.traverse((obj) => {
@@ -1257,6 +1260,14 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
1257
1260
  rebuildTree();
1258
1261
  setStatusText('Scene cleared');
1259
1262
  }, [rebuildTree, disposeObject]);
1263
+ // asks first: clearing cannot be undone
1264
+ const clearScene = useCallback(() => {
1265
+ void ask('confirm', 'Clear the entire scene? This cannot be undone.').then((answer) => {
1266
+ if (answer !== null) {
1267
+ clearSceneNow();
1268
+ }
1269
+ });
1270
+ }, [ask, clearSceneNow]);
1260
1271
  /* ─────────────────────────────────────────
1261
1272
  Save to Library
1262
1273
  ───────────────────────────────────────── */
@@ -1274,19 +1285,19 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
1274
1285
  const blob = new Blob([result], { type: 'model/gltf-binary' });
1275
1286
  const reader = new FileReader();
1276
1287
  reader.onload = () => {
1277
- const defaultName = 'model.glb';
1278
- const name = window.prompt('Save to library as:', defaultName);
1279
- if (!name || !name.trim()) {
1280
- return;
1281
- }
1282
- onSaveToLibrary(reader.result, name.trim(), 'model/gltf-binary');
1288
+ const dataUrl = reader.result;
1289
+ void ask('prompt', 'Save to library as:', 'model.glb').then((name) => {
1290
+ if (name && name.trim()) {
1291
+ onSaveToLibrary(dataUrl, name.trim(), 'model/gltf-binary');
1292
+ }
1293
+ });
1283
1294
  };
1284
1295
  reader.readAsDataURL(blob);
1285
1296
  }, (err) => {
1286
1297
  log.error('Save to library error:', err);
1287
1298
  setStatusText(`Save error: ${String(err)}`);
1288
1299
  }, { binary: true, animations: allClipsRef.current.map((a) => a.clip) });
1289
- }, [onSaveToLibrary]);
1300
+ }, [onSaveToLibrary, ask]);
1290
1301
  /* ─────────────────────────────────────────
1291
1302
  Add Mesh / Light / Camera / Empty
1292
1303
  ───────────────────────────────────────── */
@@ -1782,6 +1793,7 @@ function useModelEditor({ onSaveToLibrary, onAIPoseVideo, }) {
1782
1793
  bgColor,
1783
1794
  setBgColor,
1784
1795
  statusText,
1796
+ pendingAsk,
1785
1797
  dragOver,
1786
1798
  polyCount,
1787
1799
  meshCount,
@@ -8,6 +8,7 @@ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
8
8
  import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
9
9
  import { PLYLoader } from 'three/examples/jsm/loaders/PLYLoader.js';
10
10
  import { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';
11
+ import { createFrameClock, SOFT_SHADOW_MAP } from '../core/threeCompat.js';
11
12
 
12
13
  /**
13
14
  * useModelViewer — lightweight hook for the view-only 3D model viewer.
@@ -39,6 +40,7 @@ const TONE_MAP = {
39
40
  Hook
40
41
  ═══════════════════════════════════════════ */
41
42
  function useModelViewer(props = {}) {
43
+ var _a;
42
44
  const { src, format, navigationMode: initNavMode = 'orbit', quality = 'high', autoRotateSpeed: initAutoRotate = 0, backgroundColor = 'var(--nice-bg, #1a1a2e)', showGrid: initShowGrid = true, shadows = true, gamepad = false, cameraPresets: _cameraPresets = [], annotations: _annotations = [], hotspots: _hotspots = [], floorPlans: _floorPlans = [], onHotspotClick: _onHotspotClick, onAnnotationClick: _onAnnotationClick, onLoadProgress, onLoad, onError, clippingPlanes = [], measureMode: initMeasureMode = false, measurements: _measurements = [], onMeasure: _onMeasure, minDistance = 0.1, maxDistance = 1000, fov = 50, vr: _vr = false, walkSpeed = 5, ambientIntensity = 0.5, directionalIntensity = 0.8, antiAlias = true, toneMapping = 'aces', exposure = 1, } = props;
43
45
  /* ── refs ── */
44
46
  const mountRef = useRef(null);
@@ -46,7 +48,9 @@ function useModelViewer(props = {}) {
46
48
  const sceneRef = useRef(new THREE.Scene());
47
49
  const cameraRef = useRef(new THREE.PerspectiveCamera(fov, 1, 0.01, 10000));
48
50
  const orbitRef = useRef(null);
49
- const clockRef = useRef(new THREE.Clock());
51
+ // Created once: useRef's argument runs on every render, and three r183 warns per Clock.
52
+ const clockRef = useRef(null);
53
+ (_a = clockRef.current) !== null && _a !== void 0 ? _a : (clockRef.current = createFrameClock());
50
54
  const mixerRef = useRef(null);
51
55
  const rafRef = useRef(0);
52
56
  const rootRef = useRef(null);
@@ -102,7 +106,7 @@ function useModelViewer(props = {}) {
102
106
  renderer.outputColorSpace = THREE.SRGBColorSpace;
103
107
  if (shadows) {
104
108
  renderer.shadowMap.enabled = true;
105
- renderer.shadowMap.type = THREE.PCFSoftShadowMap;
109
+ renderer.shadowMap.type = SOFT_SHADOW_MAP;
106
110
  }
107
111
  mount.appendChild(renderer.domElement);
108
112
  rendererRef.current = renderer;
@@ -156,20 +160,20 @@ function useModelViewer(props = {}) {
156
160
  ro.observe(mount);
157
161
  // Animation loop
158
162
  const animate = () => {
159
- var _a, _b, _c, _d, _e;
163
+ var _a, _b, _c, _d, _e, _f, _g;
160
164
  if (disposeRef.current) {
161
165
  return;
162
166
  }
163
167
  rafRef.current = requestAnimationFrame(animate);
164
- const dt = clockRef.current.getDelta();
168
+ const dt = (_b = (_a = clockRef.current) === null || _a === void 0 ? void 0 : _a.getDelta()) !== null && _b !== void 0 ? _b : 0;
165
169
  // Gamepad FPS-style nav
166
170
  if (gamepad && navMode === 'fps') {
167
- const pads = (_a = navigator.getGamepads) === null || _a === void 0 ? void 0 : _a.call(navigator);
168
- const gp = (_b = pads === null || pads === void 0 ? void 0 : pads[0]) !== null && _b !== void 0 ? _b : null;
171
+ const pads = (_c = navigator.getGamepads) === null || _c === void 0 ? void 0 : _c.call(navigator);
172
+ const gp = (_d = pads === null || pads === void 0 ? void 0 : pads[0]) !== null && _d !== void 0 ? _d : null;
169
173
  if (gp) {
170
- const lx = (_c = gp.axes[0]) !== null && _c !== void 0 ? _c : 0;
171
- const ly = (_d = gp.axes[1]) !== null && _d !== void 0 ? _d : 0;
172
- const rx = (_e = gp.axes[2]) !== null && _e !== void 0 ? _e : 0;
174
+ const lx = (_e = gp.axes[0]) !== null && _e !== void 0 ? _e : 0;
175
+ const ly = (_f = gp.axes[1]) !== null && _f !== void 0 ? _f : 0;
176
+ const rx = (_g = gp.axes[2]) !== null && _g !== void 0 ? _g : 0;
173
177
  const fwd = new THREE.Vector3();
174
178
  camera.getWorldDirection(fwd);
175
179
  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:rgba(85,119,255,.85);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:#57f}.ModelViewer-module_dropZone__eNrPo{align-items:center;background:rgba(85,119,255,.15);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 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%}}