@nice2dev/ui-graphics 1.1.10 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +70 -0
- package/README.md +60 -63
- package/dist/cjs/animation/AnimationEditor.js +0 -3
- package/dist/cjs/animation/BodyRenderer.js +1 -4
- package/dist/cjs/animation/shapes/heads.js +0 -3
- package/dist/cjs/core/NiceBrushEngine.js +1 -3
- package/dist/cjs/font/NiceFontEditor.js +3 -3
- package/dist/cjs/game/GameAsset2dEditor.js +0 -3
- package/dist/cjs/index.js +0 -11
- package/dist/cjs/nice2dev-ui-graphics.css +1 -1
- package/dist/cjs/photo/NiceAITools.js +2 -2
- package/dist/cjs/photo/PhotoEditorToolbar.js +1 -1
- package/dist/cjs/pixel/PixelEditor.js +0 -3
- package/dist/cjs/pixel/PixelEditor.module.css.js +1 -1
- package/dist/cjs/pixel/SpriteGeneratorPanel.js +3 -3
- package/dist/cjs/texture/Nice3DTexturePainter.js +2 -2
- package/dist/cjs/ui/NiceUIDesigner.js +1 -1
- package/dist/cjs/vector/VectorEditor.js +0 -3
- package/dist/esm/animation/AnimationEditor.js +1 -3
- package/dist/esm/animation/BodyRenderer.js +3 -5
- package/dist/esm/animation/shapes/heads.js +1 -3
- package/dist/esm/core/NiceBrushEngine.js +1 -3
- package/dist/esm/font/NiceFontEditor.js +3 -3
- package/dist/esm/game/GameAsset2dEditor.js +1 -3
- package/dist/esm/index.js +10 -10
- package/dist/esm/nice2dev-ui-graphics.css +1 -1
- package/dist/esm/photo/NiceAITools.js +2 -2
- package/dist/esm/photo/PhotoEditorToolbar.js +1 -1
- package/dist/esm/pixel/PixelEditor.js +1 -3
- package/dist/esm/pixel/PixelEditor.module.css.js +1 -1
- package/dist/esm/pixel/SpriteGeneratorPanel.js +3 -3
- package/dist/esm/texture/Nice3DTexturePainter.js +2 -2
- package/dist/esm/ui/NiceUIDesigner.js +1 -1
- package/dist/esm/vector/VectorEditor.js +1 -3
- package/dist/types/animation/AnimatedPerson.d.ts +0 -4
- package/dist/types/animation/AnimationEditor.d.ts +1 -5
- package/dist/types/animation/Audience.d.ts +0 -4
- package/dist/types/animation/BodyRenderer.d.ts +0 -4
- package/dist/types/animation/rig/RigPlayer.d.ts +0 -7
- package/dist/types/animation/rig/RiggedBody.d.ts +0 -4
- package/dist/types/animation/shapes/heads.d.ts +0 -4
- package/dist/types/game/GameAsset2dEditor.d.ts +0 -4
- package/dist/types/game/index.d.ts +1 -1
- package/dist/types/index.d.ts +9 -19
- package/dist/types/photo/index.d.ts +0 -2
- package/dist/types/pixel/PixelEditor.d.ts +0 -4
- package/dist/types/pixel/SpriteGeneratorPanel.d.ts +0 -4
- package/dist/types/vector/VectorEditor.d.ts +0 -4
- package/package.json +3 -3
|
@@ -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:#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)}
|
|
@@ -475,7 +475,7 @@ const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
|
|
|
475
475
|
borderRadius: 4,
|
|
476
476
|
border: '1px solid var(--nice-border, #e2e8f0)',
|
|
477
477
|
background: ai.activeTool === key ? 'var(--nice-color-accent, #6366f1)' : 'transparent',
|
|
478
|
-
color: ai.activeTool === key ? 'var(--nice-
|
|
478
|
+
color: ai.activeTool === key ? 'var(--nice-color-white, #fff)' : 'inherit',
|
|
479
479
|
minWidth: 100,
|
|
480
480
|
display: 'inline-flex',
|
|
481
481
|
alignItems: 'center',
|
|
@@ -488,7 +488,7 @@ const NiceAITools = ({ sourceImage, onResult, className = '', }) => {
|
|
|
488
488
|
background: ai.isProcessing
|
|
489
489
|
? 'var(--nice-bg-tertiary, #94a3b8)'
|
|
490
490
|
: 'var(--nice-color-accent, #6366f1)',
|
|
491
|
-
color: 'var(--nice-
|
|
491
|
+
color: 'var(--nice-color-white, #fff)',
|
|
492
492
|
border: 'none',
|
|
493
493
|
borderRadius: 4,
|
|
494
494
|
padding: '8px 12px',
|
|
@@ -11,7 +11,7 @@ const PhotoEditorToolbar = React.memo(({ api }) => {
|
|
|
11
11
|
return (jsxRuntime.jsxs("div", { className: PhotoEditor_module.toolbar, children: [jsxRuntime.jsxs("div", { className: PhotoEditor_module.toolbarGroup, children: [jsxRuntime.jsx(LocalUI.Button, { variant: "dark", size: "sm", onClick: undo, disabled: historyIdx <= 0, title: `${t('photoEditor.undo', 'Undo')} (Ctrl+Z)`, children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "reply", size: 14 }) }), jsxRuntime.jsx(LocalUI.Button, { variant: "dark", size: "sm", onClick: redo, disabled: historyIdx >= historyLength - 1, title: t('photoEditor.redo', 'Redo (Ctrl+Y)'), children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "forward", size: 14 }) }), jsxRuntime.jsx(LocalUI.Button, { variant: "dark", size: "sm", onClick: handleReset, title: "Reset", children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "refresh", size: 14 }) }), jsxRuntime.jsx("div", { className: PhotoEditor_module.toolbarDivider }), jsxRuntime.jsx(LocalUI.Button, { variant: showCompare ? 'outline-info' : 'dark', size: "sm", onClick: () => setShowCompare(!showCompare), title: t('photoEditor.compareOriginal', 'Compare with original'), children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "columns", size: 14 }) }), jsxRuntime.jsx("div", { className: PhotoEditor_module.toolbarDivider }), jsxRuntime.jsx(LocalUI.Button, { variant: "dark", size: "sm", onClick: handleDownload, title: "Download", children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "download", size: 14 }) }), jsxRuntime.jsx(LocalUI.Button, { variant: "dark", size: "sm", onClick: handleCopyToClipboard, title: "Copy to clipboard", children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "clipboard", size: 14 }) }), jsxRuntime.jsx(LocalUI.Button, { variant: "dark", size: "sm", onClick: handleShareNative, title: t('common.share', 'Share'), children: jsxRuntime.jsx(uiCore.NiceIcon, { name: "send", size: 14 }) })] }), jsxRuntime.jsxs("div", { className: PhotoEditor_module.toolbarTitle, style: { color: accent }, children: [jsxRuntime.jsx(uiCore.NiceIcon, { name: "wand", size: 14, style: { marginRight: 8 } }), t('photoEditor.title', 'Photo Editor')] }), jsxRuntime.jsxs("div", { className: PhotoEditor_module.toolbarGroup, children: [jsxRuntime.jsxs(LocalUI.Button, { variant: "outline-secondary", size: "sm", onClick: onCancel, children: [jsxRuntime.jsx(uiCore.NiceIcon, { name: "close", size: 14, style: { marginRight: 4 } }), ' ', t('common.cancel', 'Cancel')] }), jsxRuntime.jsxs(LocalUI.Button, { size: "sm", style: {
|
|
12
12
|
background: accent,
|
|
13
13
|
borderColor: accent,
|
|
14
|
-
color: 'var(--nice-
|
|
14
|
+
color: 'var(--nice-color-white, #fff)',
|
|
15
15
|
fontWeight: 600,
|
|
16
16
|
}, onClick: handleSave, children: [jsxRuntime.jsx(uiCore.NiceIcon, { name: "check", size: 14, style: { marginRight: 4 } }), ' ', t('photoEditor.apply', 'Apply')] })] })] }));
|
|
17
17
|
});
|
|
@@ -43,8 +43,5 @@ const NicePixelEditor = ({ initialWidth = 64, initialHeight = 64, className, onS
|
|
|
43
43
|
api.setNh(h);
|
|
44
44
|
}, children: [w, "x", h] }, `${w}x${h}`))) }), jsxRuntime.jsxs("div", { className: PixelEditor_module.dialogActions, children: [jsxRuntime.jsx(ui.NiceButton, { className: PixelEditor_module.btnSecondary, variant: "ghost", onClick: () => api.setDlgNew(false), children: "Cancel" }), jsxRuntime.jsx(ui.NiceButton, { className: PixelEditor_module.btnPrimary, variant: "primary", onClick: () => api.newDoc(api.nw, api.nh), children: "Create" })] })] })] }));
|
|
45
45
|
};
|
|
46
|
-
/** @deprecated Use NicePixelEditor */
|
|
47
|
-
const PixelEditor = NicePixelEditor;
|
|
48
46
|
|
|
49
47
|
exports.NicePixelEditor = NicePixelEditor;
|
|
50
|
-
exports.PixelEditor = PixelEditor;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var styles = {"menuBar":"PixelEditor-module_menuBar__8JFld","menuSep":"PixelEditor-module_menuSep__pNZsR","toolbar":"PixelEditor-module_toolbar__paCGq","toolBtn":"PixelEditor-module_toolBtn__wD1Kj","toolBtnActive":"PixelEditor-module_toolBtnActive__R51U0","canvasContainer":"PixelEditor-module_canvasContainer__8z2AY","rightPanel":"PixelEditor-module_rightPanel__ZjrCh","panelSection":"PixelEditor-module_panelSection__3l225","collapseChevron":"PixelEditor-module_collapseChevron__Yuvz6","layerActions":"PixelEditor-module_layerActions__pZH1f","panelTitle":"PixelEditor-module_panelTitle__vYyeO","layerItem":"PixelEditor-module_layerItem__J-gtn","layerItemActive":"PixelEditor-module_layerItemActive__yPt29","layerVis":"PixelEditor-module_layerVis__Uj7n2","layerName":"PixelEditor-module_layerName__HovwJ","layerOpacity":"PixelEditor-module_layerOpacity__qmWvu","paletteGrid":"PixelEditor-module_paletteGrid__knY-n","paletteSwatch":"PixelEditor-module_paletteSwatch__MUbha","paletteSwatchActive":"PixelEditor-module_paletteSwatchActive__wDR4T","bottomPanel":"PixelEditor-module_bottomPanel__rviLF","timelineControls":"PixelEditor-module_timelineControls__Laroq","timelineFrames":"PixelEditor-module_timelineFrames__dw06F","frameThumb":"PixelEditor-module_frameThumb__2E9mG","frameThumbActive":"PixelEditor-module_frameThumbActive__Z0eK4","frameNum":"PixelEditor-module_frameNum__PoGQC","statusBar":"PixelEditor-module_statusBar__QnphD","dialogActions":"PixelEditor-module_dialogActions__fOa7a","btnPrimary":"PixelEditor-module_btnPrimary__FYlTy","btnSecondary":"PixelEditor-module_btnSecondary__qLfyJ","brushSlider":"PixelEditor-module_brushSlider__UxQ38","toolSep":"PixelEditor-module_toolSep__YIu-E","toolGroup":"PixelEditor-module_toolGroup__xA2lN","miniBtn":"PixelEditor-module_miniBtn__tg5N0","miniBtnActive":"PixelEditor-module_miniBtnActive__gpveu","colorSwatches":"PixelEditor-module_colorSwatches__jFuRX","brushShapes":"PixelEditor-module_brushShapes__2bBfl","pressureToggles":"PixelEditor-module_pressureToggles__AITuh","checkLabel":"PixelEditor-module_checkLabel__-d-TA","hsvPicker":"PixelEditor-module_hsvPicker__0ERIh","layerLock":"PixelEditor-module_layerLock__xeWnc","layerNameInput":"PixelEditor-module_layerNameInput__ZiOKv","layerControls":"PixelEditor-module_layerControls__MrpXo","blendSelect":"PixelEditor-module_blendSelect__QCwns","layerOpSlider":"PixelEditor-module_layerOpSlider__Vw-qs","genPanel":"PixelEditor-module_genPanel__99Md8","
|
|
3
|
+
var styles = {"menuBar":"PixelEditor-module_menuBar__8JFld","menuSep":"PixelEditor-module_menuSep__pNZsR","toolbar":"PixelEditor-module_toolbar__paCGq","toolBtn":"PixelEditor-module_toolBtn__wD1Kj","toolBtnActive":"PixelEditor-module_toolBtnActive__R51U0","canvasContainer":"PixelEditor-module_canvasContainer__8z2AY","rightPanel":"PixelEditor-module_rightPanel__ZjrCh","panelSection":"PixelEditor-module_panelSection__3l225","collapseChevron":"PixelEditor-module_collapseChevron__Yuvz6","layerActions":"PixelEditor-module_layerActions__pZH1f","panelTitle":"PixelEditor-module_panelTitle__vYyeO","layerItem":"PixelEditor-module_layerItem__J-gtn","layerItemActive":"PixelEditor-module_layerItemActive__yPt29","layerVis":"PixelEditor-module_layerVis__Uj7n2","layerName":"PixelEditor-module_layerName__HovwJ","layerOpacity":"PixelEditor-module_layerOpacity__qmWvu","paletteGrid":"PixelEditor-module_paletteGrid__knY-n","paletteSwatch":"PixelEditor-module_paletteSwatch__MUbha","paletteSwatchActive":"PixelEditor-module_paletteSwatchActive__wDR4T","bottomPanel":"PixelEditor-module_bottomPanel__rviLF","timelineControls":"PixelEditor-module_timelineControls__Laroq","timelineFrames":"PixelEditor-module_timelineFrames__dw06F","frameThumb":"PixelEditor-module_frameThumb__2E9mG","frameThumbActive":"PixelEditor-module_frameThumbActive__Z0eK4","frameNum":"PixelEditor-module_frameNum__PoGQC","statusBar":"PixelEditor-module_statusBar__QnphD","dialogActions":"PixelEditor-module_dialogActions__fOa7a","btnPrimary":"PixelEditor-module_btnPrimary__FYlTy","btnSecondary":"PixelEditor-module_btnSecondary__qLfyJ","brushSlider":"PixelEditor-module_brushSlider__UxQ38","toolSep":"PixelEditor-module_toolSep__YIu-E","toolGroup":"PixelEditor-module_toolGroup__xA2lN","miniBtn":"PixelEditor-module_miniBtn__tg5N0","miniBtnActive":"PixelEditor-module_miniBtnActive__gpveu","colorSwatches":"PixelEditor-module_colorSwatches__jFuRX","brushShapes":"PixelEditor-module_brushShapes__2bBfl","pressureToggles":"PixelEditor-module_pressureToggles__AITuh","checkLabel":"PixelEditor-module_checkLabel__-d-TA","hsvPicker":"PixelEditor-module_hsvPicker__0ERIh","layerLock":"PixelEditor-module_layerLock__xeWnc","layerNameInput":"PixelEditor-module_layerNameInput__ZiOKv","layerControls":"PixelEditor-module_layerControls__MrpXo","blendSelect":"PixelEditor-module_blendSelect__QCwns","layerOpSlider":"PixelEditor-module_layerOpSlider__Vw-qs","genPanel":"PixelEditor-module_genPanel__99Md8","genTabs":"PixelEditor-module_genTabs__No5Za","genTabBtn":"PixelEditor-module_genTabBtn__e2VhB","genTabBtnActive":"PixelEditor-module_genTabBtnActive__Rt3jQ","genBody":"PixelEditor-module_genBody__MuiQy","genLeft":"PixelEditor-module_genLeft__JdEw6","genCenter":"PixelEditor-module_genCenter__c5X0S","genRight":"PixelEditor-module_genRight__qFz11","genPreviewWrap":"PixelEditor-module_genPreviewWrap__360F-","genPreviewCanvas":"PixelEditor-module_genPreviewCanvas__75Lw2","genDirGrid":"PixelEditor-module_genDirGrid__xjEp7","genRow":"PixelEditor-module_genRow__awCw9","genPresetGrid":"PixelEditor-module_genPresetGrid__f9XK6","genPresetBtn":"PixelEditor-module_genPresetBtn__5C2We","genPresetBtnActive":"PixelEditor-module_genPresetBtnActive__WAGew","genPartGrid":"PixelEditor-module_genPartGrid__l17oc","genPartBtn":"PixelEditor-module_genPartBtn__5OO82","genColorSwatches":"PixelEditor-module_genColorSwatches__acI6q","genColorSwatch":"PixelEditor-module_genColorSwatch__JE8BO","genAssemblyItem":"PixelEditor-module_genAssemblyItem__zNL2P","genAssemblyName":"PixelEditor-module_genAssemblyName__GU-kr","genFooter":"PixelEditor-module_genFooter__WkyJp","btnIcon":"PixelEditor-module_btnIcon__O59l9","propSelect":"PixelEditor-module_propSelect__4P0Qi"};
|
|
4
4
|
|
|
5
5
|
module.exports = styles;
|
|
@@ -271,7 +271,7 @@ const NiceSpriteGeneratorPanel = ({ onSendToCanvas, onClose, mode,
|
|
|
271
271
|
}
|
|
272
272
|
}, [tab, skinPalette, hairPalette, clothPalette, wallPalette, roofPalette, furPalette]);
|
|
273
273
|
/* ── Render ── */
|
|
274
|
-
return (jsxRuntime.jsx(ui.NiceModal, { open: true, onClose: onClose !== null && onClose !== void 0 ? onClose : (() => { }), title: "Sprite Generator",
|
|
274
|
+
return (jsxRuntime.jsx(ui.NiceModal, { open: true, onClose: onClose !== null && onClose !== void 0 ? onClose : (() => { }), title: "Sprite Generator", size: "xl", children: jsxRuntime.jsxs("div", { className: PixelEditor_module.genPanel, children: [jsxRuntime.jsx("div", { className: PixelEditor_module.genTabs, children: ['character', 'building', 'animal'].map((t) => (jsxRuntime.jsxs(ui.NiceButton, { className: `${PixelEditor_module.genTabBtn} ${tab === t ? PixelEditor_module.genTabBtnActive : ''}`, variant: tab === t ? 'primary' : 'ghost', size: "sm", onClick: () => setTab(t), children: [jsxRuntime.jsx(uiCore.NiceIcon, { name: t === 'character' ? 'user' : t === 'building' ? 'home' : 'heart', size: 14 }), ' ', t.charAt(0).toUpperCase() + t.slice(1)] }, t))) }), jsxRuntime.jsxs("div", { className: PixelEditor_module.genBody, children: [jsxRuntime.jsxs("div", { className: PixelEditor_module.genLeft, children: [jsxRuntime.jsxs("div", { className: PixelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: PixelEditor_module.panelTitle, children: jsxRuntime.jsx("span", { children: "Presets" }) }), jsxRuntime.jsx("div", { className: PixelEditor_module.genPresetGrid, children: presets.map((preset, i) => (jsxRuntime.jsx(ui.NiceButton, { className: `${PixelEditor_module.genPresetBtn} ${i === selectedPresetIdx ? PixelEditor_module.genPresetBtnActive : ''}`, variant: i === selectedPresetIdx ? 'primary' : 'ghost', size: "sm", onClick: () => applyPreset(i), title: preset.name, children: preset.name }, i))) })] }), jsxRuntime.jsxs("div", { className: PixelEditor_module.panelSection, style: { flex: 1, overflowY: 'auto' }, children: [jsxRuntime.jsx("div", { className: PixelEditor_module.panelTitle, children: jsxRuntime.jsx("span", { children: "Parts" }) }), categories.map((cat) => {
|
|
275
275
|
const parts = spriteGeneratorCore.getPartsByCategory(cat);
|
|
276
276
|
if (parts.length === 0) {
|
|
277
277
|
return null;
|
|
@@ -283,13 +283,13 @@ const NiceSpriteGeneratorPanel = ({ onSendToCanvas, onClose, mode,
|
|
|
283
283
|
textTransform: 'uppercase',
|
|
284
284
|
}, children: cat.replace(/([A-Z])/g, ' $1').trim() }), jsxRuntime.jsx("div", { className: PixelEditor_module.genPartGrid, children: parts.map((part) => {
|
|
285
285
|
const active = selectedParts.some((p) => { var _a; return p.partId === part.id && ((_a = p.visible) !== null && _a !== void 0 ? _a : true); });
|
|
286
|
-
return (jsxRuntime.jsx(ui.NiceButton, { className: `${PixelEditor_module.miniBtn} ${active ? PixelEditor_module.miniBtnActive : ''}`, variant: active ? 'primary' : 'ghost', size: "sm", onClick: () => (active ? removePart(part.id) : addPart(part.id)), title: part.name, children: part.name
|
|
286
|
+
return (jsxRuntime.jsx(ui.NiceButton, { className: `${PixelEditor_module.miniBtn} ${PixelEditor_module.genPartBtn} ${active ? PixelEditor_module.miniBtnActive : ''}`, variant: active ? 'primary' : 'ghost', size: "sm", onClick: () => (active ? removePart(part.id) : addPart(part.id)), title: part.name, children: part.name }, part.id));
|
|
287
287
|
}) })] }, cat));
|
|
288
288
|
})] })] }), jsxRuntime.jsxs("div", { className: PixelEditor_module.genCenter, children: [jsxRuntime.jsx("div", { className: PixelEditor_module.genPreviewWrap, children: jsxRuntime.jsx("canvas", { ref: previewRef, className: PixelEditor_module.genPreviewCanvas }) }), jsxRuntime.jsx("div", { className: PixelEditor_module.genDirGrid, children: spriteGeneratorCore.ALL_DIRECTIONS.map((d) => (jsxRuntime.jsx(ui.NiceButton, { className: `${PixelEditor_module.miniBtn} ${direction === d ? PixelEditor_module.miniBtnActive : ''}`, variant: direction === d ? 'primary' : 'ghost', size: "sm", onClick: () => setDirection(d), children: d }, d))) }), jsxRuntime.jsxs("div", { className: PixelEditor_module.genRow, children: [jsxRuntime.jsx("label", { style: { fontSize: 10, color: 'var(--nice-text-muted)' }, children: "Projection" }), jsxRuntime.jsx(ui.NiceSelect, { className: PixelEditor_module.propSelect, value: projection, onChange: (val) => setProjection(val), options: [
|
|
289
289
|
{ value: 'topDown', label: 'Top-Down' },
|
|
290
290
|
{ value: 'sideView', label: 'Side View' },
|
|
291
291
|
{ value: 'iso25d', label: '2.5D Isometric' },
|
|
292
|
-
] })] }), jsxRuntime.jsxs("div", { className: PixelEditor_module.genRow, children: [jsxRuntime.jsx("label", { style: { fontSize: 10, color: 'var(--nice-text-muted)' }, children: "Size" }), jsxRuntime.jsx(ui.NiceNumberInput, {
|
|
292
|
+
] })] }), jsxRuntime.jsxs("div", { className: PixelEditor_module.genRow, children: [jsxRuntime.jsx("label", { style: { fontSize: 10, color: 'var(--nice-text-muted)' }, children: "Size" }), jsxRuntime.jsx(ui.NiceNumberInput, { min: 8, max: 256, value: canvasW, onChange: (val) => setCanvasW(val !== null && val !== void 0 ? val : 32) }), jsxRuntime.jsx("span", { style: { fontSize: 10, color: 'var(--nice-text-muted)' }, children: "\u00D7" }), jsxRuntime.jsx(ui.NiceNumberInput, { min: 8, max: 256, value: canvasH, onChange: (val) => setCanvasH(val !== null && val !== void 0 ? val : 32) })] }), jsxRuntime.jsx(ui.NiceCheckbox, { checked: generate8Dir, onChange: (checked) => setGenerate8Dir(checked), label: "Generate 8-direction sheet", className: PixelEditor_module.checkLabel })] }), jsxRuntime.jsxs("div", { className: PixelEditor_module.genRight, children: [jsxRuntime.jsxs("div", { className: PixelEditor_module.panelSection, children: [jsxRuntime.jsx("div", { className: PixelEditor_module.panelTitle, children: jsxRuntime.jsx("span", { children: "Colors" }) }), paletteGroups.map((group) => {
|
|
293
293
|
var _a;
|
|
294
294
|
return (jsxRuntime.jsxs("div", { style: { marginBottom: 6 }, children: [jsxRuntime.jsx("div", { style: { fontSize: 9, color: 'var(--nice-text-muted)', marginBottom: 2 }, children: group.label }), jsxRuntime.jsx(ui.NiceSelect, { className: PixelEditor_module.propSelect, value: group.value, onChange: (val) => group.set(val), options: group.options.map((opt) => ({
|
|
295
295
|
value: opt.id,
|
|
@@ -315,7 +315,7 @@ const Nice3DTexturePainter = ({ textureWidth = 1024, textureHeight = 1024, onSav
|
|
|
315
315
|
cursor: 'pointer',
|
|
316
316
|
fontSize: 11,
|
|
317
317
|
background: active ? 'var(--nice-info, #339af0)' : 'var(--nice-bg-secondary, #2c2e33)',
|
|
318
|
-
color: active ? 'var(--nice-
|
|
318
|
+
color: active ? 'var(--nice-color-white, #fff)' : 'var(--nice-text, #c1c2c5)',
|
|
319
319
|
display: 'flex',
|
|
320
320
|
alignItems: 'center',
|
|
321
321
|
gap: 4,
|
|
@@ -389,7 +389,7 @@ const Nice3DTexturePainter = ({ textureWidth = 1024, textureHeight = 1024, onSav
|
|
|
389
389
|
? 'var(--nice-info, #339af0)'
|
|
390
390
|
: 'var(--nice-bg-secondary, #2c2e33)',
|
|
391
391
|
color: painter.activeLayerId === l.id
|
|
392
|
-
? 'var(--nice-
|
|
392
|
+
? 'var(--nice-color-white, #fff)'
|
|
393
393
|
: 'var(--nice-text, #c1c2c5)',
|
|
394
394
|
}, children: [jsxRuntime.jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 4, cursor: 'pointer' }, onClick: () => painter.setActiveLayerId(l.id), children: [jsxRuntime.jsx("button", { onClick: (e) => {
|
|
395
395
|
e.stopPropagation();
|
|
@@ -346,7 +346,7 @@ const NiceUIDesigner = ({ onChange, onExport, className = '', tutorial, }) => {
|
|
|
346
346
|
cursor: 'pointer',
|
|
347
347
|
fontSize: 11,
|
|
348
348
|
background: active ? 'var(--nice-info, #339af0)' : 'var(--nice-bg-secondary, #2c2e33)',
|
|
349
|
-
color: active ? 'var(--nice-
|
|
349
|
+
color: active ? 'var(--nice-color-white, #fff)' : 'var(--nice-text, #c1c2c5)',
|
|
350
350
|
});
|
|
351
351
|
const fieldStyle = {
|
|
352
352
|
width: '100%',
|
|
@@ -117,8 +117,5 @@ const NiceVectorEditor = ({ width: artW = 512, height: artH = 512, className, on
|
|
|
117
117
|
}
|
|
118
118
|
}, children: t('vectorEditor.snippet.copyAgain', 'Copy again') }), jsxRuntime.jsx(ui.NiceButton, { variant: "ghost", onClick: () => setSnippetOpen(false), children: t('vectorEditor.snippet.close', 'Close') })] })] })] }));
|
|
119
119
|
};
|
|
120
|
-
/** @deprecated Use NiceVectorEditor */
|
|
121
|
-
const VectorEditor = NiceVectorEditor;
|
|
122
120
|
|
|
123
121
|
exports.NiceVectorEditor = NiceVectorEditor;
|
|
124
|
-
exports.VectorEditor = VectorEditor;
|
|
@@ -109,7 +109,5 @@ function NiceAnimationEditor({ initialConfig, onChange, storageKey = STORAGE_KEY
|
|
|
109
109
|
};
|
|
110
110
|
return (jsxs("div", { className: `ntd-animation-editor ${className !== null && className !== void 0 ? className : ''}`, style: style, children: [jsxs("div", { className: "ntd-ae-controls", children: [jsx(Row, { title: t('characterEditor.name', 'Name'), children: jsx(NiceTextInput, { className: "ntd-ae-input", value: cfg.name || '', onChange: (val) => setCfg({ ...cfg, name: val }), placeholder: t('characterEditor.namePlaceholder', 'Character name') }) }), jsxs(Row, { title: t('characters.size', 'Size'), children: [jsx(NiceSlider, { min: 140, max: 300, value: (_a = cfg.size) !== null && _a !== void 0 ? _a : 180, onChange: (val) => setCfg({ ...cfg, size: val }) }), jsxs("span", { className: "ntd-ae-size-value", children: [(_b = cfg.size) !== null && _b !== void 0 ? _b : 180, "px"] })] }), jsx(FeatureEditor, { title: t('characters.faceShape', 'Face'), feature: cfg.face, variants: VARIANTS.face, onChange: (v) => updateFeature('face', v) }), jsx(FeatureEditor, { title: t('characters.hairstyle', 'Hair'), feature: cfg.hair, variants: VARIANTS.hair, onChange: (v) => updateFeature('hair', v) }), jsx(FeatureEditor, { title: t('characters.eyes', 'Eyes'), feature: cfg.eyes, variants: VARIANTS.eyes, onChange: (v) => updateFeature('eyes', v) }), jsx(FeatureEditor, { title: t('characters.nose', 'Nose'), feature: cfg.nose, variants: VARIANTS.nose, onChange: (v) => updateFeature('nose', v) }), jsx(FeatureEditor, { title: t('characters.mouth', 'Mouth'), feature: cfg.mouth, variants: VARIANTS.mouth, onChange: (v) => updateFeature('mouth', v) }), jsx(FeatureEditor, { title: t('characters.clothing', 'Outfit'), feature: cfg.outfit, variants: VARIANTS.outfit, onChange: (v) => updateFeature('outfit', v) }), jsx(FeatureEditor, { title: t('characters.headwear', 'Headwear'), feature: cfg.headwear, variants: VARIANTS.headwear, onChange: (v) => updateFeature('headwear', v) }), jsx(FeatureEditor, { title: t('characters.prop', 'Prop'), feature: cfg.prop, variants: VARIANTS.prop, onChange: (v) => updateFeature('prop', v) }), jsxs("div", { className: "ntd-ae-action-row", children: [jsxs(NiceButton, { className: "ntd-ae-btn", variant: "ghost", onClick: randomizeColors, children: [jsx(NiceIcon, { name: "shuffle", size: 14 }), ' ', t('characterEditor.randomizeColors', 'Randomize colors')] }), jsxs(NiceButton, { className: "ntd-ae-btn", variant: "ghost", onClick: downloadJson, children: [jsx(NiceIcon, { name: "download", size: 14 }), " ", t('characters.downloadJson', 'Download JSON')] })] }), showJsonPanel && (jsxs("div", { className: "ntd-ae-json-panel", children: [jsx("div", { className: "ntd-ae-json-label", children: t('characterEditor.jsonSection', 'JSON') }), jsx(NiceTextArea, { className: "ntd-ae-textarea", value: json, onChange: (val) => setJson(val) }), jsxs("div", { className: "ntd-ae-json-actions", children: [jsx(NiceButton, { className: "ntd-ae-btn", variant: "primary", onClick: applyJson, children: t('characterEditor.applyJson', 'Apply JSON') }), jsx(NiceButton, { className: "ntd-ae-btn", variant: "ghost", onClick: () => navigator.clipboard.writeText(JSON.stringify(cfg, null, 2)), children: t('characterEditor.copyToClipboard', 'Copy') })] })] }))] }), showPreview && (jsxs("div", { className: "ntd-ae-preview", children: [jsx("div", { className: "ntd-ae-preview-label", children: t('characterEditor.preview', 'Preview') }), jsx(NiceAnimatedPerson, { character: cfg, score: 10, startPose: "idle" })] }))] }));
|
|
111
111
|
}
|
|
112
|
-
/** @deprecated Use NiceAnimationEditor */
|
|
113
|
-
const AnimationEditor = NiceAnimationEditor;
|
|
114
112
|
|
|
115
|
-
export {
|
|
113
|
+
export { NiceAnimationEditor };
|
|
@@ -3,7 +3,7 @@ import { pick, DEFAULT_COLORS } from './characterTypes.js';
|
|
|
3
3
|
import { Arm } from './shapes/arms.js';
|
|
4
4
|
import { Eyes } from './shapes/eyes.js';
|
|
5
5
|
import { Hair } from './shapes/hair.js';
|
|
6
|
-
import {
|
|
6
|
+
import { NiceHead } from './shapes/heads.js';
|
|
7
7
|
import { Headwear } from './shapes/headwear.js';
|
|
8
8
|
import { Leg } from './shapes/legs.js';
|
|
9
9
|
import { Mouth } from './shapes/mouths.js';
|
|
@@ -21,9 +21,7 @@ const NiceBodyRenderer = ({ character, size }) => {
|
|
|
21
21
|
const outfitBase = pick(character.outfit.colors, 0, DEFAULT_COLORS.shirt);
|
|
22
22
|
const armColors = [skin, outfitBase, stroke];
|
|
23
23
|
const legColors = [outfitBase, pick(character.outfit.colors, 1, outfitBase), stroke];
|
|
24
|
-
return (jsx("svg", { width: S, height: S, viewBox: `0 0 ${S} ${S}`, role: "img", children: jsxs("g", { transform: `translate(${S / 2} ${S * 0.86})`, children: [jsx(Leg, { colors: legColors, side: -1, variant: "pants", scale: k, transform: "translate(-16 0)" }), jsx(Leg, { colors: legColors, side: 1, variant: "pants", scale: k, transform: "translate(16 0)" }), jsx(Torso, { variant: "vShape", colors: [skin, 'var(--anim-transparent, #00000000)', stroke], scale: k }), jsx(Outfit, { variant: character.outfit.variant, colors: character.outfit.colors, scale: k }), jsx(Arm, { colors: armColors, side: -1, variant: "sleeveShort", scale: k, transform: "translate(-40 -8)" }), jsx(Arm, { colors: armColors, side: 1, variant: "sleeveShort", scale: k, transform: "translate(40 -8)" }), jsxs("g", { transform: "translate(0 -84)", children: [jsx(
|
|
24
|
+
return (jsx("svg", { width: S, height: S, viewBox: `0 0 ${S} ${S}`, role: "img", children: jsxs("g", { transform: `translate(${S / 2} ${S * 0.86})`, children: [jsx(Leg, { colors: legColors, side: -1, variant: "pants", scale: k, transform: "translate(-16 0)" }), jsx(Leg, { colors: legColors, side: 1, variant: "pants", scale: k, transform: "translate(16 0)" }), jsx(Torso, { variant: "vShape", colors: [skin, 'var(--anim-transparent, #00000000)', stroke], scale: k }), jsx(Outfit, { variant: character.outfit.variant, colors: character.outfit.colors, scale: k }), jsx(Arm, { colors: armColors, side: -1, variant: "sleeveShort", scale: k, transform: "translate(-40 -8)" }), jsx(Arm, { colors: armColors, side: 1, variant: "sleeveShort", scale: k, transform: "translate(40 -8)" }), jsxs("g", { transform: "translate(0 -84)", children: [jsx(NiceHead, { variant: character.face.variant, colors: character.face.colors, scale: k }), jsx(Hair, { variant: character.hair.variant, colors: character.hair.colors, scale: k }), jsx(Eyes, { variant: character.eyes.variant, colors: character.eyes.colors, scale: k }), jsx(Nose, { variant: character.nose.variant, colors: character.nose.colors, scale: k }), jsx(Mouth, { variant: character.mouth.variant, colors: character.mouth.colors, scale: k }), jsx(Headwear, { variant: character.headwear.variant, colors: character.headwear.colors, scale: k })] })] }) }));
|
|
25
25
|
};
|
|
26
|
-
/** @deprecated Use NiceBodyRenderer */
|
|
27
|
-
const BodyRenderer = NiceBodyRenderer;
|
|
28
26
|
|
|
29
|
-
export {
|
|
27
|
+
export { NiceBodyRenderer, NiceBodyRenderer as default };
|
|
@@ -65,7 +65,5 @@ const NiceHead = ({ variant, ...rest }) => {
|
|
|
65
65
|
const Comp = (_a = HEAD_RENDERERS[variant]) !== null && _a !== void 0 ? _a : HeadRound;
|
|
66
66
|
return jsx(Comp, { ...rest });
|
|
67
67
|
};
|
|
68
|
-
/** @deprecated Use NiceHead */
|
|
69
|
-
const Head = NiceHead;
|
|
70
68
|
|
|
71
|
-
export { HEAD_RENDERERS,
|
|
69
|
+
export { HEAD_RENDERERS, HeadChubby, HeadDiamond, HeadHeart, HeadLong, HeadOval, HeadRound, HeadSquare, NiceHead };
|
|
@@ -568,9 +568,7 @@ const NiceBrushEngine = ({ canvas, color = '#000000', onStrokeEnd, className = '
|
|
|
568
568
|
background: s.name === ((_a = BRUSH_PRESETS[name]) === null || _a === void 0 ? void 0 : _a.name)
|
|
569
569
|
? 'var(--nice-color-accent, #6366f1)'
|
|
570
570
|
: 'transparent',
|
|
571
|
-
color: s.name === ((_b = BRUSH_PRESETS[name]) === null || _b === void 0 ? void 0 : _b.name)
|
|
572
|
-
? 'var(--nice-text-on-primary, #fff)'
|
|
573
|
-
: 'inherit',
|
|
571
|
+
color: s.name === ((_b = BRUSH_PRESETS[name]) === null || _b === void 0 ? void 0 : _b.name) ? 'var(--nice-color-white, #fff)' : 'inherit',
|
|
574
572
|
}, children: BRUSH_PRESETS[name].name }, name));
|
|
575
573
|
}) }), jsxs("label", { children: ["Size: ", s.size, "px", jsx("input", { type: "range", min: 1, max: 200, value: s.size, onChange: (e) => engine.setSettings({ ...s, size: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Opacity: ", Math.round(s.opacity * 100), "%", jsx("input", { type: "range", min: 0, max: 1, step: 0.01, value: s.opacity, onChange: (e) => engine.setSettings({ ...s, opacity: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Flow: ", Math.round(s.flow * 100), "%", jsx("input", { type: "range", min: 0, max: 1, step: 0.01, value: s.flow, onChange: (e) => engine.setSettings({ ...s, flow: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Hardness: ", Math.round(s.hardness * 100), "%", jsx("input", { type: "range", min: 0, max: 1, step: 0.01, value: s.hardness, onChange: (e) => engine.setSettings({ ...s, hardness: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Smoothing: ", Math.round(s.smoothing * 100), "%", jsx("input", { type: "range", min: 0, max: 1, step: 0.01, value: s.smoothing, onChange: (e) => engine.setSettings({ ...s, smoothing: +e.target.value }), style: { width: '100%' } })] }), jsxs("label", { children: ["Tip:", jsxs("select", { value: s.tipShape, onChange: (e) => engine.setSettings({ ...s, tipShape: e.target.value }), style: { width: '100%' }, children: [jsx("option", { value: "circle", children: "Circle" }), jsx("option", { value: "square", children: "Square" }), jsx("option", { value: "diamond", children: "Diamond" }), jsx("option", { value: "texture", children: "Texture" })] })] }), jsxs("label", { children: ["Roundness: ", Math.round(s.roundness * 100), "%", jsx("input", { type: "range", min: 0.05, max: 1, step: 0.05, value: s.roundness, onChange: (e) => engine.setSettings({ ...s, roundness: +e.target.value }), style: { width: '100%' } })] }), jsxs("details", { children: [jsxs("summary", { style: { cursor: 'pointer', fontSize: 12 }, children: [jsx(NiceIcon, { name: "bar-chart", size: 12 }), " Size Dynamics"] }), jsxs("label", { children: ["Source:", jsxs("select", { value: s.sizeDynamics.source, onChange: (e) => engine.setSettings({
|
|
576
574
|
...s,
|
|
@@ -189,7 +189,7 @@ const NiceFontEditor = ({ fontName = 'MyFont', onSave, className = '', tutorial,
|
|
|
189
189
|
border: 'none',
|
|
190
190
|
cursor: 'pointer',
|
|
191
191
|
background: active ? 'var(--nice-info, #339af0)' : 'var(--nice-bg-secondary, #2c2e33)',
|
|
192
|
-
color: active ? 'var(--nice-
|
|
192
|
+
color: active ? 'var(--nice-color-white, #fff)' : 'var(--nice-text, #c1c2c5)',
|
|
193
193
|
fontSize: 11,
|
|
194
194
|
});
|
|
195
195
|
const fieldStyle = {
|
|
@@ -230,7 +230,7 @@ const NiceFontEditor = ({ fontName = 'MyFont', onSave, className = '', tutorial,
|
|
|
230
230
|
}, children: "Save" }), jsx("button", { onClick: handleExportSvg, style: {
|
|
231
231
|
padding: '4px 12px',
|
|
232
232
|
background: '#228be6',
|
|
233
|
-
color: 'var(--nice-
|
|
233
|
+
color: 'var(--nice-color-white, #fff)',
|
|
234
234
|
border: 'none',
|
|
235
235
|
borderRadius: 3,
|
|
236
236
|
cursor: 'pointer',
|
|
@@ -263,7 +263,7 @@ const NiceFontEditor = ({ fontName = 'MyFont', onSave, className = '', tutorial,
|
|
|
263
263
|
? 'var(--nice-bg-secondary, #2c2e33)'
|
|
264
264
|
: '#25262b',
|
|
265
265
|
color: editor.selectedGlyph === g.unicode
|
|
266
|
-
? 'var(--nice-
|
|
266
|
+
? 'var(--nice-color-white, #fff)'
|
|
267
267
|
: g.path
|
|
268
268
|
? 'var(--nice-text, #c1c2c5)'
|
|
269
269
|
: '#5c5f66',
|
|
@@ -390,7 +390,5 @@ const NiceGameAsset2dEditor = ({ className, onSave, onExport, }) => {
|
|
|
390
390
|
};
|
|
391
391
|
return (jsx(NiceAppShell, { className: `${styles.root} ${className || ''}`, flush: true, menubar: jsx(MenuBar, { api: api }), toolbar: jsx(ModeTabs, { api: api }), statusBar: jsx(StatusBar, { api: api }), children: jsx("div", { style: { display: 'flex', flexDirection: 'column', minHeight: 0, height: '100%' }, children: renderModeContent() }) }));
|
|
392
392
|
};
|
|
393
|
-
/** @deprecated Use NiceGameAsset2dEditor */
|
|
394
|
-
const GameAsset2dEditor = NiceGameAsset2dEditor;
|
|
395
393
|
|
|
396
|
-
export {
|
|
394
|
+
export { NiceGameAsset2dEditor };
|
package/dist/esm/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { NicePixelEditor
|
|
2
|
-
export { NiceVectorEditor
|
|
3
|
-
export { default as NicePhotoEditor
|
|
4
|
-
export {
|
|
5
|
-
export { default as
|
|
1
|
+
export { NicePixelEditor } from './pixel/PixelEditor.js';
|
|
2
|
+
export { NiceVectorEditor } from './vector/VectorEditor.js';
|
|
3
|
+
export { default as NicePhotoEditor } from './photo/PhotoEditor.js';
|
|
4
|
+
export { NiceAnimationEditor } from './animation/AnimationEditor.js';
|
|
5
|
+
export { default as NiceAnimatedPerson } from './animation/AnimatedPerson.js';
|
|
6
6
|
export { ALL_DIRECTIONS, applyIsometricProjection, assembleSprite, createPartData, generateAllDirections, generateMirroredDirections, generateRecolorMap, getAllParts, getPart, getPartsByCategory, getPartsBySlot, mirrorPartH, registerPart, registerParts, render8DirSpriteSheet, renderPart, shiftHue } from './pixel/spriteGeneratorCore.js';
|
|
7
7
|
export { CHARACTER_PRESETS, CLOTHING_PALETTES, HAIR_PALETTES, SKIN_PALETTES, initCharacterParts } from './pixel/characterGeneratorPresets.js';
|
|
8
8
|
export { BUILDING_PRESETS, ROOF_PALETTES, WALL_PALETTES, assembleBuildingFromConfig, initBuildingParts } from './pixel/buildingGeneratorPresets.js';
|
|
9
9
|
export { ANIMAL_PRESETS, FEATHER_PALETTES, FUR_PALETTES, SCALE_PALETTES, initAnimalParts } from './pixel/animalGeneratorPresets.js';
|
|
10
|
-
export { default as NiceSpriteGeneratorPanel
|
|
11
|
-
export {
|
|
10
|
+
export { default as NiceSpriteGeneratorPanel } from './pixel/SpriteGeneratorPanel.js';
|
|
11
|
+
export { NiceGameAsset2dEditor } from './game/GameAsset2dEditor.js';
|
|
12
12
|
export { useGameAssetEditor } from './game/useGameAssetEditor.js';
|
|
13
13
|
export { NiceI18nProvider, useNiceTranslation } from './core/i18n.js';
|
|
14
14
|
export { applyDithering, createReferenceOverlay, ditherAtkinson, ditherFloydSteinberg, ditherOrdered, extractPalette, hexPaletteToRGBA, renderReferenceOverlay } from './pixel/pixelEditorUtils.js';
|
|
@@ -28,10 +28,10 @@ export { default as NiceRigPlayer, default as RigPlayer } from './animation/rig/
|
|
|
28
28
|
export { playRigFromChoreo, rigPoseFor } from './animation/rig/choreoRigBridge.js';
|
|
29
29
|
export { ChoreoBuilder, compile, runCannon, runRounds, runSeq, runWave, seq } from './animation/choreoDSL.js';
|
|
30
30
|
export { booChoreo, danceParty, showcaseAll, waveScoreChoreo } from './animation/choreography.js';
|
|
31
|
-
export { default as
|
|
31
|
+
export { default as NiceAudience } from './animation/Audience.js';
|
|
32
32
|
export { attachScoreReactions, onScore, playIntro, reactionForScore, scoreBus, simulateScore } from './animation/karaokeIntegration.js';
|
|
33
|
-
export {
|
|
34
|
-
export { HEAD_RENDERERS,
|
|
33
|
+
export { NiceBodyRenderer, NiceBodyRenderer as NiceBodyRendererDefault } from './animation/BodyRenderer.js';
|
|
34
|
+
export { HEAD_RENDERERS, NiceHead } from './animation/shapes/heads.js';
|
|
35
35
|
export { EYES_RENDERERS, Eyes } from './animation/shapes/eyes.js';
|
|
36
36
|
export { NOSE_RENDERERS, Nose } from './animation/shapes/noses.js';
|
|
37
37
|
export { MOUTH_RENDERERS, Mouth } from './animation/shapes/mouths.js';
|