@nice2dev/ui-graphics 1.3.14 → 1.3.16
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 +13 -0
- package/dist/cjs/animation/AnimatedPerson.js +470 -143
- package/dist/cjs/animation/AnimationEditor.js +289 -101
- package/dist/cjs/animation/Audience.js +83 -61
- package/dist/cjs/animation/BodyRenderer.js +69 -28
- package/dist/cjs/animation/animationHelper.js +281 -288
- package/dist/cjs/animation/characterTypes.js +200 -203
- package/dist/cjs/animation/choreoDSL.js +205 -219
- package/dist/cjs/animation/choreography.js +4 -32
- package/dist/cjs/animation/karaokeIntegration.js +68 -77
- package/dist/cjs/animation/lottieExport.js +108 -114
- package/dist/cjs/animation/motionPath.js +225 -248
- package/dist/cjs/animation/physics.js +227 -254
- package/dist/cjs/animation/rig/RigPlayer.js +53 -56
- package/dist/cjs/animation/rig/RiggedBody.js +71 -26
- package/dist/cjs/animation/rig/choreoRigBridge.js +72 -77
- package/dist/cjs/animation/rig/ik.js +13 -18
- package/dist/cjs/animation/rig/poseOps.js +34 -41
- package/dist/cjs/animation/rig/presets.js +64 -72
- package/dist/cjs/animation/rig/rigMath.js +25 -32
- package/dist/cjs/animation/rig/rigTypes.js +59 -63
- package/dist/cjs/animation/shapes/arms.js +31 -13
- package/dist/cjs/animation/shapes/eyes.js +129 -47
- package/dist/cjs/animation/shapes/hair.js +72 -45
- package/dist/cjs/animation/shapes/heads.js +131 -57
- package/dist/cjs/animation/shapes/headwear.js +47 -38
- package/dist/cjs/animation/shapes/legs.js +31 -13
- package/dist/cjs/animation/shapes/mouths.js +120 -44
- package/dist/cjs/animation/shapes/noses.js +80 -25
- package/dist/cjs/animation/shapes/outfits.js +101 -39
- package/dist/cjs/animation/shapes/torsos.js +15 -11
- package/dist/cjs/animation/spineExport.js +103 -121
- package/dist/cjs/core/LocalUI.js +108 -43
- package/dist/cjs/core/NiceBrushEngine.js +758 -552
- package/dist/cjs/core/collaboration.js +249 -251
- package/dist/cjs/core/colorBlindness.js +100 -115
- package/dist/cjs/core/dragDrop.js +155 -158
- package/dist/cjs/core/editorAsk.js +51 -41
- package/dist/cjs/core/fixes.js +140 -171
- package/dist/cjs/core/gridGuides.js +166 -201
- package/dist/cjs/core/historyVisual.js +156 -135
- package/dist/cjs/core/i18n.js +13 -14
- package/dist/cjs/core/integrations.js +238 -249
- package/dist/cjs/core/minimap.js +149 -151
- package/dist/cjs/core/plugins.js +98 -113
- package/dist/cjs/core/rtl.js +71 -83
- package/dist/cjs/core/shortcuts.js +196 -225
- package/dist/cjs/core/theme.js +142 -149
- package/dist/cjs/core/yjsCollaboration.js +232 -293
- package/dist/cjs/design/design-tools.js +12 -22
- package/dist/cjs/font/NiceFontEditor.js +877 -316
- package/dist/cjs/font/fontFormatUtils.js +388 -448
- package/dist/cjs/game/GameAsset2dEditor.js +1201 -392
- package/dist/cjs/game/GameAsset2dEditor.module.css.js +146 -5
- package/dist/cjs/game/gameAssetTypes.js +7 -16
- package/dist/cjs/game/gameAssetUtils.js +390 -413
- package/dist/cjs/game/useGameAssetEditor.js +820 -763
- package/dist/cjs/index.js +81 -84
- package/dist/cjs/nice2dev-ui-graphics.css +1 -1
- package/dist/cjs/node_modules/lib0/array.js +8 -70
- package/dist/cjs/node_modules/lib0/binary.js +3 -20
- package/dist/cjs/node_modules/lib0/broadcastchannel.js +24 -86
- package/dist/cjs/node_modules/lib0/buffer.js +15 -82
- package/dist/cjs/node_modules/lib0/conditions.js +3 -16
- package/dist/cjs/node_modules/lib0/decoding.js +108 -287
- package/dist/cjs/node_modules/lib0/dom.js +14 -44
- package/dist/cjs/node_modules/lib0/encoding.js +68 -418
- package/dist/cjs/node_modules/lib0/environment.js +26 -92
- package/dist/cjs/node_modules/lib0/error.js +5 -29
- package/dist/cjs/node_modules/lib0/function.js +27 -66
- package/dist/cjs/node_modules/lib0/iterator.js +8 -33
- package/dist/cjs/node_modules/lib0/logging.common.js +12 -22
- package/dist/cjs/node_modules/lib0/logging.js +32 -71
- package/dist/cjs/node_modules/lib0/map.js +16 -86
- package/dist/cjs/node_modules/lib0/math.js +3 -32
- package/dist/cjs/node_modules/lib0/number.js +4 -15
- package/dist/cjs/node_modules/lib0/object.js +14 -88
- package/dist/cjs/node_modules/lib0/observable.js +38 -78
- package/dist/cjs/node_modules/lib0/pair.js +3 -20
- package/dist/cjs/node_modules/lib0/prng.js +8 -77
- package/dist/cjs/node_modules/lib0/promise.js +6 -30
- package/dist/cjs/node_modules/lib0/random.js +8 -23
- package/dist/cjs/node_modules/lib0/schema.js +313 -687
- package/dist/cjs/node_modules/lib0/set.js +3 -10
- package/dist/cjs/node_modules/lib0/storage.js +20 -55
- package/dist/cjs/node_modules/lib0/string.js +17 -72
- package/dist/cjs/node_modules/lib0/symbol.js +2 -12
- package/dist/cjs/node_modules/lib0/time.js +2 -15
- package/dist/cjs/node_modules/lib0/trait/equality.js +3 -28
- package/dist/cjs/node_modules/lib0/url.js +4 -18
- package/dist/cjs/node_modules/lib0/webcrypto.js +2 -5
- package/dist/cjs/node_modules/y-protocols/auth.js +5 -19
- package/dist/cjs/node_modules/y-protocols/awareness.js +53 -116
- package/dist/cjs/node_modules/y-protocols/sync.js +16 -103
- package/dist/cjs/node_modules/y-websocket/src/y-websocket.js +77 -219
- package/dist/cjs/node_modules/yjs/dist/yjs.js +2128 -4868
- package/dist/cjs/photo/FilterThumb.js +37 -25
- package/dist/cjs/photo/NiceAITools.js +679 -467
- package/dist/cjs/photo/PhotoEditor.js +34 -20
- package/dist/cjs/photo/PhotoEditor.module.css.js +296 -5
- package/dist/cjs/photo/PhotoEditorCanvas.js +250 -91
- package/dist/cjs/photo/PhotoEditorLeftPanel.js +1086 -224
- package/dist/cjs/photo/PhotoEditorToolbar.js +135 -19
- package/dist/cjs/photo/photoEditorActions.js +89 -72
- package/dist/cjs/photo/photoEditorTypes.js +29 -32
- package/dist/cjs/photo/photoFilters.js +959 -985
- package/dist/cjs/photo/photoOverlays.js +899 -945
- package/dist/cjs/photo/photoSelection.js +427 -499
- package/dist/cjs/photo/usePhotoEditor.js +739 -741
- package/dist/cjs/pixel/HSVPicker.js +191 -175
- package/dist/cjs/pixel/PixelEditor.js +159 -48
- package/dist/cjs/pixel/PixelEditor.module.css.js +209 -5
- package/dist/cjs/pixel/PixelEditorCanvas.js +29 -16
- package/dist/cjs/pixel/PixelEditorMenuBar.js +160 -162
- package/dist/cjs/pixel/PixelEditorRightPanel.js +377 -45
- package/dist/cjs/pixel/PixelEditorStatusBar.js +47 -20
- package/dist/cjs/pixel/PixelEditorTimeline.js +106 -23
- package/dist/cjs/pixel/PixelEditorToolbar.js +99 -21
- package/dist/cjs/pixel/SpriteGeneratorPanel.js +483 -303
- package/dist/cjs/pixel/animalGeneratorPresets.js +776 -601
- package/dist/cjs/pixel/asepriteFormat.js +511 -560
- package/dist/cjs/pixel/buildingGeneratorPresets.js +693 -520
- package/dist/cjs/pixel/characterGeneratorPresets.js +644 -544
- package/dist/cjs/pixel/pixel-pro.js +52 -63
- package/dist/cjs/pixel/pixelEditorExports.js +388 -428
- package/dist/cjs/pixel/pixelEditorTypes.js +91 -108
- package/dist/cjs/pixel/pixelEditorUtils.js +519 -561
- package/dist/cjs/pixel/spriteGeneratorCore.js +206 -257
- package/dist/cjs/pixel/usePixelEditor.js +1321 -1343
- package/dist/cjs/texture/Nice3DTexturePainter.js +707 -440
- package/dist/cjs/ui/NiceUIDesigner.js +954 -527
- package/dist/cjs/vector/NiceSvgToCode.js +586 -446
- package/dist/cjs/vector/VectorEditor.js +290 -117
- package/dist/cjs/vector/VectorEditor.module.css.js +86 -5
- package/dist/cjs/vector/VectorEditorMenuBar.js +333 -275
- package/dist/cjs/vector/VectorEditorRightPanel.js +1094 -371
- package/dist/cjs/vector/VectorEditorShapeRenderer.js +198 -60
- package/dist/cjs/vector/VectorEditorStatusBar.js +39 -13
- package/dist/cjs/vector/useVectorEditor.js +848 -889
- package/dist/cjs/vector/vectorAnimation.js +110 -137
- package/dist/cjs/vector/vectorBooleanOps.js +398 -485
- package/dist/cjs/vector/vectorEditorExport.js +201 -203
- package/dist/cjs/vector/vectorEditorImport.js +173 -189
- package/dist/cjs/vector/vectorEditorTypes.js +42 -49
- package/dist/cjs/vector/vectorGradients.js +151 -174
- package/dist/cjs/vector/vectorIconExport.js +52 -59
- package/dist/cjs/vector/vectorIconImport.js +169 -219
- package/dist/esm/animation/AnimatedPerson.js +470 -141
- package/dist/esm/animation/AnimationEditor.js +290 -100
- package/dist/esm/animation/Audience.js +83 -59
- package/dist/esm/animation/BodyRenderer.js +71 -25
- package/dist/esm/animation/animationHelper.js +284 -287
- package/dist/esm/animation/characterTypes.js +204 -202
- package/dist/esm/animation/choreoDSL.js +212 -218
- package/dist/esm/animation/choreography.js +8 -31
- package/dist/esm/animation/karaokeIntegration.js +74 -76
- package/dist/esm/animation/lottieExport.js +112 -113
- package/dist/esm/animation/motionPath.js +235 -247
- package/dist/esm/animation/physics.js +235 -253
- package/dist/esm/animation/rig/RigPlayer.js +53 -54
- package/dist/esm/animation/rig/RiggedBody.js +71 -24
- package/dist/esm/animation/rig/choreoRigBridge.js +74 -76
- package/dist/esm/animation/rig/ik.js +14 -17
- package/dist/esm/animation/rig/poseOps.js +37 -40
- package/dist/esm/animation/rig/presets.js +70 -71
- package/dist/esm/animation/rig/rigMath.js +28 -31
- package/dist/esm/animation/rig/rigTypes.js +62 -62
- package/dist/esm/animation/shapes/arms.js +32 -12
- package/dist/esm/animation/shapes/eyes.js +135 -46
- package/dist/esm/animation/shapes/hair.js +80 -44
- package/dist/esm/animation/shapes/heads.js +140 -56
- package/dist/esm/animation/shapes/headwear.js +54 -37
- package/dist/esm/animation/shapes/legs.js +32 -12
- package/dist/esm/animation/shapes/mouths.js +127 -43
- package/dist/esm/animation/shapes/noses.js +87 -24
- package/dist/esm/animation/shapes/outfits.js +106 -38
- package/dist/esm/animation/shapes/torsos.js +16 -10
- package/dist/esm/animation/spineExport.js +106 -120
- package/dist/esm/core/LocalUI.js +111 -42
- package/dist/esm/core/NiceBrushEngine.js +761 -551
- package/dist/esm/core/collaboration.js +255 -250
- package/dist/esm/core/colorBlindness.js +106 -114
- package/dist/esm/core/dragDrop.js +157 -157
- package/dist/esm/core/editorAsk.js +53 -40
- package/dist/esm/core/fixes.js +145 -170
- package/dist/esm/core/gridGuides.js +178 -200
- package/dist/esm/core/historyVisual.js +158 -134
- package/dist/esm/core/i18n.js +15 -13
- package/dist/esm/core/integrations.js +244 -248
- package/dist/esm/core/minimap.js +151 -150
- package/dist/esm/core/plugins.js +102 -112
- package/dist/esm/core/rtl.js +77 -82
- package/dist/esm/core/shortcuts.js +200 -224
- package/dist/esm/core/theme.js +150 -148
- package/dist/esm/core/yjsCollaboration.js +240 -292
- package/dist/esm/design/design-tools.js +13 -21
- package/dist/esm/font/NiceFontEditor.js +880 -315
- package/dist/esm/font/fontFormatUtils.js +394 -447
- package/dist/esm/game/GameAsset2dEditor.js +1202 -391
- package/dist/esm/game/GameAsset2dEditor.module.css.js +146 -3
- package/dist/esm/game/gameAssetTypes.js +8 -15
- package/dist/esm/game/gameAssetUtils.js +408 -412
- package/dist/esm/game/useGameAssetEditor.js +821 -762
- package/dist/esm/index.js +332 -69
- package/dist/esm/nice2dev-ui-graphics.css +1 -1
- package/dist/esm/node_modules/lib0/array.js +15 -69
- package/dist/esm/node_modules/lib0/binary.js +14 -19
- package/dist/esm/node_modules/lib0/broadcastchannel.js +27 -85
- package/dist/esm/node_modules/lib0/buffer.js +20 -80
- package/dist/esm/node_modules/lib0/conditions.js +4 -15
- package/dist/esm/node_modules/lib0/decoding.js +128 -286
- package/dist/esm/node_modules/lib0/dom.js +20 -43
- package/dist/esm/node_modules/lib0/encoding.js +90 -415
- package/dist/esm/node_modules/lib0/environment.js +33 -91
- package/dist/esm/node_modules/lib0/error.js +8 -28
- package/dist/esm/node_modules/lib0/function.js +31 -65
- package/dist/esm/node_modules/lib0/iterator.js +11 -32
- package/dist/esm/node_modules/lib0/logging.common.js +22 -21
- package/dist/esm/node_modules/lib0/logging.js +44 -70
- package/dist/esm/node_modules/lib0/map.js +21 -85
- package/dist/esm/node_modules/lib0/math.js +9 -31
- package/dist/esm/node_modules/lib0/number.js +7 -14
- package/dist/esm/node_modules/lib0/object.js +26 -87
- package/dist/esm/node_modules/lib0/observable.js +40 -77
- package/dist/esm/node_modules/lib0/pair.js +5 -19
- package/dist/esm/node_modules/lib0/prng.js +15 -76
- package/dist/esm/node_modules/lib0/promise.js +7 -29
- package/dist/esm/node_modules/lib0/random.js +10 -22
- package/dist/esm/node_modules/lib0/schema.js +367 -686
- package/dist/esm/node_modules/lib0/set.js +4 -9
- package/dist/esm/node_modules/lib0/storage.js +23 -54
- package/dist/esm/node_modules/lib0/string.js +26 -71
- package/dist/esm/node_modules/lib0/symbol.js +3 -11
- package/dist/esm/node_modules/lib0/time.js +3 -14
- package/dist/esm/node_modules/lib0/trait/equality.js +5 -27
- package/dist/esm/node_modules/lib0/url.js +5 -17
- package/dist/esm/node_modules/lib0/webcrypto.js +3 -4
- package/dist/esm/node_modules/y-protocols/auth.js +7 -18
- package/dist/esm/node_modules/y-protocols/awareness.js +58 -115
- package/dist/esm/node_modules/y-protocols/sync.js +26 -102
- package/dist/esm/node_modules/y-websocket/src/y-websocket.js +82 -218
- package/dist/esm/node_modules/yjs/dist/yjs.js +2263 -4899
- package/dist/esm/photo/FilterThumb.js +37 -23
- package/dist/esm/photo/NiceAITools.js +685 -466
- package/dist/esm/photo/PhotoEditor.js +34 -18
- package/dist/esm/photo/PhotoEditor.module.css.js +296 -3
- package/dist/esm/photo/PhotoEditorCanvas.js +250 -89
- package/dist/esm/photo/PhotoEditorLeftPanel.js +1086 -222
- package/dist/esm/photo/PhotoEditorToolbar.js +135 -17
- package/dist/esm/photo/photoEditorActions.js +93 -71
- package/dist/esm/photo/photoEditorTypes.js +32 -31
- package/dist/esm/photo/photoFilters.js +967 -984
- package/dist/esm/photo/photoOverlays.js +913 -944
- package/dist/esm/photo/photoSelection.js +438 -498
- package/dist/esm/photo/usePhotoEditor.js +740 -740
- package/dist/esm/pixel/HSVPicker.js +192 -174
- package/dist/esm/pixel/PixelEditor.js +160 -47
- package/dist/esm/pixel/PixelEditor.module.css.js +209 -3
- package/dist/esm/pixel/PixelEditorCanvas.js +29 -14
- package/dist/esm/pixel/PixelEditorMenuBar.js +160 -160
- package/dist/esm/pixel/PixelEditorRightPanel.js +377 -43
- package/dist/esm/pixel/PixelEditorStatusBar.js +47 -18
- package/dist/esm/pixel/PixelEditorTimeline.js +106 -21
- package/dist/esm/pixel/PixelEditorToolbar.js +99 -19
- package/dist/esm/pixel/SpriteGeneratorPanel.js +483 -301
- package/dist/esm/pixel/animalGeneratorPresets.js +782 -600
- package/dist/esm/pixel/asepriteFormat.js +517 -559
- package/dist/esm/pixel/buildingGeneratorPresets.js +699 -519
- package/dist/esm/pixel/characterGeneratorPresets.js +650 -543
- package/dist/esm/pixel/pixel-pro.js +53 -62
- package/dist/esm/pixel/pixelEditorExports.js +397 -427
- package/dist/esm/pixel/pixelEditorTypes.js +103 -107
- package/dist/esm/pixel/pixelEditorUtils.js +551 -560
- package/dist/esm/pixel/spriteGeneratorCore.js +223 -256
- package/dist/esm/pixel/usePixelEditor.js +1322 -1342
- package/dist/esm/texture/Nice3DTexturePainter.js +709 -439
- package/dist/esm/ui/NiceUIDesigner.js +957 -526
- package/dist/esm/vector/NiceSvgToCode.js +589 -445
- package/dist/esm/vector/VectorEditor.js +291 -116
- package/dist/esm/vector/VectorEditor.module.css.js +86 -3
- package/dist/esm/vector/VectorEditorMenuBar.js +333 -273
- package/dist/esm/vector/VectorEditorRightPanel.js +1094 -369
- package/dist/esm/vector/VectorEditorShapeRenderer.js +199 -59
- package/dist/esm/vector/VectorEditorStatusBar.js +39 -11
- package/dist/esm/vector/useVectorEditor.js +849 -888
- package/dist/esm/vector/vectorAnimation.js +115 -136
- package/dist/esm/vector/vectorBooleanOps.js +401 -484
- package/dist/esm/vector/vectorEditorExport.js +207 -202
- package/dist/esm/vector/vectorEditorImport.js +174 -188
- package/dist/esm/vector/vectorEditorTypes.js +50 -48
- package/dist/esm/vector/vectorGradients.js +158 -173
- package/dist/esm/vector/vectorIconExport.js +53 -58
- package/dist/esm/vector/vectorIconImport.js +171 -218
- package/package.json +9 -15
|
@@ -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-text-primary)!important}.PixelEditor-module_colorSwatches__jFuRX{align-items:center;border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1,4px);padding:var(--nice-space-1-5,6px) 0}.PixelEditor-module_brushShapes__2bBfl{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px) 0}.PixelEditor-module_pressureToggles__AITuh{display:flex;flex-direction:column;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) 0}.PixelEditor-module_checkLabel__-d-TA{align-items:center;color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-1,4px)}.PixelEditor-module_checkLabel__-d-TA input[type=checkbox]{accent-color:var(--nice-color-primary);height:12px;width:12px}.PixelEditor-module_hsvPicker__0ERIh{display:flex;flex-direction:column;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) 0}.PixelEditor-module_hsvRow__M3fhN{align-items:center;display:flex;gap:var(--nice-space-1,4px)}.PixelEditor-module_hsvLabel__O2MkX{color:var(--nice-text-muted);font-size:9px;min-width:16px;text-align:right}.PixelEditor-module_hsvSlider__KKMMJ{accent-color:var(--nice-color-primary);cursor:pointer;flex:1;height:6px;min-width:0}.PixelEditor-module_hsvVal__MgQ8W{color:var(--nice-text-muted);font-size:9px;min-width:28px;text-align:right}.PixelEditor-module_hsvNumInput__Wn4kG{text-align:center;width:36px}.PixelEditor-module_hsvHexInput__MU5Ms,.PixelEditor-module_hsvNumInput__Wn4kG{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px)}.PixelEditor-module_hsvHexInput__MU5Ms{flex:1}.PixelEditor-module_layerLock__xeWnc{align-items:center;cursor:pointer;display:flex;flex-shrink:0;font-size:10px;height:16px;justify-content:center;opacity:.6;width:16px}.PixelEditor-module_layerLock__xeWnc:hover{opacity:1}.PixelEditor-module_layerNameInput__ZiOKv{background:var(--nice-bg-canvas);border:1px solid var(--nice-color-primary);border-radius:var(--nice-radius-sm,2px);color:var(--nice-text-primary);flex:1;font-size:11px;min-width:0;outline:none;padding:0 var(--nice-space-1,4px)}.PixelEditor-module_layerControls__MrpXo{align-items:center;border-top:1px solid var(--nice-overlay-light-5,hsla(0,0%,100%,.05));display:flex;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-1,4px) var(--nice-space-0-5,2px)}.PixelEditor-module_blendSelect__QCwns{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:10px;padding:var(--nice-space-px,1px) var(--nice-space-1,4px)}.PixelEditor-module_layerOpSlider__Vw-qs{accent-color:var(--nice-color-primary);cursor:pointer;height:4px;width:60px}.PixelEditor-module_genPanel__99Md8{display:flex;flex-direction:column;height:600px;max-height:70vh;overflow:hidden;width:100%}.PixelEditor-module_genTabs__No5Za{background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0}.PixelEditor-module_genTabBtn__e2VhB{background:none;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary);cursor:pointer;flex:1;font-size:11px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:all .15s}.PixelEditor-module_genTabBtn__e2VhB:hover{background:var(--nice-bg-elevated);color:var(--nice-text-muted)}.PixelEditor-module_genTabBtnActive__Rt3jQ{background:var(--nice-bg-elevated)!important;border-bottom-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}.PixelEditor-module_genBody__MuiQy{display:flex;flex:1;min-height:0;overflow:hidden}.PixelEditor-module_genLeft__JdEw6{border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:200px}.PixelEditor-module_genCenter__c5X0S{align-items:center;display:flex;flex:1;flex-direction:column;gap:var(--nice-space-2,8px);overflow-y:auto;padding:var(--nice-space-2,8px)}.PixelEditor-module_genRight__qFz11{border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;width:200px}.PixelEditor-module_genPreviewWrap__360F-{align-items:center;background:var(--nice-bg-inset);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md,6px);display:flex;flex:1;justify-content:center;min-height:120px;overflow:hidden;width:100%}.PixelEditor-module_genPreviewCanvas__75Lw2{image-rendering:pixelated;max-height:100%;max-width:100%;min-height:64px;min-width:64px;object-fit:contain}.PixelEditor-module_genDirGrid__xjEp7{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px);justify-content:center}.PixelEditor-module_genRow__awCw9{align-items:center;display:flex;gap:var(--nice-space-1,4px);width:100%}.PixelEditor-module_genPresetGrid__f9XK6{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px)}.PixelEditor-module_genPresetBtn__5C2We{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04));border:1px solid transparent;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-muted);cursor:pointer;font-size:9px;padding:var(--nice-space-0-75,3px) var(--nice-space-1-5,6px);transition:all .1s}.PixelEditor-module_genPresetBtn__5C2We:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.PixelEditor-module_genPresetBtnActive__WAGew{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}.PixelEditor-module_genPartGrid__l17oc{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5,2px)}.PixelEditor-module_genPartBtn__5OO82{min-width:32px;padding:0 var(--nice-space-1-5,6px);white-space:nowrap;width:auto}.PixelEditor-module_genColorSwatches__acI6q{display:flex;gap:var(--nice-space-0-5,2px);margin-top:var(--nice-space-0-5,2px)}.PixelEditor-module_genColorSwatch__JE8BO{border:1px solid var(--nice-overlay-light-10,hsla(0,0%,100%,.1));border-radius:var(--nice-radius-sm,2px);height:16px;width:16px}.PixelEditor-module_genAssemblyItem__zNL2P{align-items:center;border-radius:var(--nice-radius-sm,3px);display:flex;font-size:10px;gap:var(--nice-space-1,4px);padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.PixelEditor-module_genAssemblyItem__zNL2P:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.PixelEditor-module_genAssemblyName__GU-kr{color:var(--nice-text-secondary);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PixelEditor-module_genFooter__WkyJp{border-top:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:var(--nice-space-2,8px);justify-content:flex-end;padding:var(--nice-space-2-5,10px) var(--nice-space-4,16px)}.PixelEditor-module_btnIcon__O59l9{background:none;border:none;color:var(--nice-text-muted);cursor:pointer;font-size:14px;line-height:1;padding:var(--nice-space-0-5,2px)}.PixelEditor-module_btnIcon__O59l9:hover{color:var(--nice-text-secondary)}.PixelEditor-module_propSelect__4P0Qi{flex:1}.PixelEditor-module_propInput__Q-kr2,.PixelEditor-module_propSelect__4P0Qi{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);font-size:11px;min-width:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.VectorEditor-module_root__rtRWo{background:var(--nice-bg-primary);color:var(--nice-text-primary);display:flex;flex-direction:column;font-family:Segoe UI,Consolas,monospace;font-size:12px;height:100%;overflow:hidden;user-select:none}.VectorEditor-module_menuBar__o25XM{align-items:center;background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);display:flex;flex-shrink:0;gap:0;height:28px;padding:0 var(--nice-space-1,4px)}.VectorEditor-module_menuBtn__aP4vp{background:none;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary);cursor:pointer;font-size:11px;padding:var(--nice-space-1,4px) var(--nice-space-2-5,10px)}.VectorEditor-module_menuBtn__aP4vp:hover{background:var(--nice-bg-secondary);color:var(--nice-text-primary)}.VectorEditor-module_menuBtn__aP4vp.VectorEditor-module_menuBtnActive__G4hDv,.VectorEditor-module_menuBtn__aP4vp.VectorEditor-module_menuBtnActive__G4hDv:hover{background:var(--nice-color-primary);color:var(--nice-text-on-primary,#fff)}.VectorEditor-module_menuSep__3-kTv{background:var(--nice-bg-secondary);height:16px;margin:0 var(--nice-space-1,4px);width:1px}.VectorEditor-module_menuLabel__Bsm0e{align-items:center;color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:10px;gap:var(--nice-space-0-5,2px);padding:0 var(--nice-space-1,4px)}.VectorEditor-module_toolbar__fakYL{background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-0-5,2px);width:38px}.VectorEditor-module_toolBtn__Zh7D3{align-items:center;background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted);cursor:pointer;display:flex;font-size:16px;height:32px;justify-content:center;transition:all .1s;width:32px}.VectorEditor-module_toolBtn__Zh7D3:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}.VectorEditor-module_toolBtnActive__0xZlr{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}.VectorEditor-module_mainArea__3o89F{display:flex;flex:1;min-height:0}.VectorEditor-module_canvasContainer__hOUAx{background:var(--nice-bg-inset);flex:1;height:100%;min-height:0;overflow:hidden;position:relative}.VectorEditor-module_canvasContainer__hOUAx svg{height:100%;inset:0;position:absolute;width:100%}.VectorEditor-module_rightPanel__3hzcS{background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0;overflow:hidden;width:320px}.VectorEditor-module_rightPanelTabBody__QrkgO{flex:1 1 auto;min-height:0;overflow-y:auto}.VectorEditor-module_libraryGrid__utboD{display:grid;gap:var(--nice-space-1-5,6px);grid-template-columns:repeat(4,1fr);padding:var(--nice-space-1-5,6px)}.VectorEditor-module_libraryCell__WyOra{align-items:center;background:transparent;border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary);cursor:pointer;display:flex;flex-direction:column;font-size:9px;gap:var(--nice-space-0-5,2px);overflow:hidden;padding:var(--nice-space-1-5,6px) var(--nice-space-0-5,2px);text-align:center;text-overflow:ellipsis}.VectorEditor-module_libraryCell__WyOra:hover{border-color:var(--nice-primary,#56c);color:var(--nice-text-primary)}.VectorEditor-module_layerRow__6dibJ{align-items:center;border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-1-5,6px)}.VectorEditor-module_layerRow__6dibJ:hover{background:var(--nice-bg-secondary)}.VectorEditor-module_layerRowActive__Dqt0V{background:var(--nice-bg-secondary);outline:1px solid var(--nice-primary,#56c)}.VectorEditor-module_layerRowLocked__ubct0{opacity:.6}.VectorEditor-module_layerRowLocked__ubct0 .VectorEditor-module_layerNameInput__OtX-d{cursor:not-allowed}.VectorEditor-module_layerNameInput__OtX-d{background:transparent;border:none;color:var(--nice-text-primary);flex:1 1 auto;font-size:11px;min-width:0;outline:none}.VectorEditor-module_layerIconBtn__bchqi{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:12px;line-height:1;padding:0 var(--nice-space-0-5,2px)}.VectorEditor-module_layerIconBtn__bchqi:hover{color:var(--nice-text-primary)}.VectorEditor-module_panelSection__uteDQ{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px)}.VectorEditor-module_panelTitle__WBUxr{align-items:center;color:var(--nice-text-secondary);display:flex;font-size:10px;justify-content:space-between;letter-spacing:.5px;margin-bottom:var(--nice-space-1,4px);text-transform:uppercase}.VectorEditor-module_panelTitle__WBUxr button{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:14px;line-height:1;padding:0 var(--nice-space-0-5,2px)}.VectorEditor-module_panelTitle__WBUxr button:hover{color:var(--nice-text-muted)}.VectorEditor-module_shapeItem__bu2E2{align-items:center;border-radius:var(--nice-radius-sm,3px);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);padding:var(--nice-space-0-75,3px) var(--nice-space-1,4px)}.VectorEditor-module_shapeItem__bu2E2:hover{background:var(--nice-overlay-light-4,hsla(0,0%,100%,.04))}.VectorEditor-module_shapeItemActive__E2lK7{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}.VectorEditor-module_shapeIcon__M4j6X{flex-shrink:0;font-size:14px;opacity:.7}.VectorEditor-module_shapeName__2QctO{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.VectorEditor-module_propRow__Alc4S{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-1,4px)}.VectorEditor-module_propLabel__J0lxK{color:var(--nice-text-muted);font-size:10px;min-width:40px}.VectorEditor-module_propInput__3my2d{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-primary);flex:1;font-size:11px;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px)}.VectorEditor-module_propColorSwatch__JL97Z{border:1px solid var(--nice-overlay-light-15,hsla(0,0%,100%,.15));border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:24px;position:relative;width:24px}.VectorEditor-module_propColorSwatch__JL97Z input{cursor:pointer;height:100%;inset:0;opacity:0;position:absolute;width:100%}.VectorEditor-module_statusBar__jMwan{align-items:center;background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);color:var(--nice-text-muted);display:flex;flex-shrink:0;font-size:10px;gap:var(--nice-space-3,12px);height:20px;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.VectorEditor-module_dialogOverlay__NLiCg{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));display:flex;inset:0;justify-content:center;position:absolute;z-index:100}.VectorEditor-module_dialog__NDNK2{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-50,rgba(0,0,0,.5));max-width:500px;min-width:300px;padding:var(--nice-space-5,20px)}.VectorEditor-module_dialog__NDNK2 h3{color:var(--nice-text-secondary);font-size:14px;margin:0 0 var(--nice-space-3,12px)}.VectorEditor-module_dialog__NDNK2 label{color:var(--nice-text-muted);display:block;font-size:11px;margin:var(--nice-space-2,8px) 0 var(--nice-space-0-5,2px)}.VectorEditor-module_dialog__NDNK2 input,.VectorEditor-module_dialog__NDNK2 select,.VectorEditor-module_dialog__NDNK2 textarea{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-primary);font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-2,8px);width:100%}.VectorEditor-module_dialog__NDNK2 textarea{font-family:monospace;min-height:120px;resize:vertical}.VectorEditor-module_dialogActions__0Sy4X{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-4,16px)}.VectorEditor-module_dialogActions__0Sy4X button{border:none;border-radius:var(--nice-radius-sm,4px);cursor:pointer;font-size:12px;padding:var(--nice-space-1,4px) var(--nice-space-4,16px)}.VectorEditor-module_btnPrimary__f9AaS{background:var(--nice-color-primary);color:var(--nice-color-white)}.VectorEditor-module_btnPrimary__f9AaS:hover{background:var(--nice-primary,#67d)}.VectorEditor-module_btnSecondary__wDps2{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}.VectorEditor-module_btnSecondary__wDps2:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}.VectorEditor-module_handleGroup__sMkQj circle{fill:var(--nice-color-primary);stroke:var(--nice-color-white);stroke-width:1;cursor:pointer}.VectorEditor-module_handleGroup__sMkQj circle:hover{fill:var(--nice-primary-hover,var(--nice-primary))}.PhotoEditor-module_wrapper__jrHYj{background:var(--nice-bg-primary,#1a1a1e);border-radius:var(--nice-radius-xl,12px);color:var(--nice-text-on-primary,#eee);font-family:Segoe UI,sans-serif;font-size:13px;height:100%;max-height:85vh;overflow:hidden;width:100%}.PhotoEditor-module_loadingWrap__QUTon{align-items:center;color:var(--nice-text-muted,#aaa);display:flex;justify-content:center;min-height:400px;width:100%}.PhotoEditor-module_loadingSpin__fGXBK{animation:PhotoEditor-module_nicePhotoEditorSpin__QorqZ 1s linear infinite}@keyframes PhotoEditor-module_nicePhotoEditorSpin__QorqZ{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.PhotoEditor-module_toolbar__RY-Ty{align-items:center;background:var(--nice-bg-secondary,#222226);border-bottom:1px solid var(--nice-border-color,#333);display:flex;justify-content:space-between;padding:var(--nice-space-2,8px) var(--nice-space-3-5,14px)}.PhotoEditor-module_toolbarGroup__PXw0-{display:flex;flex:0 0 auto;gap:var(--nice-space-1-5,6px)}.PhotoEditor-module_toolbarDivider__o3kFV{background:var(--nice-border-color,#444);margin:0 var(--nice-space-1,4px);width:1px}.PhotoEditor-module_toolbarTitle__P1o18{align-items:center;display:flex;flex:1 1 auto;font-size:14px;font-weight:700;justify-content:center;min-width:0;overflow:hidden;padding:0 var(--nice-space-2,8px);text-overflow:ellipsis;white-space:nowrap}.PhotoEditor-module_leftPanel__DnHLU{background:var(--nice-bg-secondary,#222226);border-right:1px solid var(--nice-border-color,#333);display:flex;flex-direction:column;min-width:280px;overflow:hidden;width:280px}.PhotoEditor-module_tabBar__DZ3MG{border-bottom:1px solid var(--nice-border-color,#333);display:flex;flex-wrap:wrap}.PhotoEditor-module_tabButton__BLi97{align-items:center;background:transparent;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary,#888);cursor:pointer;display:flex;flex:1 0 auto;flex-direction:column;font-size:10px;font-weight:600;gap:var(--nice-space-px,1px);min-width:34px;padding:var(--nice-space-2,8px) 0;transition:all .15s}.PhotoEditor-module_tabButtonActive__KlQG0{background:var(--nice-bg-secondary,#2a2a30)}.PhotoEditor-module_tabIcon__-Mq19{font-size:14px}.PhotoEditor-module_panelContent__l5i5t{flex:1;overflow-y:auto;padding:var(--nice-space-2-5,10px) var(--nice-space-3,12px)}.PhotoEditor-module_sectionTitle__tMvCm{font-size:12px;font-weight:600;margin-bottom:var(--nice-space-1-5,6px)}.PhotoEditor-module_sectionTitleMb8__PQ-lV{margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_sectionInfo__bWxW5{color:var(--nice-text-muted,#aaa);font-size:11px}.PhotoEditor-module_pillRow__DGJUb,.PhotoEditor-module_sectionInfoMb__Hk6V-{margin-bottom:var(--nice-space-2-5,10px)}.PhotoEditor-module_pillRow__DGJUb{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px)}.PhotoEditor-module_pillRowMb8__AQrth{margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_pillRowGap3__Y46Vu{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-75,3px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_pill__wTFac{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-xl,12px);color:var(--nice-text-muted,#aaa);cursor:pointer;font-size:11px;font-weight:600;padding:var(--nice-space-0-75,3px) var(--nice-space-2-5,10px)}.PhotoEditor-module_pillActive__AfdZR{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_pillCrop__Nsisp{border-radius:var(--nice-radius-md,6px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.PhotoEditor-module_pillCropActive__p6csO{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_pillEmoji__I42DJ{border-radius:var(--nice-radius-lg,10px);padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px)}.PhotoEditor-module_pillEmojiActive__0-EM7{color:var(--nice-text-primary,#fff)}.PhotoEditor-module_filterGrid__-29PS{display:grid;gap:var(--nice-space-1-5,6px);grid-template-columns:repeat(3,1fr)}.PhotoEditor-module_emojiGrid__whqqK{display:grid;gap:var(--nice-space-0-5,2px);grid-template-columns:repeat(6,1fr);max-height:260px;overflow-y:auto}.PhotoEditor-module_shapeGrid__TawIy{margin-bottom:var(--nice-space-4,16px)}.PhotoEditor-module_frameGrid__R09dd,.PhotoEditor-module_shapeGrid__TawIy{display:grid;gap:var(--nice-space-1,4px);grid-template-columns:repeat(5,1fr)}.PhotoEditor-module_sliderRow__jsWDQ{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_sliderLabel__zOZ49{color:var(--nice-text-muted,#aaa);font-size:11px}.PhotoEditor-module_sliderLabelSelf__EwYKU{align-self:center;margin-right:var(--nice-space-1,4px)}.PhotoEditor-module_sliderValue__qFuTw{font-size:11px;font-weight:600;min-width:28px}.PhotoEditor-module_sliderValueSm__U7FrJ{font-size:10px;min-width:28px}.PhotoEditor-module_adjustColumn__y---T{display:flex;flex-direction:column;gap:var(--nice-space-2,8px)}.PhotoEditor-module_adjustHeader__6s9zV{display:flex;font-size:11px;justify-content:space-between;margin-bottom:var(--nice-space-0-5,2px)}.PhotoEditor-module_adjustIcon__d56rY{text-align:center;width:14px}.PhotoEditor-module_adjustValue__aUUmg{cursor:pointer;font-weight:600;min-width:30px;text-align:right}.PhotoEditor-module_intensitySection__dhe5h{margin-top:var(--nice-space-3,12px);padding:var(--nice-space-2,8px) 0}.PhotoEditor-module_intensityHeader__-KKu6{display:flex;font-size:11px;justify-content:space-between;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_colorInput__xkF1h{border:none;cursor:pointer;height:28px;padding:0;width:28px}.PhotoEditor-module_colorInputLg__W2KrK{border:none;cursor:pointer;height:30px;padding:0;width:32px}.PhotoEditor-module_colorInputDraw__KYcdG{border:none;cursor:pointer;height:28px;padding:0;width:32px}.PhotoEditor-module_overlayToolbar__hfspp{border-bottom:1px solid var(--nice-border-color,#333);display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_overlayToolbarLabel__mc4pU{align-self:center;color:var(--nice-text-muted,#aaa);font-size:11px;margin-right:var(--nice-space-1,4px)}.PhotoEditor-module_overlayToolbarBtn__AdTmZ{font-size:11px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.PhotoEditor-module_overlaySection__IIl4r{border-top:1px solid var(--nice-border-color,#333);margin-top:var(--nice-space-3,12px);padding-top:var(--nice-space-2,8px)}.PhotoEditor-module_overlaySectionTitle__FRx3e{color:var(--nice-text-muted,#aaa);font-size:11px;font-weight:600;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_overlayItem__DGUCN{align-items:center;background:transparent;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#ccc);cursor:pointer;display:flex;font-size:11px;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-0-5,2px);padding:var(--nice-space-0-75,3px) var(--nice-space-1-5,6px)}.PhotoEditor-module_overlayIcon__G0pFk{text-align:center;width:18px}.PhotoEditor-module_overlayName__JVh64{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.PhotoEditor-module_overlayDeleteBtn__Ontxv{background:none;border:none;color:var(--nice-danger,#f55);cursor:pointer;font-size:11px;padding:0}.PhotoEditor-module_emojiBtn__jxG9m{background:transparent;border:none;border-radius:var(--nice-radius-md,6px);cursor:pointer;font-size:22px;line-height:1;padding:var(--nice-space-1,4px) 0}.PhotoEditor-module_shapeBtn__xZdSV{font-size:20px}.PhotoEditor-module_frameBtn__coMkZ,.PhotoEditor-module_shapeBtn__xZdSV{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-text-secondary,#eee);cursor:pointer;line-height:1;padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_frameBtn__coMkZ{font-size:18px}.PhotoEditor-module_removeFrameBtn__oCuua{background:transparent;border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-danger,#f55);cursor:pointer;font-size:14px;padding:var(--nice-space-1-5,6px) 0}.PhotoEditor-module_textFormatBtn__7Z9RJ{min-width:32px}.PhotoEditor-module_textFormatBtnSm__3ptcG{min-width:28px}.PhotoEditor-module_drawActionBtn__teYz4{flex:1}.PhotoEditor-module_textArea__sBGlB{background:var(--nice-bg-secondary,#2a2a30);border:1px solid var(--nice-border-color,#444);border-radius:var(--nice-radius-md,6px);color:var(--nice-text-secondary,#eee);font-size:13px;margin-bottom:var(--nice-space-2,8px);resize:none}.PhotoEditor-module_textAreaSm__6xZnY{font-size:12px;margin-bottom:0}.PhotoEditor-module_textBtnRow__AcEnd{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_textGapRow__Dq2uz{display:flex;gap:var(--nice-space-1,4px);margin-top:var(--nice-space-1-5,6px)}.PhotoEditor-module_editSelectedSection__bgNEh{border-top:1px solid var(--nice-border-color,#333);margin-top:var(--nice-space-3,12px);padding-top:var(--nice-space-2,8px)}.PhotoEditor-module_editSelectedLabel__u2rmS{color:var(--nice-text-muted,#aaa);font-size:11px;margin-bottom:var(--nice-space-1,4px)}.PhotoEditor-module_shapeColorRow__ip5--{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_shapeColorLabel__nVcbU{align-self:center;color:var(--nice-text-muted,#aaa);font-size:11px;margin-right:var(--nice-space-0-5,2px)}.PhotoEditor-module_shapeColorLabelMl__KiM2d{margin-left:var(--nice-space-1,4px)}.PhotoEditor-module_shapeFillToggle__BXJ8C{font-size:10px;padding:var(--nice-space-0-5,2px) var(--nice-space-1-5,6px)}.PhotoEditor-module_frameColorRow__KRAHz{display:flex;gap:var(--nice-space-1,4px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_frameThicknessWrap__lXCoC{align-items:center;display:flex;flex:1;gap:var(--nice-space-1,4px)}.PhotoEditor-module_frameThicknessValue__SAEuc{font-size:10px}.PhotoEditor-module_drawPreview__WPbiv{display:flex;justify-content:center;margin-bottom:var(--nice-space-3,12px)}.PhotoEditor-module_drawActionRow__CUSWS{display:flex;gap:var(--nice-space-1,4px)}.PhotoEditor-module_quickColorRow__DTy5E{align-items:center;display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-2,8px)}.PhotoEditor-module_quickColorSwatch__ZjgoA{border:1px solid var(--nice-border-color,#555);border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:18px;width:18px}.PhotoEditor-module_transformRow__LKRjS{display:flex;gap:var(--nice-space-1-5,6px);margin-bottom:var(--nice-space-4,16px)}.PhotoEditor-module_transformZoomRow__h2NlB{align-items:center;display:flex;gap:var(--nice-space-2,8px)}.PhotoEditor-module_transformZoomValue__LXa51{font-size:11px;font-weight:600;min-width:40px}.PhotoEditor-module_transformInfo__zXP9l{background:var(--nice-bg-secondary,#2a2a30);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-muted,#aaa);font-size:11px;margin-top:var(--nice-space-4,16px);padding:var(--nice-space-2-5,10px)}.PhotoEditor-module_canvasViewport__OMBIL{align-items:center;background:#111115;display:flex;flex:1;justify-content:center;overflow:auto;padding:var(--nice-space-5,20px);position:relative}.PhotoEditor-module_zoomWrap__JjfiJ{max-height:100%;max-width:100%;position:relative;transform-origin:center center;transition:transform .15s ease}.PhotoEditor-module_compareWrap__-J5ku{cursor:ew-resize;display:inline-block;position:relative}.PhotoEditor-module_canvasOriginal__Apf91{max-width:100%}.PhotoEditor-module_canvasEdited__Eroz7,.PhotoEditor-module_canvasOriginal__Apf91{display:block;max-height:60vh;object-fit:contain}.PhotoEditor-module_compareClip__5qG2I{bottom:0;left:0;overflow:hidden;position:absolute;top:0}.PhotoEditor-module_compareSlider__OIIIK{bottom:0;position:absolute;top:0;transform:translateX(-50%);width:3px}.PhotoEditor-module_compareSliderKnob__VohI9{align-items:center;border-radius:var(--nice-radius-full,50%);box-shadow:0 2px 8px var(--nice-overlay-40,rgba(0,0,0,.4));display:flex;height:28px;justify-content:center;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%);width:28px}.PhotoEditor-module_compareSliderIcon__pXcct{color:var(--nice-text-primary,#fff);font-size:12px}.PhotoEditor-module_compareLabelOriginal__GaBoj{background:var(--nice-overlay-60,rgba(0,0,0,.6));color:var(--nice-text-on-primary,#fff);left:8px}.PhotoEditor-module_compareLabelEdited__Fr836,.PhotoEditor-module_compareLabelOriginal__GaBoj{border-radius:var(--nice-radius-sm,4px);font-size:11px;font-weight:600;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px);position:absolute;top:8px}.PhotoEditor-module_compareLabelEdited__Fr836{color:var(--nice-text-primary,#fff);right:8px}.PhotoEditor-module_regularWrap__8umPV{display:inline-block;position:relative}.PhotoEditor-module_canvasRegular__wxapL{border-radius:var(--nice-radius-md,6px);box-shadow:0 4px 20px var(--nice-overlay-40,rgba(0,0,0,.4));display:block;max-height:60vh;max-width:100%;object-fit:contain}.PhotoEditor-module_cropOverlay__MJk1Y{inset:0;pointer-events:none;position:absolute;z-index:2}.PhotoEditor-module_cropDarkBg__m3axV{background:var(--nice-overlay-55,rgba(0,0,0,.55));inset:0;position:absolute}.PhotoEditor-module_cropGridContainer__NfHdT{inset:0;position:absolute}.PhotoEditor-module_cropSizeLabel__fV2mF{background:var(--nice-overlay-75,rgba(0,0,0,.75));border-radius:var(--nice-radius-sm,3px);bottom:-24px;color:var(--nice-text-on-primary,#fff);font-size:10px;left:50%;padding:var(--nice-space-0-5,2px) var(--nice-space-2,8px);position:absolute;transform:translateX(-50%);white-space:nowrap}.PhotoEditor-module_cropInfo__Z1SCE{color:var(--nice-text-muted,#aaa);font-size:11px;margin-bottom:var(--nice-space-2-5,10px)}.PhotoEditor-module_cropAspectLabel__dieL-{font-size:12px;font-weight:600;margin-bottom:var(--nice-space-1-5,6px)}.PhotoEditor-module_cropAspectRow__scRj3{display:flex;flex-wrap:wrap;gap:var(--nice-space-1,4px)}.PhotoEditor-module_accentBtn__tgaEx{color:var(--nice-text-primary,#fff);font-weight:600;width:100%}.GameAsset2dEditor-module_root__WVJBM{background:var(--nice-bg,#1a1a2e);color:var(--nice-text-secondary,#e0e0e0);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;height:100%;min-height:600px;user-select:none}.GameAsset2dEditor-module_menuBar__WaEaU{align-items:center;background:var(--nice-bg,#16213e);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_menuBar__WaEaU h3{color:var(--nice-warning,#ffd369);font-size:14px;font-weight:600;margin:0}.GameAsset2dEditor-module_menuGroup__EOreB{display:flex;gap:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_menuBtn__JYWXn{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-muted,#b0b0b0);cursor:pointer;display:flex;font-size:12px;gap:var(--nice-space-1,4px);padding:var(--nice-space-1,4px) var(--nice-space-2,8px);transition:all .15s}.GameAsset2dEditor-module_menuBtn__JYWXn:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_menuBtn__JYWXn:disabled{cursor:not-allowed;opacity:.4}.GameAsset2dEditor-module_spacer__fPVeq{flex:1}.GameAsset2dEditor-module_modeTabs__iKh7C{background:var(--nice-bg,#1f2940);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_modeTab__C12zt{background:transparent;border:none;border-radius:var(--nice-radius-sm,4px) var(--nice-radius-sm,4px) 0 0;color:var(--nice-text-secondary,#8892a8);cursor:pointer;font-size:12px;font-weight:500;padding:var(--nice-space-1-5,6px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_modeTab__C12zt:hover{background:var(--nice-overlay-light-5,hsla(0,0%,100%,.05));color:var(--nice-text-on-primary,#c0c8d8)}.GameAsset2dEditor-module_modeTab__C12zt.GameAsset2dEditor-module_active__DUroI{background:var(--nice-bg,#1a1a2e);color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_mainArea__jwDUa{display:flex;flex:1;overflow:hidden}.GameAsset2dEditor-module_leftPanel__xxAg5{background:var(--nice-bg,#16213e);border-right:1px solid var(--nice-border-color,#0f3460);display:flex;flex-direction:column;overflow:hidden;width:220px}.GameAsset2dEditor-module_centerArea__xr-Hn{display:flex;flex:1;flex-direction:column;overflow:hidden}.GameAsset2dEditor-module_rightPanel__YoNuc{background:var(--nice-bg,#16213e);border-left:1px solid var(--nice-border-color,#0f3460);display:flex;flex-direction:column;overflow:hidden;width:260px}.GameAsset2dEditor-module_toolbar__hEC9S{align-items:center;background:var(--nice-bg,#1f2940);border-bottom:1px solid var(--nice-border-color,#0f3460);display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_toolGroup__Zbn47{background:var(--nice-overlay-20,rgba(0,0,0,.2));border-radius:var(--nice-radius-sm,4px);display:flex;gap:var(--nice-space-0-5,2px);padding:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_toolBtn__5U7Rw{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:all .15s;width:28px}.GameAsset2dEditor-module_toolBtn__5U7Rw:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_toolBtn__5U7Rw.GameAsset2dEditor-module_active__DUroI{background:var(--nice-color-primary,#0f3460);color:var(--nice-text-on-primary,#ffd369)}.GameAsset2dEditor-module_toolBtn__5U7Rw:disabled{cursor:not-allowed;opacity:.3}.GameAsset2dEditor-module_viewport__vEKEv{background:var(--nice-bg,#0a0a14);flex:1;overflow:hidden;position:relative}.GameAsset2dEditor-module_viewportCanvas__FJ5qA{image-rendering:pixelated;image-rendering:crisp-edges;left:50%;position:absolute;top:50%}.GameAsset2dEditor-module_gridOverlay__K8B97{bottom:0;left:0;pointer-events:none;position:absolute;right:0;top:0}.GameAsset2dEditor-module_panelHeader__xm2As{align-items:center;background:var(--nice-bg-tertiary,#0f3460);color:var(--nice-text-secondary,#8892a8);display:flex;font-size:11px;font-weight:600;justify-content:space-between;letter-spacing:.5px;padding:var(--nice-space-2,8px) var(--nice-space-3,12px);text-transform:uppercase}.GameAsset2dEditor-module_panelContent__dvOGq{flex:1;overflow-y:auto;padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_panelSection__RQQDr{margin-bottom:var(--nice-space-4,16px)}.GameAsset2dEditor-module_panelLabel__Ks-Wa{color:var(--nice-text-secondary,#8892a8);display:block;font-size:11px;letter-spacing:.5px;margin-bottom:var(--nice-space-1-5,6px);text-transform:uppercase}.GameAsset2dEditor-module_panelInput__cxNiG{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#e0e0e0);font-size:12px;padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);width:100%}.GameAsset2dEditor-module_panelInput__cxNiG:focus{border-color:var(--nice-warning,#ffd369);outline:none}.GameAsset2dEditor-module_tilePalette__OpzmV{display:grid;gap:var(--nice-space-1,4px);grid-template-columns:repeat(auto-fill,minmax(40px,1fr));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_tileItem__uWNS9{aspect-ratio:1;background:var(--nice-bg,#0a0a14);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;overflow:hidden;transition:all .15s}.GameAsset2dEditor-module_tileItem__uWNS9:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_tileItem__uWNS9.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_tileItem__uWNS9 img{height:100%;image-rendering:pixelated;object-fit:contain;width:100%}.GameAsset2dEditor-module_layersList__anFaG{display:flex;flex-direction:column;gap:var(--nice-space-0-5,2px)}.GameAsset2dEditor-module_layerItem__XSGlu{align-items:center;background:var(--nice-bg,#1f2940);border-radius:var(--nice-radius-sm,4px);cursor:pointer;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-1-5,6px) var(--nice-space-2,8px);transition:all .15s}.GameAsset2dEditor-module_layerItem__XSGlu:hover{background:var(--nice-hover-bg,#2a3a5e)}.GameAsset2dEditor-module_layerItem__XSGlu.GameAsset2dEditor-module_selected__216IN{background:var(--nice-selected-bg,#0f3460);border-left:3px solid var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_layerVisibility__RpHjV{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_layerVisibility__RpHjV:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1))}.GameAsset2dEditor-module_layerVisibility__RpHjV.GameAsset2dEditor-module_hidden__mukOG{opacity:.4}.GameAsset2dEditor-module_layerName__WBxq5{color:var(--nice-text-secondary,#c0c8d8);flex:1;font-size:12px}.GameAsset2dEditor-module_layerOpacity__FpzL-{color:var(--nice-text-secondary,#8892a8);font-size:10px;text-align:right;width:40px}.GameAsset2dEditor-module_framesList__vg1oO{display:grid;gap:var(--nice-space-2,8px);grid-template-columns:repeat(auto-fill,minmax(60px,1fr));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_frameItem__fkEfb{aspect-ratio:1;background:var(--nice-bg,#0a0a14);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;overflow:hidden;position:relative;transition:all .15s}.GameAsset2dEditor-module_frameItem__fkEfb:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_frameItem__fkEfb.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_frameItem__fkEfb canvas{height:100%;image-rendering:pixelated;object-fit:contain;width:100%}.GameAsset2dEditor-module_frameLabel__5IGW8{background:var(--nice-overlay-70,rgba(0,0,0,.7));bottom:0;color:var(--nice-text-muted,#b0b0b0);font-size:9px;left:0;padding:var(--nice-space-0-5,2px) var(--nice-space-1,4px);position:absolute;right:0;text-align:center}.GameAsset2dEditor-module_timeline__dPJk6{background:var(--nice-bg,#16213e);border-top:1px solid var(--nice-border-color,#0f3460);padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_timelineTrack__mr20w{background:var(--nice-bg,#0a0a14);border-radius:var(--nice-radius-sm,4px);display:flex;gap:var(--nice-space-1,4px);overflow-x:auto;padding:var(--nice-space-1,4px)}.GameAsset2dEditor-module_timelineFrame__AQyGe{background:var(--nice-bg,#1f2940);border:2px solid transparent;border-radius:var(--nice-radius-sm,4px);cursor:pointer;flex-shrink:0;height:48px;overflow:hidden;width:48px}.GameAsset2dEditor-module_timelineFrame__AQyGe:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_timelineFrame__AQyGe.GameAsset2dEditor-module_current__3sAfL{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_stateGraph__qAWlU{background:var(--nice-bg,#0a0a14);flex:1;overflow:hidden;position:relative}.GameAsset2dEditor-module_stateNode__W9Z-g{background:var(--nice-bg,#1f2940);border:2px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-lg,8px);cursor:move;min-width:120px;padding:var(--nice-space-2,8px) var(--nice-space-3,12px);position:absolute;transition:border-color .15s}.GameAsset2dEditor-module_stateNode__W9Z-g:hover{border-color:var(--nice-border-color,#4a5a7e)}.GameAsset2dEditor-module_stateNode__W9Z-g.GameAsset2dEditor-module_selected__216IN{border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_stateNode__W9Z-g.GameAsset2dEditor-module_entry__cmA9n{border-color:var(--nice-success-light,#4ade80)}.GameAsset2dEditor-module_stateNodeName__TK5vs{color:var(--nice-text-secondary,#e0e0e0);font-size:12px;font-weight:500;text-align:center}.GameAsset2dEditor-module_stateNodeAnim__VGwnV{color:var(--nice-text-secondary,#8892a8);font-size:10px;margin-top:var(--nice-space-1,4px);text-align:center}.GameAsset2dEditor-module_transition__FBbno{stroke:var(--nice-text-secondary,#4a5a7e);stroke-width:2;fill:none;marker-end:url(#arrowhead)}.GameAsset2dEditor-module_transition__FBbno:hover{stroke:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_effectsList__vHq4I{display:flex;flex-direction:column;gap:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectItem__6-1li{background:var(--nice-bg,#1f2940);border-radius:var(--nice-radius-md,6px);overflow:hidden}.GameAsset2dEditor-module_effectHeader__cgVN-{align-items:center;cursor:pointer;display:flex;gap:var(--nice-space-2,8px);padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectToggle__lKE36{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px);cursor:pointer;height:18px;width:18px}.GameAsset2dEditor-module_effectToggle__lKE36.GameAsset2dEditor-module_enabled__wgDzp{background:var(--nice-warning,#ffd369);border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_effectName__NQCWj{color:var(--nice-text-secondary,#c0c8d8);flex:1;font-size:12px}.GameAsset2dEditor-module_effectRemove__TSSdI{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_effectRemove__TSSdI:hover{background:var(--nice-danger,#ef4444);color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_effectParams__UqTBd{background:var(--nice-overlay-20,rgba(0,0,0,.2));padding:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectParam__hEsVY{align-items:center;display:flex;gap:var(--nice-space-2,8px);margin-bottom:var(--nice-space-2,8px)}.GameAsset2dEditor-module_effectParam__hEsVY:last-child{margin-bottom:0}.GameAsset2dEditor-module_effectParamLabel__u0Qoc{color:var(--nice-text-secondary,#8892a8);flex:0 0 80px;font-size:11px}.GameAsset2dEditor-module_effectParamInput__aqxdv{background:var(--nice-bg,#0a0a14);border:1px solid var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#e0e0e0);flex:1;font-size:11px;height:24px;padding:0 var(--nice-space-2,8px)}.GameAsset2dEditor-module_statusBar__eOrNe{align-items:center;background:var(--nice-bg-tertiary,#0f3460);color:var(--nice-text-secondary,#8892a8);display:flex;font-size:11px;gap:var(--nice-space-4,16px);padding:var(--nice-space-1,4px) var(--nice-space-3,12px)}.GameAsset2dEditor-module_statusItem__kKLHF,.GameAsset2dEditor-module_zoomControl__4YD9G{align-items:center;display:flex;gap:var(--nice-space-1,4px)}.GameAsset2dEditor-module_zoomControl__4YD9G{margin-left:auto}.GameAsset2dEditor-module_zoomBtn__hxYik{align-items:center;background:transparent;border:none;border-radius:var(--nice-radius-sm,3px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;display:flex;height:20px;justify-content:center;width:20px}.GameAsset2dEditor-module_zoomBtn__hxYik:hover{background:var(--nice-overlay-light-10,hsla(0,0%,100%,.1));color:var(--nice-text-on-primary,#fff)}.GameAsset2dEditor-module_dialogOverlay__dZYwO{align-items:center;background:var(--nice-overlay-60,rgba(0,0,0,.6));bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}.GameAsset2dEditor-module_dialog__mfLFL{background:var(--nice-bg,#16213e);border-radius:var(--nice-radius-lg,8px);box-shadow:0 8px 32px var(--nice-overlay-40,rgba(0,0,0,.4));max-width:500px;min-width:300px;padding:var(--nice-space-6,24px)}.GameAsset2dEditor-module_dialog__mfLFL h3{color:var(--nice-warning,#ffd369);font-size:16px;margin:0 0 var(--nice-space-4,16px)}.GameAsset2dEditor-module_dialogActions__vhDXe{display:flex;gap:var(--nice-space-2,8px);justify-content:flex-end;margin-top:var(--nice-space-5,20px)}.GameAsset2dEditor-module_btnPrimary__Gzc25{background:var(--nice-warning,#ffd369);border:none;border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-on-primary,#1a1a2e);cursor:pointer;font-size:12px;font-weight:600;padding:var(--nice-space-2,8px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_btnPrimary__Gzc25:hover{background:color-mix(in srgb,var(--nice-warning,#ffd369) 80%,#fff)}.GameAsset2dEditor-module_btnSecondary__G5nK5{background:transparent;border:1px solid var(--nice-border-color,#4a5a7e);border-radius:var(--nice-radius-sm,4px);color:var(--nice-text-secondary,#c0c8d8);cursor:pointer;font-size:12px;padding:var(--nice-space-2,8px) var(--nice-space-4,16px);transition:all .15s}.GameAsset2dEditor-module_btnSecondary__G5nK5:hover{background:var(--nice-overlay-light-5,hsla(0,0%,100%,.05));border-color:var(--nice-border-strong,#6a7a9e)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar{width:6px}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-track{background:var(--nice-bg,#0a0a14)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-thumb{background:var(--nice-border-color,#2a3a5e);border-radius:var(--nice-radius-sm,3px)}.GameAsset2dEditor-module_panelContent__dvOGq::-webkit-scrollbar-thumb:hover{background:var(--nice-text-secondary,#4a5a7e)}.GameAsset2dEditor-module_dropZone__Z7sYz{border:2px dashed var(--nice-border-color,#4a5a7e);border-radius:var(--nice-radius-lg,8px);color:var(--nice-text-secondary,#8892a8);cursor:pointer;padding:var(--nice-space-6,24px);text-align:center;transition:all .15s}.GameAsset2dEditor-module_dropZone__Z7sYz:hover{border-color:var(--nice-warning,#ffd369);color:var(--nice-text-secondary,#c0c8d8)}.GameAsset2dEditor-module_dropZone__Z7sYz.GameAsset2dEditor-module_active__DUroI{background:color-mix(in srgb,var(--nice-warning,#ffd369) 10%,transparent);border-color:var(--nice-warning,#ffd369)}.GameAsset2dEditor-module_emptyState__3wryk{align-items:center;color:var(--nice-text-secondary,#8892a8);display:flex;flex-direction:column;justify-content:center;padding:var(--nice-space-8,32px);text-align:center}.GameAsset2dEditor-module_emptyState__3wryk svg{height:48px;margin-bottom:var(--nice-space-3,12px);opacity:.5;width:48px}.GameAsset2dEditor-module_emptyStateText__Q5V1a{font-size:12px;margin-bottom:var(--nice-space-3,12px)}
|
|
1
|
+
._root_1jln9_5{display:flex;flex-direction:column;height:100%;background:var(--nice-bg-primary);color:var(--nice-text-primary);font-family:Segoe UI,Consolas,monospace;font-size:12px;user-select:none;overflow:hidden}._menuBar_1jln9_31{display:flex;align-items:center;gap:0;background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);padding:0 var(--nice-space-1, 4px);height:28px;flex-shrink:0}._menuBtn_1jln9_51{background:none;border:none;color:var(--nice-text-secondary);padding:var(--nice-space-1, 4px) var(--nice-space-2-5, 10px);cursor:pointer;font-size:11px;border-radius:var(--nice-radius-sm, 3px)}._menuBtn_1jln9_51:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}._menuSep_1jln9_77{width:1px;height:16px;background:var(--nice-bg-secondary);margin:0 var(--nice-space-1, 4px)}._menuBar_1jln9_31 .nice-menu__btn{color:var(--nice-text-secondary);font-size:11px}._menuBar_1jln9_31 .nice-menu__btn:hover{background:var(--nice-bg-secondary);color:var(--nice-color-white)}._toolbar_1jln9_113{display:flex;flex-direction:column;width:38px;background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);padding:var(--nice-space-1, 4px) var(--nice-space-0-5, 2px);gap:var(--nice-space-0-5, 2px);overflow-y:auto;flex-shrink:0}._toolBtn_1jln9_135{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm, 4px);cursor:pointer;font-size:16px;color:var(--nice-text-muted);transition:all .1s}._toolBtn_1jln9_135:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}._toolBtnActive_1jln9_175{background:var(--nice-color-primary, #4f8cff)!important;border-color:var(--nice-color-white, #ffffff)!important;color:var(--nice-color-white, #ffffff)!important;box-shadow:inset 2px 0 0 0 var(--nice-color-white, #ffffff),0 0 0 1px var(--nice-color-primary, #4f8cff)}._toolBtnActive_1jln9_175:hover{background:var(--nice-color-primary, #4f8cff)!important;color:var(--nice-color-white, #ffffff)!important}._mainArea_1jln9_203{display:flex;flex:1;min-height:0}._canvasContainer_1jln9_213{flex:1;height:100%;min-height:0;position:relative;overflow:hidden;background:var(--nice-bg-inset);cursor:crosshair}._canvasContainer_1jln9_213 canvas{position:absolute;image-rendering:pixelated}._rightPanel_1jln9_251{width:220px;display:flex;flex-direction:column;background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);overflow-y:auto;flex-shrink:0}._panelSection_1jln9_269{border-bottom:1px solid var(--nice-border-color)}._rightPanel_1jln9_251 .nice-collapse__trigger{width:100%;display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;padding:var(--nice-space-1-5, 6px) var(--nice-space-2, 8px);font-size:10px;text-transform:uppercase;letter-spacing:.5px;text-align:left}._rightPanel_1jln9_251 .nice-collapse__trigger:hover{color:var(--nice-text-secondary)}._rightPanel_1jln9_251 .nice-collapse__panel{padding:0 var(--nice-space-2, 8px) var(--nice-space-1-5, 6px)}._collapseChevron_1jln9_323{display:inline-flex;transition:transform .15s ease}.nice-collapse--expanded ._collapseChevron_1jln9_323{transform:rotate(90deg)}._layerActions_1jln9_337{display:flex;gap:var(--nice-space-0-5, 2px);flex-wrap:wrap;margin-bottom:var(--nice-space-1, 4px)}._panelTitle_1jln9_349{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--nice-text-secondary);margin-bottom:var(--nice-space-1, 4px);display:flex;justify-content:space-between;align-items:center}._panelTitle_1jln9_349 button{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:14px;padding:0 var(--nice-space-0-5, 2px);line-height:1}._panelTitle_1jln9_349 button:hover{color:var(--nice-text-muted)}._layerItem_1jln9_397{display:flex;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-0-75, 3px) var(--nice-space-1, 4px);border-radius:var(--nice-radius-sm, 3px);cursor:pointer;font-size:11px}._layerItem_1jln9_397:hover{background:var(--nice-overlay-light-4, rgba(255, 255, 255, .04))}._layerItemActive_1jln9_421{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}._layerVis_1jln9_429{width:16px;height:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:10px;opacity:.6;flex-shrink:0}._layerVis_1jln9_429:hover{opacity:1}._layerName_1jln9_457{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._layerOpacity_1jln9_471{width:36px;font-size:10px;text-align:right;color:var(--nice-text-muted)}._paletteGrid_1jln9_487{display:grid;grid-template-columns:repeat(8,1fr);gap:var(--nice-space-0-5, 2px)}._paletteSwatch_1jln9_497{aspect-ratio:1;border:1px solid var(--nice-overlay-light-8, rgba(255, 255, 255, .08));border-radius:var(--nice-radius-sm, 2px);cursor:pointer;transition:transform .1s}._paletteSwatch_1jln9_497:hover{transform:scale(1.15);z-index:1}._paletteSwatchActive_1jln9_519{border-color:var(--nice-color-white)!important;box-shadow:0 0 0 1px var(--nice-color-primary)}._colorPickers_1jln9_527{display:flex;gap:var(--nice-space-1-5, 6px);align-items:center;margin-top:var(--nice-space-1-5, 6px)}._colorSample_1jln9_539{width:28px;height:28px;border-radius:var(--nice-radius-sm, 4px);border:2px solid var(--nice-overlay-light-20, rgba(255, 255, 255, .2))}._bottomPanel_1jln9_555{height:80px;background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);display:flex;flex-direction:column;flex-shrink:0}._timelineControls_1jln9_571{display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);font-size:11px;border-bottom:1px solid var(--nice-bg, #222244)}._timelineControls_1jln9_571 button{background:var(--nice-bg-secondary);border:none;color:var(--nice-text-muted);padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-sm, 3px);cursor:pointer;font-size:11px}._timelineControls_1jln9_571 button:hover{background:var(--nice-bg-tertiary);color:var(--nice-color-white)}._timelineControls_1jln9_571 label{color:var(--nice-text-muted)}._timelineControls_1jln9_571 input[type=number]{width:40px;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-px, 1px) var(--nice-space-1, 4px);font-size:11px;text-align:center}._timelineControls_1jln9_571 input[type=checkbox]{accent-color:var(--nice-color-primary)}._timelineFrames_1jln9_645{display:flex;gap:var(--nice-space-0-5, 2px);padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);overflow-x:auto;flex:1;align-items:stretch}._frameThumb_1jln9_661{width:44px;min-width:44px;border:2px solid transparent;border-radius:var(--nice-radius-sm, 4px);background:var(--nice-bg-primary);display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;position:relative;overflow:hidden}._frameThumb_1jln9_661 canvas{image-rendering:pixelated;width:36px;height:36px;object-fit:contain}._frameThumb_1jln9_661:hover{border-color:var(--nice-border-color)}._frameThumbActive_1jln9_707{border-color:var(--nice-color-primary)!important;background:var(--nice-surface)}._frameNum_1jln9_715{font-size:8px;color:var(--nice-text-muted);position:absolute;bottom:1px;right:3px}._statusBar_1jln9_733{display:flex;align-items:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);font-size:10px;color:var(--nice-text-muted);background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);height:20px;flex-shrink:0}._dialogOverlay_1jln9_761{position:absolute;inset:0;background:var(--nice-overlay-60, rgba(0, 0, 0, .6));display:flex;align-items:center;justify-content:center;z-index:100}._dialog_1jln9_761{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg, 8px);padding:var(--nice-space-5, 20px);min-width:300px;box-shadow:0 8px 32px var(--nice-overlay-50, rgba(0, 0, 0, .5))}._dialog_1jln9_761 h3{margin:0 0 var(--nice-space-3, 12px);font-size:14px;color:var(--nice-text-secondary)}._dialog_1jln9_761 label{display:block;font-size:11px;color:var(--nice-text-muted);margin:var(--nice-space-2, 8px) 0 var(--nice-space-0-5, 2px)}._dialog_1jln9_761 input,._dialog_1jln9_761 select{width:100%;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-sm, 4px);font-size:12px}._dialogActions_1jln9_837{display:flex;gap:var(--nice-space-2, 8px);justify-content:flex-end;margin-top:var(--nice-space-4, 16px)}._dialogActions_1jln9_837 button{padding:var(--nice-space-1, 4px) var(--nice-space-4, 16px);border:none;border-radius:var(--nice-radius-sm, 4px);cursor:pointer;font-size:12px}._btnPrimary_1jln9_863{background:var(--nice-color-primary);color:var(--nice-color-white)}._btnPrimary_1jln9_863:hover{background:var(--nice-primary, #6677dd)}._btnSecondary_1jln9_877{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}._btnSecondary_1jln9_877:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}._brushSlider_1jln9_897{display:flex;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);border-bottom:1px solid var(--nice-border-color)}._brushSlider_1jln9_897 label{font-size:10px;color:var(--nice-text-muted)}._brushSlider_1jln9_897 input[type=range]{flex:1;height:4px;accent-color:var(--nice-color-primary)}._brushSlider_1jln9_897 span{font-size:10px;color:var(--nice-text-muted);min-width:16px;text-align:center}._toolSep_1jln9_945{width:28px;height:1px;background:var(--nice-bg-secondary);margin:var(--nice-space-1, 4px) var(--nice-space-0-5, 2px)}._toolGroup_1jln9_957{display:flex;flex-direction:column;gap:var(--nice-space-px, 1px);padding:var(--nice-space-0-5, 2px) 0}._miniBtn_1jln9_973{width:32px;height:20px;display:flex;align-items:center;justify-content:center;background:var(--nice-overlay-light-4, rgba(255, 255, 255, .04));border:1px solid transparent;border-radius:var(--nice-radius-sm, 3px);cursor:pointer;font-size:10px;color:var(--nice-text-muted);transition:all .1s}._miniBtn_1jln9_973:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}._miniBtnActive_1jln9_1011{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}._colorSwatches_1jln9_1025{display:flex;flex-direction:column;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1-5, 6px) 0;border-top:1px solid var(--nice-border-color);margin-top:var(--nice-space-1, 4px)}._brushShapes_1jln9_1047{display:flex;gap:var(--nice-space-0-5, 2px);padding:var(--nice-space-0-5, 2px) 0;flex-wrap:wrap}._pressureToggles_1jln9_1063{display:flex;flex-direction:column;gap:var(--nice-space-0-5, 2px);padding:var(--nice-space-1, 4px) 0}._checkLabel_1jln9_1075{display:flex;align-items:center;gap:var(--nice-space-1, 4px);font-size:10px;color:var(--nice-text-muted);cursor:pointer}._checkLabel_1jln9_1075 input[type=checkbox]{accent-color:var(--nice-color-primary);width:12px;height:12px}._hsvPicker_1jln9_1105{display:flex;flex-direction:column;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1, 4px) 0}._hsvRow_1jln9_1117{display:flex;align-items:center;gap:var(--nice-space-1, 4px)}._hsvLabel_1jln9_1127{font-size:9px;color:var(--nice-text-muted);min-width:16px;text-align:right}._hsvSlider_1jln9_1139{flex:1;height:6px;accent-color:var(--nice-color-primary);cursor:pointer;min-width:0}._hsvVal_1jln9_1153{font-size:9px;color:var(--nice-text-muted);min-width:28px;text-align:right}._hsvNumInput_1jln9_1165{width:36px;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-px, 1px) var(--nice-space-1, 4px);font-size:10px;text-align:center}._hsvHexInput_1jln9_1185{flex:1;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-px, 1px) var(--nice-space-1, 4px);font-size:10px}._layerLock_1jln9_1207{width:16px;height:16px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:10px;opacity:.6;flex-shrink:0}._layerLock_1jln9_1207:hover{opacity:1}._layerNameInput_1jln9_1237{flex:1;min-width:0;background:var(--nice-bg-canvas);border:1px solid var(--nice-color-primary);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 2px);padding:0 var(--nice-space-1, 4px);font-size:11px;outline:none}._layerControls_1jln9_1261{display:flex;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1, 4px) var(--nice-space-1, 4px) var(--nice-space-0-5, 2px);border-top:1px solid var(--nice-overlay-light-5, rgba(255, 255, 255, .05));margin-top:var(--nice-space-1, 4px)}._blendSelect_1jln9_1279{flex:1;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-secondary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-px, 1px) var(--nice-space-1, 4px);font-size:10px;cursor:pointer}._layerOpSlider_1jln9_1301{width:60px;height:4px;accent-color:var(--nice-color-primary);cursor:pointer}._genPanel_1jln9_1323{width:100%;height:600px;max-height:70vh;display:flex;flex-direction:column;overflow:hidden}._genTabs_1jln9_1339{display:flex;background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);flex-shrink:0}._genTabBtn_1jln9_1351{flex:1;background:none;border:none;border-bottom:2px solid transparent;color:var(--nice-text-secondary);padding:var(--nice-space-1-5, 6px) var(--nice-space-2, 8px);cursor:pointer;font-size:11px;transition:all .15s}._genTabBtn_1jln9_1351:hover{background:var(--nice-bg-elevated);color:var(--nice-text-muted)}._genTabBtnActive_1jln9_1381{color:var(--nice-text-primary)!important;border-bottom-color:var(--nice-color-primary)!important;background:var(--nice-bg-elevated)!important}._genBody_1jln9_1391{display:flex;flex:1;min-height:0;overflow:hidden}._genLeft_1jln9_1403{width:200px;display:flex;flex-direction:column;border-right:1px solid var(--nice-border-color);overflow-y:auto;flex-shrink:0}._genCenter_1jln9_1419{flex:1;display:flex;flex-direction:column;align-items:center;padding:var(--nice-space-2, 8px);gap:var(--nice-space-2, 8px);overflow-y:auto}._genRight_1jln9_1437{width:200px;display:flex;flex-direction:column;border-left:1px solid var(--nice-border-color);overflow-y:auto;flex-shrink:0}._genPreviewWrap_1jln9_1453{flex:1;display:flex;align-items:center;justify-content:center;background:var(--nice-bg-inset);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-md, 6px);min-height:120px;width:100%;overflow:hidden}._genPreviewCanvas_1jln9_1477{image-rendering:pixelated;max-width:100%;max-height:100%;min-width:64px;min-height:64px;object-fit:contain}._genDirGrid_1jln9_1493{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5, 2px);justify-content:center}._genRow_1jln9_1505{display:flex;align-items:center;gap:var(--nice-space-1, 4px);width:100%}._genPresetGrid_1jln9_1517{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5, 2px)}._genPresetBtn_1jln9_1527{background:var(--nice-overlay-light-4, rgba(255, 255, 255, .04));border:1px solid transparent;border-radius:var(--nice-radius-sm, 3px);color:var(--nice-text-muted);font-size:9px;padding:var(--nice-space-0-75, 3px) var(--nice-space-1-5, 6px);cursor:pointer;transition:all .1s}._genPresetBtn_1jln9_1527:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}._genPresetBtnActive_1jln9_1555{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-text-primary)!important}._genPartGrid_1jln9_1565{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-5, 2px)}._genPartBtn_1jln9_1577{width:auto;min-width:32px;padding:0 var(--nice-space-1-5, 6px);white-space:nowrap}._genColorSwatches_1jln9_1589{display:flex;gap:var(--nice-space-0-5, 2px);margin-top:var(--nice-space-0-5, 2px)}._genColorSwatch_1jln9_1589{width:16px;height:16px;border-radius:var(--nice-radius-sm, 2px);border:1px solid var(--nice-overlay-light-10, rgba(255, 255, 255, .1))}._genAssemblyItem_1jln9_1611{display:flex;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-0-5, 2px) var(--nice-space-1, 4px);font-size:10px;border-radius:var(--nice-radius-sm, 3px)}._genAssemblyItem_1jln9_1611:hover{background:var(--nice-overlay-light-4, rgba(255, 255, 255, .04))}._genAssemblyName_1jln9_1633{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--nice-text-secondary)}._genFooter_1jln9_1647{display:flex;justify-content:flex-end;gap:var(--nice-space-2, 8px);padding:var(--nice-space-2-5, 10px) var(--nice-space-4, 16px);border-top:1px solid var(--nice-border-color);flex-shrink:0}._btnIcon_1jln9_1663{background:none;border:none;color:var(--nice-text-muted);cursor:pointer;font-size:14px;padding:var(--nice-space-0-5, 2px);line-height:1}._btnIcon_1jln9_1663:hover{color:var(--nice-text-secondary)}._propSelect_1jln9_1687{flex:1;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-0-5, 2px) var(--nice-space-1, 4px);font-size:11px;min-width:0}._propInput_1jln9_1707{background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-0-5, 2px) var(--nice-space-1, 4px);font-size:11px;min-width:0}._root_1vkbh_5{display:flex;flex-direction:column;height:100%;background:var(--nice-bg-primary);color:var(--nice-text-primary);font-family:Segoe UI,Consolas,monospace;font-size:12px;user-select:none;overflow:hidden}._menuBar_1vkbh_31{display:flex;align-items:center;gap:0;background:var(--nice-bg-canvas);border-bottom:1px solid var(--nice-border-color);padding:0 var(--nice-space-1, 4px);height:28px;flex-shrink:0}._menuBtn_1vkbh_51{background:none;border:none;color:var(--nice-text-secondary);padding:var(--nice-space-1, 4px) var(--nice-space-2-5, 10px);cursor:pointer;font-size:11px;border-radius:var(--nice-radius-sm, 3px)}._menuBtn_1vkbh_51:hover{background:var(--nice-bg-secondary);color:var(--nice-text-primary)}._menuBtn_1vkbh_51._menuBtnActive_1vkbh_83,._menuBtn_1vkbh_51._menuBtnActive_1vkbh_83:hover{background:var(--nice-color-primary);color:var(--nice-text-on-primary, #ffffff)}._menuSep_1vkbh_93{width:1px;height:16px;background:var(--nice-bg-secondary);margin:0 var(--nice-space-1, 4px)}._menuLabel_1vkbh_105{display:flex;align-items:center;font-size:10px;color:var(--nice-text-muted);gap:var(--nice-space-0-5, 2px);padding:0 var(--nice-space-1, 4px);cursor:pointer}._toolbar_1vkbh_127{display:flex;flex-direction:column;width:38px;background:var(--nice-bg-elevated);border-right:1px solid var(--nice-border-color);padding:var(--nice-space-1, 4px) var(--nice-space-0-5, 2px);gap:var(--nice-space-0-5, 2px);flex-shrink:0}._toolBtn_1vkbh_147{width:32px;height:32px;display:flex;align-items:center;justify-content:center;background:none;border:1px solid transparent;border-radius:var(--nice-radius-sm, 4px);cursor:pointer;font-size:16px;color:var(--nice-text-muted);transition:all .1s}._toolBtn_1vkbh_147:hover{background:var(--nice-bg-secondary);color:var(--nice-text-secondary)}._toolBtnActive_1vkbh_183{background:var(--nice-bg-tertiary)!important;border-color:var(--nice-color-primary)!important;color:var(--nice-color-white)!important}._mainArea_1vkbh_197{display:flex;flex:1;min-height:0}._canvasContainer_1vkbh_207{flex:1;height:100%;min-height:0;position:relative;overflow:hidden;background:var(--nice-bg-inset)}._canvasContainer_1vkbh_207 svg{position:absolute;inset:0;width:100%;height:100%}._rightPanel_1vkbh_247{width:320px;display:flex;flex-direction:column;background:var(--nice-bg-primary);border-left:1px solid var(--nice-border-color);overflow:hidden;flex-shrink:0}._rightPanelTabBody_1vkbh_265{flex:1 1 auto;overflow-y:auto;min-height:0}._libraryGrid_1vkbh_275{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--nice-space-1-5, 6px);padding:var(--nice-space-1-5, 6px)}._libraryCell_1vkbh_287{display:flex;flex-direction:column;align-items:center;gap:var(--nice-space-0-5, 2px);padding:var(--nice-space-1-5, 6px) var(--nice-space-0-5, 2px);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-sm, 4px);cursor:pointer;background:transparent;color:var(--nice-text-secondary);font-size:9px;text-align:center;overflow:hidden;text-overflow:ellipsis}._libraryCell_1vkbh_287:hover{border-color:var(--nice-primary, #5566cc);color:var(--nice-text-primary)}._layerRow_1vkbh_327{display:flex;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1, 4px) var(--nice-space-1-5, 6px);cursor:pointer;border-radius:var(--nice-radius-sm, 4px);font-size:11px}._layerRow_1vkbh_327:hover{background:var(--nice-bg-secondary)}._layerRowActive_1vkbh_351{background:var(--nice-bg-secondary);outline:1px solid var(--nice-primary, #5566cc)}._layerRowLocked_1vkbh_359{opacity:.6}._layerRowLocked_1vkbh_359 ._layerNameInput_1vkbh_365{cursor:not-allowed}._layerNameInput_1vkbh_365{flex:1 1 auto;background:transparent;border:none;color:var(--nice-text-primary);font-size:11px;outline:none;min-width:0}._layerIconBtn_1vkbh_389{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;padding:0 var(--nice-space-0-5, 2px);font-size:12px;line-height:1}._layerIconBtn_1vkbh_389:hover{color:var(--nice-text-primary)}._panelSection_1vkbh_413{border-bottom:1px solid var(--nice-border-color);padding:var(--nice-space-1-5, 6px) var(--nice-space-2, 8px)}._panelTitle_1vkbh_421{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--nice-text-secondary);margin-bottom:var(--nice-space-1, 4px);display:flex;justify-content:space-between;align-items:center}._panelTitle_1vkbh_421 button{background:none;border:none;color:var(--nice-text-secondary);cursor:pointer;font-size:14px;padding:0 var(--nice-space-0-5, 2px);line-height:1}._panelTitle_1vkbh_421 button:hover{color:var(--nice-text-muted)}._shapeItem_1vkbh_469{display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);padding:var(--nice-space-0-75, 3px) var(--nice-space-1, 4px);border-radius:var(--nice-radius-sm, 3px);cursor:pointer;font-size:11px}._shapeItem_1vkbh_469:hover{background:var(--nice-overlay-light-4, rgba(255, 255, 255, .04))}._shapeItemActive_1vkbh_493{background:var(--nice-surface)!important;border:1px solid var(--nice-color-primary-hover)}._shapeIcon_1vkbh_501{font-size:14px;opacity:.7;flex-shrink:0}._shapeName_1vkbh_511{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._propRow_1vkbh_527{display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);margin-bottom:var(--nice-space-1, 4px)}._propLabel_1vkbh_539{font-size:10px;color:var(--nice-text-muted);min-width:40px}._propInput_1vkbh_549{flex:1;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);border-radius:var(--nice-radius-sm, 3px);padding:var(--nice-space-0-5, 2px) var(--nice-space-1, 4px);font-size:11px}._propColorSwatch_1vkbh_567{width:24px;height:24px;border-radius:var(--nice-radius-sm, 3px);border:1px solid var(--nice-overlay-light-15, rgba(255, 255, 255, .15));cursor:pointer;position:relative}._propColorSwatch_1vkbh_567 input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}._statusBar_1vkbh_603{display:flex;align-items:center;gap:var(--nice-space-3, 12px);padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);font-size:10px;color:var(--nice-text-muted);background:var(--nice-bg-canvas);border-top:1px solid var(--nice-border-color);height:20px;flex-shrink:0}._dialogOverlay_1vkbh_631{position:absolute;inset:0;background:var(--nice-overlay-60, rgba(0, 0, 0, .6));display:flex;align-items:center;justify-content:center;z-index:100}._dialog_1vkbh_631{background:var(--nice-bg-elevated);border:1px solid var(--nice-border-color);border-radius:var(--nice-radius-lg, 8px);padding:var(--nice-space-5, 20px);min-width:300px;max-width:500px;box-shadow:0 8px 32px var(--nice-overlay-50, rgba(0, 0, 0, .5))}._dialog_1vkbh_631 h3{margin:0 0 var(--nice-space-3, 12px);font-size:14px;color:var(--nice-text-secondary)}._dialog_1vkbh_631 label{display:block;font-size:11px;color:var(--nice-text-muted);margin:var(--nice-space-2, 8px) 0 var(--nice-space-0-5, 2px)}._dialog_1vkbh_631 input,._dialog_1vkbh_631 select,._dialog_1vkbh_631 textarea{width:100%;background:var(--nice-bg-canvas);border:1px solid var(--nice-border-color);color:var(--nice-text-primary);padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-sm, 4px);font-size:12px}._dialog_1vkbh_631 textarea{min-height:120px;font-family:monospace;resize:vertical}._dialogActions_1vkbh_721{display:flex;gap:var(--nice-space-2, 8px);justify-content:flex-end;margin-top:var(--nice-space-4, 16px)}._dialogActions_1vkbh_721 button{padding:var(--nice-space-1, 4px) var(--nice-space-4, 16px);border:none;border-radius:var(--nice-radius-sm, 4px);cursor:pointer;font-size:12px}._btnPrimary_1vkbh_747{background:var(--nice-color-primary);color:var(--nice-color-white)}._btnPrimary_1vkbh_747:hover{background:var(--nice-primary, #6677dd)}._btnSecondary_1vkbh_761{background:var(--nice-bg-secondary);color:var(--nice-text-muted)}._btnSecondary_1vkbh_761:hover{background:var(--nice-bg-tertiary);color:var(--nice-text-primary)}._handleGroup_1vkbh_781 circle{fill:var(--nice-color-primary);stroke:var(--nice-color-white);stroke-width:1;cursor:pointer}._handleGroup_1vkbh_781 circle:hover{fill:var(--nice-primary-hover, var(--nice-primary))}._wrapper_1tfcf_11{width:100%;height:100%;max-height:85vh;background:var(--nice-bg-primary, #1a1a1e);border-radius:var(--nice-radius-xl, 12px);overflow:hidden;color:var(--nice-text-on-primary, #eee);font-family:Segoe UI,sans-serif;font-size:13px}._loadingWrap_1tfcf_35{display:flex;align-items:center;justify-content:center;width:100%;min-height:400px;color:var(--nice-text-muted, #aaa)}._loadingSpin_1tfcf_53{animation:_nicePhotoEditorSpin_1tfcf_1 1s linear infinite}@keyframes _nicePhotoEditorSpin_1tfcf_1{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._toolbar_1tfcf_81{display:flex;align-items:center;justify-content:space-between;padding:var(--nice-space-2, 8px) var(--nice-space-3-5, 14px);border-bottom:1px solid var(--nice-border-color, #333);background:var(--nice-bg-secondary, #222226)}._toolbarGroup_1tfcf_105{display:flex;gap:var(--nice-space-1-5, 6px);flex:0 0 auto}._toolbarDivider_1tfcf_117{width:1px;background:var(--nice-border-color, #444);margin:0 var(--nice-space-1, 4px)}._toolbarTitle_1tfcf_129{display:flex;align-items:center;justify-content:center;min-width:0;flex:1 1 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 var(--nice-space-2, 8px);font-weight:700;font-size:14px}._leftPanel_1tfcf_159{width:280px;min-width:280px;display:flex;flex-direction:column;border-right:1px solid var(--nice-border-color, #333);background:var(--nice-bg-secondary, #222226);overflow:hidden}._tabBar_1tfcf_179{display:flex;border-bottom:1px solid var(--nice-border-color, #333);flex-wrap:wrap}._tabButton_1tfcf_191{flex:1 0 auto;padding:var(--nice-space-2, 8px) 0;border:none;min-width:34px;background:transparent;color:var(--nice-text-secondary, #888);border-bottom:2px solid transparent;cursor:pointer;font-size:10px;font-weight:600;transition:all .15s;display:flex;flex-direction:column;align-items:center;gap:var(--nice-space-px, 1px)}._tabButtonActive_1tfcf_227{background:var(--nice-bg-secondary, #2a2a30)}._tabIcon_1tfcf_237{font-size:14px}._panelContent_1tfcf_245{flex:1;overflow-y:auto;padding:var(--nice-space-2-5, 10px) var(--nice-space-3, 12px)}._sectionTitle_1tfcf_259{font-weight:600;margin-bottom:var(--nice-space-1-5, 6px);font-size:12px}._sectionTitleMb8_1tfcf_271{margin-bottom:var(--nice-space-2, 8px)}._sectionInfo_1tfcf_281{font-size:11px;color:var(--nice-text-muted, #aaa)}._sectionInfoMb_1tfcf_291{margin-bottom:var(--nice-space-2-5, 10px)}._pillRow_1tfcf_303{display:flex;flex-wrap:wrap;gap:var(--nice-space-1, 4px);margin-bottom:var(--nice-space-2-5, 10px)}._pillRowMb8_1tfcf_317{margin-bottom:var(--nice-space-2, 8px)}._pillRowGap3_1tfcf_327{display:flex;flex-wrap:wrap;gap:var(--nice-space-0-75, 3px);margin-bottom:var(--nice-space-2, 8px)}._pill_1tfcf_303{border-radius:var(--nice-radius-xl, 12px);border:1px solid var(--nice-border-color, #444);background:transparent;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)}._pillActive_1tfcf_363{color:var(--nice-text-primary, #fff)}._pillCrop_1tfcf_373{padding:var(--nice-space-1, 4px) var(--nice-space-3, 12px);border-radius:var(--nice-radius-md, 6px)}._pillCropActive_1tfcf_385{color:var(--nice-text-primary, #fff)}._pillEmoji_1tfcf_395{padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-lg, 10px)}._pillEmojiActive_1tfcf_407{color:var(--nice-text-primary, #fff)}._filterGrid_1tfcf_419{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--nice-space-1-5, 6px)}._emojiGrid_1tfcf_431{display:grid;grid-template-columns:repeat(6,1fr);gap:var(--nice-space-0-5, 2px);max-height:260px;overflow-y:auto}._shapeGrid_1tfcf_447{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--nice-space-1, 4px);margin-bottom:var(--nice-space-4, 16px)}._frameGrid_1tfcf_461{display:grid;grid-template-columns:repeat(5,1fr);gap:var(--nice-space-1, 4px)}._sliderRow_1tfcf_475{display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);margin-bottom:var(--nice-space-2, 8px)}._sliderLabel_1tfcf_489{font-size:11px;color:var(--nice-text-muted, #aaa)}._sliderLabelSelf_1tfcf_499{align-self:center;margin-right:var(--nice-space-1, 4px)}._sliderValue_1tfcf_511{font-size:11px;font-weight:600;min-width:28px}._sliderValueSm_1tfcf_523{font-size:10px;min-width:28px}._adjustColumn_1tfcf_533{display:flex;flex-direction:column;gap:var(--nice-space-2, 8px)}._adjustHeader_1tfcf_545{display:flex;justify-content:space-between;margin-bottom:var(--nice-space-0-5, 2px);font-size:11px}._adjustIcon_1tfcf_559{width:14px;text-align:center}._adjustValue_1tfcf_569{font-weight:600;cursor:pointer;min-width:30px;text-align:right}._intensitySection_1tfcf_583{margin-top:var(--nice-space-3, 12px);padding:var(--nice-space-2, 8px) 0}._intensityHeader_1tfcf_593{display:flex;justify-content:space-between;margin-bottom:var(--nice-space-1, 4px);font-size:11px}._colorInput_1tfcf_609{width:28px;height:28px;border:none;padding:0;cursor:pointer}._colorInputLg_1tfcf_625{width:32px;height:30px;border:none;padding:0;cursor:pointer}._colorInputDraw_1tfcf_641{width:32px;height:28px;border:none;padding:0;cursor:pointer}._overlayToolbar_1tfcf_659{display:flex;flex-wrap:wrap;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1-5, 6px) 0;border-bottom:1px solid var(--nice-border-color, #333);margin-bottom:var(--nice-space-2, 8px)}._overlayToolbarLabel_1tfcf_677{font-size:11px;color:var(--nice-text-muted, #aaa);align-self:center;margin-right:var(--nice-space-1, 4px)}._overlayToolbarBtn_1tfcf_691{padding:var(--nice-space-0-5, 2px) var(--nice-space-1-5, 6px);font-size:11px}._overlaySection_1tfcf_703{margin-top:var(--nice-space-3, 12px);border-top:1px solid var(--nice-border-color, #333);padding-top:var(--nice-space-2, 8px)}._overlaySectionTitle_1tfcf_715{font-weight:600;font-size:11px;color:var(--nice-text-muted, #aaa);margin-bottom:var(--nice-space-1, 4px)}._overlayItem_1tfcf_729{display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);padding:var(--nice-space-0-75, 3px) var(--nice-space-1-5, 6px);border-radius:var(--nice-radius-sm, 4px);cursor:pointer;background:transparent;font-size:11px;color:var(--nice-text-secondary, #ccc);margin-bottom:var(--nice-space-0-5, 2px)}._overlayIcon_1tfcf_755{width:18px;text-align:center}._overlayName_1tfcf_765{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._overlayDeleteBtn_1tfcf_779{background:none;border:none;color:var(--nice-danger, #f55);cursor:pointer;font-size:11px;padding:0}._emojiBtn_1tfcf_799{font-size:22px;padding:var(--nice-space-1, 4px) 0;border:none;background:transparent;cursor:pointer;border-radius:var(--nice-radius-md, 6px);line-height:1}._shapeBtn_1tfcf_819{font-size:20px;padding:var(--nice-space-1-5, 6px) 0;border:1px solid var(--nice-border-color, #444);background:transparent;color:var(--nice-text-secondary, #eee);cursor:pointer;border-radius:var(--nice-radius-md, 6px);line-height:1}._frameBtn_1tfcf_841{font-size:18px;padding:var(--nice-space-1-5, 6px) 0;border:1px solid var(--nice-border-color, #444);background:transparent;color:var(--nice-text-secondary, #eee);cursor:pointer;border-radius:var(--nice-radius-md, 6px);line-height:1}._removeFrameBtn_1tfcf_863{font-size:14px;padding:var(--nice-space-1-5, 6px) 0;border:1px solid var(--nice-border-color, #444);background:transparent;color:var(--nice-danger, #f55);cursor:pointer;border-radius:var(--nice-radius-md, 6px)}._textFormatBtn_1tfcf_883{min-width:32px}._textFormatBtnSm_1tfcf_891{min-width:28px}._drawActionBtn_1tfcf_899{flex:1}._textArea_1tfcf_909{background:var(--nice-bg-secondary, #2a2a30);color:var(--nice-text-secondary, #eee);border:1px solid var(--nice-border-color, #444);border-radius:var(--nice-radius-md, 6px);font-size:13px;margin-bottom:var(--nice-space-2, 8px);resize:none}._textAreaSm_1tfcf_929{font-size:12px;margin-bottom:0}._textBtnRow_1tfcf_941{display:flex;gap:var(--nice-space-1, 4px);flex-wrap:wrap;margin-bottom:var(--nice-space-2, 8px)}._textGapRow_1tfcf_955{display:flex;gap:var(--nice-space-1, 4px);margin-top:var(--nice-space-1-5, 6px)}._editSelectedSection_1tfcf_967{margin-top:var(--nice-space-3, 12px);border-top:1px solid var(--nice-border-color, #333);padding-top:var(--nice-space-2, 8px)}._editSelectedLabel_1tfcf_979{font-size:11px;color:var(--nice-text-muted, #aaa);margin-bottom:var(--nice-space-1, 4px)}._shapeColorRow_1tfcf_993{display:flex;gap:var(--nice-space-1, 4px);flex-wrap:wrap;margin-bottom:var(--nice-space-2, 8px)}._shapeColorLabel_1tfcf_1007{font-size:11px;color:var(--nice-text-muted, #aaa);align-self:center;margin-right:var(--nice-space-0-5, 2px)}._shapeColorLabelMl_1tfcf_1021{margin-left:var(--nice-space-1, 4px)}._shapeFillToggle_1tfcf_1031{font-size:10px;padding:var(--nice-space-0-5, 2px) var(--nice-space-1-5, 6px)}._frameColorRow_1tfcf_1041{display:flex;gap:var(--nice-space-1, 4px);margin-bottom:var(--nice-space-2, 8px)}._frameThicknessWrap_1tfcf_1053{display:flex;align-items:center;gap:var(--nice-space-1, 4px);flex:1}._frameThicknessValue_1tfcf_1067{font-size:10px}._drawPreview_1tfcf_1077{display:flex;justify-content:center;margin-bottom:var(--nice-space-3, 12px)}._drawActionRow_1tfcf_1089{display:flex;gap:var(--nice-space-1, 4px)}._quickColorRow_1tfcf_1099{display:flex;align-items:center;gap:var(--nice-space-1-5, 6px);margin-bottom:var(--nice-space-2, 8px)}._quickColorSwatch_1tfcf_1113{width:18px;height:18px;border-radius:var(--nice-radius-sm, 3px);cursor:pointer;border:1px solid var(--nice-border-color, #555)}._transformRow_1tfcf_1131{display:flex;gap:var(--nice-space-1-5, 6px);margin-bottom:var(--nice-space-4, 16px)}._transformZoomRow_1tfcf_1143{display:flex;align-items:center;gap:var(--nice-space-2, 8px)}._transformZoomValue_1tfcf_1155{font-size:11px;font-weight:600;min-width:40px}._transformInfo_1tfcf_1167{margin-top:var(--nice-space-4, 16px);padding:var(--nice-space-2-5, 10px);border-radius:var(--nice-radius-lg, 8px);background:var(--nice-bg-secondary, #2a2a30);font-size:11px;color:var(--nice-text-muted, #aaa)}._canvasViewport_1tfcf_1187{flex:1;display:flex;align-items:center;justify-content:center;overflow:auto;background:#111115;position:relative;padding:var(--nice-space-5, 20px)}._zoomWrap_1tfcf_1211{position:relative;transform-origin:center center;transition:transform .15s ease;max-width:100%;max-height:100%}._compareWrap_1tfcf_1227{position:relative;display:inline-block;cursor:ew-resize}._canvasOriginal_1tfcf_1239{max-width:100%;max-height:60vh;object-fit:contain;display:block}._canvasEdited_1tfcf_1253{max-height:60vh;object-fit:contain;display:block}._compareClip_1tfcf_1265{position:absolute;top:0;left:0;bottom:0;overflow:hidden}._compareSlider_1tfcf_1281{position:absolute;top:0;bottom:0;width:3px;transform:translate(-50%)}._compareSliderKnob_1tfcf_1297{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:28px;height:28px;border-radius:var(--nice-radius-full, 50%);display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px var(--nice-overlay-40, rgba(0, 0, 0, .4))}._compareSliderIcon_1tfcf_1325{color:var(--nice-text-primary, #fff);font-size:12px}._compareLabelOriginal_1tfcf_1335{position:absolute;top:8px;left:8px;background:var(--nice-overlay-60, rgba(0, 0, 0, .6));color:var(--nice-text-on-primary, #fff);padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-sm, 4px);font-size:11px;font-weight:600}._compareLabelEdited_1tfcf_1359{position:absolute;top:8px;right:8px;color:var(--nice-text-primary, #fff);padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-sm, 4px);font-size:11px;font-weight:600}._regularWrap_1tfcf_1381{position:relative;display:inline-block}._canvasRegular_1tfcf_1391{max-width:100%;max-height:60vh;object-fit:contain;display:block;border-radius:var(--nice-radius-md, 6px);box-shadow:0 4px 20px var(--nice-overlay-40, rgba(0, 0, 0, .4))}._cropOverlay_1tfcf_1411{position:absolute;inset:0;pointer-events:none;z-index:2}._cropDarkBg_1tfcf_1425{position:absolute;inset:0;background:var(--nice-overlay-55, rgba(0, 0, 0, .55))}._cropGridContainer_1tfcf_1437{position:absolute;inset:0}._cropSizeLabel_1tfcf_1447{position:absolute;bottom:-24px;left:50%;transform:translate(-50%);background:var(--nice-overlay-75, rgba(0, 0, 0, .75));color:var(--nice-text-on-primary, #fff);font-size:10px;padding:var(--nice-space-0-5, 2px) var(--nice-space-2, 8px);border-radius:var(--nice-radius-sm, 3px);white-space:nowrap}._cropInfo_1tfcf_1475{margin-bottom:var(--nice-space-2-5, 10px);font-size:11px;color:var(--nice-text-muted, #aaa)}._cropAspectLabel_1tfcf_1487{font-weight:600;margin-bottom:var(--nice-space-1-5, 6px);font-size:12px}._cropAspectRow_1tfcf_1499{display:flex;flex-wrap:wrap;gap:var(--nice-space-1, 4px)}._accentBtn_1tfcf_1513{color:var(--nice-text-primary, #fff);font-weight:600;width:100%}._root_93lxp_13{height:100%;min-height:600px;background:var(--nice-bg, #1a1a2e);color:var(--nice-text-secondary, #e0e0e0);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:13px;user-select:none}._menuBar_93lxp_41{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);background:var(--nice-bg, #16213e);border-bottom:1px solid var(--nice-border-color, #0f3460)}._menuBar_93lxp_41 h3{margin:0;font-size:14px;color:var(--nice-warning, #ffd369);font-weight:600}._menuGroup_93lxp_73{display:flex;gap:var(--nice-space-0-5, 2px)}._menuBtn_93lxp_83{display:flex;align-items:center;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1, 4px) var(--nice-space-2, 8px);background:transparent;border:none;border-radius:var(--nice-radius-sm, 4px);color:var(--nice-text-muted, #b0b0b0);font-size:12px;cursor:pointer;transition:all .15s}._menuBtn_93lxp_83:hover{background:var(--nice-overlay-light-10, rgba(255, 255, 255, .1));color:var(--nice-text-on-primary, #fff)}._menuBtn_93lxp_83:disabled{opacity:.4;cursor:not-allowed}._spacer_93lxp_131{flex:1}._modeTabs_93lxp_147{display:flex;gap:var(--nice-space-0-5, 2px);padding:var(--nice-space-1, 4px) var(--nice-space-3, 12px);background:var(--nice-bg, #1f2940);border-bottom:1px solid var(--nice-border-color, #0f3460)}._modeTab_93lxp_147{padding:var(--nice-space-1-5, 6px) var(--nice-space-4, 16px);background:transparent;border:none;border-radius:var(--nice-radius-sm, 4px) var(--nice-radius-sm, 4px) 0 0;color:var(--nice-text-secondary, #8892a8);font-size:12px;font-weight:500;cursor:pointer;transition:all .15s}._modeTab_93lxp_147:hover{background:var(--nice-overlay-light-5, rgba(255, 255, 255, .05));color:var(--nice-text-on-primary, #c0c8d8)}._modeTab_93lxp_147._active_93lxp_197{background:var(--nice-bg, #1a1a2e);color:var(--nice-warning, #ffd369)}._mainArea_93lxp_215{display:flex;flex:1;overflow:hidden}._leftPanel_93lxp_227{width:220px;background:var(--nice-bg, #16213e);border-right:1px solid var(--nice-border-color, #0f3460);display:flex;flex-direction:column;overflow:hidden}._centerArea_93lxp_245{flex:1;display:flex;flex-direction:column;overflow:hidden}._rightPanel_93lxp_259{width:260px;background:var(--nice-bg, #16213e);border-left:1px solid var(--nice-border-color, #0f3460);display:flex;flex-direction:column;overflow:hidden}._toolbar_93lxp_285{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-1-5, 6px) var(--nice-space-3, 12px);background:var(--nice-bg, #1f2940);border-bottom:1px solid var(--nice-border-color, #0f3460)}._toolGroup_93lxp_303{display:flex;gap:var(--nice-space-0-5, 2px);padding:var(--nice-space-0-5, 2px);background:var(--nice-overlay-20, rgba(0, 0, 0, .2));border-radius:var(--nice-radius-sm, 4px)}._toolBtn_93lxp_319{display:flex;align-items:center;justify-content:center;width:28px;height:28px;background:transparent;border:none;border-radius:var(--nice-radius-sm, 3px);color:var(--nice-text-secondary, #8892a8);font-size:14px;cursor:pointer;transition:all .15s}._toolBtn_93lxp_319:hover{background:var(--nice-overlay-light-10, rgba(255, 255, 255, .1));color:var(--nice-text-on-primary, #fff)}._toolBtn_93lxp_319._active_93lxp_197{background:var(--nice-color-primary, #0f3460);color:var(--nice-text-on-primary, #ffd369)}._toolBtn_93lxp_319:disabled{opacity:.3;cursor:not-allowed}._viewport_93lxp_387{flex:1;position:relative;overflow:hidden;background:var(--nice-bg, #0a0a14)}._viewportCanvas_93lxp_401{position:absolute;top:50%;left:50%;image-rendering:pixelated;image-rendering:crisp-edges}._gridOverlay_93lxp_417{position:absolute;inset:0;pointer-events:none}._panelHeader_93lxp_443{display:flex;align-items:center;justify-content:space-between;padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);background:var(--nice-bg-tertiary, #0f3460);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--nice-text-secondary, #8892a8)}._panelContent_93lxp_469{flex:1;overflow-y:auto;padding:var(--nice-space-2, 8px)}._panelSection_93lxp_481{margin-bottom:var(--nice-space-4, 16px)}._panelLabel_93lxp_489{display:block;margin-bottom:var(--nice-space-1-5, 6px);font-size:11px;color:var(--nice-text-secondary, #8892a8);text-transform:uppercase;letter-spacing:.5px}._panelInput_93lxp_507{width:100%;padding:var(--nice-space-1-5, 6px) var(--nice-space-2, 8px);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}._panelInput_93lxp_507:focus{outline:none;border-color:var(--nice-warning, #ffd369)}._tilePalette_93lxp_545{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:var(--nice-space-1, 4px);padding:var(--nice-space-2, 8px)}._tileItem_93lxp_559{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}._tileItem_93lxp_559:hover{border-color:var(--nice-border-color, #4a5a7e)}._tileItem_93lxp_559._selected_93lxp_587{border-color:var(--nice-warning, #ffd369)}._tileItem_93lxp_559 img{width:100%;height:100%;object-fit:contain;image-rendering:pixelated}._layersList_93lxp_617{display:flex;flex-direction:column;gap:var(--nice-space-0-5, 2px)}._layerItem_93lxp_629{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-1-5, 6px) var(--nice-space-2, 8px);background:var(--nice-bg, #1f2940);border-radius:var(--nice-radius-sm, 4px);cursor:pointer;transition:all .15s}._layerItem_93lxp_629:hover{background:var(--nice-hover-bg, #2a3a5e)}._layerItem_93lxp_629._selected_93lxp_587{background:var(--nice-selected-bg, #0f3460);border-left:3px solid var(--nice-warning, #ffd369)}._layerVisibility_93lxp_669{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--nice-text-secondary, #8892a8);cursor:pointer;border-radius:var(--nice-radius-sm, 3px)}._layerVisibility_93lxp_669:hover{background:var(--nice-overlay-light-10, rgba(255, 255, 255, .1))}._layerVisibility_93lxp_669._hidden_93lxp_703{opacity:.4}._layerName_93lxp_711{flex:1;font-size:12px;color:var(--nice-text-secondary, #c0c8d8)}._layerOpacity_93lxp_723{width:40px;text-align:right;font-size:10px;color:var(--nice-text-secondary, #8892a8)}._framesList_93lxp_745{display:grid;grid-template-columns:repeat(auto-fill,minmax(60px,1fr));gap:var(--nice-space-2, 8px);padding:var(--nice-space-2, 8px)}._frameItem_93lxp_759{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}._frameItem_93lxp_759:hover{border-color:var(--nice-border-color, #4a5a7e)}._frameItem_93lxp_759._selected_93lxp_587{border-color:var(--nice-warning, #ffd369)}._frameItem_93lxp_759 canvas{width:100%;height:100%;object-fit:contain;image-rendering:pixelated}._frameLabel_93lxp_811{position:absolute;bottom:0;left:0;right:0;padding:var(--nice-space-0-5, 2px) var(--nice-space-1, 4px);background:var(--nice-overlay-70, rgba(0, 0, 0, .7));font-size:9px;text-align:center;color:var(--nice-text-muted, #b0b0b0)}._timeline_93lxp_843{background:var(--nice-bg, #16213e);border-top:1px solid var(--nice-border-color, #0f3460);padding:var(--nice-space-2, 8px)}._timelineTrack_93lxp_855{display:flex;gap:var(--nice-space-1, 4px);padding:var(--nice-space-1, 4px);background:var(--nice-bg, #0a0a14);border-radius:var(--nice-radius-sm, 4px);overflow-x:auto}._timelineFrame_93lxp_873{flex-shrink:0;width:48px;height:48px;background:var(--nice-bg, #1f2940);border:2px solid transparent;border-radius:var(--nice-radius-sm, 4px);cursor:pointer;overflow:hidden}._timelineFrame_93lxp_873:hover{border-color:var(--nice-border-color, #4a5a7e)}._timelineFrame_93lxp_873._current_93lxp_903{border-color:var(--nice-warning, #ffd369)}._stateGraph_93lxp_919{flex:1;position:relative;overflow:hidden;background:var(--nice-bg, #0a0a14)}._stateNode_93lxp_933{position:absolute;min-width:120px;padding:var(--nice-space-2, 8px) var(--nice-space-3, 12px);background:var(--nice-bg, #1f2940);border:2px solid var(--nice-border-color, #2a3a5e);border-radius:var(--nice-radius-lg, 8px);cursor:move;transition:border-color .15s}._stateNode_93lxp_933:hover{border-color:var(--nice-border-color, #4a5a7e)}._stateNode_93lxp_933._selected_93lxp_587{border-color:var(--nice-warning, #ffd369)}._stateNode_93lxp_933._entry_93lxp_971{border-color:var(--nice-success-light, #4ade80)}._stateNodeName_93lxp_979{font-size:12px;font-weight:500;color:var(--nice-text-secondary, #e0e0e0);text-align:center}._stateNodeAnim_93lxp_993{font-size:10px;color:var(--nice-text-secondary, #8892a8);text-align:center;margin-top:var(--nice-space-1, 4px)}._transition_93lxp_1007{stroke:var(--nice-text-secondary, #4a5a7e);stroke-width:2;fill:none;marker-end:url(#arrowhead)}._transition_93lxp_1007:hover{stroke:var(--nice-warning, #ffd369)}._effectsList_93lxp_1037{display:flex;flex-direction:column;gap:var(--nice-space-2, 8px)}._effectItem_93lxp_1049{background:var(--nice-bg, #1f2940);border-radius:var(--nice-radius-md, 6px);overflow:hidden}._effectHeader_93lxp_1061{display:flex;align-items:center;gap:var(--nice-space-2, 8px);padding:var(--nice-space-2, 8px);cursor:pointer}._effectToggle_93lxp_1077{width:18px;height:18px;border-radius:var(--nice-radius-sm, 3px);background:var(--nice-bg, #0a0a14);border:1px solid var(--nice-border-color, #2a3a5e);cursor:pointer}._effectToggle_93lxp_1077._enabled_93lxp_1095{background:var(--nice-warning, #ffd369);border-color:var(--nice-warning, #ffd369)}._effectName_93lxp_1105{flex:1;font-size:12px;color:var(--nice-text-secondary, #c0c8d8)}._effectRemove_93lxp_1117{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--nice-text-secondary, #8892a8);cursor:pointer;border-radius:var(--nice-radius-sm, 3px)}._effectRemove_93lxp_1117:hover{background:var(--nice-danger, #ef4444);color:var(--nice-text-on-primary, #fff)}._effectParams_93lxp_1153{padding:var(--nice-space-2, 8px);background:var(--nice-overlay-20, rgba(0, 0, 0, .2))}._effectParam_93lxp_1153{display:flex;align-items:center;gap:var(--nice-space-2, 8px);margin-bottom:var(--nice-space-2, 8px)}._effectParam_93lxp_1153:last-child{margin-bottom:0}._effectParamLabel_93lxp_1185{flex:0 0 80px;font-size:11px;color:var(--nice-text-secondary, #8892a8)}._effectParamInput_93lxp_1197{flex:1;height:24px;padding:0 var(--nice-space-2, 8px);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);font-size:11px}._statusBar_93lxp_1227{display:flex;align-items:center;gap:var(--nice-space-4, 16px);padding:var(--nice-space-1, 4px) var(--nice-space-3, 12px);background:var(--nice-bg-tertiary, #0f3460);font-size:11px;color:var(--nice-text-secondary, #8892a8)}._statusItem_93lxp_1247{display:flex;align-items:center;gap:var(--nice-space-1, 4px)}._zoomControl_93lxp_1259{display:flex;align-items:center;gap:var(--nice-space-1, 4px);margin-left:auto}._zoomBtn_93lxp_1273{width:20px;height:20px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--nice-text-secondary, #8892a8);cursor:pointer;border-radius:var(--nice-radius-sm, 3px)}._zoomBtn_93lxp_1273:hover{background:var(--nice-overlay-light-10, rgba(255, 255, 255, .1));color:var(--nice-text-on-primary, #fff)}._dialogOverlay_93lxp_1317{position:fixed;inset:0;background:var(--nice-overlay-60, rgba(0, 0, 0, .6));display:flex;align-items:center;justify-content:center;z-index:1000}._dialog_93lxp_1317{background:var(--nice-bg, #16213e);border-radius:var(--nice-radius-lg, 8px);padding:var(--nice-space-6, 24px);min-width:300px;max-width:500px;box-shadow:0 8px 32px var(--nice-overlay-40, rgba(0, 0, 0, .4))}._dialog_93lxp_1317 h3{margin:0 0 var(--nice-space-4, 16px);font-size:16px;color:var(--nice-warning, #ffd369)}._dialogActions_93lxp_1373{display:flex;justify-content:flex-end;gap:var(--nice-space-2, 8px);margin-top:var(--nice-space-5, 20px)}._btnPrimary_93lxp_1387{padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px);background:var(--nice-warning, #ffd369);border:none;border-radius:var(--nice-radius-sm, 4px);color:var(--nice-text-on-primary, #1a1a2e);font-size:12px;font-weight:600;cursor:pointer;transition:all .15s}._btnPrimary_93lxp_1387:hover{background:color-mix(in srgb,var(--nice-warning, #ffd369) 80%,#fff)}._btnSecondary_93lxp_1419{padding:var(--nice-space-2, 8px) var(--nice-space-4, 16px);background:transparent;border:1px solid var(--nice-border-color, #4a5a7e);border-radius:var(--nice-radius-sm, 4px);color:var(--nice-text-secondary, #c0c8d8);font-size:12px;cursor:pointer;transition:all .15s}._btnSecondary_93lxp_1419:hover{background:var(--nice-overlay-light-5, rgba(255, 255, 255, .05));border-color:var(--nice-border-strong, #6a7a9e)}._panelContent_93lxp_469::-webkit-scrollbar{width:6px}._panelContent_93lxp_469::-webkit-scrollbar-track{background:var(--nice-bg, #0a0a14)}._panelContent_93lxp_469::-webkit-scrollbar-thumb{background:var(--nice-border-color, #2a3a5e);border-radius:var(--nice-radius-sm, 3px)}._panelContent_93lxp_469::-webkit-scrollbar-thumb:hover{background:var(--nice-text-secondary, #4a5a7e)}._dropZone_93lxp_1501{border:2px dashed var(--nice-border-color, #4a5a7e);border-radius:var(--nice-radius-lg, 8px);padding:var(--nice-space-6, 24px);text-align:center;color:var(--nice-text-secondary, #8892a8);cursor:pointer;transition:all .15s}._dropZone_93lxp_1501:hover{border-color:var(--nice-warning, #ffd369);color:var(--nice-text-secondary, #c0c8d8)}._dropZone_93lxp_1501._active_93lxp_197{border-color:var(--nice-warning, #ffd369);background:color-mix(in srgb,var(--nice-warning, #ffd369) 10%,transparent)}._emptyState_93lxp_1541{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--nice-space-8, 32px);color:var(--nice-text-secondary, #8892a8);text-align:center}._emptyState_93lxp_1541 svg{width:48px;height:48px;margin-bottom:var(--nice-space-3, 12px);opacity:.5}._emptyStateText_93lxp_1575{font-size:12px;margin-bottom:var(--nice-space-3, 12px)}
|
|
@@ -1,94 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
* Utility module to work with Arrays.
|
|
3
|
-
*
|
|
4
|
-
* @module array
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Return the last element of an array. The element must exist
|
|
10
|
-
*
|
|
11
|
-
* @template L
|
|
12
|
-
* @param {ArrayLike<L>} arr
|
|
13
|
-
* @return {L}
|
|
14
|
-
*/
|
|
15
|
-
const last = arr => arr[arr.length - 1];
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Append elements from src to dest
|
|
19
|
-
*
|
|
20
|
-
* @template M
|
|
21
|
-
* @param {Array<M>} dest
|
|
22
|
-
* @param {Array<M>} src
|
|
23
|
-
*/
|
|
1
|
+
const last = (arr) => arr[arr.length - 1];
|
|
24
2
|
const appendTo = (dest, src) => {
|
|
25
3
|
for (let i = 0; i < src.length; i++) {
|
|
26
4
|
dest.push(src[i]);
|
|
27
5
|
}
|
|
28
6
|
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Transforms something array-like to an actual Array.
|
|
32
|
-
*
|
|
33
|
-
* @function
|
|
34
|
-
* @template T
|
|
35
|
-
* @param {ArrayLike<T>|Iterable<T>} arraylike
|
|
36
|
-
* @return {T}
|
|
37
|
-
*/
|
|
38
7
|
const from = Array.from;
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* True iff condition holds on every element in the Array.
|
|
42
|
-
*
|
|
43
|
-
* @function
|
|
44
|
-
* @template {ArrayLike<any>} ARR
|
|
45
|
-
*
|
|
46
|
-
* @param {ARR} arr
|
|
47
|
-
* @param {ARR extends ArrayLike<infer S> ? ((value:S, index:number, arr:ARR) => boolean) : any} f
|
|
48
|
-
* @return {boolean}
|
|
49
|
-
*/
|
|
50
8
|
const every = (arr, f) => {
|
|
51
9
|
for (let i = 0; i < arr.length; i++) {
|
|
52
10
|
if (!f(arr[i], i, arr)) {
|
|
53
|
-
return false
|
|
11
|
+
return false;
|
|
54
12
|
}
|
|
55
13
|
}
|
|
56
|
-
return true
|
|
14
|
+
return true;
|
|
57
15
|
};
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* True iff condition holds on some element in the Array.
|
|
61
|
-
*
|
|
62
|
-
* @function
|
|
63
|
-
* @template {ArrayLike<any>} ARR
|
|
64
|
-
*
|
|
65
|
-
* @param {ARR} arr
|
|
66
|
-
* @param {ARR extends ArrayLike<infer S> ? ((value:S, index:number, arr:ARR) => boolean) : never} f
|
|
67
|
-
* @return {boolean}
|
|
68
|
-
*/
|
|
69
16
|
const some = (arr, f) => {
|
|
70
17
|
for (let i = 0; i < arr.length; i++) {
|
|
71
18
|
if (f(arr[i], i, arr)) {
|
|
72
|
-
return true
|
|
19
|
+
return true;
|
|
73
20
|
}
|
|
74
21
|
}
|
|
75
|
-
return false
|
|
22
|
+
return false;
|
|
76
23
|
};
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* @template T
|
|
80
|
-
* @param {number} len
|
|
81
|
-
* @param {function(number, Array<T>):T} f
|
|
82
|
-
* @return {Array<T>}
|
|
83
|
-
*/
|
|
84
24
|
const unfold = (len, f) => {
|
|
85
25
|
const array = new Array(len);
|
|
86
26
|
for (let i = 0; i < len; i++) {
|
|
87
27
|
array[i] = f(i, array);
|
|
88
28
|
}
|
|
89
|
-
return array
|
|
29
|
+
return array;
|
|
90
30
|
};
|
|
91
|
-
|
|
92
31
|
const isArray = Array.isArray;
|
|
93
|
-
|
|
94
|
-
|
|
32
|
+
export {
|
|
33
|
+
appendTo,
|
|
34
|
+
every,
|
|
35
|
+
from,
|
|
36
|
+
isArray,
|
|
37
|
+
last,
|
|
38
|
+
some,
|
|
39
|
+
unfold
|
|
40
|
+
};
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
/* eslint-env browser */
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Binary data constants.
|
|
5
|
-
*
|
|
6
|
-
* @module binary
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* n-th bit activated.
|
|
11
|
-
*
|
|
12
|
-
* @type {number}
|
|
13
|
-
*/
|
|
14
1
|
const BIT1 = 1;
|
|
15
2
|
const BIT2 = 2;
|
|
16
3
|
const BIT3 = 4;
|
|
@@ -21,9 +8,17 @@ const BIT8 = 128;
|
|
|
21
8
|
const BITS5 = 31;
|
|
22
9
|
const BITS6 = 63;
|
|
23
10
|
const BITS7 = 127;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
11
|
+
const BITS31 = 2147483647;
|
|
12
|
+
export {
|
|
13
|
+
BIT1,
|
|
14
|
+
BIT2,
|
|
15
|
+
BIT3,
|
|
16
|
+
BIT4,
|
|
17
|
+
BIT6,
|
|
18
|
+
BIT7,
|
|
19
|
+
BIT8,
|
|
20
|
+
BITS31,
|
|
21
|
+
BITS5,
|
|
22
|
+
BITS6,
|
|
23
|
+
BITS7
|
|
24
|
+
};
|
|
@@ -1,94 +1,42 @@
|
|
|
1
|
-
import { setIfUndefined } from
|
|
2
|
-
import { create } from
|
|
3
|
-
import { fromBase64, toBase64, createUint8ArrayFromArrayBuffer } from
|
|
4
|
-
import { onChange, varStorage, offChange } from
|
|
5
|
-
|
|
6
|
-
/* eslint-env browser */
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @typedef {Object} Channel
|
|
11
|
-
* @property {Set<function(any, any):any>} Channel.subs
|
|
12
|
-
* @property {any} Channel.bc
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @type {Map<string, Channel>}
|
|
17
|
-
*/
|
|
18
|
-
const channels = new Map();
|
|
19
|
-
|
|
20
|
-
/* c8 ignore start */
|
|
1
|
+
import { setIfUndefined } from "./map.js";
|
|
2
|
+
import { create } from "./set.js";
|
|
3
|
+
import { fromBase64, toBase64, createUint8ArrayFromArrayBuffer } from "./buffer.js";
|
|
4
|
+
import { onChange, varStorage, offChange } from "./storage.js";
|
|
5
|
+
const channels = /* @__PURE__ */ new Map();
|
|
21
6
|
class LocalStoragePolyfill {
|
|
22
7
|
/**
|
|
23
8
|
* @param {string} room
|
|
24
9
|
*/
|
|
25
|
-
constructor
|
|
10
|
+
constructor(room) {
|
|
26
11
|
this.room = room;
|
|
27
|
-
/**
|
|
28
|
-
* @type {null|function({data:Uint8Array}):void}
|
|
29
|
-
*/
|
|
30
12
|
this.onmessage = null;
|
|
31
|
-
|
|
32
|
-
* @param {any} e
|
|
33
|
-
*/
|
|
34
|
-
this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: fromBase64(e.newValue || '') });
|
|
13
|
+
this._onChange = (e) => e.key === room && this.onmessage !== null && this.onmessage({ data: fromBase64(e.newValue || "") });
|
|
35
14
|
onChange(this._onChange);
|
|
36
15
|
}
|
|
37
|
-
|
|
38
16
|
/**
|
|
39
17
|
* @param {ArrayBuffer} buf
|
|
40
18
|
*/
|
|
41
|
-
postMessage
|
|
19
|
+
postMessage(buf) {
|
|
42
20
|
varStorage.setItem(this.room, toBase64(createUint8ArrayFromArrayBuffer(buf)));
|
|
43
21
|
}
|
|
44
|
-
|
|
45
|
-
close () {
|
|
22
|
+
close() {
|
|
46
23
|
offChange(this._onChange);
|
|
47
24
|
}
|
|
48
25
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const getChannel = room =>
|
|
60
|
-
setIfUndefined(channels, room, () => {
|
|
61
|
-
const subs = create();
|
|
62
|
-
const bc = new BC(room);
|
|
63
|
-
/**
|
|
64
|
-
* @param {{data:ArrayBuffer}} e
|
|
65
|
-
*/
|
|
66
|
-
/* c8 ignore next */
|
|
67
|
-
bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'));
|
|
68
|
-
return {
|
|
69
|
-
bc, subs
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Subscribe to global `publish` events.
|
|
75
|
-
*
|
|
76
|
-
* @function
|
|
77
|
-
* @param {string} room
|
|
78
|
-
* @param {function(any, any):any} f
|
|
79
|
-
*/
|
|
26
|
+
const BC = typeof BroadcastChannel === "undefined" ? LocalStoragePolyfill : BroadcastChannel;
|
|
27
|
+
const getChannel = (room) => setIfUndefined(channels, room, () => {
|
|
28
|
+
const subs = create();
|
|
29
|
+
const bc = new BC(room);
|
|
30
|
+
bc.onmessage = (e) => subs.forEach((sub) => sub(e.data, "broadcastchannel"));
|
|
31
|
+
return {
|
|
32
|
+
bc,
|
|
33
|
+
subs
|
|
34
|
+
};
|
|
35
|
+
});
|
|
80
36
|
const subscribe = (room, f) => {
|
|
81
37
|
getChannel(room).subs.add(f);
|
|
82
|
-
return f
|
|
38
|
+
return f;
|
|
83
39
|
};
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Unsubscribe from `publish` global events.
|
|
87
|
-
*
|
|
88
|
-
* @function
|
|
89
|
-
* @param {string} room
|
|
90
|
-
* @param {function(any, any):any} f
|
|
91
|
-
*/
|
|
92
40
|
const unsubscribe = (room, f) => {
|
|
93
41
|
const channel = getChannel(room);
|
|
94
42
|
const unsubscribed = channel.subs.delete(f);
|
|
@@ -96,21 +44,15 @@ const unsubscribe = (room, f) => {
|
|
|
96
44
|
channel.bc.close();
|
|
97
45
|
channels.delete(room);
|
|
98
46
|
}
|
|
99
|
-
return unsubscribed
|
|
47
|
+
return unsubscribed;
|
|
100
48
|
};
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Publish data to all subscribers (including subscribers on this tab)
|
|
104
|
-
*
|
|
105
|
-
* @function
|
|
106
|
-
* @param {string} room
|
|
107
|
-
* @param {any} data
|
|
108
|
-
* @param {any} [origin]
|
|
109
|
-
*/
|
|
110
49
|
const publish = (room, data, origin = null) => {
|
|
111
50
|
const c = getChannel(room);
|
|
112
51
|
c.bc.postMessage(data);
|
|
113
|
-
c.subs.forEach(sub => sub(data, origin));
|
|
52
|
+
c.subs.forEach((sub) => sub(data, origin));
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
publish,
|
|
56
|
+
subscribe,
|
|
57
|
+
unsubscribe
|
|
114
58
|
};
|
|
115
|
-
|
|
116
|
-
export { publish, subscribe, unsubscribe };
|