@nice2dev/ui-graphics 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 (113) hide show
  1. package/CHANGELOG.md +173 -0
  2. package/README.md +60 -63
  3. package/dist/cjs/animation/AnimationEditor.js +0 -3
  4. package/dist/cjs/animation/Audience.js +3 -1
  5. package/dist/cjs/animation/BodyRenderer.js +1 -4
  6. package/dist/cjs/animation/rig/RigPlayer.js +1 -1
  7. package/dist/cjs/animation/rig/presets.js +67 -55
  8. package/dist/cjs/animation/shapes/heads.js +0 -3
  9. package/dist/cjs/animation/shapes/headwear.js +4 -1
  10. package/dist/cjs/core/NiceBrushEngine.js +6 -6
  11. package/dist/cjs/core/editorAsk.js +48 -0
  12. package/dist/cjs/core/i18n.js +7 -3
  13. package/dist/cjs/core/plugins.js +1 -1
  14. package/dist/cjs/core/rtl.js +1 -1
  15. package/dist/cjs/core/theme.js +1 -1
  16. package/dist/cjs/font/NiceFontEditor.js +16 -14
  17. package/dist/cjs/game/GameAsset2dEditor.js +28 -19
  18. package/dist/cjs/index.js +0 -11
  19. package/dist/cjs/nice2dev-ui-graphics.css +1 -1
  20. package/dist/cjs/photo/FilterThumb.js +3 -3
  21. package/dist/cjs/photo/NiceAITools.js +7 -5
  22. package/dist/cjs/photo/PhotoEditor.js +3 -1
  23. package/dist/cjs/photo/PhotoEditorCanvas.js +8 -6
  24. package/dist/cjs/photo/PhotoEditorLeftPanel.js +19 -19
  25. package/dist/cjs/photo/PhotoEditorToolbar.js +5 -5
  26. package/dist/cjs/photo/photoFilters.js +1 -0
  27. package/dist/cjs/pixel/PixelEditor.js +6 -6
  28. package/dist/cjs/pixel/PixelEditor.module.css.js +1 -1
  29. package/dist/cjs/pixel/PixelEditorCanvas.js +10 -6
  30. package/dist/cjs/pixel/PixelEditorMenuBar.js +3 -3
  31. package/dist/cjs/pixel/PixelEditorRightPanel.js +28 -24
  32. package/dist/cjs/pixel/PixelEditorStatusBar.js +8 -4
  33. package/dist/cjs/pixel/PixelEditorTimeline.js +11 -2
  34. package/dist/cjs/pixel/PixelEditorToolbar.js +10 -6
  35. package/dist/cjs/pixel/SpriteGeneratorPanel.js +12 -8
  36. package/dist/cjs/pixel/animalGeneratorPresets.js +31 -31
  37. package/dist/cjs/pixel/buildingGeneratorPresets.js +24 -24
  38. package/dist/cjs/pixel/characterGeneratorPresets.js +25 -25
  39. package/dist/cjs/pixel/usePixelEditor.js +13 -10
  40. package/dist/cjs/texture/Nice3DTexturePainter.js +12 -10
  41. package/dist/cjs/ui/NiceUIDesigner.js +18 -14
  42. package/dist/cjs/vector/NiceSvgToCode.js +6 -4
  43. package/dist/cjs/vector/VectorEditor.js +3 -5
  44. package/dist/cjs/vector/VectorEditorShapeRenderer.js +3 -1
  45. package/dist/cjs/vector/useVectorEditor.js +38 -29
  46. package/dist/cjs/vector/vectorEditorImport.js +1 -0
  47. package/dist/cjs/vector/vectorIconImport.js +1 -0
  48. package/dist/esm/animation/AnimationEditor.js +1 -3
  49. package/dist/esm/animation/Audience.js +3 -1
  50. package/dist/esm/animation/BodyRenderer.js +3 -5
  51. package/dist/esm/animation/rig/RigPlayer.js +1 -1
  52. package/dist/esm/animation/rig/presets.js +68 -56
  53. package/dist/esm/animation/shapes/heads.js +1 -3
  54. package/dist/esm/animation/shapes/headwear.js +4 -1
  55. package/dist/esm/animation/spineExport.js +1 -1
  56. package/dist/esm/core/NiceBrushEngine.js +6 -6
  57. package/dist/esm/core/editorAsk.js +45 -0
  58. package/dist/esm/core/i18n.js +8 -4
  59. package/dist/esm/core/plugins.js +1 -1
  60. package/dist/esm/core/rtl.js +1 -1
  61. package/dist/esm/core/theme.js +1 -1
  62. package/dist/esm/font/NiceFontEditor.js +16 -14
  63. package/dist/esm/game/GameAsset2dEditor.js +29 -19
  64. package/dist/esm/index.js +10 -10
  65. package/dist/esm/nice2dev-ui-graphics.css +1 -1
  66. package/dist/esm/photo/FilterThumb.js +3 -3
  67. package/dist/esm/photo/NiceAITools.js +7 -5
  68. package/dist/esm/photo/PhotoEditor.js +3 -1
  69. package/dist/esm/photo/PhotoEditorCanvas.js +8 -6
  70. package/dist/esm/photo/PhotoEditorLeftPanel.js +19 -19
  71. package/dist/esm/photo/PhotoEditorToolbar.js +5 -5
  72. package/dist/esm/photo/photoFilters.js +1 -0
  73. package/dist/esm/pixel/PixelEditor.js +7 -6
  74. package/dist/esm/pixel/PixelEditor.module.css.js +1 -1
  75. package/dist/esm/pixel/PixelEditorCanvas.js +10 -6
  76. package/dist/esm/pixel/PixelEditorMenuBar.js +3 -3
  77. package/dist/esm/pixel/PixelEditorRightPanel.js +28 -24
  78. package/dist/esm/pixel/PixelEditorStatusBar.js +8 -4
  79. package/dist/esm/pixel/PixelEditorTimeline.js +11 -2
  80. package/dist/esm/pixel/PixelEditorToolbar.js +10 -6
  81. package/dist/esm/pixel/SpriteGeneratorPanel.js +12 -8
  82. package/dist/esm/pixel/animalGeneratorPresets.js +32 -32
  83. package/dist/esm/pixel/buildingGeneratorPresets.js +25 -25
  84. package/dist/esm/pixel/characterGeneratorPresets.js +26 -26
  85. package/dist/esm/pixel/usePixelEditor.js +13 -10
  86. package/dist/esm/texture/Nice3DTexturePainter.js +12 -10
  87. package/dist/esm/ui/NiceUIDesigner.js +18 -14
  88. package/dist/esm/vector/NiceSvgToCode.js +6 -4
  89. package/dist/esm/vector/VectorEditor.js +4 -5
  90. package/dist/esm/vector/VectorEditorShapeRenderer.js +3 -1
  91. package/dist/esm/vector/useVectorEditor.js +38 -29
  92. package/dist/esm/vector/vectorEditorImport.js +1 -0
  93. package/dist/esm/vector/vectorIconImport.js +1 -0
  94. package/dist/types/animation/AnimatedPerson.d.ts +0 -4
  95. package/dist/types/animation/AnimationEditor.d.ts +1 -5
  96. package/dist/types/animation/Audience.d.ts +0 -4
  97. package/dist/types/animation/BodyRenderer.d.ts +0 -4
  98. package/dist/types/animation/rig/RigPlayer.d.ts +0 -7
  99. package/dist/types/animation/rig/RiggedBody.d.ts +0 -4
  100. package/dist/types/animation/shapes/heads.d.ts +0 -4
  101. package/dist/types/core/LocalUI.d.ts +1 -2
  102. package/dist/types/core/editorAsk.d.ts +26 -0
  103. package/dist/types/core/i18n.d.ts +1 -17
  104. package/dist/types/game/GameAsset2dEditor.d.ts +0 -4
  105. package/dist/types/game/index.d.ts +1 -1
  106. package/dist/types/index.d.ts +9 -19
  107. package/dist/types/photo/index.d.ts +0 -2
  108. package/dist/types/pixel/PixelEditor.d.ts +0 -4
  109. package/dist/types/pixel/SpriteGeneratorPanel.d.ts +0 -4
  110. package/dist/types/pixel/usePixelEditor.d.ts +3 -0
  111. package/dist/types/vector/VectorEditor.d.ts +0 -4
  112. package/dist/types/vector/useVectorEditor.d.ts +2 -0
  113. package/package.json +5 -5
@@ -1 +1 @@
1
- .PixelEditor-module_root__3gidG{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}.PixelEditor-module_menuBar__8JFld{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)}.PixelEditor-module_menuBtn__w-GQC{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)}.PixelEditor-module_menuBtn__w-GQC:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.PixelEditor-module_menuSep__pNZsR{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.PixelEditor-module_menuBar__8JFld .nice-menu__btn{color:var(--nice-text-secondary);font-size:11px}.PixelEditor-module_menuBar__8JFld .nice-menu__btn:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.PixelEditor-module_toolbar__paCGq{background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;gap:var(--nice-space-0-5,2px);overflow-y:auto;padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.PixelEditor-module_toolBtn__wD1Kj{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}.PixelEditor-module_toolBtn__wD1Kj:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_toolBtnActive__R51U0{border-color:var(--nice-color-white,#fff)!important;box-shadow:inset 2px 0 0 0 var(--nice-color-white,#fff),0 0 0 1px var(--nice-color-primary,#4f8cff)}.PixelEditor-module_toolBtnActive__R51U0,.PixelEditor-module_toolBtnActive__R51U0:hover{background:var(--nice-color-primary,#4f8cff)!important;color:var(--nice-color-white,#fff)!important}.PixelEditor-module_mainArea__Z0x6l{display:flex;flex:1;min-height:0}.PixelEditor-module_canvasContainer__8z2AY{background:var(--nice-bg-inset);cursor:crosshair;flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.PixelEditor-module_canvasContainer__8z2AY canvas{image-rendering:pixelated;position:absolute}.PixelEditor-module_rightPanel__ZjrCh{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:220px}.PixelEditor-module_panelSection__3l225{border-bottom:1px solid var(--nice-border-color)}.PixelEditor-module_rightPanel__ZjrCh .nice-collapse__trigger{align-items:center;background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-1-5,6px);letter-spacing:.5px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);text-align:left;text-transform:uppercase;width:100%}.PixelEditor-module_rightPanel__ZjrCh .nice-collapse__trigger:hover{color:var(--nice-text-secondary)}.PixelEditor-module_rightPanel__ZjrCh .nice-collapse__panel{padding:0 var(--nice-space-2,8px) var(--nice-space-1-5,6px)}.PixelEditor-module_collapseChevron__Yuvz6{display:inline-flex;transition:transform .15s ease}.nice-collapse--expanded .PixelEditor-module_collapseChevron__Yuvz6{transform:rotate(90deg)}.PixelEditor-module_layerActions__pZH1f{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);margin-bottom:var(--nice-space-1,4px)}.PixelEditor-module_panelTitle__vYyeO{align-items:center;color:var(--nice-text-secondary);display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.PixelEditor-module_panelTitle__vYyeO 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)}.PixelEditor-module_panelTitle__vYyeO button:hover{color:var(--nice-text-muted)}.PixelEditor-module_layerItem__J-gtn{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px)}.PixelEditor-module_layerItem__J-gtn:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.PixelEditor-module_layerItemActive__yPt29{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}.PixelEditor-module_layerVis__Uj7n2{align-items:center;cursor:pointer;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;opacity:.6;width:16px}.PixelEditor-module_layerVis__Uj7n2:hover{opacity:1}.PixelEditor-module_layerName__HovwJ{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PixelEditor-module_layerOpacity__qmWvu{color:var(--nice-text-muted);font-size:10px;text-align:right;width:36px}.PixelEditor-module_paletteGrid__knY-n{display:grid;gap:var(--nice-space-0-5,2px);grid-template-columns:repeat(8,1fr)}.PixelEditor-module_paletteSwatch__MUbha{aspect-ratio:1;border:1px solid var(--nice-overlay-light-8,hsla(0,0%,100%,.08));border-radius:var(--nice-radius-sm,2px);cursor:pointer;transition:transform .1s}.PixelEditor-module_paletteSwatch__MUbha:hover{transform:scale(1.15);z-index:1}.PixelEditor-module_paletteSwatchActive__wDR4T{border-color:var(--nice-color-white)!important;box-shadow:0 0 0 1px var(--nice-color-primary)}.PixelEditor-module_colorPickers__sQlBN{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-top:var(--nice-space-1-5,6px)}.PixelEditor-module_colorSample__GN7Rd{border:2px solid var(--nice-overlay-light-20,hsla(0,0%,100%,.2));border-radius:var(--nice-radius-sm,4px);height:28px;width:28px}.PixelEditor-module_bottomPanel__rviLF{background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;height:80px}.PixelEditor-module_timelineControls__Laroq{align-items:center;border-bottom:1px solid var(--nice-bg,#224);display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PixelEditor-module_timelineControls__Laroq button{background:var(--nice-bg-secondary);border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:11px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PixelEditor-module_timelineControls__Laroq button:hover{background:var(--nice-bg-tertiary);color:var(--nice-color-white)}.PixelEditor-module_timelineControls__Laroq label{color:var(--nice-text-muted)}.PixelEditor-module_timelineControls__Laroq input[type=number]{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:11px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px);text-align:center;width:40px}.PixelEditor-module_timelineControls__Laroq input[type=checkbox]{accent-color:var(--nice-color-primary)}.PixelEditor-module_timelineFrames__dw06F{align-items:stretch;display:flex;flex:1;gap:var(--nice-space-0-5,2px);overflow-x:auto;padding:var(--nice-space-1,4px) var(--nice-space-2,8px)}.PixelEditor-module_frameThumb__2E9mG{align-items:center;background:var(--nice-bg-primary);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;flex-direction:column;justify-content:center;min-width:44px;overflow:hidden;position:relative;width:44px}.PixelEditor-module_frameThumb__2E9mG canvas{height:36px;image-rendering:pixelated;object-fit:contain;width:36px}.PixelEditor-module_frameThumb__2E9mG:hover{border-color:var(--nice-border-color)}.PixelEditor-module_frameThumbActive__Z0eK4{background:var(--nice-surface);border-color:var(--nice-color-primary)!important}.PixelEditor-module_frameNum__PoGQC{bottom:1px;color:var(--nice-text-muted);font-size:8px;position:absolute;right:3px}.PixelEditor-module_statusBar__QnphD{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)}.PixelEditor-module_dialogOverlay__IgyFy{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));display:flex;inset:0;justify-content:center;position:absolute;z-index:100}.PixelEditor-module_dialog__OnkAG{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-50,rgba(0,0,0,.5));min-width:300px;padding:var(--nice-space-5,20px)}.PixelEditor-module_dialog__OnkAG h3{color:var(--nice-text-secondary);font-size:14px;margin:0 0 var(--nice-space-3,12px)}.PixelEditor-module_dialog__OnkAG label{color:var(--nice-text-muted);display:block;font-size:11px;margin:var(--nice-space-2,8px) 0 var(--nice-space-0-5,2px)}.PixelEditor-module_dialog__OnkAG input,.PixelEditor-module_dialog__OnkAG select{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);width:100%}.PixelEditor-module_dialogActions__fOa7a{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-4,16px)}.PixelEditor-module_dialogActions__fOa7a button{border:none;border-radius:var(--nice-radius-sm,4px);cursor:pointer;font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-4,16px)}.PixelEditor-module_btnPrimary__FYlTy{background:var(--nice-color-primary);color:var(--nice-color-white)}.PixelEditor-module_btnPrimary__FYlTy:hover{background:var(--nice-primary,#67d)}.PixelEditor-module_btnSecondary__qLfyJ{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}.PixelEditor-module_btnSecondary__qLfyJ:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}.PixelEditor-module_brushSlider__UxQ38{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px)}.PixelEditor-module_brushSlider__UxQ38 label{color:var(--nice-text-muted);font-size:10px}.PixelEditor-module_brushSlider__UxQ38 input[type=range]{accent-color:var(--nice-color-primary);flex:1;height:4px}.PixelEditor-module_brushSlider__UxQ38 span{color:var(--nice-text-muted);font-size:10px;min-width:16px;text-align:center}.PixelEditor-module_toolSep__YIu-E{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:28px}.PixelEditor-module_toolGroup__xA2lN{display:flex;flex-direction:column;gap:var(--nice-space-px,1px);padding:var(--nice-space-0-5,2px) 0}.PixelEditor-module_miniBtn__tg5N0{align-items:center;background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04));border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;height:20px;justify-content:center;transition:all .1s;width:32px}.PixelEditor-module_miniBtn__tg5N0:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_miniBtnActive__gpveu{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.PixelEditor-module_colorSwatches__jFuRX{align-items:center;border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px) 0}.PixelEditor-module_brushShapes__2bBfl{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px) 0}.PixelEditor-module_pressureToggles__AITuh{display:flex;flex-direction:column;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) 0}.PixelEditor-module_checkLabel__-d-TA{align-items:center;color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-1,4px)}.PixelEditor-module_checkLabel__-d-TA input[type=checkbox]{accent-color:var(--nice-color-primary);height:12px;width:12px}.PixelEditor-module_hsvPicker__0ERIh{display:flex;flex-direction:column;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) 0}.PixelEditor-module_hsvRow__M3fhN{align-items:center;display:flex;gap:var(--nice-space-1,4px)}.PixelEditor-module_hsvLabel__O2MkX{color:var(--nice-text-muted);font-size:9px;min-width:16px;text-align:right}.PixelEditor-module_hsvSlider__KKMMJ{accent-color:var(--nice-color-primary);cursor:pointer;flex:1;height:6px;min-width:0}.PixelEditor-module_hsvVal__MgQ8W{color:var(--nice-text-muted);font-size:9px;min-width:28px;text-align:right}.PixelEditor-module_hsvNumInput__Wn4kG{text-align:center;width:36px}.PixelEditor-module_hsvHexInput__MU5Ms,.PixelEditor-module_hsvNumInput__Wn4kG{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px)}.PixelEditor-module_hsvHexInput__MU5Ms{flex:1}.PixelEditor-module_layerLock__xeWnc{align-items:center;cursor:pointer;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;opacity:.6;width:16px}.PixelEditor-module_layerLock__xeWnc:hover{opacity:1}.PixelEditor-module_layerNameInput__ZiOKv{background:var(--nice-bg-canvas);border:1px solid var(--nice-color-primary);border-radius:var(--nice-radius-sm,2px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;outline:none;padding:0 var(--nice-space-1,4px)}.PixelEditor-module_layerControls__MrpXo{align-items:center;border-top:1px solid var(--nice-overlay-light-5,hsla(0,0%,100%,.05));display:flex;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-1,4px) var(--nice-space-0-5,2px)}.PixelEditor-module_blendSelect__QCwns{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px)}.PixelEditor-module_layerOpSlider__Vw-qs{accent-color:var(--nice-color-primary);cursor:pointer;height:4px;width:60px}.PixelEditor-module_genPanel__99Md8{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg,10px);box-shadow:0 12px 48px var(--nice-overlay-60,rgba(0,0,0,.6));display:flex;flex-direction:column;height:600px;max-height:85vh;max-width:95vw;overflow:hidden;width:820px}.PixelEditor-module_genHeader__xN4FZ{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--nice-space-2-5,10px) var(--nice-space-4,16px)}.PixelEditor-module_genHeader__xN4FZ h3{color:var(--nice-text-secondary);font-size:14px;margin:0}.PixelEditor-module_genTabs__No5Za{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0}.PixelEditor-module_genTabBtn__e2VhB{background:none;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:11px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:all .15s}.PixelEditor-module_genTabBtn__e2VhB:hover{background:var(--nice-bg-elevated);color:var(--nice-text-muted)}.PixelEditor-module_genTabBtnActive__Rt3jQ{background:var(--nice-bg-elevated)!important;border-bottom-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.PixelEditor-module_genBody__MuiQy{display:flex;flex:1;min-height:0;overflow:hidden}.PixelEditor-module_genLeft__JdEw6{border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:200px}.PixelEditor-module_genCenter__c5X0S{align-items:center;display:flex;flex:1;flex-direction:column;gap:var(--nice-space-2,8px);overflow-y:auto;padding:var(--nice-space-2,8px)}.PixelEditor-module_genRight__qFz11{border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:200px}.PixelEditor-module_genPreviewWrap__360F-{align-items:center;background:var(--nice-bg-inset);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);display:flex;flex:1;justify-content:center;min-height:120px;overflow:hidden;width:100%}.PixelEditor-module_genPreviewCanvas__75Lw2{image-rendering:pixelated;max-height:100%;max-width:100%;min-height:64px;min-width:64px;object-fit:contain}.PixelEditor-module_genDirGrid__xjEp7{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);justify-content:center}.PixelEditor-module_genRow__awCw9{align-items:center;display:flex;gap:var(--nice-space-1,4px);width:100%}.PixelEditor-module_genPresetGrid__f9XK6{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px)}.PixelEditor-module_genPresetBtn__5C2We{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04));border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:9px;padding:var(--nice-space-0-75,3px) var(--nice-space-1-5,6px);transition:all .1s}.PixelEditor-module_genPresetBtn__5C2We:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_genPresetBtnActive__WAGew{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.PixelEditor-module_genPartGrid__l17oc{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px)}.PixelEditor-module_genColorSwatches__acI6q{display:flex;gap:var(--nice-space-0-5,2px);margin-top:var(--nice-space-0-5,2px)}.PixelEditor-module_genColorSwatch__JE8BO{border:1px solid var(--nice-overlay-light-10,hsla(0,0%,100%,.1));border-radius:var(--nice-radius-sm,2px);height:16px;width:16px}.PixelEditor-module_genAssemblyItem__zNL2P{align-items:center;border-radius:var(--nice-radius-sm,3px);display:flex;font-size:10px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.PixelEditor-module_genAssemblyItem__zNL2P:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.PixelEditor-module_genAssemblyName__GU-kr{color:var(--nice-text-secondary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PixelEditor-module_genFooter__WkyJp{border-top:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:var(--nice-space-2,8px);justify-content:flex-end;padding:var(--nice-space-2-5,10px) var(--nice-space-4,16px)}.PixelEditor-module_btnIcon__O59l9{background:none;border:none;color:var(--nice-text-muted);cursor:pointer;font-size:14px;line-height:1;padding:var(--nice-space-0-5,2px)}.PixelEditor-module_btnIcon__O59l9:hover{color:var(--nice-text-secondary)}.PixelEditor-module_propSelect__4P0Qi{flex:1}.PixelEditor-module_propInput__Q-kr2,.PixelEditor-module_propSelect__4P0Qi{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.VectorEditor-module_root__rtRWo{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}.VectorEditor-module_menuBar__o25XM{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)}.VectorEditor-module_menuBtn__aP4vp{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)}.VectorEditor-module_menuBtn__aP4vp:hover{background:var(--nice-bg-secondary);color:var(--nice-text-primary)}.VectorEditor-module_menuBtn__aP4vp.VectorEditor-module_menuBtnActive__G4hDv,.VectorEditor-module_menuBtn__aP4vp.VectorEditor-module_menuBtnActive__G4hDv:hover{background:var(--nice-color-primary);color:var(--nice-text-on-primary,#fff)}.VectorEditor-module_menuSep__3-kTv{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.VectorEditor-module_menuLabel__Bsm0e{align-items:center;color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-0-5,2px);padding:0 var(--nice-space-1,4px)}.VectorEditor-module_toolbar__fakYL{background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.VectorEditor-module_toolBtn__Zh7D3{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}.VectorEditor-module_toolBtn__Zh7D3:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.VectorEditor-module_toolBtnActive__0xZlr{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.VectorEditor-module_mainArea__3o89F{display:flex;flex:1;min-height:0}.VectorEditor-module_canvasContainer__hOUAx{background:var(--nice-bg-inset);flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.VectorEditor-module_canvasContainer__hOUAx svg{height:100%;inset:0;position:absolute;width:100%}.VectorEditor-module_rightPanel__3hzcS{background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;width:320px}.VectorEditor-module_rightPanelTabBody__QrkgO{flex:1 1 auto;min-height:0;overflow-y:auto}.VectorEditor-module_libraryGrid__utboD{display:grid;gap:var(--nice-space-1-5,6px);grid-template-columns:repeat(4,1fr);padding:var(--nice-space-1-5,6px)}.VectorEditor-module_libraryCell__WyOra{align-items:center;background:transparent;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary);cursor:pointer;display:flex;flex-direction:column;font-size:9px;gap:var(--nice-space-0-5,2px);overflow:hidden;padding:var(--nice-space-1-5,6px) var(--nice-space-0-5,2px);text-align:center;text-overflow:ellipsis}.VectorEditor-module_libraryCell__WyOra:hover{border-color:var(--nice-primary,#56c);color:var(--nice-text-primary)}.VectorEditor-module_layerRow__6dibJ{align-items:center;border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-1-5,6px)}.VectorEditor-module_layerRow__6dibJ:hover{background:var(--nice-bg-secondary)}.VectorEditor-module_layerRowActive__Dqt0V{background:var(--nice-bg-secondary);outline:1px solid var(--nice-primary,#56c)}.VectorEditor-module_layerRowLocked__ubct0{opacity:.6}.VectorEditor-module_layerRowLocked__ubct0 .VectorEditor-module_layerNameInput__OtX-d{cursor:not-allowed}.VectorEditor-module_layerNameInput__OtX-d{background:transparent;border:none;color:var(--nice-text-primary);flex:1 1 auto;font-size:11px;min-width:0;outline:none}.VectorEditor-module_layerIconBtn__bchqi{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:12px;line-height:1;padding:0 var(--nice-space-0-5,2px)}.VectorEditor-module_layerIconBtn__bchqi:hover{color:var(--nice-text-primary)}.VectorEditor-module_panelSection__uteDQ{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.VectorEditor-module_panelTitle__WBUxr{align-items:center;color:var(--nice-text-secondary);display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.VectorEditor-module_panelTitle__WBUxr 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)}.VectorEditor-module_panelTitle__WBUxr button:hover{color:var(--nice-text-muted)}.VectorEditor-module_shapeItem__bu2E2{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px)}.VectorEditor-module_shapeItem__bu2E2:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.VectorEditor-module_shapeItemActive__E2lK7{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}.VectorEditor-module_shapeIcon__M4j6X{flex-shrink:0;font-size:14px;opacity:.7}.VectorEditor-module_shapeName__2QctO{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.VectorEditor-module_propRow__Alc4S{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.VectorEditor-module_propLabel__J0lxK{color:var(--nice-text-muted);font-size:10px;min-width:40px}.VectorEditor-module_propInput__3my2d{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;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.VectorEditor-module_propColorSwatch__JL97Z{border:1px solid var(--nice-overlay-light-15,hsla(0,0%,100%,.15));border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:24px;position:relative;width:24px}.VectorEditor-module_propColorSwatch__JL97Z input{cursor:pointer;height:100%;inset:0;opacity:0;position:absolute;width:100%}.VectorEditor-module_statusBar__jMwan{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)}.VectorEditor-module_dialogOverlay__NLiCg{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));display:flex;inset:0;justify-content:center;position:absolute;z-index:100}.VectorEditor-module_dialog__NDNK2{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-50,rgba(0,0,0,.5));max-width:500px;min-width:300px;padding:var(--nice-space-5,20px)}.VectorEditor-module_dialog__NDNK2 h3{color:var(--nice-text-secondary);font-size:14px;margin:0 0 var(--nice-space-3,12px)}.VectorEditor-module_dialog__NDNK2 label{color:var(--nice-text-muted);display:block;font-size:11px;margin:var(--nice-space-2,8px) 0 var(--nice-space-0-5,2px)}.VectorEditor-module_dialog__NDNK2 input,.VectorEditor-module_dialog__NDNK2 select,.VectorEditor-module_dialog__NDNK2 textarea{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);width:100%}.VectorEditor-module_dialog__NDNK2 textarea{font-family:monospace;min-height:120px;resize:vertical}.VectorEditor-module_dialogActions__0Sy4X{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-4,16px)}.VectorEditor-module_dialogActions__0Sy4X button{border:none;border-radius:var(--nice-radius-sm,4px);cursor:pointer;font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-4,16px)}.VectorEditor-module_btnPrimary__f9AaS{background:var(--nice-color-primary);color:var(--nice-color-white)}.VectorEditor-module_btnPrimary__f9AaS:hover{background:var(--nice-primary,#67d)}.VectorEditor-module_btnSecondary__wDps2{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}.VectorEditor-module_btnSecondary__wDps2:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}.VectorEditor-module_handleGroup__sMkQj circle{fill:var(--nice-color-primary);stroke:var(--nice-color-white);stroke-width:1;cursor:pointer}.VectorEditor-module_handleGroup__sMkQj circle:hover{fill:var(--nice-primary-hover,var(--nice-primary))}.PhotoEditor-module_wrapper__jrHYj{background:#1a1a1e;border-radius:var(--nice-radius-xl,12px);color:var(--nice-text-on-primary,#eee);font-family:Segoe UI,sans-serif;font-size:13px;height:100%;max-height:85vh;overflow:hidden;width:100%}.PhotoEditor-module_loadingWrap__QUTon{align-items:center;color:var(--nice-text-muted,#aaa);display:flex;justify-content:center;min-height:400px;width:100%}.PhotoEditor-module_loadingSpin__fGXBK{animation:PhotoEditor-module_nicePhotoEditorSpin__QorqZ 1s linear infinite}@keyframes PhotoEditor-module_nicePhotoEditorSpin__QorqZ{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.PhotoEditor-module_toolbar__RY-Ty{align-items:center;background:var(--nice-bg-secondary,#222226);border-bottom:1px solid var(--nice-border-color,#333);display:flex;justify-content:space-between;padding:var(--nice-space-2,8px) var(--nice-space-3-5,14px)}.PhotoEditor-module_toolbarGroup__PXw0-{display:flex;flex:0 0 auto;gap:6.5px}.PhotoEditor-module_toolbarDivider__o3kFV{background:var(--nice-border-color,#444);margin:0 var(--nice-space-1,4px);width:1px}.PhotoEditor-module_toolbarTitle__P1o18{align-items:center;display:flex;flex:1 1 auto;font-size:14px;font-weight:700;justify-content:center;min-width:0;overflow:hidden;padding:0 var(--nice-space-2,8px);text-overflow:ellipsis;white-space:nowrap}.PhotoEditor-module_leftPanel__DnHLU{background:var(--nice-bg-secondary,#222226);border-right:1px solid var(--nice-border-color,#333);display:flex;flex-direction:column;min-width:280px;overflow:hidden;width:280px}.PhotoEditor-module_tabBar__DZ3MG{border-bottom:1px solid var(--nice-border-color,#333);display:flex;flex-wrap:wrap}.PhotoEditor-module_tabButton__BLi97{align-items:center;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary,#888);cursor:pointer;display:flex;flex:1 0 auto;flex-direction:column;font-size:10px;font-weight:600;gap:var(--nice-space-px,1px);min-width:34px;padding:var(--nice-space-2,8px) 0;transition:all .15s}.PhotoEditor-module_tabButtonActive__KlQG0{background:var(--nice-bg-secondary,#2a2a30)}.PhotoEditor-module_tabIcon__-Mq19{font-size:14px}.PhotoEditor-module_panelContent__l5i5t{flex:1;overflow-y:auto;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.PhotoEditor-module_sectionTitle__tMvCm{font-size:12px;font-weight:600;margin-bottom:var(--nice-space-1-5,6px)}.PhotoEditor-module_sectionTitleMb8__PQ-lV{margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_sectionInfo__bWxW5{color:var(--nice-text-muted,#aaa);font-size:11px}.PhotoEditor-module_pillRow__DGJUb,.PhotoEditor-module_sectionInfoMb__Hk6V-{margin-bottom:var(--nice-space-2-5,10px)}.PhotoEditor-module_pillRow__DGJUb{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px)}.PhotoEditor-module_pillRowMb8__AQrth{margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_pillRowGap3__Y46Vu{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-75,3px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_pill__wTFac{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-xl,12px);color:var(--nice-text-muted,#aaa);cursor:pointer;font-size:11px;font-weight:600;padding:var(--nice-space-0-75,3px) var(--nice-space-2-5,10px)}.PhotoEditor-module_pillActive__AfdZR{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_pillCrop__Nsisp{border-radius:var(--nice-radius-md,6px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.PhotoEditor-module_pillCropActive__p6csO{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_pillEmoji__I42DJ{border-radius:var(--nice-radius-lg,10px);padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PhotoEditor-module_pillEmojiActive__0-EM7{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_filterGrid__-29PS{display:grid;gap:var(--nice-space-1-5,6px);grid-template-columns:repeat(3,1fr)}.PhotoEditor-module_emojiGrid__whqqK{display:grid;gap:var(--nice-space-0-5,2px);grid-template-columns:repeat(6,1fr);max-height:260px;overflow-y:auto}.PhotoEditor-module_shapeGrid__TawIy{margin-bottom:var(--nice-space-4,16px)}.PhotoEditor-module_frameGrid__R09dd,.PhotoEditor-module_shapeGrid__TawIy{display:grid;gap:var(--nice-space-1,4px);grid-template-columns:repeat(5,1fr)}.PhotoEditor-module_sliderRow__jsWDQ{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_sliderLabel__zOZ49{color:var(--nice-text-muted,#aaa);font-size:11px}.PhotoEditor-module_sliderLabelSelf__EwYKU{align-self:center;margin-right:var(--nice-space-1,4px)}.PhotoEditor-module_sliderValue__qFuTw{font-size:11px;font-weight:600;min-width:28px}.PhotoEditor-module_sliderValueSm__U7FrJ{font-size:10px;min-width:28px}.PhotoEditor-module_adjustColumn__y---T{display:flex;flex-direction:column;gap:var(--nice-space-2,8px)}.PhotoEditor-module_adjustHeader__6s9zV{display:flex;font-size:11px;justify-content:space-between;margin-bottom:var(--nice-space-0-5,2px)}.PhotoEditor-module_adjustIcon__d56rY{text-align:center;width:14px}.PhotoEditor-module_adjustValue__aUUmg{cursor:pointer;font-weight:600;min-width:30px;text-align:right}.PhotoEditor-module_intensitySection__dhe5h{margin-top:var(--nice-space-3,12px);padding:var(--nice-space-2,8px) 0}.PhotoEditor-module_intensityHeader__-KKu6{display:flex;font-size:11px;justify-content:space-between;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_colorInput__xkF1h{border:none;cursor:pointer;height:28px;padding:0;width:28px}.PhotoEditor-module_colorInputLg__W2KrK{border:none;cursor:pointer;height:30px;padding:0;width:32px}.PhotoEditor-module_colorInputDraw__KYcdG{border:none;cursor:pointer;height:28px;padding:0;width:32px}.PhotoEditor-module_overlayToolbar__hfspp{border-bottom:1px solid var(--nice-border-color,#333);display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_overlayToolbarLabel__mc4pU{align-self:center;color:var(--nice-text-muted,#aaa);font-size:11px;margin-right:var(--nice-space-1,4px)}.PhotoEditor-module_overlayToolbarBtn__AdTmZ{font-size:11px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.PhotoEditor-module_overlaySection__IIl4r{border-top:1px solid var(--nice-border-color,#333);margin-top:var(--nice-space-3,12px);padding-top:var(--nice-space-2,8px)}.PhotoEditor-module_overlaySectionTitle__FRx3e{color:var(--nice-text-muted,#aaa);font-size:11px;font-weight:600;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_overlayItem__DGUCN{align-items:center;background:transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#ccc);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-0-5,2px);padding:var(--nice-space-0-75,3px) var(--nice-space-1-5,6px)}.PhotoEditor-module_overlayIcon__G0pFk{text-align:center;width:18px}.PhotoEditor-module_overlayName__JVh64{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PhotoEditor-module_overlayDeleteBtn__Ontxv{background:none;border:none;color:var(--nice-danger,#f55);cursor:pointer;font-size:11px;padding:0}.PhotoEditor-module_emojiBtn__jxG9m{background:transparent;border:none;border-radius:var(--nice-radius-md,6px);cursor:pointer;font-size:22px;line-height:1;padding:var(--nice-space-1,4px) 0}.PhotoEditor-module_shapeBtn__xZdSV{font-size:20px}.PhotoEditor-module_frameBtn__coMkZ,.PhotoEditor-module_shapeBtn__xZdSV{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-text-secondary,#eee);cursor:pointer;line-height:1;padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_frameBtn__coMkZ{font-size:18px}.PhotoEditor-module_removeFrameBtn__oCuua{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-danger,#f55);cursor:pointer;font-size:14px;padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_textFormatBtn__7Z9RJ{min-width:32px}.PhotoEditor-module_textFormatBtnSm__3ptcG{min-width:28px}.PhotoEditor-module_drawActionBtn__teYz4{flex:1}.PhotoEditor-module_textArea__sBGlB{background:var(--nice-bg-secondary,#2a2a30);border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-text-secondary,#eee);font-size:13px;margin-bottom:var(--nice-space-2,8px);resize:none}.PhotoEditor-module_textAreaSm__6xZnY{font-size:12px;margin-bottom:0}.PhotoEditor-module_textBtnRow__AcEnd{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_textGapRow__Dq2uz{display:flex;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1-5,6px)}.PhotoEditor-module_editSelectedSection__bgNEh{border-top:1px solid var(--nice-border-color,#333);margin-top:var(--nice-space-3,12px);padding-top:var(--nice-space-2,8px)}.PhotoEditor-module_editSelectedLabel__u2rmS{color:var(--nice-text-muted,#aaa);font-size:11px;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_shapeColorRow__ip5--{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_shapeColorLabel__nVcbU{align-self:center;color:var(--nice-text-muted,#aaa);font-size:11px;margin-right:var(--nice-space-0-5,2px)}.PhotoEditor-module_shapeColorLabelMl__KiM2d{margin-left:var(--nice-space-1,4px)}.PhotoEditor-module_shapeFillToggle__BXJ8C{font-size:10px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.PhotoEditor-module_frameColorRow__KRAHz{display:flex;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_frameThicknessWrap__lXCoC{align-items:center;display:flex;flex:1;gap:var(--nice-space-1,4px)}.PhotoEditor-module_frameThicknessValue__SAEuc{font-size:10px}.PhotoEditor-module_drawPreview__WPbiv{display:flex;justify-content:center;margin-bottom:var(--nice-space-3,12px)}.PhotoEditor-module_drawActionRow__CUSWS{display:flex;gap:var(--nice-space-1,4px)}.PhotoEditor-module_quickColorRow__DTy5E{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_quickColorSwatch__ZjgoA{border:1px solid var(--nice-border-color,#555);border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:18px;width:18px}.PhotoEditor-module_transformRow__LKRjS{display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-4,16px)}.PhotoEditor-module_transformZoomRow__h2NlB{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.PhotoEditor-module_transformZoomValue__LXa51{font-size:11px;font-weight:600;min-width:40px}.PhotoEditor-module_transformInfo__zXP9l{background:var(--nice-bg-secondary,#2a2a30);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-muted,#aaa);font-size:11px;margin-top:var(--nice-space-4,16px);padding:var(--nice-space-2-5,10px)}.PhotoEditor-module_canvasViewport__OMBIL{align-items:center;background:#111115;display:flex;flex:1;justify-content:center;overflow:auto;padding:var(--nice-space-5,20px);position:relative}.PhotoEditor-module_zoomWrap__JjfiJ{max-height:100%;max-width:100%;position:relative;transform-origin:center center;transition:transform .15s ease}.PhotoEditor-module_compareWrap__-J5ku{cursor:ew-resize;display:inline-block;position:relative}.PhotoEditor-module_canvasOriginal__Apf91{max-width:100%}.PhotoEditor-module_canvasEdited__Eroz7,.PhotoEditor-module_canvasOriginal__Apf91{display:block;max-height:60vh;object-fit:contain}.PhotoEditor-module_compareClip__5qG2I{bottom:0;left:0;overflow:hidden;position:absolute;top:0}.PhotoEditor-module_compareSlider__OIIIK{bottom:0;position:absolute;top:0;transform:translateX(-50%);width:3px}.PhotoEditor-module_compareSliderKnob__VohI9{align-items:center;border-radius:var(--nice-radius-full,50%);box-shadow:0 2px 8px var(--nice-overlay-40,rgba(0,0,0,.4));display:flex;height:28px;justify-content:center;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:28px}.PhotoEditor-module_compareSliderIcon__pXcct{color:var(--nice-text-primary,#fff);font-size:12px}.PhotoEditor-module_compareLabelOriginal__GaBoj{background:var(--nice-overlay-60,rgba(0,0,0,.6));color:var(--nice-text-on-primary,#fff);left:8px}.PhotoEditor-module_compareLabelEdited__Fr836,.PhotoEditor-module_compareLabelOriginal__GaBoj{border-radius:var(--nice-radius-sm,4px);font-size:11px;font-weight:600;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px);position:absolute;top:8px}.PhotoEditor-module_compareLabelEdited__Fr836{color:var(--nice-text-primary,#fff);right:8px}.PhotoEditor-module_regularWrap__8umPV{display:inline-block;position:relative}.PhotoEditor-module_canvasRegular__wxapL{border-radius:var(--nice-radius-md,6px);box-shadow:0 4px 20px var(--nice-overlay-40,rgba(0,0,0,.4));display:block;max-height:60vh;max-width:100%;object-fit:contain}.PhotoEditor-module_cropOverlay__MJk1Y{inset:0;pointer-events:none;position:absolute;z-index:2}.PhotoEditor-module_cropDarkBg__m3axV{background:var(--nice-overlay-55,rgba(0,0,0,.55));inset:0;position:absolute}.PhotoEditor-module_cropGridContainer__NfHdT{inset:0;position:absolute}.PhotoEditor-module_cropSizeLabel__fV2mF{background:var(--nice-overlay-75,rgba(0,0,0,.75));border-radius:var(--nice-radius-sm,3px);bottom:-24px;color:var(--nice-text-on-primary,#fff);font-size:10px;left:50%;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px);position:absolute;transform:translateX(-50%);white-space:nowrap}.PhotoEditor-module_cropInfo__Z1SCE{color:var(--nice-text-muted,#aaa);font-size:11px;margin-bottom:var(--nice-space-2-5,10px)}.PhotoEditor-module_cropAspectLabel__dieL-{font-size:12px;font-weight:600;margin-bottom:var(--nice-space-1-5,6px)}.PhotoEditor-module_cropAspectRow__scRj3{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px)}.PhotoEditor-module_accentBtn__tgaEx{color:var(--nice-text-primary,#fff);font-weight:600;width:100%}.GameAsset2dEditor-module_root__WVJBM{background:var(--nice-bg,#1a1a2e);color:var(--nice-text-secondary,#e0e0e0);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;height:100%;min-height:600px;user-select:none}.GameAsset2dEditor-module_menuBar__WaEaU{align-items:center;background:var(--nice-bg,#16213e);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_menuBar__WaEaU h3{color:var(--nice-warning,#ffd369);font-size:14px;font-weight:600;margin:0}.GameAsset2dEditor-module_menuGroup__EOreB{display:flex;gap:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_menuBtn__JYWXn{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted,#b0b0b0);cursor:pointer;display:flex;font-size:12px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px);transition:all .15s}.GameAsset2dEditor-module_menuBtn__JYWXn:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_menuBtn__JYWXn:disabled{cursor:not-allowed;opacity:.4}.GameAsset2dEditor-module_spacer__fPVeq{flex:1}.GameAsset2dEditor-module_modeTabs__iKh7C{background:var(--nice-bg,#1f2940);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_modeTab__C12zt{background:transparent;border:none;border-radius:var(--nice-radius-sm,4px) var(--nice-radius-sm,4px) 0 0;color:var(--nice-text-secondary,#8892a8);cursor:pointer;font-size:12px;font-weight:500;padding:var(--nice-space-1-5,6px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_modeTab__C12zt:hover{background:var(--nice-overlay-light-5,hsla(0,0%,100%,.05));color:var(--nice-text-on-primary,#c0c8d8)}.GameAsset2dEditor-module_modeTab__C12zt.GameAsset2dEditor-module_active__DUroI{background:var(--nice-bg,#1a1a2e);color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_mainArea__jwDUa{display:flex;flex:1;overflow:hidden}.GameAsset2dEditor-module_leftPanel__xxAg5{background:var(--nice-bg,#16213e);border-right:1px solid var(--nice-border-color,#0f3460);display:flex;flex-direction:column;overflow:hidden;width:220px}.GameAsset2dEditor-module_centerArea__xr-Hn{display:flex;flex:1;flex-direction:column;overflow:hidden}.GameAsset2dEditor-module_rightPanel__YoNuc{background:var(--nice-bg,#16213e);border-left:1px solid var(--nice-border-color,#0f3460);display:flex;flex-direction:column;overflow:hidden;width:260px}.GameAsset2dEditor-module_toolbar__hEC9S{align-items:center;background:var(--nice-bg,#1f2940);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_toolGroup__Zbn47{background:var(--nice-overlay-20,rgba(0,0,0,.2));border-radius:var(--nice-radius-sm,4px);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_toolBtn__5U7Rw{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:all .15s;width:28px}.GameAsset2dEditor-module_toolBtn__5U7Rw:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_toolBtn__5U7Rw.GameAsset2dEditor-module_active__DUroI{background:var(--nice-color-primary,#0f3460);color:var(--nice-text-on-primary,#ffd369)}.GameAsset2dEditor-module_toolBtn__5U7Rw:disabled{cursor:not-allowed;opacity:.3}.GameAsset2dEditor-module_viewport__vEKEv{background:var(--nice-bg,#0a0a14);flex:1;overflow:hidden;position:relative}.GameAsset2dEditor-module_viewportCanvas__FJ5qA{image-rendering:pixelated;image-rendering:crisp-edges;left:50%;position:absolute;top:50%}.GameAsset2dEditor-module_gridOverlay__K8B97{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.GameAsset2dEditor-module_panelHeader__xm2As{align-items:center;background:var(--nice-bg-tertiary,#0f3460);color:var(--nice-text-secondary,#8892a8);display:flex;font-size:11px;font-weight:600;justify-content:space-between;letter-spacing:.5px;padding:var(--nice-space-2,8px) var(--nice-space-3,12px);text-transform:uppercase}.GameAsset2dEditor-module_panelContent__dvOGq{flex:1;overflow-y:auto;padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_panelSection__RQQDr{margin-bottom:var(--nice-space-4,16px)}.GameAsset2dEditor-module_panelLabel__Ks-Wa{color:var(--nice-text-secondary,#8892a8);display:block;font-size:11px;letter-spacing:.5px;margin-bottom:var(--nice-space-1-5,6px);text-transform:uppercase}.GameAsset2dEditor-module_panelInput__cxNiG{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#e0e0e0);font-size:12px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);width:100%}.GameAsset2dEditor-module_panelInput__cxNiG:focus{border-color:var(--nice-warning,#ffd369);outline:none}.GameAsset2dEditor-module_tilePalette__OpzmV{display:grid;gap:var(--nice-space-1,4px);grid-template-columns:repeat(auto-fill,minmax(40px,1fr));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_tileItem__uWNS9{aspect-ratio:1;background:var(--nice-bg,#0a0a14);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;overflow:hidden;transition:all .15s}.GameAsset2dEditor-module_tileItem__uWNS9:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_tileItem__uWNS9.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_tileItem__uWNS9 img{height:100%;image-rendering:pixelated;object-fit:contain;width:100%}.GameAsset2dEditor-module_layersList__anFaG{display:flex;flex-direction:column;gap:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_layerItem__XSGlu{align-items:center;background:var(--nice-bg,#1f2940);border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:all .15s}.GameAsset2dEditor-module_layerItem__XSGlu:hover{background:var(--nice-hover-bg,#2a3a5e)}.GameAsset2dEditor-module_layerItem__XSGlu.GameAsset2dEditor-module_selected__216IN{background:var(--nice-selected-bg,#0f3460);border-left:3px solid var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_layerVisibility__RpHjV{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_layerVisibility__RpHjV:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1))}.GameAsset2dEditor-module_layerVisibility__RpHjV.GameAsset2dEditor-module_hidden__mukOG{opacity:.4}.GameAsset2dEditor-module_layerName__WBxq5{color:var(--nice-text-secondary,#c0c8d8);flex:1;font-size:12px}.GameAsset2dEditor-module_layerOpacity__FpzL-{color:var(--nice-text-secondary,#8892a8);font-size:10px;text-align:right;width:40px}.GameAsset2dEditor-module_framesList__vg1oO{display:grid;gap:var(--nice-space-2,8px);grid-template-columns:repeat(auto-fill,minmax(60px,1fr));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_frameItem__fkEfb{aspect-ratio:1;background:var(--nice-bg,#0a0a14);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;overflow:hidden;position:relative;transition:all .15s}.GameAsset2dEditor-module_frameItem__fkEfb:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_frameItem__fkEfb.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_frameItem__fkEfb canvas{height:100%;image-rendering:pixelated;object-fit:contain;width:100%}.GameAsset2dEditor-module_frameLabel__5IGW8{background:var(--nice-overlay-70,rgba(0,0,0,.7));bottom:0;color:var(--nice-text-muted,#b0b0b0);font-size:9px;left:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px);position:absolute;right:0;text-align:center}.GameAsset2dEditor-module_timeline__dPJk6{background:var(--nice-bg,#16213e);border-top:1px solid var(--nice-border-color,#0f3460);padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_timelineTrack__mr20w{background:var(--nice-bg,#0a0a14);border-radius:var(--nice-radius-sm,4px);display:flex;gap:var(--nice-space-1,4px);overflow-x:auto;padding:var(--nice-space-1,4px)}.GameAsset2dEditor-module_timelineFrame__AQyGe{background:var(--nice-bg,#1f2940);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;flex-shrink:0;height:48px;overflow:hidden;width:48px}.GameAsset2dEditor-module_timelineFrame__AQyGe:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_timelineFrame__AQyGe.GameAsset2dEditor-module_current__3sAfL{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_stateGraph__qAWlU{background:var(--nice-bg,#0a0a14);flex:1;overflow:hidden;position:relative}.GameAsset2dEditor-module_stateNode__W9Z-g{background:var(--nice-bg,#1f2940);border:2px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-lg,8px);cursor:move;min-width:120px;padding:var(--nice-space-2,8px) var(--nice-space-3,12px);position:absolute;transition:border-color .15s}.GameAsset2dEditor-module_stateNode__W9Z-g:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_stateNode__W9Z-g.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_stateNode__W9Z-g.GameAsset2dEditor-module_entry__cmA9n{border-color:var(--nice-success-light,#4ade80)}.GameAsset2dEditor-module_stateNodeName__TK5vs{color:var(--nice-text-secondary,#e0e0e0);font-size:12px;font-weight:500;text-align:center}.GameAsset2dEditor-module_stateNodeAnim__VGwnV{color:var(--nice-text-secondary,#8892a8);font-size:10px;margin-top:var(--nice-space-1,4px);text-align:center}.GameAsset2dEditor-module_transition__FBbno{stroke:var(--nice-text-secondary,#4a5a7e);stroke-width:2;fill:none;marker-end:url(#arrowhead)}.GameAsset2dEditor-module_transition__FBbno:hover{stroke:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_effectsList__vHq4I{display:flex;flex-direction:column;gap:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectItem__6-1li{background:var(--nice-bg,#1f2940);border-radius:var(--nice-radius-md,6px);overflow:hidden}.GameAsset2dEditor-module_effectHeader__cgVN-{align-items:center;cursor:pointer;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectToggle__lKE36{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:18px;width:18px}.GameAsset2dEditor-module_effectToggle__lKE36.GameAsset2dEditor-module_enabled__wgDzp{background:var(--nice-warning,#ffd369);border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_effectName__NQCWj{color:var(--nice-text-secondary,#c0c8d8);flex:1;font-size:12px}.GameAsset2dEditor-module_effectRemove__TSSdI{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_effectRemove__TSSdI:hover{background:var(--nice-danger,#ef4444);color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_effectParams__UqTBd{background:var(--nice-overlay-20,rgba(0,0,0,.2));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectParam__hEsVY{align-items:center;display:flex;gap:var(--nice-space-2,8px);margin-bottom:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectParam__hEsVY:last-child{margin-bottom:0}.GameAsset2dEditor-module_effectParamLabel__u0Qoc{color:var(--nice-text-secondary,#8892a8);flex:0 0 80px;font-size:11px}.GameAsset2dEditor-module_effectParamInput__aqxdv{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#e0e0e0);flex:1;font-size:11px;height:24px;padding:0 var(--nice-space-2,8px)}.GameAsset2dEditor-module_statusBar__eOrNe{align-items:center;background:var(--nice-bg-tertiary,#0f3460);color:var(--nice-text-secondary,#8892a8);display:flex;font-size:11px;gap:var(--nice-space-4,16px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_statusItem__kKLHF,.GameAsset2dEditor-module_zoomControl__4YD9G{align-items:center;display:flex;gap:var(--nice-space-1,4px)}.GameAsset2dEditor-module_zoomControl__4YD9G{margin-left:auto}.GameAsset2dEditor-module_zoomBtn__hxYik{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_zoomBtn__hxYik:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_dialogOverlay__dZYwO{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.GameAsset2dEditor-module_dialog__mfLFL{background:var(--nice-bg,#16213e);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-40,rgba(0,0,0,.4));max-width:500px;min-width:300px;padding:var(--nice-space-6,24px)}.GameAsset2dEditor-module_dialog__mfLFL h3{color:var(--nice-warning,#ffd369);font-size:16px;margin:0 0 var(--nice-space-4,16px)}.GameAsset2dEditor-module_dialogActions__vhDXe{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-5,20px)}.GameAsset2dEditor-module_btnPrimary__Gzc25{background:var(--nice-warning,#ffd369);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-on-primary,#1a1a2e);cursor:pointer;font-size:12px;font-weight:600;padding:var(--nice-space-2,8px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_btnPrimary__Gzc25:hover{background:#ffe599}.GameAsset2dEditor-module_btnSecondary__G5nK5{background:transparent;border:1px solid var(--nice-border-color,#4a5a7e);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#c0c8d8);cursor:pointer;font-size:12px;padding:var(--nice-space-2,8px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_btnSecondary__G5nK5:hover{background:var(--nice-overlay-light-5,hsla(0,0%,100%,.05));border-color:#6a7a9e}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar{width:6px}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-track{background:var(--nice-bg,#0a0a14)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-thumb{background:var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-thumb:hover{background:var(--nice-text-secondary,#4a5a7e)}.GameAsset2dEditor-module_dropZone__Z7sYz{border:2px dashed var(--nice-border-color,#4a5a7e);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;padding:var(--nice-space-6,24px);text-align:center;transition:all .15s}.GameAsset2dEditor-module_dropZone__Z7sYz:hover{border-color:var(--nice-warning,#ffd369);color:var(--nice-text-secondary,#c0c8d8)}.GameAsset2dEditor-module_dropZone__Z7sYz.GameAsset2dEditor-module_active__DUroI{background:rgba(255,211,105,.1);border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_emptyState__3wryk{align-items:center;color:var(--nice-text-secondary,#8892a8);display:flex;flex-direction:column;justify-content:center;padding:var(--nice-space-8,32px);text-align:center}.GameAsset2dEditor-module_emptyState__3wryk svg{height:48px;margin-bottom:var(--nice-space-3,12px);opacity:.5;width:48px}.GameAsset2dEditor-module_emptyStateText__Q5V1a{font-size:12px;margin-bottom:var(--nice-space-3,12px)}
1
+ .PixelEditor-module_root__3gidG{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}.PixelEditor-module_menuBar__8JFld{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)}.PixelEditor-module_menuBtn__w-GQC{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)}.PixelEditor-module_menuBtn__w-GQC:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.PixelEditor-module_menuSep__pNZsR{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.PixelEditor-module_menuBar__8JFld .nice-menu__btn{color:var(--nice-text-secondary);font-size:11px}.PixelEditor-module_menuBar__8JFld .nice-menu__btn:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}.PixelEditor-module_toolbar__paCGq{background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;gap:var(--nice-space-0-5,2px);overflow-y:auto;padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.PixelEditor-module_toolBtn__wD1Kj{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}.PixelEditor-module_toolBtn__wD1Kj:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_toolBtnActive__R51U0{border-color:var(--nice-color-white,#fff)!important;box-shadow:inset 2px 0 0 0 var(--nice-color-white,#fff),0 0 0 1px var(--nice-color-primary,#4f8cff)}.PixelEditor-module_toolBtnActive__R51U0,.PixelEditor-module_toolBtnActive__R51U0:hover{background:var(--nice-color-primary,#4f8cff)!important;color:var(--nice-color-white,#fff)!important}.PixelEditor-module_mainArea__Z0x6l{display:flex;flex:1;min-height:0}.PixelEditor-module_canvasContainer__8z2AY{background:var(--nice-bg-inset);cursor:crosshair;flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.PixelEditor-module_canvasContainer__8z2AY canvas{image-rendering:pixelated;position:absolute}.PixelEditor-module_rightPanel__ZjrCh{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:220px}.PixelEditor-module_panelSection__3l225{border-bottom:1px solid var(--nice-border-color)}.PixelEditor-module_rightPanel__ZjrCh .nice-collapse__trigger{align-items:center;background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-1-5,6px);letter-spacing:.5px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);text-align:left;text-transform:uppercase;width:100%}.PixelEditor-module_rightPanel__ZjrCh .nice-collapse__trigger:hover{color:var(--nice-text-secondary)}.PixelEditor-module_rightPanel__ZjrCh .nice-collapse__panel{padding:0 var(--nice-space-2,8px) var(--nice-space-1-5,6px)}.PixelEditor-module_collapseChevron__Yuvz6{display:inline-flex;transition:transform .15s ease}.nice-collapse--expanded .PixelEditor-module_collapseChevron__Yuvz6{transform:rotate(90deg)}.PixelEditor-module_layerActions__pZH1f{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);margin-bottom:var(--nice-space-1,4px)}.PixelEditor-module_panelTitle__vYyeO{align-items:center;color:var(--nice-text-secondary);display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.PixelEditor-module_panelTitle__vYyeO 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)}.PixelEditor-module_panelTitle__vYyeO button:hover{color:var(--nice-text-muted)}.PixelEditor-module_layerItem__J-gtn{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px)}.PixelEditor-module_layerItem__J-gtn:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.PixelEditor-module_layerItemActive__yPt29{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}.PixelEditor-module_layerVis__Uj7n2{align-items:center;cursor:pointer;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;opacity:.6;width:16px}.PixelEditor-module_layerVis__Uj7n2:hover{opacity:1}.PixelEditor-module_layerName__HovwJ{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PixelEditor-module_layerOpacity__qmWvu{color:var(--nice-text-muted);font-size:10px;text-align:right;width:36px}.PixelEditor-module_paletteGrid__knY-n{display:grid;gap:var(--nice-space-0-5,2px);grid-template-columns:repeat(8,1fr)}.PixelEditor-module_paletteSwatch__MUbha{aspect-ratio:1;border:1px solid var(--nice-overlay-light-8,hsla(0,0%,100%,.08));border-radius:var(--nice-radius-sm,2px);cursor:pointer;transition:transform .1s}.PixelEditor-module_paletteSwatch__MUbha:hover{transform:scale(1.15);z-index:1}.PixelEditor-module_paletteSwatchActive__wDR4T{border-color:var(--nice-color-white)!important;box-shadow:0 0 0 1px var(--nice-color-primary)}.PixelEditor-module_colorPickers__sQlBN{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-top:var(--nice-space-1-5,6px)}.PixelEditor-module_colorSample__GN7Rd{border:2px solid var(--nice-overlay-light-20,hsla(0,0%,100%,.2));border-radius:var(--nice-radius-sm,4px);height:28px;width:28px}.PixelEditor-module_bottomPanel__rviLF{background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;height:80px}.PixelEditor-module_timelineControls__Laroq{align-items:center;border-bottom:1px solid var(--nice-bg,#224);display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PixelEditor-module_timelineControls__Laroq button{background:var(--nice-bg-secondary);border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:11px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PixelEditor-module_timelineControls__Laroq button:hover{background:var(--nice-bg-tertiary);color:var(--nice-color-white)}.PixelEditor-module_timelineControls__Laroq label{color:var(--nice-text-muted)}.PixelEditor-module_timelineControls__Laroq input[type=number]{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:11px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px);text-align:center;width:40px}.PixelEditor-module_timelineControls__Laroq input[type=checkbox]{accent-color:var(--nice-color-primary)}.PixelEditor-module_timelineFrames__dw06F{align-items:stretch;display:flex;flex:1;gap:var(--nice-space-0-5,2px);overflow-x:auto;padding:var(--nice-space-1,4px) var(--nice-space-2,8px)}.PixelEditor-module_frameThumb__2E9mG{align-items:center;background:var(--nice-bg-primary);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;flex-direction:column;justify-content:center;min-width:44px;overflow:hidden;position:relative;width:44px}.PixelEditor-module_frameThumb__2E9mG canvas{height:36px;image-rendering:pixelated;object-fit:contain;width:36px}.PixelEditor-module_frameThumb__2E9mG:hover{border-color:var(--nice-border-color)}.PixelEditor-module_frameThumbActive__Z0eK4{background:var(--nice-surface);border-color:var(--nice-color-primary)!important}.PixelEditor-module_frameNum__PoGQC{bottom:1px;color:var(--nice-text-muted);font-size:8px;position:absolute;right:3px}.PixelEditor-module_statusBar__QnphD{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)}.PixelEditor-module_dialogOverlay__IgyFy{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));display:flex;inset:0;justify-content:center;position:absolute;z-index:100}.PixelEditor-module_dialog__OnkAG{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-50,rgba(0,0,0,.5));min-width:300px;padding:var(--nice-space-5,20px)}.PixelEditor-module_dialog__OnkAG h3{color:var(--nice-text-secondary);font-size:14px;margin:0 0 var(--nice-space-3,12px)}.PixelEditor-module_dialog__OnkAG label{color:var(--nice-text-muted);display:block;font-size:11px;margin:var(--nice-space-2,8px) 0 var(--nice-space-0-5,2px)}.PixelEditor-module_dialog__OnkAG input,.PixelEditor-module_dialog__OnkAG select{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);width:100%}.PixelEditor-module_dialogActions__fOa7a{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-4,16px)}.PixelEditor-module_dialogActions__fOa7a button{border:none;border-radius:var(--nice-radius-sm,4px);cursor:pointer;font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-4,16px)}.PixelEditor-module_btnPrimary__FYlTy{background:var(--nice-color-primary);color:var(--nice-color-white)}.PixelEditor-module_btnPrimary__FYlTy:hover{background:var(--nice-primary,#67d)}.PixelEditor-module_btnSecondary__qLfyJ{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}.PixelEditor-module_btnSecondary__qLfyJ:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}.PixelEditor-module_brushSlider__UxQ38{align-items:center;border-bottom:1px solid var(--nice-border-color);display:flex;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px)}.PixelEditor-module_brushSlider__UxQ38 label{color:var(--nice-text-muted);font-size:10px}.PixelEditor-module_brushSlider__UxQ38 input[type=range]{accent-color:var(--nice-color-primary);flex:1;height:4px}.PixelEditor-module_brushSlider__UxQ38 span{color:var(--nice-text-muted);font-size:10px;min-width:16px;text-align:center}.PixelEditor-module_toolSep__YIu-E{background:var(--nice-bg-secondary);height:1px;margin:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:28px}.PixelEditor-module_toolGroup__xA2lN{display:flex;flex-direction:column;gap:var(--nice-space-px,1px);padding:var(--nice-space-0-5,2px) 0}.PixelEditor-module_miniBtn__tg5N0{align-items:center;background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04));border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;height:20px;justify-content:center;transition:all .1s;width:32px}.PixelEditor-module_miniBtn__tg5N0:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_miniBtnActive__gpveu{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}.PixelEditor-module_colorSwatches__jFuRX{align-items:center;border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px) 0}.PixelEditor-module_brushShapes__2bBfl{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px) 0}.PixelEditor-module_pressureToggles__AITuh{display:flex;flex-direction:column;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) 0}.PixelEditor-module_checkLabel__-d-TA{align-items:center;color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-1,4px)}.PixelEditor-module_checkLabel__-d-TA input[type=checkbox]{accent-color:var(--nice-color-primary);height:12px;width:12px}.PixelEditor-module_hsvPicker__0ERIh{display:flex;flex-direction:column;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) 0}.PixelEditor-module_hsvRow__M3fhN{align-items:center;display:flex;gap:var(--nice-space-1,4px)}.PixelEditor-module_hsvLabel__O2MkX{color:var(--nice-text-muted);font-size:9px;min-width:16px;text-align:right}.PixelEditor-module_hsvSlider__KKMMJ{accent-color:var(--nice-color-primary);cursor:pointer;flex:1;height:6px;min-width:0}.PixelEditor-module_hsvVal__MgQ8W{color:var(--nice-text-muted);font-size:9px;min-width:28px;text-align:right}.PixelEditor-module_hsvNumInput__Wn4kG{text-align:center;width:36px}.PixelEditor-module_hsvHexInput__MU5Ms,.PixelEditor-module_hsvNumInput__Wn4kG{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px)}.PixelEditor-module_hsvHexInput__MU5Ms{flex:1}.PixelEditor-module_layerLock__xeWnc{align-items:center;cursor:pointer;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;opacity:.6;width:16px}.PixelEditor-module_layerLock__xeWnc:hover{opacity:1}.PixelEditor-module_layerNameInput__ZiOKv{background:var(--nice-bg-canvas);border:1px solid var(--nice-color-primary);border-radius:var(--nice-radius-sm,2px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;outline:none;padding:0 var(--nice-space-1,4px)}.PixelEditor-module_layerControls__MrpXo{align-items:center;border-top:1px solid var(--nice-overlay-light-5,hsla(0,0%,100%,.05));display:flex;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-1,4px) var(--nice-space-0-5,2px)}.PixelEditor-module_blendSelect__QCwns{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px)}.PixelEditor-module_layerOpSlider__Vw-qs{accent-color:var(--nice-color-primary);cursor:pointer;height:4px;width:60px}.PixelEditor-module_genPanel__99Md8{display:flex;flex-direction:column;height:600px;max-height:70vh;overflow:hidden;width:100%}.PixelEditor-module_genTabs__No5Za{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0}.PixelEditor-module_genTabBtn__e2VhB{background:none;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:11px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:all .15s}.PixelEditor-module_genTabBtn__e2VhB:hover{background:var(--nice-bg-elevated);color:var(--nice-text-muted)}.PixelEditor-module_genTabBtnActive__Rt3jQ{background:var(--nice-bg-elevated)!important;border-bottom-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}.PixelEditor-module_genBody__MuiQy{display:flex;flex:1;min-height:0;overflow:hidden}.PixelEditor-module_genLeft__JdEw6{border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:200px}.PixelEditor-module_genCenter__c5X0S{align-items:center;display:flex;flex:1;flex-direction:column;gap:var(--nice-space-2,8px);overflow-y:auto;padding:var(--nice-space-2,8px)}.PixelEditor-module_genRight__qFz11{border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:200px}.PixelEditor-module_genPreviewWrap__360F-{align-items:center;background:var(--nice-bg-inset);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);display:flex;flex:1;justify-content:center;min-height:120px;overflow:hidden;width:100%}.PixelEditor-module_genPreviewCanvas__75Lw2{image-rendering:pixelated;max-height:100%;max-width:100%;min-height:64px;min-width:64px;object-fit:contain}.PixelEditor-module_genDirGrid__xjEp7{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);justify-content:center}.PixelEditor-module_genRow__awCw9{align-items:center;display:flex;gap:var(--nice-space-1,4px);width:100%}.PixelEditor-module_genPresetGrid__f9XK6{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px)}.PixelEditor-module_genPresetBtn__5C2We{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04));border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:9px;padding:var(--nice-space-0-75,3px) var(--nice-space-1-5,6px);transition:all .1s}.PixelEditor-module_genPresetBtn__5C2We:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_genPresetBtnActive__WAGew{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}.PixelEditor-module_genPartGrid__l17oc{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px)}.PixelEditor-module_genPartBtn__5OO82{min-width:32px;padding:0 var(--nice-space-1-5,6px);white-space:nowrap;width:auto}.PixelEditor-module_genColorSwatches__acI6q{display:flex;gap:var(--nice-space-0-5,2px);margin-top:var(--nice-space-0-5,2px)}.PixelEditor-module_genColorSwatch__JE8BO{border:1px solid var(--nice-overlay-light-10,hsla(0,0%,100%,.1));border-radius:var(--nice-radius-sm,2px);height:16px;width:16px}.PixelEditor-module_genAssemblyItem__zNL2P{align-items:center;border-radius:var(--nice-radius-sm,3px);display:flex;font-size:10px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.PixelEditor-module_genAssemblyItem__zNL2P:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.PixelEditor-module_genAssemblyName__GU-kr{color:var(--nice-text-secondary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PixelEditor-module_genFooter__WkyJp{border-top:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:var(--nice-space-2,8px);justify-content:flex-end;padding:var(--nice-space-2-5,10px) var(--nice-space-4,16px)}.PixelEditor-module_btnIcon__O59l9{background:none;border:none;color:var(--nice-text-muted);cursor:pointer;font-size:14px;line-height:1;padding:var(--nice-space-0-5,2px)}.PixelEditor-module_btnIcon__O59l9:hover{color:var(--nice-text-secondary)}.PixelEditor-module_propSelect__4P0Qi{flex:1}.PixelEditor-module_propInput__Q-kr2,.PixelEditor-module_propSelect__4P0Qi{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.VectorEditor-module_root__rtRWo{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}.VectorEditor-module_menuBar__o25XM{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)}.VectorEditor-module_menuBtn__aP4vp{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)}.VectorEditor-module_menuBtn__aP4vp:hover{background:var(--nice-bg-secondary);color:var(--nice-text-primary)}.VectorEditor-module_menuBtn__aP4vp.VectorEditor-module_menuBtnActive__G4hDv,.VectorEditor-module_menuBtn__aP4vp.VectorEditor-module_menuBtnActive__G4hDv:hover{background:var(--nice-color-primary);color:var(--nice-text-on-primary,#fff)}.VectorEditor-module_menuSep__3-kTv{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.VectorEditor-module_menuLabel__Bsm0e{align-items:center;color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-0-5,2px);padding:0 var(--nice-space-1,4px)}.VectorEditor-module_toolbar__fakYL{background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.VectorEditor-module_toolBtn__Zh7D3{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}.VectorEditor-module_toolBtn__Zh7D3:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.VectorEditor-module_toolBtnActive__0xZlr{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.VectorEditor-module_mainArea__3o89F{display:flex;flex:1;min-height:0}.VectorEditor-module_canvasContainer__hOUAx{background:var(--nice-bg-inset);flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.VectorEditor-module_canvasContainer__hOUAx svg{height:100%;inset:0;position:absolute;width:100%}.VectorEditor-module_rightPanel__3hzcS{background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;width:320px}.VectorEditor-module_rightPanelTabBody__QrkgO{flex:1 1 auto;min-height:0;overflow-y:auto}.VectorEditor-module_libraryGrid__utboD{display:grid;gap:var(--nice-space-1-5,6px);grid-template-columns:repeat(4,1fr);padding:var(--nice-space-1-5,6px)}.VectorEditor-module_libraryCell__WyOra{align-items:center;background:transparent;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary);cursor:pointer;display:flex;flex-direction:column;font-size:9px;gap:var(--nice-space-0-5,2px);overflow:hidden;padding:var(--nice-space-1-5,6px) var(--nice-space-0-5,2px);text-align:center;text-overflow:ellipsis}.VectorEditor-module_libraryCell__WyOra:hover{border-color:var(--nice-primary,#56c);color:var(--nice-text-primary)}.VectorEditor-module_layerRow__6dibJ{align-items:center;border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-1-5,6px)}.VectorEditor-module_layerRow__6dibJ:hover{background:var(--nice-bg-secondary)}.VectorEditor-module_layerRowActive__Dqt0V{background:var(--nice-bg-secondary);outline:1px solid var(--nice-primary,#56c)}.VectorEditor-module_layerRowLocked__ubct0{opacity:.6}.VectorEditor-module_layerRowLocked__ubct0 .VectorEditor-module_layerNameInput__OtX-d{cursor:not-allowed}.VectorEditor-module_layerNameInput__OtX-d{background:transparent;border:none;color:var(--nice-text-primary);flex:1 1 auto;font-size:11px;min-width:0;outline:none}.VectorEditor-module_layerIconBtn__bchqi{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:12px;line-height:1;padding:0 var(--nice-space-0-5,2px)}.VectorEditor-module_layerIconBtn__bchqi:hover{color:var(--nice-text-primary)}.VectorEditor-module_panelSection__uteDQ{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.VectorEditor-module_panelTitle__WBUxr{align-items:center;color:var(--nice-text-secondary);display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.VectorEditor-module_panelTitle__WBUxr 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)}.VectorEditor-module_panelTitle__WBUxr button:hover{color:var(--nice-text-muted)}.VectorEditor-module_shapeItem__bu2E2{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px)}.VectorEditor-module_shapeItem__bu2E2:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.VectorEditor-module_shapeItemActive__E2lK7{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}.VectorEditor-module_shapeIcon__M4j6X{flex-shrink:0;font-size:14px;opacity:.7}.VectorEditor-module_shapeName__2QctO{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.VectorEditor-module_propRow__Alc4S{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.VectorEditor-module_propLabel__J0lxK{color:var(--nice-text-muted);font-size:10px;min-width:40px}.VectorEditor-module_propInput__3my2d{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;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.VectorEditor-module_propColorSwatch__JL97Z{border:1px solid var(--nice-overlay-light-15,hsla(0,0%,100%,.15));border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:24px;position:relative;width:24px}.VectorEditor-module_propColorSwatch__JL97Z input{cursor:pointer;height:100%;inset:0;opacity:0;position:absolute;width:100%}.VectorEditor-module_statusBar__jMwan{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)}.VectorEditor-module_dialogOverlay__NLiCg{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));display:flex;inset:0;justify-content:center;position:absolute;z-index:100}.VectorEditor-module_dialog__NDNK2{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-50,rgba(0,0,0,.5));max-width:500px;min-width:300px;padding:var(--nice-space-5,20px)}.VectorEditor-module_dialog__NDNK2 h3{color:var(--nice-text-secondary);font-size:14px;margin:0 0 var(--nice-space-3,12px)}.VectorEditor-module_dialog__NDNK2 label{color:var(--nice-text-muted);display:block;font-size:11px;margin:var(--nice-space-2,8px) 0 var(--nice-space-0-5,2px)}.VectorEditor-module_dialog__NDNK2 input,.VectorEditor-module_dialog__NDNK2 select,.VectorEditor-module_dialog__NDNK2 textarea{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);width:100%}.VectorEditor-module_dialog__NDNK2 textarea{font-family:monospace;min-height:120px;resize:vertical}.VectorEditor-module_dialogActions__0Sy4X{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-4,16px)}.VectorEditor-module_dialogActions__0Sy4X button{border:none;border-radius:var(--nice-radius-sm,4px);cursor:pointer;font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-4,16px)}.VectorEditor-module_btnPrimary__f9AaS{background:var(--nice-color-primary);color:var(--nice-color-white)}.VectorEditor-module_btnPrimary__f9AaS:hover{background:var(--nice-primary,#67d)}.VectorEditor-module_btnSecondary__wDps2{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}.VectorEditor-module_btnSecondary__wDps2:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}.VectorEditor-module_handleGroup__sMkQj circle{fill:var(--nice-color-primary);stroke:var(--nice-color-white);stroke-width:1;cursor:pointer}.VectorEditor-module_handleGroup__sMkQj circle:hover{fill:var(--nice-primary-hover,var(--nice-primary))}.PhotoEditor-module_wrapper__jrHYj{background:var(--nice-bg-primary,#1a1a1e);border-radius:var(--nice-radius-xl,12px);color:var(--nice-text-on-primary,#eee);font-family:Segoe UI,sans-serif;font-size:13px;height:100%;max-height:85vh;overflow:hidden;width:100%}.PhotoEditor-module_loadingWrap__QUTon{align-items:center;color:var(--nice-text-muted,#aaa);display:flex;justify-content:center;min-height:400px;width:100%}.PhotoEditor-module_loadingSpin__fGXBK{animation:PhotoEditor-module_nicePhotoEditorSpin__QorqZ 1s linear infinite}@keyframes PhotoEditor-module_nicePhotoEditorSpin__QorqZ{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.PhotoEditor-module_toolbar__RY-Ty{align-items:center;background:var(--nice-bg-secondary,#222226);border-bottom:1px solid var(--nice-border-color,#333);display:flex;justify-content:space-between;padding:var(--nice-space-2,8px) var(--nice-space-3-5,14px)}.PhotoEditor-module_toolbarGroup__PXw0-{display:flex;flex:0 0 auto;gap:var(--nice-space-1-5,6px)}.PhotoEditor-module_toolbarDivider__o3kFV{background:var(--nice-border-color,#444);margin:0 var(--nice-space-1,4px);width:1px}.PhotoEditor-module_toolbarTitle__P1o18{align-items:center;display:flex;flex:1 1 auto;font-size:14px;font-weight:700;justify-content:center;min-width:0;overflow:hidden;padding:0 var(--nice-space-2,8px);text-overflow:ellipsis;white-space:nowrap}.PhotoEditor-module_leftPanel__DnHLU{background:var(--nice-bg-secondary,#222226);border-right:1px solid var(--nice-border-color,#333);display:flex;flex-direction:column;min-width:280px;overflow:hidden;width:280px}.PhotoEditor-module_tabBar__DZ3MG{border-bottom:1px solid var(--nice-border-color,#333);display:flex;flex-wrap:wrap}.PhotoEditor-module_tabButton__BLi97{align-items:center;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary,#888);cursor:pointer;display:flex;flex:1 0 auto;flex-direction:column;font-size:10px;font-weight:600;gap:var(--nice-space-px,1px);min-width:34px;padding:var(--nice-space-2,8px) 0;transition:all .15s}.PhotoEditor-module_tabButtonActive__KlQG0{background:var(--nice-bg-secondary,#2a2a30)}.PhotoEditor-module_tabIcon__-Mq19{font-size:14px}.PhotoEditor-module_panelContent__l5i5t{flex:1;overflow-y:auto;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.PhotoEditor-module_sectionTitle__tMvCm{font-size:12px;font-weight:600;margin-bottom:var(--nice-space-1-5,6px)}.PhotoEditor-module_sectionTitleMb8__PQ-lV{margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_sectionInfo__bWxW5{color:var(--nice-text-muted,#aaa);font-size:11px}.PhotoEditor-module_pillRow__DGJUb,.PhotoEditor-module_sectionInfoMb__Hk6V-{margin-bottom:var(--nice-space-2-5,10px)}.PhotoEditor-module_pillRow__DGJUb{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px)}.PhotoEditor-module_pillRowMb8__AQrth{margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_pillRowGap3__Y46Vu{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-75,3px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_pill__wTFac{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-xl,12px);color:var(--nice-text-muted,#aaa);cursor:pointer;font-size:11px;font-weight:600;padding:var(--nice-space-0-75,3px) var(--nice-space-2-5,10px)}.PhotoEditor-module_pillActive__AfdZR{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_pillCrop__Nsisp{border-radius:var(--nice-radius-md,6px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.PhotoEditor-module_pillCropActive__p6csO{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_pillEmoji__I42DJ{border-radius:var(--nice-radius-lg,10px);padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PhotoEditor-module_pillEmojiActive__0-EM7{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_filterGrid__-29PS{display:grid;gap:var(--nice-space-1-5,6px);grid-template-columns:repeat(3,1fr)}.PhotoEditor-module_emojiGrid__whqqK{display:grid;gap:var(--nice-space-0-5,2px);grid-template-columns:repeat(6,1fr);max-height:260px;overflow-y:auto}.PhotoEditor-module_shapeGrid__TawIy{margin-bottom:var(--nice-space-4,16px)}.PhotoEditor-module_frameGrid__R09dd,.PhotoEditor-module_shapeGrid__TawIy{display:grid;gap:var(--nice-space-1,4px);grid-template-columns:repeat(5,1fr)}.PhotoEditor-module_sliderRow__jsWDQ{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_sliderLabel__zOZ49{color:var(--nice-text-muted,#aaa);font-size:11px}.PhotoEditor-module_sliderLabelSelf__EwYKU{align-self:center;margin-right:var(--nice-space-1,4px)}.PhotoEditor-module_sliderValue__qFuTw{font-size:11px;font-weight:600;min-width:28px}.PhotoEditor-module_sliderValueSm__U7FrJ{font-size:10px;min-width:28px}.PhotoEditor-module_adjustColumn__y---T{display:flex;flex-direction:column;gap:var(--nice-space-2,8px)}.PhotoEditor-module_adjustHeader__6s9zV{display:flex;font-size:11px;justify-content:space-between;margin-bottom:var(--nice-space-0-5,2px)}.PhotoEditor-module_adjustIcon__d56rY{text-align:center;width:14px}.PhotoEditor-module_adjustValue__aUUmg{cursor:pointer;font-weight:600;min-width:30px;text-align:right}.PhotoEditor-module_intensitySection__dhe5h{margin-top:var(--nice-space-3,12px);padding:var(--nice-space-2,8px) 0}.PhotoEditor-module_intensityHeader__-KKu6{display:flex;font-size:11px;justify-content:space-between;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_colorInput__xkF1h{border:none;cursor:pointer;height:28px;padding:0;width:28px}.PhotoEditor-module_colorInputLg__W2KrK{border:none;cursor:pointer;height:30px;padding:0;width:32px}.PhotoEditor-module_colorInputDraw__KYcdG{border:none;cursor:pointer;height:28px;padding:0;width:32px}.PhotoEditor-module_overlayToolbar__hfspp{border-bottom:1px solid var(--nice-border-color,#333);display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_overlayToolbarLabel__mc4pU{align-self:center;color:var(--nice-text-muted,#aaa);font-size:11px;margin-right:var(--nice-space-1,4px)}.PhotoEditor-module_overlayToolbarBtn__AdTmZ{font-size:11px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.PhotoEditor-module_overlaySection__IIl4r{border-top:1px solid var(--nice-border-color,#333);margin-top:var(--nice-space-3,12px);padding-top:var(--nice-space-2,8px)}.PhotoEditor-module_overlaySectionTitle__FRx3e{color:var(--nice-text-muted,#aaa);font-size:11px;font-weight:600;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_overlayItem__DGUCN{align-items:center;background:transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#ccc);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-0-5,2px);padding:var(--nice-space-0-75,3px) var(--nice-space-1-5,6px)}.PhotoEditor-module_overlayIcon__G0pFk{text-align:center;width:18px}.PhotoEditor-module_overlayName__JVh64{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PhotoEditor-module_overlayDeleteBtn__Ontxv{background:none;border:none;color:var(--nice-danger,#f55);cursor:pointer;font-size:11px;padding:0}.PhotoEditor-module_emojiBtn__jxG9m{background:transparent;border:none;border-radius:var(--nice-radius-md,6px);cursor:pointer;font-size:22px;line-height:1;padding:var(--nice-space-1,4px) 0}.PhotoEditor-module_shapeBtn__xZdSV{font-size:20px}.PhotoEditor-module_frameBtn__coMkZ,.PhotoEditor-module_shapeBtn__xZdSV{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-text-secondary,#eee);cursor:pointer;line-height:1;padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_frameBtn__coMkZ{font-size:18px}.PhotoEditor-module_removeFrameBtn__oCuua{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-danger,#f55);cursor:pointer;font-size:14px;padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_textFormatBtn__7Z9RJ{min-width:32px}.PhotoEditor-module_textFormatBtnSm__3ptcG{min-width:28px}.PhotoEditor-module_drawActionBtn__teYz4{flex:1}.PhotoEditor-module_textArea__sBGlB{background:var(--nice-bg-secondary,#2a2a30);border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-text-secondary,#eee);font-size:13px;margin-bottom:var(--nice-space-2,8px);resize:none}.PhotoEditor-module_textAreaSm__6xZnY{font-size:12px;margin-bottom:0}.PhotoEditor-module_textBtnRow__AcEnd{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_textGapRow__Dq2uz{display:flex;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1-5,6px)}.PhotoEditor-module_editSelectedSection__bgNEh{border-top:1px solid var(--nice-border-color,#333);margin-top:var(--nice-space-3,12px);padding-top:var(--nice-space-2,8px)}.PhotoEditor-module_editSelectedLabel__u2rmS{color:var(--nice-text-muted,#aaa);font-size:11px;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_shapeColorRow__ip5--{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_shapeColorLabel__nVcbU{align-self:center;color:var(--nice-text-muted,#aaa);font-size:11px;margin-right:var(--nice-space-0-5,2px)}.PhotoEditor-module_shapeColorLabelMl__KiM2d{margin-left:var(--nice-space-1,4px)}.PhotoEditor-module_shapeFillToggle__BXJ8C{font-size:10px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.PhotoEditor-module_frameColorRow__KRAHz{display:flex;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_frameThicknessWrap__lXCoC{align-items:center;display:flex;flex:1;gap:var(--nice-space-1,4px)}.PhotoEditor-module_frameThicknessValue__SAEuc{font-size:10px}.PhotoEditor-module_drawPreview__WPbiv{display:flex;justify-content:center;margin-bottom:var(--nice-space-3,12px)}.PhotoEditor-module_drawActionRow__CUSWS{display:flex;gap:var(--nice-space-1,4px)}.PhotoEditor-module_quickColorRow__DTy5E{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_quickColorSwatch__ZjgoA{border:1px solid var(--nice-border-color,#555);border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:18px;width:18px}.PhotoEditor-module_transformRow__LKRjS{display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-4,16px)}.PhotoEditor-module_transformZoomRow__h2NlB{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.PhotoEditor-module_transformZoomValue__LXa51{font-size:11px;font-weight:600;min-width:40px}.PhotoEditor-module_transformInfo__zXP9l{background:var(--nice-bg-secondary,#2a2a30);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-muted,#aaa);font-size:11px;margin-top:var(--nice-space-4,16px);padding:var(--nice-space-2-5,10px)}.PhotoEditor-module_canvasViewport__OMBIL{align-items:center;background:#111115;display:flex;flex:1;justify-content:center;overflow:auto;padding:var(--nice-space-5,20px);position:relative}.PhotoEditor-module_zoomWrap__JjfiJ{max-height:100%;max-width:100%;position:relative;transform-origin:center center;transition:transform .15s ease}.PhotoEditor-module_compareWrap__-J5ku{cursor:ew-resize;display:inline-block;position:relative}.PhotoEditor-module_canvasOriginal__Apf91{max-width:100%}.PhotoEditor-module_canvasEdited__Eroz7,.PhotoEditor-module_canvasOriginal__Apf91{display:block;max-height:60vh;object-fit:contain}.PhotoEditor-module_compareClip__5qG2I{bottom:0;left:0;overflow:hidden;position:absolute;top:0}.PhotoEditor-module_compareSlider__OIIIK{bottom:0;position:absolute;top:0;transform:translateX(-50%);width:3px}.PhotoEditor-module_compareSliderKnob__VohI9{align-items:center;border-radius:var(--nice-radius-full,50%);box-shadow:0 2px 8px var(--nice-overlay-40,rgba(0,0,0,.4));display:flex;height:28px;justify-content:center;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:28px}.PhotoEditor-module_compareSliderIcon__pXcct{color:var(--nice-text-primary,#fff);font-size:12px}.PhotoEditor-module_compareLabelOriginal__GaBoj{background:var(--nice-overlay-60,rgba(0,0,0,.6));color:var(--nice-text-on-primary,#fff);left:8px}.PhotoEditor-module_compareLabelEdited__Fr836,.PhotoEditor-module_compareLabelOriginal__GaBoj{border-radius:var(--nice-radius-sm,4px);font-size:11px;font-weight:600;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px);position:absolute;top:8px}.PhotoEditor-module_compareLabelEdited__Fr836{color:var(--nice-text-primary,#fff);right:8px}.PhotoEditor-module_regularWrap__8umPV{display:inline-block;position:relative}.PhotoEditor-module_canvasRegular__wxapL{border-radius:var(--nice-radius-md,6px);box-shadow:0 4px 20px var(--nice-overlay-40,rgba(0,0,0,.4));display:block;max-height:60vh;max-width:100%;object-fit:contain}.PhotoEditor-module_cropOverlay__MJk1Y{inset:0;pointer-events:none;position:absolute;z-index:2}.PhotoEditor-module_cropDarkBg__m3axV{background:var(--nice-overlay-55,rgba(0,0,0,.55));inset:0;position:absolute}.PhotoEditor-module_cropGridContainer__NfHdT{inset:0;position:absolute}.PhotoEditor-module_cropSizeLabel__fV2mF{background:var(--nice-overlay-75,rgba(0,0,0,.75));border-radius:var(--nice-radius-sm,3px);bottom:-24px;color:var(--nice-text-on-primary,#fff);font-size:10px;left:50%;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px);position:absolute;transform:translateX(-50%);white-space:nowrap}.PhotoEditor-module_cropInfo__Z1SCE{color:var(--nice-text-muted,#aaa);font-size:11px;margin-bottom:var(--nice-space-2-5,10px)}.PhotoEditor-module_cropAspectLabel__dieL-{font-size:12px;font-weight:600;margin-bottom:var(--nice-space-1-5,6px)}.PhotoEditor-module_cropAspectRow__scRj3{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px)}.PhotoEditor-module_accentBtn__tgaEx{color:var(--nice-text-primary,#fff);font-weight:600;width:100%}.GameAsset2dEditor-module_root__WVJBM{background:var(--nice-bg,#1a1a2e);color:var(--nice-text-secondary,#e0e0e0);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;height:100%;min-height:600px;user-select:none}.GameAsset2dEditor-module_menuBar__WaEaU{align-items:center;background:var(--nice-bg,#16213e);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_menuBar__WaEaU h3{color:var(--nice-warning,#ffd369);font-size:14px;font-weight:600;margin:0}.GameAsset2dEditor-module_menuGroup__EOreB{display:flex;gap:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_menuBtn__JYWXn{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted,#b0b0b0);cursor:pointer;display:flex;font-size:12px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px);transition:all .15s}.GameAsset2dEditor-module_menuBtn__JYWXn:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_menuBtn__JYWXn:disabled{cursor:not-allowed;opacity:.4}.GameAsset2dEditor-module_spacer__fPVeq{flex:1}.GameAsset2dEditor-module_modeTabs__iKh7C{background:var(--nice-bg,#1f2940);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_modeTab__C12zt{background:transparent;border:none;border-radius:var(--nice-radius-sm,4px) var(--nice-radius-sm,4px) 0 0;color:var(--nice-text-secondary,#8892a8);cursor:pointer;font-size:12px;font-weight:500;padding:var(--nice-space-1-5,6px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_modeTab__C12zt:hover{background:var(--nice-overlay-light-5,hsla(0,0%,100%,.05));color:var(--nice-text-on-primary,#c0c8d8)}.GameAsset2dEditor-module_modeTab__C12zt.GameAsset2dEditor-module_active__DUroI{background:var(--nice-bg,#1a1a2e);color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_mainArea__jwDUa{display:flex;flex:1;overflow:hidden}.GameAsset2dEditor-module_leftPanel__xxAg5{background:var(--nice-bg,#16213e);border-right:1px solid var(--nice-border-color,#0f3460);display:flex;flex-direction:column;overflow:hidden;width:220px}.GameAsset2dEditor-module_centerArea__xr-Hn{display:flex;flex:1;flex-direction:column;overflow:hidden}.GameAsset2dEditor-module_rightPanel__YoNuc{background:var(--nice-bg,#16213e);border-left:1px solid var(--nice-border-color,#0f3460);display:flex;flex-direction:column;overflow:hidden;width:260px}.GameAsset2dEditor-module_toolbar__hEC9S{align-items:center;background:var(--nice-bg,#1f2940);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_toolGroup__Zbn47{background:var(--nice-overlay-20,rgba(0,0,0,.2));border-radius:var(--nice-radius-sm,4px);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_toolBtn__5U7Rw{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:all .15s;width:28px}.GameAsset2dEditor-module_toolBtn__5U7Rw:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_toolBtn__5U7Rw.GameAsset2dEditor-module_active__DUroI{background:var(--nice-color-primary,#0f3460);color:var(--nice-text-on-primary,#ffd369)}.GameAsset2dEditor-module_toolBtn__5U7Rw:disabled{cursor:not-allowed;opacity:.3}.GameAsset2dEditor-module_viewport__vEKEv{background:var(--nice-bg,#0a0a14);flex:1;overflow:hidden;position:relative}.GameAsset2dEditor-module_viewportCanvas__FJ5qA{image-rendering:pixelated;image-rendering:crisp-edges;left:50%;position:absolute;top:50%}.GameAsset2dEditor-module_gridOverlay__K8B97{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.GameAsset2dEditor-module_panelHeader__xm2As{align-items:center;background:var(--nice-bg-tertiary,#0f3460);color:var(--nice-text-secondary,#8892a8);display:flex;font-size:11px;font-weight:600;justify-content:space-between;letter-spacing:.5px;padding:var(--nice-space-2,8px) var(--nice-space-3,12px);text-transform:uppercase}.GameAsset2dEditor-module_panelContent__dvOGq{flex:1;overflow-y:auto;padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_panelSection__RQQDr{margin-bottom:var(--nice-space-4,16px)}.GameAsset2dEditor-module_panelLabel__Ks-Wa{color:var(--nice-text-secondary,#8892a8);display:block;font-size:11px;letter-spacing:.5px;margin-bottom:var(--nice-space-1-5,6px);text-transform:uppercase}.GameAsset2dEditor-module_panelInput__cxNiG{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#e0e0e0);font-size:12px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);width:100%}.GameAsset2dEditor-module_panelInput__cxNiG:focus{border-color:var(--nice-warning,#ffd369);outline:none}.GameAsset2dEditor-module_tilePalette__OpzmV{display:grid;gap:var(--nice-space-1,4px);grid-template-columns:repeat(auto-fill,minmax(40px,1fr));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_tileItem__uWNS9{aspect-ratio:1;background:var(--nice-bg,#0a0a14);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;overflow:hidden;transition:all .15s}.GameAsset2dEditor-module_tileItem__uWNS9:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_tileItem__uWNS9.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_tileItem__uWNS9 img{height:100%;image-rendering:pixelated;object-fit:contain;width:100%}.GameAsset2dEditor-module_layersList__anFaG{display:flex;flex-direction:column;gap:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_layerItem__XSGlu{align-items:center;background:var(--nice-bg,#1f2940);border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:all .15s}.GameAsset2dEditor-module_layerItem__XSGlu:hover{background:var(--nice-hover-bg,#2a3a5e)}.GameAsset2dEditor-module_layerItem__XSGlu.GameAsset2dEditor-module_selected__216IN{background:var(--nice-selected-bg,#0f3460);border-left:3px solid var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_layerVisibility__RpHjV{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_layerVisibility__RpHjV:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1))}.GameAsset2dEditor-module_layerVisibility__RpHjV.GameAsset2dEditor-module_hidden__mukOG{opacity:.4}.GameAsset2dEditor-module_layerName__WBxq5{color:var(--nice-text-secondary,#c0c8d8);flex:1;font-size:12px}.GameAsset2dEditor-module_layerOpacity__FpzL-{color:var(--nice-text-secondary,#8892a8);font-size:10px;text-align:right;width:40px}.GameAsset2dEditor-module_framesList__vg1oO{display:grid;gap:var(--nice-space-2,8px);grid-template-columns:repeat(auto-fill,minmax(60px,1fr));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_frameItem__fkEfb{aspect-ratio:1;background:var(--nice-bg,#0a0a14);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;overflow:hidden;position:relative;transition:all .15s}.GameAsset2dEditor-module_frameItem__fkEfb:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_frameItem__fkEfb.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_frameItem__fkEfb canvas{height:100%;image-rendering:pixelated;object-fit:contain;width:100%}.GameAsset2dEditor-module_frameLabel__5IGW8{background:var(--nice-overlay-70,rgba(0,0,0,.7));bottom:0;color:var(--nice-text-muted,#b0b0b0);font-size:9px;left:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px);position:absolute;right:0;text-align:center}.GameAsset2dEditor-module_timeline__dPJk6{background:var(--nice-bg,#16213e);border-top:1px solid var(--nice-border-color,#0f3460);padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_timelineTrack__mr20w{background:var(--nice-bg,#0a0a14);border-radius:var(--nice-radius-sm,4px);display:flex;gap:var(--nice-space-1,4px);overflow-x:auto;padding:var(--nice-space-1,4px)}.GameAsset2dEditor-module_timelineFrame__AQyGe{background:var(--nice-bg,#1f2940);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;flex-shrink:0;height:48px;overflow:hidden;width:48px}.GameAsset2dEditor-module_timelineFrame__AQyGe:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_timelineFrame__AQyGe.GameAsset2dEditor-module_current__3sAfL{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_stateGraph__qAWlU{background:var(--nice-bg,#0a0a14);flex:1;overflow:hidden;position:relative}.GameAsset2dEditor-module_stateNode__W9Z-g{background:var(--nice-bg,#1f2940);border:2px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-lg,8px);cursor:move;min-width:120px;padding:var(--nice-space-2,8px) var(--nice-space-3,12px);position:absolute;transition:border-color .15s}.GameAsset2dEditor-module_stateNode__W9Z-g:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_stateNode__W9Z-g.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_stateNode__W9Z-g.GameAsset2dEditor-module_entry__cmA9n{border-color:var(--nice-success-light,#4ade80)}.GameAsset2dEditor-module_stateNodeName__TK5vs{color:var(--nice-text-secondary,#e0e0e0);font-size:12px;font-weight:500;text-align:center}.GameAsset2dEditor-module_stateNodeAnim__VGwnV{color:var(--nice-text-secondary,#8892a8);font-size:10px;margin-top:var(--nice-space-1,4px);text-align:center}.GameAsset2dEditor-module_transition__FBbno{stroke:var(--nice-text-secondary,#4a5a7e);stroke-width:2;fill:none;marker-end:url(#arrowhead)}.GameAsset2dEditor-module_transition__FBbno:hover{stroke:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_effectsList__vHq4I{display:flex;flex-direction:column;gap:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectItem__6-1li{background:var(--nice-bg,#1f2940);border-radius:var(--nice-radius-md,6px);overflow:hidden}.GameAsset2dEditor-module_effectHeader__cgVN-{align-items:center;cursor:pointer;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectToggle__lKE36{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:18px;width:18px}.GameAsset2dEditor-module_effectToggle__lKE36.GameAsset2dEditor-module_enabled__wgDzp{background:var(--nice-warning,#ffd369);border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_effectName__NQCWj{color:var(--nice-text-secondary,#c0c8d8);flex:1;font-size:12px}.GameAsset2dEditor-module_effectRemove__TSSdI{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_effectRemove__TSSdI:hover{background:var(--nice-danger,#ef4444);color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_effectParams__UqTBd{background:var(--nice-overlay-20,rgba(0,0,0,.2));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectParam__hEsVY{align-items:center;display:flex;gap:var(--nice-space-2,8px);margin-bottom:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectParam__hEsVY:last-child{margin-bottom:0}.GameAsset2dEditor-module_effectParamLabel__u0Qoc{color:var(--nice-text-secondary,#8892a8);flex:0 0 80px;font-size:11px}.GameAsset2dEditor-module_effectParamInput__aqxdv{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#e0e0e0);flex:1;font-size:11px;height:24px;padding:0 var(--nice-space-2,8px)}.GameAsset2dEditor-module_statusBar__eOrNe{align-items:center;background:var(--nice-bg-tertiary,#0f3460);color:var(--nice-text-secondary,#8892a8);display:flex;font-size:11px;gap:var(--nice-space-4,16px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_statusItem__kKLHF,.GameAsset2dEditor-module_zoomControl__4YD9G{align-items:center;display:flex;gap:var(--nice-space-1,4px)}.GameAsset2dEditor-module_zoomControl__4YD9G{margin-left:auto}.GameAsset2dEditor-module_zoomBtn__hxYik{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_zoomBtn__hxYik:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_dialogOverlay__dZYwO{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.GameAsset2dEditor-module_dialog__mfLFL{background:var(--nice-bg,#16213e);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-40,rgba(0,0,0,.4));max-width:500px;min-width:300px;padding:var(--nice-space-6,24px)}.GameAsset2dEditor-module_dialog__mfLFL h3{color:var(--nice-warning,#ffd369);font-size:16px;margin:0 0 var(--nice-space-4,16px)}.GameAsset2dEditor-module_dialogActions__vhDXe{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-5,20px)}.GameAsset2dEditor-module_btnPrimary__Gzc25{background:var(--nice-warning,#ffd369);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-on-primary,#1a1a2e);cursor:pointer;font-size:12px;font-weight:600;padding:var(--nice-space-2,8px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_btnPrimary__Gzc25:hover{background:color-mix(in srgb,var(--nice-warning,#ffd369) 80%,#fff)}.GameAsset2dEditor-module_btnSecondary__G5nK5{background:transparent;border:1px solid var(--nice-border-color,#4a5a7e);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#c0c8d8);cursor:pointer;font-size:12px;padding:var(--nice-space-2,8px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_btnSecondary__G5nK5:hover{background:var(--nice-overlay-light-5,hsla(0,0%,100%,.05));border-color:var(--nice-border-strong,#6a7a9e)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar{width:6px}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-track{background:var(--nice-bg,#0a0a14)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-thumb{background:var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-thumb:hover{background:var(--nice-text-secondary,#4a5a7e)}.GameAsset2dEditor-module_dropZone__Z7sYz{border:2px dashed var(--nice-border-color,#4a5a7e);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;padding:var(--nice-space-6,24px);text-align:center;transition:all .15s}.GameAsset2dEditor-module_dropZone__Z7sYz:hover{border-color:var(--nice-warning,#ffd369);color:var(--nice-text-secondary,#c0c8d8)}.GameAsset2dEditor-module_dropZone__Z7sYz.GameAsset2dEditor-module_active__DUroI{background:color-mix(in srgb,var(--nice-warning,#ffd369) 10%,transparent);border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_emptyState__3wryk{align-items:center;color:var(--nice-text-secondary,#8892a8);display:flex;flex-direction:column;justify-content:center;padding:var(--nice-space-8,32px);text-align:center}.GameAsset2dEditor-module_emptyState__3wryk svg{height:48px;margin-bottom:var(--nice-space-3,12px);opacity:.5;width:48px}.GameAsset2dEditor-module_emptyStateText__Q5V1a{font-size:12px;margin-bottom:var(--nice-space-3,12px)}
@@ -2,7 +2,8 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import React, { useState, useRef, useEffect } from 'react';
3
3
  import cs from './PhotoEditor.module.css.js';
4
4
 
5
- const FilterThumb = React.memo(({ filter, selected, accent, onSelect, generateThumbnail }) => {
5
+ const FilterThumb = /* @__PURE__ */ Object.assign(
6
+ /* @__PURE__ */ React.memo(({ filter, selected, accent, onSelect, generateThumbnail }) => {
6
7
  const [thumb, setThumb] = useState('');
7
8
  const canvasRef = useRef(null);
8
9
  const mounted = useRef(true);
@@ -22,7 +23,6 @@ const FilterThumb = React.memo(({ filter, selected, accent, onSelect, generateTh
22
23
  borderColor: selected ? accent : undefined,
23
24
  boxShadow: selected ? `0 0 0 2px ${accent}` : undefined,
24
25
  }, title: filter.name, children: [thumb ? (jsx("img", { src: thumb, alt: filter.name, className: cs.filterThumbImg })) : (jsx("div", { className: cs.filterThumbPlaceholder })), jsx("span", { className: cs.filterThumbLabel, children: filter.name })] }));
25
- });
26
- FilterThumb.displayName = 'FilterThumb';
26
+ }), { displayName: 'FilterThumb' });
27
27
 
28
28
  export { FilterThumb as default };
@@ -1,6 +1,7 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { NiceIcon } from '@nice2dev/ui-core';
3
3
  import { useState, useCallback } from 'react';
4
+ import { useNiceTranslation } from '../core/i18n.js';
4
5
 
5
6
  function luminance(r, g, b) {
6
7
  return 0.299 * r + 0.587 * g + 0.114 * b;
@@ -458,6 +459,7 @@ const TOOL_ICONS = {
458
459
  };
459
460
  const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
460
461
  var _a;
462
+ const { t } = useNiceTranslation();
461
463
  const ai = useAITools(sourceImage);
462
464
  const handleProcess = async () => {
463
465
  const result = await ai.process();
@@ -465,7 +467,7 @@ const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
465
467
  onResult(result);
466
468
  }
467
469
  };
468
- return (jsxs("div", { className: `nice-ai-tools ${className}`, style: { display: 'grid', gap: 8, fontSize: 13 }, children: [jsxs("strong", { style: { display: 'inline-flex', alignItems: 'center', gap: 4 }, children: [jsx(NiceIcon, { name: "wand", size: 16 }), " AI Tools"] }), jsx("div", { style: { display: 'flex', gap: 2, flexWrap: 'wrap' }, children: Object.entries(TOOL_LABELS).map(([key, label]) => (jsxs("button", { type: "button", onClick: () => ai.setActiveTool(key), style: {
470
+ return (jsxs("div", { className: `nice-ai-tools ${className}`, style: { display: 'grid', gap: 8, fontSize: 13 }, children: [jsxs("strong", { style: { display: 'inline-flex', alignItems: 'center', gap: 4 }, children: [jsx(NiceIcon, { name: "wand", size: 16 }), " ", t('aiTools.aiTools', 'AI Tools')] }), jsx("div", { style: { display: 'flex', gap: 2, flexWrap: 'wrap' }, children: Object.entries(TOOL_LABELS).map(([key, label]) => (jsxs("button", { type: "button", onClick: () => ai.setActiveTool(key), style: {
469
471
  flex: 1,
470
472
  padding: '4px 6px',
471
473
  fontSize: 11,
@@ -473,7 +475,7 @@ const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
473
475
  borderRadius: 4,
474
476
  border: '1px solid var(--nice-border, #e2e8f0)',
475
477
  background: ai.activeTool === key ? 'var(--nice-color-accent, #6366f1)' : 'transparent',
476
- color: ai.activeTool === key ? 'var(--nice-text-on-primary, #fff)' : 'inherit',
478
+ color: ai.activeTool === key ? 'var(--nice-color-white, #fff)' : 'inherit',
477
479
  minWidth: 100,
478
480
  display: 'inline-flex',
479
481
  alignItems: 'center',
@@ -482,11 +484,11 @@ const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
482
484
  }, children: [jsx(NiceIcon, { name: TOOL_ICONS[key], size: 14 }), " ", label] }, key))) }), ai.activeTool === 'colorize' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Intensity: ", ai.colorizeOptions.intensity.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.colorizeOptions.intensity, onChange: (e) => ai.setColorizeOptions({ ...ai.colorizeOptions, intensity: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Saturation: ", ai.colorizeOptions.saturation.toFixed(1), jsx("input", { type: "range", min: 0, max: 2, step: 0.1, value: ai.colorizeOptions.saturation, onChange: (e) => ai.setColorizeOptions({ ...ai.colorizeOptions, saturation: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Temperature:", jsxs("select", { value: ai.colorizeOptions.temperature, onChange: (e) => ai.setColorizeOptions({
483
485
  ...ai.colorizeOptions,
484
486
  temperature: e.target.value,
485
- }), style: { width: '100%' }, children: [jsx("option", { value: "warm", children: "Warm" }), jsx("option", { value: "neutral", children: "Neutral" }), jsx("option", { value: "cool", children: "Cool" })] })] })] })), ai.activeTool === 'background-remove' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Threshold: ", ai.bgRemoveOptions.threshold.toFixed(2), jsx("input", { type: "range", min: 0.1, max: 0.9, step: 0.05, value: ai.bgRemoveOptions.threshold, onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, threshold: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Iterations: ", ai.bgRemoveOptions.iterations, jsx("input", { type: "range", min: 1, max: 20, step: 1, value: ai.bgRemoveOptions.iterations, onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, iterations: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Feather: ", ai.bgRemoveOptions.featherRadius, "px", jsx("input", { type: "range", min: 0, max: 10, step: 1, value: ai.bgRemoveOptions.featherRadius, onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, featherRadius: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { style: { display: 'flex', gap: 4, alignItems: 'center' }, children: ["Replace BG:", jsx("input", { type: "color", value: (_a = ai.bgRemoveOptions.replacementColor) !== null && _a !== void 0 ? _a : '#ffffff', onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, replacementColor: e.target.value }) }), jsx("button", { type: "button", onClick: () => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, replacementColor: null }), style: { fontSize: 10 }, children: "Transparent" })] })] })), ai.activeTool === 'upscale' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Scale:", jsxs("select", { value: ai.upscaleOptions.scale, onChange: (e) => ai.setUpscaleOptions({ ...ai.upscaleOptions, scale: +e.target.value }), style: { width: '100%' }, children: [jsx("option", { value: 2, children: "2x" }), jsx("option", { value: 3, children: "3x" }), jsx("option", { value: 4, children: "4x" })] })] }), jsxs("label", { children: ["Sharpen: ", ai.upscaleOptions.sharpen.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.upscaleOptions.sharpen, onChange: (e) => ai.setUpscaleOptions({ ...ai.upscaleOptions, sharpen: +e.target.value }), style: { width: '100%' } })] })] })), ai.activeTool === 'denoise' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Strength: ", ai.denoiseOptions.strength.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.denoiseOptions.strength, onChange: (e) => ai.setDenoiseOptions({ ...ai.denoiseOptions, strength: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Detail: ", ai.denoiseOptions.detailPreservation.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.denoiseOptions.detailPreservation, onChange: (e) => ai.setDenoiseOptions({ ...ai.denoiseOptions, detailPreservation: +e.target.value }), style: { width: '100%' } })] })] })), jsx("button", { type: "button", onClick: handleProcess, disabled: ai.isProcessing || !sourceImage, style: {
487
+ }), style: { width: '100%' }, children: [jsx("option", { value: "warm", children: t('aiTools.warm', 'Warm') }), jsx("option", { value: "neutral", children: t('aiTools.neutral', 'Neutral') }), jsx("option", { value: "cool", children: t('aiTools.cool', 'Cool') })] })] })] })), ai.activeTool === 'background-remove' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Threshold: ", ai.bgRemoveOptions.threshold.toFixed(2), jsx("input", { type: "range", min: 0.1, max: 0.9, step: 0.05, value: ai.bgRemoveOptions.threshold, onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, threshold: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Iterations: ", ai.bgRemoveOptions.iterations, jsx("input", { type: "range", min: 1, max: 20, step: 1, value: ai.bgRemoveOptions.iterations, onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, iterations: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Feather: ", ai.bgRemoveOptions.featherRadius, "px", jsx("input", { type: "range", min: 0, max: 10, step: 1, value: ai.bgRemoveOptions.featherRadius, onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, featherRadius: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { style: { display: 'flex', gap: 4, alignItems: 'center' }, children: ["Replace BG:", jsx("input", { type: "color", value: (_a = ai.bgRemoveOptions.replacementColor) !== null && _a !== void 0 ? _a : '#ffffff', onChange: (e) => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, replacementColor: e.target.value }) }), jsx("button", { type: "button", onClick: () => ai.setBgRemoveOptions({ ...ai.bgRemoveOptions, replacementColor: null }), style: { fontSize: 10 }, children: t('aiTools.transparent', 'Transparent') })] })] })), ai.activeTool === 'upscale' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Scale:", jsxs("select", { value: ai.upscaleOptions.scale, onChange: (e) => ai.setUpscaleOptions({ ...ai.upscaleOptions, scale: +e.target.value }), style: { width: '100%' }, children: [jsx("option", { value: 2, children: "2x" }), jsx("option", { value: 3, children: "3x" }), jsx("option", { value: 4, children: "4x" })] })] }), jsxs("label", { children: ["Sharpen: ", ai.upscaleOptions.sharpen.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.upscaleOptions.sharpen, onChange: (e) => ai.setUpscaleOptions({ ...ai.upscaleOptions, sharpen: +e.target.value }), style: { width: '100%' } })] })] })), ai.activeTool === 'denoise' && (jsxs("div", { style: { display: 'grid', gap: 4 }, children: [jsxs("label", { children: ["Strength: ", ai.denoiseOptions.strength.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.denoiseOptions.strength, onChange: (e) => ai.setDenoiseOptions({ ...ai.denoiseOptions, strength: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Detail: ", ai.denoiseOptions.detailPreservation.toFixed(2), jsx("input", { type: "range", min: 0, max: 1, step: 0.05, value: ai.denoiseOptions.detailPreservation, onChange: (e) => ai.setDenoiseOptions({ ...ai.denoiseOptions, detailPreservation: +e.target.value }), style: { width: '100%' } })] })] })), jsx("button", { type: "button", onClick: handleProcess, disabled: ai.isProcessing || !sourceImage, style: {
486
488
  background: ai.isProcessing
487
489
  ? 'var(--nice-bg-tertiary, #94a3b8)'
488
490
  : 'var(--nice-color-accent, #6366f1)',
489
- color: 'var(--nice-text-on-primary, #fff)',
491
+ color: 'var(--nice-color-white, #fff)',
490
492
  border: 'none',
491
493
  borderRadius: 4,
492
494
  padding: '8px 12px',
@@ -495,7 +497,7 @@ const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
495
497
  alignItems: 'center',
496
498
  justifyContent: 'center',
497
499
  gap: 4,
498
- }, children: ai.isProcessing ? (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "refresh", size: 14 }), " Processing\u2026"] })) : (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "play", size: 14 }), " ", TOOL_LABELS[ai.activeTool]] })) }), ai.lastResult && (jsxs("div", { style: { fontSize: 11, color: 'var(--nice-text-muted, #64748b)' }, children: ["Processed in ", ai.lastResult.processingTimeMs.toFixed(0), "ms", ai.activeTool === 'upscale' &&
500
+ }, children: ai.isProcessing ? (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "refresh", size: 14 }), " Processing\u2026"] })) : (jsxs(Fragment, { children: [jsx(NiceIcon, { name: "play", size: 14 }), " ", TOOL_LABELS[ai.activeTool]] })) }), ai.lastResult && (jsxs("div", { style: { fontSize: 11, color: 'var(--nice-text-muted, #64748b)' }, children: [t('aiTools.processedInMs', 'Processed in {ms}ms').replace('{ms}', ai.lastResult.processingTimeMs.toFixed(0)), ai.activeTool === 'upscale' &&
499
501
  ` → ${ai.lastResult.imageData.width}×${ai.lastResult.imageData.height}`] }))] }));
500
502
  };
501
503
 
@@ -1,6 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { NiceAppShell } from '@nice2dev/ui';
3
3
  import { NiceIcon } from '@nice2dev/ui-core';
4
+ import { useNiceTranslation } from '../core/i18n.js';
4
5
  import cs from './PhotoEditor.module.css.js';
5
6
  import PhotoEditorCanvas from './PhotoEditorCanvas.js';
6
7
  import PhotoEditorLeftPanel from './PhotoEditorLeftPanel.js';
@@ -9,9 +10,10 @@ import { usePhotoEditor } from './usePhotoEditor.js';
9
10
 
10
11
  // ── Component ──
11
12
  function NicePhotoEditor(props) {
13
+ const { t } = useNiceTranslation();
12
14
  const api = usePhotoEditor(props);
13
15
  if (api.loading || !api.image) {
14
- return (jsx("div", { className: cs.loadingWrap, children: jsx(NiceIcon, { name: "refresh", size: 32, className: cs.loadingSpin, title: "Loading" }) }));
16
+ return (jsx("div", { className: cs.loadingWrap, children: jsx(NiceIcon, { name: "refresh", size: 32, className: cs.loadingSpin, title: t('photoEditor.loading', 'Loading') }) }));
15
17
  }
16
18
  return (jsx(NiceAppShell, { className: cs.wrapper, flush: true, toolbar: jsx(PhotoEditorToolbar, { api: api }), sidebar: jsx(PhotoEditorLeftPanel, { api: api }), children: jsx(PhotoEditorCanvas, { api: api }) }));
17
19
  }
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { NiceIcon } from '@nice2dev/ui-core';
3
3
  import React from 'react';
4
+ import { useNiceTranslation } from '../core/i18n.js';
4
5
  import cs from './PhotoEditor.module.css.js';
5
6
 
6
7
  // ── Crop Overlay (rule-of-thirds + 8 handles + size indicator) ──
@@ -74,18 +75,19 @@ const CropOverlay = ({ api }) => {
74
75
  }, onMouseDown: (e) => handleCropMouseDown(e, 'e') }), jsxs("div", { className: cs.cropSizeLabel, children: [Math.round(cropRect.w), " \u00D7 ", Math.round(cropRect.h)] })] })] }));
75
76
  };
76
77
  // ── Canvas Viewport ──
77
- const PhotoEditorCanvas = React.memo(({ api }) => {
78
+ const PhotoEditorCanvas = /* @__PURE__ */ Object.assign(
79
+ /* @__PURE__ */ React.memo(({ api }) => {
80
+ const { t } = useNiceTranslation();
78
81
  const { containerRef, activeTab, zoom, accent, showCompare, comparePosition, setCompareDragging, mainCanvasRef, compareCanvasRef, handleCanvasMouseDown, handleCanvasMouseMove, handleCanvasMouseUp, } = api;
79
82
  return (jsx("div", { ref: containerRef, className: cs.canvasViewport, style: { cursor: activeTab === 'draw' ? 'crosshair' : undefined }, onMouseDown: handleCanvasMouseDown, onMouseMove: handleCanvasMouseMove, onMouseUp: handleCanvasMouseUp, onMouseLeave: handleCanvasMouseUp, children: jsx("div", { className: cs.zoomWrap, style: { transform: `scale(${zoom})` }, children: showCompare ? (
80
83
  // ── Before / After comparison ──
81
- jsxs("div", { className: cs.compareWrap, onMouseDown: () => setCompareDragging(true), children: [jsx("canvas", { ref: compareCanvasRef, className: cs.canvasOriginal, role: "img", "aria-label": "Photo editor original preview canvas" }), jsx("div", { className: cs.compareClip, style: { width: `${comparePosition}%` }, children: jsx("canvas", { ref: mainCanvasRef, className: cs.canvasEdited, role: "img", "aria-label": "Photo editor edited preview canvas" }) }), jsx("div", { className: cs.compareSlider, style: {
84
+ jsxs("div", { className: cs.compareWrap, onMouseDown: () => setCompareDragging(true), children: [jsx("canvas", { ref: compareCanvasRef, className: cs.canvasOriginal, role: "img", "aria-label": t('photoEditorCanvas.photoEditorOriginalPreviewCanvas', 'Photo editor original preview canvas') }), jsx("div", { className: cs.compareClip, style: { width: `${comparePosition}%` }, children: jsx("canvas", { ref: mainCanvasRef, className: cs.canvasEdited, role: "img", "aria-label": t('photoEditorCanvas.photoEditorEditedPreviewCanvas', 'Photo editor edited preview canvas') }) }), jsx("div", { className: cs.compareSlider, style: {
82
85
  left: `${comparePosition}%`,
83
86
  background: accent,
84
87
  boxShadow: `0 0 8px ${accent}`,
85
- }, children: jsx("div", { className: cs.compareSliderKnob, style: { background: accent }, children: jsx(NiceIcon, { name: "move", size: 14, className: cs.compareSliderIcon }) }) }), jsx("div", { className: cs.compareLabelOriginal, children: "Original" }), jsx("div", { className: cs.compareLabelEdited, style: { background: `${accent}cc` }, children: "Edited" })] })) : (
88
+ }, children: jsx("div", { className: cs.compareSliderKnob, style: { background: accent }, children: jsx(NiceIcon, { name: "move", size: 14, className: cs.compareSliderIcon }) }) }), jsx("div", { className: cs.compareLabelOriginal, children: t('photoEditorCanvas.original', 'Original') }), jsx("div", { className: cs.compareLabelEdited, style: { background: `${accent}cc` }, children: t('photoEditorCanvas.edited', 'Edited') })] })) : (
86
89
  // ── Regular canvas view ──
87
- jsxs("div", { className: cs.regularWrap, children: [jsx("canvas", { ref: mainCanvasRef, className: cs.canvasRegular, role: "img", "aria-label": "Photo editor canvas" }), jsx(CropOverlay, { api: api })] })) }) }));
88
- });
89
- PhotoEditorCanvas.displayName = 'PhotoEditorCanvas';
90
+ jsxs("div", { className: cs.regularWrap, children: [jsx("canvas", { ref: mainCanvasRef, className: cs.canvasRegular, role: "img", "aria-label": t('photoEditorCanvas.photoEditorCanvas', 'Photo editor canvas') }), jsx(CropOverlay, { api: api })] })) }) }));
91
+ }), { displayName: 'PhotoEditorCanvas' });
90
92
 
91
93
  export { PhotoEditorCanvas as default };