evomeme 0.1.8 → 0.1.9-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/canvas-public/app.js +7264 -702
  2. package/dist/canvas-public/assets/presets/catalog.json +47 -0
  3. package/dist/canvas-public/assets/presets/tiles/A_01_CaoDi.png +0 -0
  4. package/dist/canvas-public/assets/presets/tiles/A_02_ShaMo.png +0 -0
  5. package/dist/canvas-public/assets/presets/tiles/A_03_TianKong.png +0 -0
  6. package/dist/canvas-public/assets/presets/tiles/A_04_ShuiBo.png +0 -0
  7. package/dist/canvas-public/assets/presets/tiles/A_05_HaiMian.png +0 -0
  8. package/dist/canvas-public/assets/presets/tiles/A_06_MuDiBan.png +0 -0
  9. package/dist/canvas-public/assets/presets/tiles/A_07_ShiZhuan.png +0 -0
  10. package/dist/canvas-public/assets/presets/tiles/A_08_AnRongYan.png +0 -0
  11. package/dist/canvas-public/assets/presets/tiles/A_09_QingTaiShi.png +0 -0
  12. package/dist/canvas-public/assets/presets/tiles/A_10_ShenHai.png +0 -0
  13. package/dist/canvas-public/assets/presets/tiles/A_11_HuiYanShi.png +0 -0
  14. package/dist/canvas-public/assets/presets/tiles/A_12_HongTu.png +0 -0
  15. package/dist/canvas-public/assets/presets/tiles/A_13_GengDi.png +0 -0
  16. package/dist/canvas-public/assets/presets/tiles/A_14_HuoShanYan.png +0 -0
  17. package/dist/canvas-public/assets/presets/tiles/A_15_NiTu.png +0 -0
  18. package/dist/canvas-public/assets/presets/tiles/A_16_HuangSha.png +0 -0
  19. package/dist/canvas-public/assets/presets/tiles/A_17_CongLin.png +0 -0
  20. package/dist/canvas-public/assets/presets/tiles/A_18_ZiYanShi.png +0 -0
  21. package/dist/canvas-public/assets/presets/tiles/A_19_MoGuTu.png +0 -0
  22. package/dist/canvas-public/assets/presets/tiles/A_20_HuaDian.png +0 -0
  23. package/dist/canvas-public/assets/presets/tiles/A_21_HaiLang.png +0 -0
  24. package/dist/canvas-public/assets/presets/tiles/A_22_GanTu.png +0 -0
  25. package/dist/canvas-public/assets/presets/tiles/A_23_QingTaiShiBan.png +0 -0
  26. package/dist/canvas-public/assets/presets/tiles/A_24_XingKong.png +0 -0
  27. package/dist/canvas-public/assets/presets/tiles/A_25_MoFaFuWen.png +0 -0
  28. package/dist/canvas-public/assets/presets/tiles/A_26_ShiTuYeDi.png +0 -0
  29. package/dist/canvas-public/assets/presets/tiles/A_27_LanZhuan.png +0 -0
  30. package/dist/canvas-public/assets/presets/tiles/A_28_HongZhuan.png +0 -0
  31. package/dist/canvas-public/assets/presets/tiles/A_29_YueQiu.png +0 -0
  32. package/dist/canvas-public/assets/presets/tiles/A_30_JinShuGe.png +0 -0
  33. package/dist/canvas-public/assets/presets/tiles/A_31_JinShuJingGai.png +0 -0
  34. package/dist/canvas-public/assets/presets/tiles/A_32_ShuZiChuang.png +0 -0
  35. package/dist/canvas-public/color-key-worker.js +280 -0
  36. package/dist/canvas-public/image-canvas-size-editor.js +254 -0
  37. package/dist/canvas-public/index.html +188 -25
  38. package/dist/canvas-public/perfect-pixel-worker.js +499 -0
  39. package/dist/canvas-public/styles.css +3570 -864
  40. package/dist/canvas-public/tile-map-editor.js +2120 -0
  41. package/dist/canvas-public/ui-controls.js +95 -0
  42. package/dist/canvas-public/vendor/pixi-tilemap.js +126 -0
  43. package/dist/canvas-public/vendor/pixi.min.js +2340 -0
  44. package/dist/index.js +29581 -2110
  45. package/dist/stage-blender/bake_materials.py +102 -0
  46. package/dist/stage-blender/export_scene.py +275 -0
  47. package/dist/stage-blender/preview_camera.py +90 -0
  48. package/dist/stage-blender/repair_mesh.py +112 -0
  49. package/dist/stage-public/app.js +759 -0
  50. package/dist/stage-public/baked/bakePilot.js +44 -0
  51. package/dist/stage-public/baked/bakedScene.js +129 -0
  52. package/dist/stage-public/baked/sceneAppearance.js +225 -0
  53. package/dist/stage-public/baked/sceneCamera.js +45 -0
  54. package/dist/stage-public/comparison-contract.js +28 -0
  55. package/dist/stage-public/delivery.html +4 -0
  56. package/dist/stage-public/delivery.js +17 -0
  57. package/dist/stage-public/godot/appearance.gd +170 -0
  58. package/dist/stage-public/godot/preview.gd +79 -0
  59. package/dist/stage-public/index.html +141 -0
  60. package/dist/stage-public/review-app.js +289 -0
  61. package/dist/stage-public/review-runtime.js +63 -0
  62. package/dist/stage-public/review.css +24 -0
  63. package/dist/stage-public/review.html +47 -0
  64. package/dist/stage-public/scene-runtime.js +212 -0
  65. package/dist/stage-public/sceneContractRuntime.js +235 -0
  66. package/dist/stage-public/styles.css +328 -0
  67. package/dist/stage-public/three-appearance.js +104 -0
  68. package/dist/stage-public/vendor/three170/LICENSE +21 -0
  69. package/dist/stage-public/vendor/three170/build/three.module.js +54571 -0
  70. package/dist/stage-public/vendor/three170/examples/jsm/controls/OrbitControls.js +1523 -0
  71. package/dist/stage-public/vendor/three170/examples/jsm/environments/RoomEnvironment.js +144 -0
  72. package/dist/stage-public/vendor/three170/examples/jsm/libs/fflate.module.js +2672 -0
  73. package/dist/stage-public/vendor/three170/examples/jsm/loaders/EXRLoader.js +2563 -0
  74. package/dist/stage-public/vendor/three170/examples/jsm/loaders/GLTFLoader.js +4727 -0
  75. package/dist/stage-public/vendor/three170/examples/jsm/utils/BufferGeometryUtils.js +1373 -0
  76. package/dist/tile-transition-mask.svg +40 -0
  77. package/package.json +77 -69
  78. package/skills/evomeme-cover/SKILL.md +1 -1
  79. package/skills/evomeme-game-maker/SKILL.md +83 -83
  80. package/skills/game-asset-align/SKILL.md +45 -0
  81. package/skills/game-asset-align/agents/openai.yaml +8 -0
  82. package/skills/game-asset-align/references/alignment-contract.md +61 -0
  83. package/skills/game-asset-align/references/blender-scene-pipeline.md +45 -0
  84. package/skills/game-asset-align/references/canonical-package.md +26 -0
  85. package/skills/game-asset-align/references/engine-capabilities.md +14 -0
  86. package/skills/game-asset-align/references/lightweight-review.md +32 -0
  87. package/skills/game-asset-align/references/repair-policy.md +30 -0
  88. package/skills/game-asset-align/references/tool-contract.md +39 -0
  89. package/skills/game-asset-align/references/visual-review.md +26 -0
  90. package/skills/game-asset-image-generator/SKILL.md +1 -1
  91. package/skills/godot-3d-game/SKILL.md +39 -0
  92. package/skills/godot-3d-game/agents/openai.yaml +8 -0
  93. package/skills/godot-3d-game/references/alignment-gates.md +26 -0
  94. package/skills/godot-3d-game/references/appearance-alignment.md +52 -0
  95. package/skills/godot-3d-game/references/build-and-qa.md +22 -0
  96. package/skills/godot-3d-game/references/canonical-asset-runtime.md +27 -0
  97. package/skills/godot-3d-game/references/import-and-wrapper-scenes.md +20 -0
  98. package/skills/godot-3d-game/references/physics-colliders.md +13 -0
  99. package/skills/godot-3d-game/references/project-structure.md +22 -0
  100. package/skills/godot-3d-game/references/skeleton-animation.md +16 -0
  101. package/skills/threejs-3d-game/SKILL.md +6 -2
  102. package/skills/threejs-3d-game/references/engine-asset-pipeline.md +52 -15
@@ -8,6 +8,16 @@
8
8
  --accent: #3dd6c6;
9
9
  --danger: #ff6b7a;
10
10
  --shadow: 0 18px 40px rgba(0, 0, 0, 0.35);
11
+ --control-track: rgba(255, 255, 255, 0.1);
12
+ --control-track-hover: rgba(255, 255, 255, 0.16);
13
+ --control-thumb: #748196;
14
+ --control-thumb-hover: #9aa8bb;
15
+ --control-thumb-active: var(--accent);
16
+ --control-scrollbar-size: 10px;
17
+ --control-scrollbar-radius: 999px;
18
+ --control-range-track-height: 5px;
19
+ --control-range-thumb-size: 15px;
20
+ --control-number-stepper-width: 22px;
11
21
  font-family: 'DM Sans', sans-serif;
12
22
  color: var(--text);
13
23
  background: var(--bg-0);
@@ -183,20 +193,156 @@ textarea {
183
193
  gap: 8px;
184
194
  min-width: 0;
185
195
  z-index: 1;
196
+ position: absolute;
197
+ top: 50%;
198
+ right: 14px;
199
+ transform: translateY(-50%);
200
+ }
201
+
202
+ .product-brand {
203
+ position: absolute;
204
+ z-index: 1;
205
+ top: 50%;
206
+ left: 14px;
207
+ transform: translateY(-50%);
208
+ flex: 0 0 auto;
209
+ color: var(--text);
210
+ font-size: 14px;
211
+ font-weight: 800;
212
+ letter-spacing: 0.08em;
186
213
  }
187
214
 
188
215
  .toolbar-actions {
189
216
  display: flex;
217
+ width: 100%;
218
+ min-width: 0;
219
+ flex-direction: column;
190
220
  align-items: center;
191
221
  justify-content: center;
192
- gap: 8px;
193
222
  flex-shrink: 0;
223
+ }
224
+
225
+ .toolbar-primary {
226
+ display: flex;
227
+ min-height: 35px;
228
+ align-items: center;
229
+ justify-content: center;
230
+ gap: 6px;
231
+ }
232
+
233
+ .toolbar-primary-button {
234
+ display: inline-flex;
235
+ flex: 0 0 auto;
236
+ align-items: center;
237
+ gap: 7px;
238
+ padding: 6px 14px;
239
+ border: 1px solid transparent;
240
+ border-radius: 7px;
241
+ color: var(--text);
242
+ background: transparent;
243
+ cursor: pointer;
244
+ font-size: 13px;
245
+ font-weight: 600;
246
+ white-space: nowrap;
247
+ }
248
+
249
+ .toolbar-category-indicator {
250
+ width: 0;
251
+ height: 0;
252
+ border-top: 4px solid transparent;
253
+ border-bottom: 4px solid transparent;
254
+ border-left: 5px solid currentColor;
255
+ opacity: 0.7;
256
+ transform-origin: 2px 4px;
257
+ transition: transform 140ms ease;
258
+ }
259
+
260
+ .toolbar-category-tab[aria-selected='true'] .toolbar-category-indicator {
261
+ transform: rotate(90deg);
262
+ }
263
+
264
+ .toolbar-primary-button:hover,
265
+ .toolbar-category-tab[aria-selected='true'] {
266
+ border-color: rgba(61, 214, 198, 0.42);
267
+ background: rgba(61, 214, 198, 0.12);
268
+ }
269
+
270
+ .toolbar-ribbon {
271
+ display: none;
194
272
  position: absolute;
195
- left: 50%;
196
- transform: translateX(-50%);
273
+ top: 100%;
274
+ left: 0;
275
+ z-index: 30;
276
+ box-sizing: border-box;
277
+ width: 100%;
278
+ min-width: 0;
279
+ justify-content: center;
280
+ padding: 7px 14px;
281
+ border-top: 1px solid var(--line);
282
+ border-bottom: 1px solid var(--line);
283
+ overflow-x: auto;
284
+ background: rgba(15, 18, 23, 0.96);
285
+ box-shadow: 0 12px 24px rgba(0, 0, 0, 0.34);
286
+ backdrop-filter: blur(10px);
287
+ }
288
+
289
+ .toolbar-ribbon.is-open {
290
+ display: flex;
291
+ }
292
+
293
+ .toolbar-ribbon-panel {
294
+ display: none;
295
+ min-width: min-content;
296
+ align-items: center;
297
+ justify-content: center;
298
+ gap: 8px;
299
+ }
300
+
301
+ .toolbar-ribbon-panel.is-active {
302
+ display: flex;
303
+ }
304
+
305
+ .toolbar-ribbon-tool {
306
+ display: inline-flex;
307
+ width: auto;
308
+ min-width: 82px;
309
+ height: 38px;
310
+ flex: 0 0 auto;
311
+ align-items: center;
312
+ justify-content: center;
313
+ padding: 6px 14px;
314
+ border: 1px solid rgba(61, 214, 198, 0.3);
315
+ border-radius: 9px;
316
+ color: var(--text);
317
+ background: rgba(61, 214, 198, 0.08);
318
+ cursor: grab;
319
+ touch-action: none;
320
+ }
321
+
322
+ .toolbar-ribbon-tool:hover {
323
+ border-color: rgba(61, 214, 198, 0.68);
324
+ background: rgba(61, 214, 198, 0.16);
325
+ }
326
+
327
+ .toolbar-ribbon-tool > span {
328
+ font-size: 13px;
329
+ font-weight: 600;
330
+ line-height: 1.2;
331
+ text-align: center;
332
+ white-space: nowrap;
333
+ }
334
+
335
+ .toolbar-ribbon-tool:active,
336
+ .toolbar-ribbon-tool.is-dragging {
337
+ cursor: grabbing;
338
+ }
339
+
340
+ .toolbar-ribbon-tool.toolbar-ribbon-action {
341
+ cursor: pointer;
197
342
  }
198
343
 
199
344
  .tool-btn {
345
+ flex: 0 0 auto;
200
346
  border: 1px solid rgba(61, 214, 198, 0.35);
201
347
  background: rgba(61, 214, 198, 0.12);
202
348
  color: var(--text);
@@ -205,6 +351,7 @@ textarea {
205
351
  cursor: pointer;
206
352
  font-weight: 600;
207
353
  font-size: 13px;
354
+ white-space: nowrap;
208
355
  }
209
356
 
210
357
  .tool-btn:hover {
@@ -212,22 +359,9 @@ textarea {
212
359
  background: rgba(61, 214, 198, 0.2);
213
360
  }
214
361
 
215
- #tool-image-gen,
216
- #tool-video-gen {
217
- cursor: grab;
218
- touch-action: none;
219
- }
220
-
221
- #tool-image-gen:active,
222
- #tool-video-gen:active,
223
- #tool-image-gen.is-dragging,
224
- #tool-video-gen.is-dragging {
225
- cursor: grabbing;
226
- }
227
-
228
362
  .project-name {
229
363
  min-width: 0;
230
- max-width: 220px;
364
+ max-width: min(28vw, 360px);
231
365
  overflow: hidden;
232
366
  text-overflow: ellipsis;
233
367
  white-space: nowrap;
@@ -258,7 +392,9 @@ textarea {
258
392
  left: 0;
259
393
  top: 0;
260
394
  bottom: 0;
261
- width: 300px;
395
+ width: var(--inspector-width, 300px);
396
+ min-width: min(300px, 50vw);
397
+ max-width: 50vw;
262
398
  display: flex;
263
399
  flex-direction: column;
264
400
  min-height: 0;
@@ -268,6 +404,41 @@ textarea {
268
404
  box-shadow: 12px 0 32px rgba(0, 0, 0, 0.28);
269
405
  }
270
406
 
407
+ .inspector-resize-handle {
408
+ position: absolute;
409
+ z-index: 2;
410
+ top: 0;
411
+ right: -5px;
412
+ bottom: 0;
413
+ width: 10px;
414
+ cursor: col-resize;
415
+ touch-action: none;
416
+ outline: none;
417
+ }
418
+
419
+ .inspector-resize-handle::after {
420
+ content: '';
421
+ position: absolute;
422
+ top: 0;
423
+ right: 4px;
424
+ bottom: 0;
425
+ width: 2px;
426
+ background: transparent;
427
+ transition: background 120ms ease;
428
+ }
429
+
430
+ .inspector-resize-handle:hover::after,
431
+ .inspector-resize-handle:focus-visible::after,
432
+ .inspector.is-resizing .inspector-resize-handle::after {
433
+ background: rgba(61, 214, 198, 0.72);
434
+ }
435
+
436
+ body.is-resizing-inspector,
437
+ body.is-resizing-inspector * {
438
+ cursor: col-resize !important;
439
+ user-select: none !important;
440
+ }
441
+
271
442
  .inspector[hidden] {
272
443
  display: none !important;
273
444
  }
@@ -310,6 +481,143 @@ textarea {
310
481
  gap: 8px;
311
482
  }
312
483
 
484
+ .insp-image-info,
485
+ .insp-video-info {
486
+ gap: 12px;
487
+ }
488
+
489
+ .insp-block {
490
+ display: flex;
491
+ flex-direction: column;
492
+ gap: 8px;
493
+ padding: 11px;
494
+ border: 1px solid var(--line);
495
+ border-radius: 10px;
496
+ background: rgba(10, 12, 16, 0.34);
497
+ }
498
+
499
+ .insp-block-title {
500
+ display: flex;
501
+ align-items: center;
502
+ gap: 7px;
503
+ margin: 0;
504
+ color: var(--text);
505
+ font-size: 12px;
506
+ font-weight: 650;
507
+ cursor: pointer;
508
+ user-select: none;
509
+ list-style: none;
510
+ }
511
+
512
+ .insp-block-title::-webkit-details-marker {
513
+ display: none;
514
+ }
515
+
516
+ .insp-block-title::before {
517
+ content: '';
518
+ width: 6px;
519
+ height: 6px;
520
+ flex: 0 0 auto;
521
+ border-right: 1.5px solid var(--muted);
522
+ border-bottom: 1.5px solid var(--muted);
523
+ transform: rotate(45deg) translate(-1px, -1px);
524
+ transition: transform 120ms ease;
525
+ }
526
+
527
+ .insp-block:not([open]) .insp-block-title::before {
528
+ transform: rotate(-45deg);
529
+ }
530
+
531
+ .insp-block-title:hover {
532
+ color: var(--accent);
533
+ }
534
+
535
+ .insp-block-title:focus-visible {
536
+ outline: 2px solid rgba(61, 214, 198, 0.55);
537
+ outline-offset: 3px;
538
+ border-radius: 3px;
539
+ }
540
+
541
+ .insp-input-label {
542
+ color: var(--muted);
543
+ font-size: 12px;
544
+ }
545
+
546
+ .insp-preview-frame {
547
+ overflow: hidden;
548
+ border-radius: 8px;
549
+ background: rgba(4, 6, 9, 0.55);
550
+ }
551
+
552
+ .insp-actions {
553
+ display: flex;
554
+ flex-wrap: wrap;
555
+ gap: 8px;
556
+ }
557
+
558
+ .insp-actions .ghost-btn {
559
+ flex: 1 1 auto;
560
+ }
561
+
562
+ .insp-param-module {
563
+ padding: 9px;
564
+ background: rgba(18, 21, 26, 0.58);
565
+ }
566
+
567
+ .insp-param-fields {
568
+ display: grid;
569
+ grid-template-columns: minmax(0, 1fr) minmax(88px, 0.75fr);
570
+ gap: 10px;
571
+ }
572
+
573
+ .insp-param-field {
574
+ display: flex;
575
+ min-width: 0;
576
+ flex-direction: column;
577
+ gap: 5px;
578
+ color: var(--muted);
579
+ font-size: 11px;
580
+ }
581
+
582
+ .insp-param-field input {
583
+ width: 100%;
584
+ min-width: 0;
585
+ padding: 6px 7px;
586
+ border: 1px solid rgba(255, 255, 255, 0.12);
587
+ border-radius: 7px;
588
+ background: rgba(7, 9, 12, 0.72);
589
+ color: var(--text);
590
+ font-family: 'JetBrains Mono', monospace;
591
+ font-size: 11px;
592
+ }
593
+
594
+ .insp-grid-inputs {
595
+ display: grid;
596
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
597
+ align-items: center;
598
+ gap: 5px;
599
+ }
600
+
601
+ .insp-grid-times {
602
+ color: var(--muted);
603
+ font-size: 11px;
604
+ }
605
+
606
+ .insp-param-status {
607
+ color: var(--muted);
608
+ font-size: 11px;
609
+ line-height: 1.4;
610
+ }
611
+
612
+ .insp-param-status.is-error {
613
+ color: var(--danger);
614
+ }
615
+
616
+ .insp-preview-toggle {
617
+ width: 100%;
618
+ justify-content: center;
619
+ }
620
+
313
621
  .insp-kv {
314
622
  display: grid;
315
623
  grid-template-columns: 72px 1fr;
@@ -384,7 +692,8 @@ textarea {
384
692
 
385
693
  .insp-field select,
386
694
  .insp-field input[type='text'],
387
- .insp-field input[type='number'] {
695
+ .insp-field input[type='number'],
696
+ .insp-field textarea {
388
697
  width: 100%;
389
698
  border: 1px solid rgba(255, 255, 255, 0.1);
390
699
  border-radius: 7px;
@@ -394,6 +703,21 @@ textarea {
394
703
  padding: 7px 8px;
395
704
  }
396
705
 
706
+ .insp-field textarea {
707
+ min-height: 62px;
708
+ resize: vertical;
709
+ line-height: 1.45;
710
+ }
711
+
712
+ .insp-field input[type='color'] {
713
+ width: 100%;
714
+ min-height: 34px;
715
+ padding: 3px;
716
+ border: 1px solid rgba(255, 255, 255, 0.1);
717
+ border-radius: 7px;
718
+ background: rgba(10, 12, 16, 0.72);
719
+ }
720
+
397
721
  .insp-action-btn {
398
722
  margin-top: 4px;
399
723
  width: 100%;
@@ -476,12 +800,14 @@ textarea {
476
800
 
477
801
  .canvas-toolbar {
478
802
  position: relative;
803
+ z-index: 40;
804
+ isolation: isolate;
479
805
  display: flex;
480
- align-items: center;
806
+ align-items: stretch;
481
807
  justify-content: space-between;
482
808
  flex-wrap: nowrap;
483
- gap: 10px 14px;
484
- padding: 10px 14px;
809
+ gap: 0;
810
+ padding: 6px 0 0;
485
811
  border-bottom: 1px solid var(--line);
486
812
  background: rgba(18, 21, 26, 0.72);
487
813
  backdrop-filter: blur(8px);
@@ -579,6 +905,23 @@ textarea {
579
905
  filter: drop-shadow(0 0 4px rgba(111, 255, 239, 0.9));
580
906
  }
581
907
 
908
+ /*
909
+ * SVG filters and continuously animated paths become very expensive once the
910
+ * transformed world is large. Keep the relationship line intact while panning
911
+ * or under high canvas load, but avoid allocating oversized filtered layers.
912
+ */
913
+ .canvas-viewport.is-panning .dependency-path-glow,
914
+ .canvas-viewport.is-panning .dependency-path-flow,
915
+ .canvas-viewport.is-dependency-effects-reduced .dependency-path-glow,
916
+ .canvas-viewport.is-dependency-effects-reduced .dependency-path-flow {
917
+ display: none;
918
+ }
919
+
920
+ .canvas-viewport.is-panning .dependency-arrow,
921
+ .canvas-viewport.is-dependency-effects-reduced .dependency-arrow {
922
+ filter: none;
923
+ }
924
+
582
925
  .dependency-edge.is-active .dependency-path-base {
583
926
  stroke: rgba(124, 255, 241, 0.86);
584
927
  stroke-width: 2;
@@ -695,17 +1038,58 @@ textarea {
695
1038
  cursor: nwse-resize;
696
1039
  }
697
1040
 
698
- .canvas-viewport.is-resizing[data-resize-corner='nw'],
699
- .canvas-viewport.is-resizing[data-resize-corner='nw'] *,
700
- .canvas-viewport.is-resizing[data-resize-corner='se'],
701
- .canvas-viewport.is-resizing[data-resize-corner='se'] * {
702
- cursor: nwse-resize !important;
1041
+ .canvas-panel-resize-handle {
1042
+ position: absolute;
1043
+ right: 4px;
1044
+ bottom: 4px;
1045
+ z-index: 60;
1046
+ width: 20px;
1047
+ height: 20px;
1048
+ padding: 0;
1049
+ border: 0;
1050
+ border-radius: 5px;
1051
+ outline: 0;
1052
+ background: transparent;
1053
+ box-shadow: none;
1054
+ cursor: nwse-resize;
1055
+ opacity: 1;
1056
+ pointer-events: auto;
1057
+ touch-action: none;
1058
+ transition: opacity 120ms ease, background 120ms ease;
703
1059
  }
704
1060
 
705
- .canvas-viewport.is-resizing[data-resize-corner='ne'],
706
- .canvas-viewport.is-resizing[data-resize-corner='ne'] *,
707
- .canvas-viewport.is-resizing[data-resize-corner='sw'],
708
- .canvas-viewport.is-resizing[data-resize-corner='sw'] * {
1061
+ .canvas-panel-resize-handle::before,
1062
+ .canvas-panel-resize-handle::after {
1063
+ content: none;
1064
+ }
1065
+
1066
+ .canvas-node.is-interactive-ui {
1067
+ z-index: 100000;
1068
+ }
1069
+
1070
+ .canvas-node.is-interactive-ui.is-selected {
1071
+ z-index: 110000;
1072
+ }
1073
+
1074
+ .canvas-node:hover > .canvas-panel-resize-handle,
1075
+ .canvas-node.is-selected > .canvas-panel-resize-handle,
1076
+ .canvas-panel-resize-handle:hover,
1077
+ .is-resizing-panel > .canvas-panel-resize-handle {
1078
+ opacity: 1;
1079
+ background: transparent;
1080
+ }
1081
+
1082
+ .canvas-viewport.is-resizing[data-resize-corner='nw'],
1083
+ .canvas-viewport.is-resizing[data-resize-corner='nw'] *,
1084
+ .canvas-viewport.is-resizing[data-resize-corner='se'],
1085
+ .canvas-viewport.is-resizing[data-resize-corner='se'] * {
1086
+ cursor: nwse-resize !important;
1087
+ }
1088
+
1089
+ .canvas-viewport.is-resizing[data-resize-corner='ne'],
1090
+ .canvas-viewport.is-resizing[data-resize-corner='ne'] *,
1091
+ .canvas-viewport.is-resizing[data-resize-corner='sw'],
1092
+ .canvas-viewport.is-resizing[data-resize-corner='sw'] * {
709
1093
  cursor: nesw-resize !important;
710
1094
  }
711
1095
 
@@ -743,6 +1127,8 @@ textarea {
743
1127
  transform-origin: top left;
744
1128
  pointer-events: none;
745
1129
  will-change: transform;
1130
+ image-rendering: crisp-edges;
1131
+ image-rendering: pixelated;
746
1132
  }
747
1133
 
748
1134
  .canvas-node.is-frame-editor {
@@ -751,6 +1137,21 @@ textarea {
751
1137
  background: linear-gradient(165deg, rgba(28, 34, 42, 0.98), rgba(16, 19, 24, 0.98));
752
1138
  }
753
1139
 
1140
+ .canvas-node.is-frame-editor.is-manual-size {
1141
+ display: flex;
1142
+ flex-direction: column;
1143
+ }
1144
+
1145
+ .canvas-node.is-frame-editor.is-manual-size .frame-editor-workspace {
1146
+ flex: 1 1 auto;
1147
+ min-height: 0;
1148
+ }
1149
+
1150
+ .canvas-node.is-frame-editor.is-manual-size .frame-editor-grid-scroll {
1151
+ min-height: 0;
1152
+ max-height: none;
1153
+ }
1154
+
754
1155
  .frame-editor-head {
755
1156
  display: flex;
756
1157
  align-items: center;
@@ -1073,1175 +1474,3480 @@ body.is-ref-dragging .frame-editor-grid {
1073
1474
  width: 288px;
1074
1475
  }
1075
1476
 
1076
- .gen-dialog-chrome {
1077
- display: flex;
1078
- align-items: center;
1079
- justify-content: space-between;
1080
- gap: 6px;
1081
- padding: 6px 8px 6px 10px;
1082
- border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1083
- background: rgba(255, 255, 255, 0.02);
1084
- cursor: grab;
1085
- user-select: none;
1477
+ .canvas-node.is-eight-direction-dialog {
1478
+ width: 320px;
1086
1479
  }
1087
1480
 
1088
- .gen-dialog-chrome strong {
1481
+ .canvas-node.is-color-key-editor,
1482
+ .canvas-node.is-perfect-pixel-editor {
1483
+ display: flex;
1484
+ flex-direction: column;
1485
+ width: 360px;
1486
+ min-width: 300px;
1487
+ min-height: 360px;
1488
+ overflow: hidden;
1489
+ border: 1px solid rgba(61, 214, 198, 0.24);
1490
+ border-radius: 12px;
1491
+ background: linear-gradient(165deg, rgba(28, 34, 42, 0.98), rgba(16, 19, 24, 0.98));
1492
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.04);
1089
1493
  font-size: 12px;
1090
- font-weight: 600;
1091
- letter-spacing: 0.02em;
1092
- }
1093
-
1094
- .gen-dialog-chrome .ghost-btn {
1095
- width: 22px;
1096
- height: 22px;
1097
- padding: 0;
1098
- line-height: 1;
1099
- border-radius: 6px;
1100
- font-size: 14px;
1101
- opacity: 0.7;
1102
- cursor: pointer;
1103
- position: relative;
1104
- z-index: 2;
1105
1494
  }
1106
1495
 
1107
- .gen-dialog-chrome .ghost-btn:hover {
1108
- opacity: 1;
1496
+ .canvas-node.is-perfect-pixel-editor {
1497
+ width: 380px;
1498
+ min-width: 320px;
1499
+ min-height: 430px;
1109
1500
  }
1110
1501
 
1111
- .gen-dialog-body {
1502
+ .canvas-node.is-official-assets-dialog {
1112
1503
  display: flex;
1504
+ min-width: 460px;
1505
+ min-height: 360px;
1113
1506
  flex-direction: column;
1114
- max-height: min(58vh, 380px);
1115
- cursor: default;
1116
- }
1117
-
1118
- .gen-dialog-body .chat-messages {
1119
- flex: 0 1 auto;
1120
- max-height: 96px;
1121
- min-height: 0;
1122
- padding: 6px 8px;
1123
- gap: 6px;
1124
- }
1125
-
1126
- .gen-dialog-body .chat-messages[hidden] {
1127
- display: none !important;
1507
+ container-name: official-assets-dialog;
1508
+ container-type: inline-size;
1128
1509
  }
1129
1510
 
1130
- .gen-dialog-body .chat-bubble {
1131
- padding: 6px 8px;
1132
- border-radius: 8px;
1133
- font-size: 11px;
1511
+ .official-assets-title {
1512
+ display: flex;
1513
+ min-width: 0;
1514
+ align-items: baseline;
1515
+ gap: 8px;
1134
1516
  }
1135
1517
 
1136
- .gen-dialog-body .bubble-meta {
1518
+ .official-assets-title > span {
1519
+ color: var(--muted);
1137
1520
  font-size: 10px;
1138
- margin-top: 4px;
1521
+ font-weight: 500;
1139
1522
  }
1140
1523
 
1141
- .gen-dialog-body .chat-composer {
1524
+ .official-assets-body {
1142
1525
  display: flex;
1526
+ flex: 1 1 auto;
1527
+ min-height: 0;
1143
1528
  flex-direction: column;
1144
- border-top: none;
1145
- padding: 8px;
1146
- gap: 6px;
1529
+ cursor: default;
1147
1530
  }
1148
1531
 
1149
- .gen-dialog-body .chat-composer.is-drop {
1150
- outline: 1px dashed rgba(61, 214, 198, 0.55);
1151
- outline-offset: -3px;
1532
+ .official-assets-tabs {
1533
+ display: flex;
1534
+ flex: 0 0 auto;
1535
+ align-items: center;
1536
+ gap: 5px;
1537
+ padding: 9px 10px 0;
1538
+ border-bottom: 1px solid rgba(255, 255, 255, 0.08);
1152
1539
  }
1153
1540
 
1154
- .gen-dialog-body .prompt-drop-zone {
1155
- display: flex;
1156
- flex-direction: column;
1157
- gap: 6px;
1158
- border-radius: 8px;
1159
- padding: 2px;
1160
- transition: outline-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
1541
+ .official-assets-tab {
1542
+ display: inline-flex;
1543
+ align-items: center;
1544
+ gap: 5px;
1545
+ margin-bottom: -1px;
1546
+ padding: 7px 12px 8px;
1547
+ border: 1px solid transparent;
1548
+ border-bottom-color: transparent;
1549
+ border-radius: 8px 8px 0 0;
1550
+ background: transparent;
1551
+ color: var(--muted);
1552
+ font: inherit;
1553
+ font-size: 11px;
1554
+ cursor: pointer;
1161
1555
  }
1162
1556
 
1163
- .gen-dialog-body .prompt-drop-zone.is-drop {
1164
- outline: 1px dashed rgba(61, 214, 198, 0.65);
1165
- outline-offset: 0;
1166
- background: rgba(61, 214, 198, 0.06);
1557
+ .official-assets-tab:hover:not(:disabled) {
1558
+ color: var(--text);
1559
+ background: rgba(255, 255, 255, 0.04);
1167
1560
  }
1168
1561
 
1169
- .gen-dialog-body .prompt-drop-zone.is-ref-target {
1170
- animation: ref-drop-pulse 1s ease-in-out infinite;
1562
+ .official-assets-tab.is-active {
1563
+ border-color: rgba(61, 214, 198, 0.28);
1564
+ border-bottom-color: #151a21;
1565
+ background: #151a21;
1566
+ color: var(--accent);
1567
+ font-weight: 650;
1171
1568
  }
1172
1569
 
1173
- .gen-dialog-body .prompt-drop-zone.is-ref-target textarea {
1174
- border-color: rgba(61, 214, 198, 0.55);
1570
+ .official-assets-tab:disabled {
1571
+ cursor: not-allowed;
1572
+ opacity: 0.4;
1175
1573
  }
1176
1574
 
1177
- @keyframes ref-drop-pulse {
1178
- 0%,
1179
- 100% {
1180
- outline: 1px dashed rgba(61, 214, 198, 0.35);
1181
- outline-offset: 0;
1182
- background: rgba(61, 214, 198, 0.04);
1183
- box-shadow: 0 0 0 0 rgba(61, 214, 198, 0);
1184
- }
1185
- 50% {
1186
- outline: 1px dashed rgba(61, 214, 198, 0.95);
1187
- outline-offset: 1px;
1188
- background: rgba(61, 214, 198, 0.14);
1189
- box-shadow: 0 0 0 3px rgba(61, 214, 198, 0.18);
1190
- }
1575
+ .official-assets-tab small {
1576
+ padding: 1px 4px;
1577
+ border-radius: 999px;
1578
+ background: rgba(255, 255, 255, 0.08);
1579
+ font-size: 8px;
1191
1580
  }
1192
1581
 
1193
- .gen-dialog-body .gen-dialog-compact .composer-actions {
1194
- justify-content: stretch;
1582
+ .official-assets-catalog {
1583
+ flex: 1 1 auto;
1584
+ min-height: 0;
1585
+ padding: 10px;
1586
+ overflow: auto;
1195
1587
  }
1196
1588
 
1197
- .gen-dialog-body .gen-dialog-compact .composer-actions button[type='submit'] {
1198
- width: 100%;
1589
+ .official-assets-grid {
1590
+ display: grid;
1591
+ grid-template-columns: repeat(5, minmax(0, 1fr));
1592
+ gap: 8px;
1199
1593
  }
1200
1594
 
1201
- .gen-dialog-body .gen-dialog-warning {
1202
- margin: 0;
1203
- color: var(--danger);
1204
- font-size: 11px;
1205
- line-height: 1.35;
1595
+ .official-asset-card {
1596
+ position: relative;
1597
+ min-width: 0;
1598
+ padding: 5px;
1599
+ overflow: hidden;
1600
+ border: 1px solid rgba(255, 255, 255, 0.1);
1601
+ border-radius: 9px;
1602
+ background: rgba(8, 11, 15, 0.55);
1603
+ color: var(--text);
1604
+ cursor: pointer;
1605
+ text-align: left;
1206
1606
  }
1207
1607
 
1208
- .gen-dialog-body .gen-dialog-warning[hidden] {
1209
- display: none !important;
1608
+ .official-asset-card:hover:not(:disabled) {
1609
+ border-color: rgba(61, 214, 198, 0.45);
1610
+ background: rgba(61, 214, 198, 0.08);
1210
1611
  }
1211
1612
 
1212
- .gen-dialog-body .ref-strip {
1213
- gap: 4px;
1214
- margin: 0;
1613
+ .official-asset-card.is-selected {
1614
+ border-color: var(--accent);
1615
+ box-shadow: 0 0 0 1px rgba(61, 214, 198, 0.24);
1616
+ background: rgba(61, 214, 198, 0.12);
1215
1617
  }
1216
1618
 
1217
- .gen-dialog-body .ref-chip {
1218
- gap: 4px;
1219
- padding: 2px;
1220
- border-radius: 8px;
1619
+ .official-asset-card:disabled {
1620
+ cursor: wait;
1621
+ opacity: 0.62;
1221
1622
  }
1222
1623
 
1223
- .gen-dialog-body .ref-chip img {
1224
- width: 28px;
1225
- height: 28px;
1624
+ .official-asset-card img {
1625
+ display: block;
1626
+ width: 100%;
1627
+ aspect-ratio: 1;
1628
+ object-fit: cover;
1226
1629
  border-radius: 6px;
1630
+ image-rendering: auto;
1227
1631
  }
1228
1632
 
1229
- .gen-dialog-body .ref-chip button {
1633
+ .official-asset-name {
1634
+ display: block;
1635
+ padding: 5px 2px 1px;
1636
+ overflow: hidden;
1637
+ font-size: 10px;
1638
+ line-height: 1.25;
1639
+ text-overflow: ellipsis;
1640
+ white-space: nowrap;
1641
+ }
1642
+
1643
+ .official-asset-check {
1644
+ position: absolute;
1645
+ top: 9px;
1646
+ right: 9px;
1647
+ display: grid;
1230
1648
  width: 18px;
1231
1649
  height: 18px;
1232
- font-size: 12px;
1650
+ place-items: center;
1651
+ border: 1px solid rgba(255, 255, 255, 0.34);
1652
+ border-radius: 50%;
1653
+ background: rgba(8, 11, 15, 0.8);
1654
+ color: #071411;
1655
+ font-size: 11px;
1656
+ font-weight: 800;
1233
1657
  }
1234
1658
 
1235
- .gen-dialog-body .composer-row {
1236
- display: grid;
1237
- grid-template-columns: 1fr 1fr;
1238
- gap: 6px;
1659
+ .official-asset-card.is-selected .official-asset-check {
1660
+ border-color: var(--accent);
1661
+ background: var(--accent);
1239
1662
  }
1240
1663
 
1241
- .gen-dialog-body .composer-row label {
1664
+ .official-assets-message,
1665
+ .official-assets-empty {
1242
1666
  display: flex;
1667
+ min-height: 160px;
1668
+ align-items: center;
1669
+ justify-content: center;
1243
1670
  flex-direction: column;
1244
- gap: 3px;
1245
- font-size: 10px;
1671
+ gap: 10px;
1672
+ margin: 0;
1246
1673
  color: var(--muted);
1247
- letter-spacing: 0.02em;
1248
- }
1249
-
1250
- .gen-dialog-body .composer-row select,
1251
- .gen-dialog-body .composer-row input,
1252
- .gen-dialog-body .size-input,
1253
- .gen-dialog-body .chat-composer textarea {
1254
- width: 100%;
1255
- border: 1px solid rgba(255, 255, 255, 0.08);
1256
- border-radius: 7px;
1257
- background: rgba(10, 12, 16, 0.72);
1258
- color: var(--text);
1259
- font-size: 11px;
1260
- padding: 5px 7px;
1261
- min-height: 0;
1262
- line-height: 1.3;
1263
- }
1264
-
1265
- .gen-dialog-body .chat-composer textarea {
1266
- min-height: 44px;
1267
- resize: vertical;
1268
1674
  font-size: 12px;
1269
- padding: 7px 8px;
1675
+ text-align: center;
1270
1676
  }
1271
1677
 
1272
- .gen-dialog-body .composer-checks {
1273
- gap: 10px;
1274
- padding: 0;
1275
- font-size: 11px;
1678
+ .official-assets-message p {
1679
+ margin: 0;
1276
1680
  }
1277
1681
 
1278
- .gen-dialog-body .composer-checks label {
1279
- display: inline-flex;
1280
- align-items: center;
1281
- gap: 4px;
1682
+ .official-assets-message .is-error,
1683
+ .official-assets-feedback.is-error {
1684
+ color: var(--danger);
1282
1685
  }
1283
1686
 
1284
- .gen-dialog-body .composer-actions {
1687
+ .official-assets-footer {
1285
1688
  display: flex;
1689
+ flex: 0 0 auto;
1690
+ min-height: 48px;
1286
1691
  align-items: center;
1287
- justify-content: flex-end;
1288
- gap: 6px;
1289
- margin-top: 2px;
1692
+ justify-content: space-between;
1693
+ gap: 12px;
1694
+ padding: 8px 12px;
1695
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
1696
+ background: rgba(8, 11, 15, 0.4);
1290
1697
  }
1291
1698
 
1292
- .gen-dialog-body .composer-actions .ghost-btn {
1293
- padding: 4px 8px;
1699
+ .official-assets-feedback {
1700
+ min-width: 0;
1701
+ overflow: hidden;
1702
+ color: var(--muted);
1294
1703
  font-size: 11px;
1295
- border-radius: 7px;
1704
+ text-overflow: ellipsis;
1705
+ white-space: nowrap;
1296
1706
  }
1297
1707
 
1298
- .gen-dialog-body .composer-actions button[type='submit'] {
1299
- padding: 5px 12px;
1300
- font-size: 11px;
1301
- font-weight: 600;
1302
- border-radius: 7px;
1303
- border: none;
1304
- background: var(--accent);
1305
- color: #0b1214;
1306
- cursor: pointer;
1708
+ .official-assets-actions {
1709
+ display: flex;
1710
+ flex: 0 0 auto;
1711
+ gap: 7px;
1307
1712
  }
1308
1713
 
1309
- .gen-dialog-body .composer-actions button[type='submit']:disabled {
1310
- opacity: 0.55;
1311
- cursor: not-allowed;
1714
+ .official-assets-actions button {
1715
+ min-width: 64px;
1716
+ font-size: 11px;
1312
1717
  }
1313
1718
 
1314
- .gen-dialog-body .ref-chip-media {
1315
- padding: 3px 4px;
1316
- max-width: 100%;
1317
- }
1719
+ @container official-assets-dialog (max-width: 570px) {
1720
+ .official-assets-grid {
1721
+ grid-template-columns: repeat(4, minmax(0, 1fr));
1722
+ }
1318
1723
 
1319
- .gen-dialog-body .ref-kind-badge {
1320
- width: 28px;
1321
- height: 28px;
1322
- font-size: 9px;
1323
- border-radius: 6px;
1724
+ .official-assets-tab small {
1725
+ display: none;
1726
+ }
1324
1727
  }
1325
1728
 
1326
- .gen-dialog-body .ref-chip-meta span {
1327
- font-size: 10px;
1729
+ .color-key-head {
1730
+ display: flex;
1731
+ flex: 0 0 auto;
1732
+ align-items: center;
1733
+ justify-content: space-between;
1734
+ padding: 7px 8px 7px 11px;
1735
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1736
+ cursor: grab;
1328
1737
  }
1329
1738
 
1330
- .gen-dialog-body .ref-chip-meta select {
1331
- font-size: 10px;
1332
- padding: 1px 3px;
1333
- border-radius: 5px;
1739
+ .color-key-head strong {
1740
+ font-size: 12px;
1741
+ font-weight: 600;
1334
1742
  }
1335
1743
 
1336
- .canvas-node.is-gen-dialog .ref-handle,
1337
- .canvas-node.is-gen-dialog .canvas-node-caption {
1338
- display: none;
1744
+ .color-key-head .ghost-btn {
1745
+ width: 22px;
1746
+ height: 22px;
1747
+ padding: 0;
1748
+ border-radius: 6px;
1339
1749
  }
1340
1750
 
1341
- .canvas-node.is-video {
1342
- padding: 0;
1751
+ .color-key-preview-stage {
1752
+ position: relative;
1753
+ display: grid;
1754
+ flex: 1 1 auto;
1755
+ place-items: center;
1756
+ min-height: 190px;
1757
+ margin: 8px 8px 0;
1343
1758
  overflow: hidden;
1759
+ border: 1px solid rgba(255, 255, 255, 0.08);
1760
+ border-radius: 9px;
1761
+ background-color: #f5f5f5;
1762
+ background-image:
1763
+ linear-gradient(45deg, #d9d9d9 25%, transparent 25%),
1764
+ linear-gradient(-45deg, #d9d9d9 25%, transparent 25%),
1765
+ linear-gradient(45deg, transparent 75%, #d9d9d9 75%),
1766
+ linear-gradient(-45deg, transparent 75%, #d9d9d9 75%);
1767
+ background-position: 0 0, 0 8px, 8px -8px, -8px 0;
1768
+ background-size: 16px 16px;
1344
1769
  }
1345
1770
 
1346
- .canvas-node.is-video video[data-role='frame'] {
1771
+ .color-key-preview-stage canvas {
1772
+ display: block;
1773
+ max-width: 100%;
1774
+ max-height: 100%;
1775
+ object-fit: contain;
1776
+ cursor: crosshair;
1777
+ }
1778
+
1779
+ .perfect-pixel-preview-stage img {
1347
1780
  display: block;
1348
1781
  width: 100%;
1349
- height: auto;
1782
+ height: 100%;
1350
1783
  object-fit: contain;
1351
- background: #0b0e13;
1352
- pointer-events: none;
1353
- border-radius: 10px 10px 0 0;
1784
+ image-rendering: pixelated;
1354
1785
  }
1355
1786
 
1356
- .canvas-node.is-video .canvas-node-caption {
1357
- position: static;
1787
+ .perfect-pixel-controls,
1788
+ .perfect-pixel-manual-fields {
1789
+ display: grid;
1790
+ flex: 0 0 auto;
1791
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1792
+ gap: 8px 10px;
1793
+ padding: 9px 10px 0;
1358
1794
  }
1359
1795
 
1360
- .composer-checks {
1796
+ .perfect-pixel-controls {
1797
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1798
+ }
1799
+
1800
+ .perfect-pixel-manual-fields {
1801
+ grid-template-columns: minmax(0, 1fr);
1802
+ padding-top: 7px;
1803
+ }
1804
+
1805
+ .perfect-pixel-manual-fields[hidden],
1806
+ .perfect-pixel-threshold-field[hidden] {
1807
+ display: none;
1808
+ }
1809
+
1810
+ .perfect-pixel-field,
1811
+ .perfect-pixel-threshold-field {
1361
1812
  display: flex;
1362
- gap: 14px;
1363
- flex-wrap: wrap;
1364
- padding: 0 2px;
1813
+ flex-direction: column;
1814
+ gap: 5px;
1815
+ min-width: 0;
1365
1816
  color: var(--muted);
1366
- font-size: 13px;
1817
+ font-size: 10px;
1367
1818
  }
1368
1819
 
1369
- .ref-chip-media {
1370
- align-items: center;
1371
- gap: 8px;
1372
- min-width: 0;
1373
- max-width: 100%;
1820
+ .perfect-pixel-alpha-controls {
1821
+ display: grid;
1822
+ flex: 0 0 auto;
1823
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1824
+ gap: 10px;
1825
+ align-items: end;
1826
+ padding: 8px 10px 0;
1374
1827
  }
1375
1828
 
1376
- .ref-chip-media img {
1377
- width: 40px;
1378
- height: 40px;
1829
+ .perfect-pixel-alpha-controls .perfect-pixel-threshold-field {
1830
+ padding: 0;
1379
1831
  }
1380
1832
 
1381
- .ref-kind-badge {
1382
- width: 40px;
1383
- height: 40px;
1384
- border-radius: 8px;
1833
+ .perfect-pixel-size-control {
1385
1834
  display: grid;
1386
- place-items: center;
1387
- background: rgba(61, 214, 198, 0.12);
1388
- border: 1px solid var(--line);
1389
- font-size: 11px;
1390
- color: var(--accent);
1835
+ grid-template-columns: minmax(0, 1fr) auto;
1836
+ gap: 6px;
1837
+ align-items: center;
1391
1838
  }
1392
1839
 
1393
- .ref-chip-meta {
1394
- display: flex;
1395
- flex-direction: column;
1396
- gap: 4px;
1397
- min-width: 0;
1398
- flex: 1;
1840
+ .perfect-pixel-size-control span {
1841
+ min-width: 34px;
1842
+ color: var(--text);
1843
+ font-variant-numeric: tabular-nums;
1399
1844
  }
1400
1845
 
1401
- .ref-chip-meta span {
1402
- font-size: 11px;
1403
- overflow: hidden;
1404
- text-overflow: ellipsis;
1405
- white-space: nowrap;
1846
+ .perfect-pixel-detected-size {
1847
+ min-height: 29px;
1848
+ display: flex;
1849
+ align-items: center;
1850
+ padding: 3px 8px;
1851
+ border: 1px solid rgba(255, 255, 255, 0.1);
1852
+ border-radius: 7px;
1853
+ background: rgba(255, 255, 255, 0.035);
1854
+ color: var(--text);
1855
+ font-variant-numeric: tabular-nums;
1406
1856
  }
1407
1857
 
1408
- .ref-chip-meta select {
1409
- font-size: 11px;
1410
- border-radius: 6px;
1411
- border: 1px solid var(--line);
1412
- background: var(--bg-2);
1858
+ .perfect-pixel-field select,
1859
+ .perfect-pixel-field input[type='number'] {
1860
+ width: 100%;
1861
+ min-width: 0;
1862
+ height: 29px;
1863
+ padding: 3px 7px;
1864
+ border: 1px solid rgba(255, 255, 255, 0.1);
1865
+ border-radius: 7px;
1413
1866
  color: var(--text);
1414
- padding: 2px 4px;
1867
+ background: rgba(10, 12, 16, 0.72);
1415
1868
  }
1416
1869
 
1417
- .canvas-node.is-pending {
1418
- padding: 0;
1419
- overflow: hidden;
1420
- border: 1px solid rgba(61, 214, 198, 0.35);
1421
- background: #10151c;
1422
- box-shadow:
1423
- 0 0 0 1px rgba(61, 214, 198, 0.12),
1424
- 0 18px 40px rgba(0, 0, 0, 0.4);
1870
+ .perfect-pixel-threshold-field {
1871
+ flex: 0 0 auto;
1872
+ padding: 8px 10px 0;
1425
1873
  }
1426
1874
 
1427
- .canvas-node.is-pending-error {
1428
- border-color: rgba(248, 113, 113, 0.45);
1429
- box-shadow:
1430
- 0 0 0 1px rgba(248, 113, 113, 0.14),
1431
- 0 18px 40px rgba(0, 0, 0, 0.4);
1875
+ .perfect-pixel-threshold-field > span {
1876
+ display: flex;
1877
+ justify-content: space-between;
1432
1878
  }
1433
1879
 
1434
- .pending-stage {
1435
- position: relative;
1880
+ .perfect-pixel-threshold-field input[type='range'] {
1436
1881
  width: 100%;
1437
- height: 100%;
1438
- min-height: 120px;
1439
- display: grid;
1440
- place-items: center;
1441
- overflow: hidden;
1442
- isolation: isolate;
1882
+ accent-color: var(--accent);
1443
1883
  }
1444
1884
 
1445
- .pending-aura {
1446
- position: absolute;
1447
- inset: -40%;
1448
- background:
1449
- conic-gradient(
1450
- from 0deg,
1451
- rgba(61, 214, 198, 0.0),
1452
- rgba(61, 214, 198, 0.55),
1453
- rgba(240, 180, 41, 0.35),
1454
- rgba(96, 165, 250, 0.45),
1455
- rgba(61, 214, 198, 0.0)
1456
- );
1457
- animation: pending-spin 2.8s linear infinite;
1458
- filter: blur(18px);
1459
- opacity: 0.85;
1885
+ .perfect-pixel-status {
1886
+ padding-top: 7px;
1460
1887
  }
1461
1888
 
1462
- .canvas-node.is-pending-error .pending-aura {
1463
- background:
1464
- conic-gradient(
1465
- from 0deg,
1466
- rgba(248, 113, 113, 0.0),
1467
- rgba(248, 113, 113, 0.55),
1468
- rgba(251, 146, 60, 0.35),
1469
- rgba(248, 113, 113, 0.45),
1470
- rgba(248, 113, 113, 0.0)
1471
- );
1889
+ .color-key-preview-loading {
1890
+ position: absolute;
1891
+ top: 8px;
1892
+ right: 8px;
1893
+ display: grid;
1894
+ place-items: center;
1895
+ width: 28px;
1896
+ height: 28px;
1897
+ border: 1px solid rgba(255, 255, 255, 0.14);
1898
+ border-radius: 8px;
1899
+ background: rgba(15, 19, 25, 0.72);
1900
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.24);
1901
+ backdrop-filter: blur(5px);
1902
+ pointer-events: none;
1903
+ image-rendering: crisp-edges;
1904
+ image-rendering: pixelated;
1472
1905
  }
1473
1906
 
1474
- @keyframes pending-spin {
1475
- to {
1476
- transform: rotate(360deg);
1477
- }
1907
+ .color-key-preview-loading[hidden] {
1908
+ display: none;
1478
1909
  }
1479
1910
 
1480
- .chat-header {
1481
- padding: 16px 16px 10px;
1482
- border-bottom: 1px solid var(--line);
1911
+ .color-key-preview-spinner {
1912
+ width: 13px;
1913
+ height: 13px;
1914
+ border: 2px solid rgba(255, 255, 255, 0.22);
1915
+ border-top-color: var(--accent);
1916
+ border-radius: 50%;
1917
+ animation: color-key-preview-spin 680ms linear infinite;
1483
1918
  }
1484
1919
 
1485
- .chat-header h1 {
1486
- margin: 0;
1487
- font-size: 20px;
1488
- letter-spacing: 0.02em;
1920
+ @keyframes color-key-preview-spin {
1921
+ to { transform: rotate(360deg); }
1489
1922
  }
1490
1923
 
1491
- .chat-header p {
1492
- margin: 6px 0 0;
1493
- color: var(--muted);
1494
- font-size: 13px;
1924
+ .color-key-controls {
1925
+ display: grid;
1926
+ flex: 0 0 auto;
1927
+ grid-template-columns: 86px minmax(0, 1fr);
1928
+ gap: 10px;
1929
+ align-items: end;
1930
+ padding: 9px 10px 5px;
1495
1931
  }
1496
1932
 
1497
- .chat-messages {
1498
- flex: 1;
1499
- overflow: auto;
1500
- padding: 14px;
1933
+ .color-key-color-field,
1934
+ .color-key-strength-field {
1501
1935
  display: flex;
1502
1936
  flex-direction: column;
1503
- gap: 12px;
1504
- }
1505
-
1506
- .chat-empty,
1507
- .chat-busy {
1937
+ gap: 5px;
1508
1938
  color: var(--muted);
1509
- font-size: 13px;
1939
+ font-size: 10px;
1510
1940
  }
1511
1941
 
1512
- .chat-bubble {
1513
- border: 1px solid var(--line);
1514
- border-radius: 12px;
1515
- padding: 10px;
1516
- background: var(--bg-1);
1942
+ .color-key-color-field input[type='color'] {
1943
+ width: 100%;
1944
+ height: 28px;
1945
+ padding: 2px;
1946
+ border: 1px solid rgba(255, 255, 255, 0.1);
1947
+ border-radius: 7px;
1948
+ background: rgba(10, 12, 16, 0.72);
1949
+ cursor: pointer;
1517
1950
  }
1518
1951
 
1519
- .chat-user {
1520
- border-color: rgba(61, 214, 198, 0.25);
1952
+ .color-key-strength-field > span {
1953
+ display: flex;
1954
+ justify-content: space-between;
1521
1955
  }
1522
1956
 
1523
- .bubble-refs {
1957
+ .color-key-strength-field input[type='range'] {
1958
+ width: 100%;
1959
+ accent-color: var(--accent);
1960
+ }
1961
+
1962
+ .color-key-options {
1524
1963
  display: flex;
1525
- gap: 6px;
1526
- flex-wrap: wrap;
1527
- margin-bottom: 8px;
1964
+ grid-column: 1 / -1;
1965
+ gap: 14px;
1966
+ align-items: center;
1528
1967
  }
1529
1968
 
1530
- .bubble-refs img,
1531
- .ref-chip img {
1532
- width: 44px;
1533
- height: 44px;
1534
- object-fit: cover;
1535
- border-radius: 8px;
1536
- border: 1px solid var(--line);
1969
+ .color-key-option {
1970
+ display: inline-flex;
1971
+ gap: 6px;
1972
+ align-items: center;
1973
+ color: var(--muted);
1974
+ font-size: 10px;
1975
+ cursor: pointer;
1537
1976
  }
1538
1977
 
1539
- .bubble-text {
1540
- white-space: pre-wrap;
1541
- line-height: 1.45;
1542
- font-size: 14px;
1978
+ .color-key-option input {
1979
+ margin: 0;
1543
1980
  }
1544
1981
 
1545
- .bubble-meta {
1546
- margin-top: 6px;
1982
+ .color-key-status {
1983
+ flex: 0 0 auto;
1984
+ margin: 0;
1985
+ padding: 3px 10px;
1547
1986
  color: var(--muted);
1548
- font-size: 11px;
1549
- font-family: 'JetBrains Mono', monospace;
1987
+ font-size: 10px;
1988
+ line-height: 1.35;
1550
1989
  }
1551
1990
 
1552
- .bubble-result {
1553
- width: 100%;
1554
- border-radius: 8px;
1555
- display: block;
1991
+ .color-key-status {
1992
+ min-height: 20px;
1993
+ color: rgba(162, 235, 226, 0.9);
1556
1994
  }
1557
1995
 
1558
- .bubble-error {
1996
+ .color-key-status.is-error {
1559
1997
  color: var(--danger);
1560
- font-size: 13px;
1561
- white-space: pre-wrap;
1562
1998
  }
1563
1999
 
1564
- .chat-composer {
1565
- border-top: 1px solid var(--line);
1566
- padding: 12px;
2000
+ .color-key-actions {
1567
2001
  display: flex;
1568
- flex-direction: column;
1569
- gap: 8px;
1570
- background: rgba(10, 12, 16, 0.55);
2002
+ flex: 0 0 auto;
2003
+ justify-content: flex-end;
2004
+ gap: 7px;
2005
+ padding: 5px 10px 11px;
1571
2006
  }
1572
2007
 
1573
- .chat-composer.is-drop {
1574
- outline: 2px dashed var(--accent);
1575
- outline-offset: -6px;
2008
+ .color-key-actions button {
2009
+ min-width: 62px;
2010
+ padding: 5px 11px;
2011
+ font-size: 11px;
1576
2012
  }
1577
2013
 
1578
- .ref-strip {
2014
+ .color-key-actions button:disabled {
2015
+ cursor: not-allowed;
2016
+ opacity: 0.48;
2017
+ }
2018
+
2019
+ .canvas-node.is-gen-dialog.is-manual-size {
1579
2020
  display: flex;
1580
- gap: 8px;
1581
- flex-wrap: wrap;
2021
+ flex-direction: column;
1582
2022
  }
1583
2023
 
1584
- .ref-chip {
1585
- position: relative;
2024
+ .canvas-node.is-gen-dialog.is-manual-size > .gen-dialog-chrome {
2025
+ flex: 0 0 auto;
1586
2026
  }
1587
2027
 
1588
- .ref-chip button {
1589
- position: absolute;
1590
- top: -6px;
1591
- right: -6px;
1592
- width: 18px;
1593
- height: 18px;
1594
- border-radius: 50%;
1595
- border: none;
1596
- background: var(--bg-2);
1597
- color: var(--text);
1598
- cursor: pointer;
1599
- line-height: 1;
2028
+ .canvas-node.is-gen-dialog.is-manual-size > .gen-dialog-body {
2029
+ flex: 1 1 auto;
2030
+ min-height: 0;
2031
+ max-height: none;
2032
+ overflow: hidden;
1600
2033
  }
1601
2034
 
1602
- .composer-row {
1603
- display: grid;
1604
- grid-template-columns: 1fr 1fr;
1605
- gap: 8px;
2035
+ .canvas-node.is-gen-dialog.is-manual-size .gen-dialog-body .chat-composer {
2036
+ flex: 1 1 auto;
2037
+ min-height: 0;
2038
+ overflow: auto;
1606
2039
  }
1607
2040
 
1608
- .composer-row label {
1609
- display: flex;
1610
- flex-direction: column;
1611
- gap: 4px;
1612
- font-size: 12px;
1613
- color: var(--muted);
2041
+ .canvas-node.is-gen-dialog.is-manual-size .gen-dialog-body .prompt-drop-zone,
2042
+ .canvas-node.is-gen-dialog.is-manual-size .gen-dialog-body .chat-composer > textarea {
2043
+ flex: 1 1 auto;
2044
+ min-height: 60px;
1614
2045
  }
1615
2046
 
1616
- .composer-row select,
1617
- .size-input,
1618
- .chat-composer textarea {
2047
+ .canvas-node.is-gen-dialog.is-manual-size .gen-dialog-body .prompt-drop-zone textarea {
2048
+ flex: 1 1 auto;
2049
+ resize: none;
2050
+ }
2051
+
2052
+ .canvas-node.is-eight-direction-dialog.is-manual-size .eight-direction-ref-grid {
2053
+ flex: 1 1 auto;
2054
+ min-height: 92px;
2055
+ }
2056
+
2057
+ .canvas-node.is-eight-direction-dialog.is-manual-size .eight-direction-drop-zone,
2058
+ .canvas-node.is-eight-direction-dialog.is-manual-size .eight-direction-ref {
2059
+ min-height: 0;
2060
+ }
2061
+
2062
+ .canvas-node.is-eight-direction-dialog.is-manual-size .eight-direction-ref {
2063
+ position: relative;
2064
+ flex: 1 1 auto;
2065
+ align-items: stretch;
2066
+ }
2067
+
2068
+ .canvas-node.is-eight-direction-dialog.is-manual-size .eight-direction-ref img {
1619
2069
  width: 100%;
1620
- border: 1px solid var(--line);
1621
- background: var(--bg-1);
1622
- color: var(--text);
1623
- border-radius: 8px;
1624
- padding: 8px 10px;
2070
+ height: 100%;
2071
+ min-height: 48px;
1625
2072
  }
1626
2073
 
1627
- .chat-composer textarea {
1628
- resize: vertical;
1629
- min-height: 96px;
2074
+ .canvas-node.is-eight-direction-dialog.is-manual-size .eight-direction-ref button {
2075
+ position: absolute;
2076
+ top: 3px;
2077
+ right: 3px;
1630
2078
  }
1631
2079
 
1632
- .composer-actions {
2080
+ .gen-dialog-chrome {
1633
2081
  display: flex;
1634
- gap: 8px;
1635
2082
  align-items: center;
2083
+ justify-content: space-between;
2084
+ gap: 6px;
2085
+ padding: 6px 8px 6px 10px;
2086
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
2087
+ background: rgba(255, 255, 255, 0.02);
2088
+ cursor: grab;
2089
+ user-select: none;
1636
2090
  }
1637
2091
 
1638
- .composer-actions .ghost-btn {
1639
- flex: 0 0 auto;
1640
- white-space: nowrap;
2092
+ .gen-dialog-chrome strong {
2093
+ font-size: 12px;
2094
+ font-weight: 600;
2095
+ letter-spacing: 0.02em;
1641
2096
  }
1642
2097
 
1643
- .composer-actions button[type='submit'] {
1644
- flex: 1;
1645
- border: none;
1646
- border-radius: 10px;
1647
- padding: 10px 12px;
1648
- background: linear-gradient(135deg, #2bb8aa, #3dd6c6 55%, #7be7b0);
1649
- color: #06221f;
1650
- font-weight: 700;
2098
+ .gen-dialog-chrome .ghost-btn {
2099
+ width: 22px;
2100
+ height: 22px;
2101
+ padding: 0;
2102
+ line-height: 1;
2103
+ border-radius: 6px;
2104
+ font-size: 14px;
2105
+ opacity: 0.7;
1651
2106
  cursor: pointer;
2107
+ position: relative;
2108
+ z-index: 2;
1652
2109
  }
1653
2110
 
1654
- .composer-actions button[type='submit']:disabled {
1655
- opacity: 0.55;
1656
- cursor: not-allowed;
2111
+ .gen-dialog-chrome .ghost-btn:hover {
2112
+ opacity: 1;
1657
2113
  }
1658
2114
 
1659
- .ctx-menu {
1660
- position: fixed;
1661
- z-index: 50;
1662
- min-width: 160px;
1663
- padding: 6px;
1664
- border-radius: 10px;
1665
- border: 1px solid var(--line);
1666
- background: rgba(18, 21, 26, 0.96);
1667
- box-shadow: var(--shadow);
2115
+ .gen-dialog-body {
1668
2116
  display: flex;
1669
2117
  flex-direction: column;
1670
- gap: 2px;
2118
+ max-height: min(58vh, 380px);
2119
+ cursor: default;
1671
2120
  }
1672
2121
 
1673
- .ctx-menu[hidden] {
2122
+ .gen-dialog-body .chat-messages {
2123
+ flex: 0 1 auto;
2124
+ max-height: 96px;
2125
+ min-height: 0;
2126
+ padding: 6px 8px;
2127
+ gap: 6px;
2128
+ }
2129
+
2130
+ .gen-dialog-body .chat-messages[hidden] {
1674
2131
  display: none !important;
1675
2132
  }
1676
2133
 
1677
- .ctx-menu button {
1678
- border: none;
1679
- background: transparent;
1680
- color: var(--text);
1681
- text-align: left;
1682
- padding: 8px 10px;
2134
+ .gen-dialog-body .chat-bubble {
2135
+ padding: 6px 8px;
1683
2136
  border-radius: 8px;
1684
- cursor: pointer;
2137
+ font-size: 11px;
1685
2138
  }
1686
2139
 
1687
- .ctx-menu button:hover {
1688
- background: rgba(61, 214, 198, 0.12);
2140
+ .gen-dialog-body .bubble-meta {
2141
+ font-size: 10px;
2142
+ margin-top: 4px;
1689
2143
  }
1690
2144
 
1691
- .ctx-menu button[hidden] {
1692
- display: none !important;
2145
+ .gen-dialog-body .chat-composer {
2146
+ display: flex;
2147
+ flex-direction: column;
2148
+ border-top: none;
2149
+ padding: 8px;
2150
+ gap: 6px;
1693
2151
  }
1694
2152
 
1695
- .ctx-menu button.ctx-danger {
1696
- color: var(--danger);
2153
+ .gen-dialog-body .chat-composer.is-drop {
2154
+ outline: 1px dashed rgba(61, 214, 198, 0.55);
2155
+ outline-offset: -3px;
1697
2156
  }
1698
2157
 
1699
- .ctx-menu button.ctx-danger:hover {
1700
- background: rgba(255, 107, 122, 0.12);
2158
+ .gen-dialog-body .prompt-drop-zone {
2159
+ display: flex;
2160
+ flex-direction: column;
2161
+ gap: 6px;
2162
+ border-radius: 8px;
2163
+ padding: 2px;
2164
+ transition: outline-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
1701
2165
  }
1702
2166
 
1703
- .modal-backdrop {
1704
- position: fixed;
1705
- inset: 0;
1706
- z-index: 60;
2167
+ .gen-dialog-body .prompt-drop-zone.is-drop {
2168
+ outline: 1px dashed rgba(61, 214, 198, 0.65);
2169
+ outline-offset: 0;
2170
+ background: rgba(61, 214, 198, 0.06);
2171
+ }
2172
+
2173
+ .gen-dialog-body .prompt-drop-zone.is-ref-target {
2174
+ animation: ref-drop-pulse 1s ease-in-out infinite;
2175
+ }
2176
+
2177
+ .gen-dialog-body .prompt-drop-zone.is-ref-target textarea {
2178
+ border-color: rgba(61, 214, 198, 0.55);
2179
+ }
2180
+
2181
+ .tile-transition-atlas-form {
2182
+ gap: 8px;
2183
+ }
2184
+
2185
+ .tile-transition-atlas-guide {
1707
2186
  display: flex;
1708
2187
  align-items: center;
1709
2188
  justify-content: center;
1710
- padding: 24px;
1711
- background: rgba(6, 8, 12, 0.62);
1712
- backdrop-filter: blur(4px);
2189
+ margin: 0;
2190
+ padding: 7px;
2191
+ border: 1px solid rgba(255, 255, 255, 0.1);
2192
+ border-radius: 8px;
2193
+ background: rgba(10, 12, 16, 0.46);
1713
2194
  }
1714
2195
 
1715
- .modal-backdrop-dark {
1716
- background: rgba(0, 0, 0, 0.82);
1717
- backdrop-filter: none;
2196
+ .tile-transition-atlas-guide > img {
2197
+ display: block;
2198
+ width: 92px;
2199
+ height: 92px;
2200
+ border: 1px solid rgba(255, 255, 255, 0.16);
2201
+ border-radius: 5px;
2202
+ background: #fff;
1718
2203
  }
1719
2204
 
1720
- .modal-backdrop[hidden] {
1721
- display: none !important;
2205
+ .tile-transition-atlas-slots {
2206
+ display: grid;
2207
+ grid-template-columns: 1fr 1fr;
2208
+ gap: 7px;
1722
2209
  }
1723
2210
 
1724
- .modal-dialog {
1725
- width: min(440px, 100%);
1726
- max-height: min(80vh, 640px);
1727
- overflow: auto;
1728
- padding: 16px;
1729
- border-radius: 14px;
1730
- border: 1px solid var(--line);
1731
- background: rgba(18, 21, 26, 0.98);
1732
- box-shadow: var(--shadow);
1733
- display: flex;
1734
- flex-direction: column;
1735
- gap: 12px;
2211
+ .gen-dialog-body .tile-transition-atlas-slot {
2212
+ min-width: 0;
2213
+ min-height: 104px;
2214
+ padding: 8px;
2215
+ border: 1px dashed rgba(255, 255, 255, 0.16);
2216
+ background: rgba(10, 12, 16, 0.46);
1736
2217
  }
1737
2218
 
1738
- .modal-dialog-wide {
1739
- width: min(640px, 100%);
2219
+ .tile-transition-atlas-slot > strong {
2220
+ color: var(--muted);
2221
+ font-size: 10px;
2222
+ font-weight: 500;
1740
2223
  }
1741
2224
 
1742
- .modal-dialog-layer-decomposition {
1743
- width: min(760px, 100%);
1744
- max-height: min(92vh, 880px);
2225
+ .tile-transition-atlas-placeholder {
2226
+ flex: 1;
2227
+ display: grid;
2228
+ place-items: center;
2229
+ min-height: 62px;
2230
+ color: var(--muted);
2231
+ font-size: 10px;
2232
+ text-align: center;
1745
2233
  }
1746
2234
 
1747
- .modal-dialog-interactive-edit {
1748
- width: min(1480px, calc(100vw - 32px));
1749
- height: min(94vh, 980px);
1750
- max-height: none;
1751
- overflow: hidden;
1752
- padding: 12px;
2235
+ .tile-transition-atlas-reference {
2236
+ display: grid;
2237
+ grid-template-columns: minmax(0, 1fr) 20px;
2238
+ gap: 5px;
2239
+ align-items: center;
2240
+ min-width: 0;
1753
2241
  }
1754
2242
 
1755
- .interactive-editor-host {
1756
- position: relative;
1757
- flex: 1 1 auto;
1758
- min-height: 440px;
1759
- overflow: hidden;
1760
- border: 1px solid var(--line);
1761
- border-radius: 14px;
1762
- background:
1763
- radial-gradient(circle at 50% 15%, rgba(61, 214, 198, 0.06), transparent 38%),
1764
- var(--bg-0);
2243
+ .tile-transition-atlas-reference img {
2244
+ grid-column: 1 / -1;
2245
+ width: 100%;
2246
+ height: 62px;
2247
+ border-radius: 6px;
2248
+ object-fit: cover;
2249
+ image-rendering: pixelated;
1765
2250
  }
1766
2251
 
1767
- .interactive-editor-host .ptro-wrapper {
1768
- bottom: 0 !important;
2252
+ .tile-transition-atlas-reference span {
2253
+ overflow: hidden;
1769
2254
  color: var(--text);
1770
- background:
1771
- radial-gradient(circle at 50% 12%, rgba(61, 214, 198, 0.06), transparent 40%),
1772
- var(--bg-0) !important;
1773
- font-family: 'DM Sans', sans-serif !important;
2255
+ font-size: 10px;
2256
+ text-overflow: ellipsis;
2257
+ white-space: nowrap;
1774
2258
  }
1775
2259
 
1776
- .interactive-editor-host .ptro-wrapper .ptro-substrate {
1777
- opacity: 1 !important;
1778
- background: var(--bg-1) !important;
2260
+ .tile-transition-atlas-reference button {
2261
+ width: 20px;
2262
+ height: 20px;
2263
+ padding: 0;
1779
2264
  }
1780
2265
 
1781
- .interactive-editor-host .ptro-scroller {
1782
- padding: 20px 20px 20px 72px;
1783
- scrollbar-color: rgba(147, 160, 180, 0.45) transparent;
1784
- scrollbar-width: thin;
2266
+ .eight-direction-ref-grid {
2267
+ display: grid;
2268
+ grid-template-columns: 1fr 1fr;
2269
+ gap: 6px;
1785
2270
  }
1786
2271
 
1787
- .interactive-editor-host .ptro-scroller::-webkit-scrollbar {
1788
- width: 8px;
1789
- height: 8px;
2272
+ .gen-dialog-body .eight-direction-drop-zone {
2273
+ min-height: 72px;
2274
+ padding: 7px;
2275
+ border: 1px dashed rgba(255, 255, 255, 0.14);
2276
+ background: rgba(10, 12, 16, 0.46);
1790
2277
  }
1791
2278
 
1792
- .interactive-editor-host .ptro-scroller::-webkit-scrollbar-thumb {
1793
- border: 2px solid transparent;
1794
- border-radius: 999px;
1795
- background: rgba(147, 160, 180, 0.45);
1796
- background-clip: padding-box;
2279
+ .eight-direction-drop-label {
2280
+ color: var(--muted);
2281
+ font-size: 10px;
1797
2282
  }
1798
2283
 
1799
- .interactive-editor-host.is-panning .ptro-scroller,
1800
- .interactive-editor-host.is-panning .ptro-crp-el {
1801
- cursor: grabbing !important;
2284
+ .eight-direction-drop-empty {
2285
+ flex: 1;
2286
+ display: grid;
2287
+ place-items: center;
2288
+ min-height: 42px;
2289
+ color: var(--muted);
2290
+ font-size: 10px;
2291
+ text-align: center;
1802
2292
  }
1803
2293
 
1804
- .interactive-editor-host .ptro-bar {
1805
- top: 50% !important;
1806
- right: auto !important;
1807
- bottom: auto !important;
1808
- left: 14px !important;
1809
- width: auto !important;
1810
- height: auto !important;
2294
+ .eight-direction-ref {
1811
2295
  display: flex;
1812
- justify-content: flex-start;
1813
- transform: translateY(-50%);
1814
- pointer-events: none;
1815
- background: transparent !important;
1816
- color: var(--text) !important;
1817
- font-family: 'DM Sans', sans-serif !important;
1818
- z-index: 30;
2296
+ align-items: center;
2297
+ justify-content: space-between;
2298
+ gap: 6px;
2299
+ min-width: 0;
1819
2300
  }
1820
2301
 
1821
- .interactive-editor-host .ptro-bar > div {
1822
- position: relative;
1823
- width: max-content;
1824
- max-width: none;
1825
- height: auto !important;
1826
- min-width: 46px;
1827
- min-height: 0;
1828
- margin: 0 auto;
1829
- padding: 6px;
1830
- display: flex;
1831
- flex-direction: column;
1832
- align-items: center;
1833
- justify-content: center;
1834
- gap: 4px;
1835
- overflow: visible !important;
1836
- pointer-events: auto;
1837
- border: 1px solid var(--line);
1838
- border-radius: 15px;
1839
- background: rgba(26, 31, 39, 0.92);
1840
- box-shadow: 0 14px 34px rgba(0, 0, 0, 0.42);
1841
- backdrop-filter: blur(18px);
2302
+ .eight-direction-ref img {
2303
+ width: 42px;
2304
+ height: 42px;
2305
+ flex: 0 0 auto;
2306
+ border-radius: 6px;
2307
+ object-fit: cover;
1842
2308
  }
1843
2309
 
1844
- .interactive-editor-host .ptro-bar .ptro-icon-btn {
1845
- width: 34px !important;
1846
- height: 34px !important;
1847
- margin: 0 !important;
2310
+ .eight-direction-ref button {
2311
+ width: 18px;
2312
+ height: 18px;
1848
2313
  padding: 0;
1849
- flex: 0 0 34px;
1850
- border: 1px solid transparent !important;
2314
+ border: 0;
1851
2315
  border-radius: 50%;
1852
- color: var(--muted) !important;
1853
- background: transparent !important;
1854
- box-shadow: none !important;
1855
- transition:
1856
- color 120ms ease,
1857
- border-color 120ms ease,
1858
- background 120ms ease,
1859
- transform 120ms ease;
1860
- }
1861
-
1862
- .interactive-editor-host .ptro-bar .ptro-icon-btn:hover:not(:disabled) {
1863
- color: var(--text) !important;
1864
- border-color: var(--line) !important;
1865
- background: var(--bg-2) !important;
1866
- transform: translateY(-1px);
2316
+ background: rgba(255, 255, 255, 0.1);
2317
+ color: var(--text);
2318
+ cursor: pointer;
1867
2319
  }
1868
2320
 
1869
- .interactive-editor-host .ptro-bar .ptro-icon-btn.ptro-color-active-control {
1870
- color: #071311 !important;
1871
- border-color: rgba(61, 214, 198, 0.72) !important;
1872
- background: var(--accent) !important;
1873
- box-shadow: 0 6px 18px rgba(61, 214, 198, 0.2) !important;
2321
+ .eight-direction-hint {
2322
+ margin: 0;
2323
+ color: var(--muted);
2324
+ font-size: 10px;
2325
+ line-height: 1.35;
1874
2326
  }
1875
2327
 
1876
- .interactive-editor-host .ptro-bar .ptro-icon-btn:disabled {
1877
- opacity: 0.3;
1878
- cursor: not-allowed;
2328
+ .gen-dialog-body .composer-row .eight-direction-auto-label {
2329
+ display: grid;
2330
+ grid-template-columns: auto 1fr;
2331
+ align-content: center;
2332
+ align-items: center;
2333
+ column-gap: 5px;
2334
+ padding-top: 13px;
1879
2335
  }
1880
2336
 
1881
- .interactive-editor-host .ptro-bar .ptro-icon-btn svg {
1882
- width: 18px;
1883
- height: 18px;
1884
- fill: none;
1885
- stroke: currentColor;
1886
- stroke-width: 1.8;
1887
- stroke-linecap: round;
1888
- stroke-linejoin: round;
1889
- pointer-events: none;
2337
+ .gen-dialog-body .composer-row .eight-direction-auto-label input {
2338
+ width: auto;
1890
2339
  }
1891
2340
 
1892
- .interactive-editor-host .ptro-tool-controls {
1893
- position: absolute;
1894
- top: 0;
1895
- bottom: auto;
1896
- left: calc(100% + 10px);
1897
- width: max-content;
1898
- min-height: 42px;
1899
- max-width: none;
1900
- padding: 5px 8px;
2341
+ .eight-direction-background-control {
1901
2342
  display: flex;
1902
2343
  align-items: center;
1903
- justify-content: center;
1904
2344
  gap: 7px;
1905
- flex-wrap: nowrap;
1906
- overflow: visible;
1907
- transform: translateY(-50%);
1908
- border: 1px solid var(--line);
1909
- border-radius: 12px;
1910
- background: rgba(26, 31, 39, 0.94);
1911
- box-shadow: 0 10px 28px rgba(0, 0, 0, 0.36);
1912
- backdrop-filter: blur(16px);
2345
+ min-height: 28px;
1913
2346
  }
1914
2347
 
1915
- .interactive-editor-host .ptro-bar:not(.has-tool-options) .ptro-tool-controls,
1916
- .interactive-editor-host .ptro-tool-controls:empty {
1917
- display: none;
2348
+ .gen-dialog-body .composer-row .eight-direction-background-control input[type='color'] {
2349
+ width: 42px;
2350
+ height: 28px;
2351
+ flex: 0 0 42px;
2352
+ padding: 2px;
2353
+ cursor: pointer;
1918
2354
  }
1919
2355
 
1920
- .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name {
1921
- margin: 0 0 0 4px !important;
1922
- padding: 0 !important;
2356
+ .eight-direction-background-control code {
2357
+ color: var(--text);
2358
+ font-size: 10px;
2359
+ }
2360
+
2361
+ .gen-dialog-body .composer-row .eight-direction-background-control .eight-direction-background-mode {
2362
+ width: auto;
2363
+ min-width: 72px;
1923
2364
  flex: 0 0 auto;
1924
- border-radius: 0 !important;
1925
- color: var(--muted);
1926
- background: transparent !important;
1927
- font-family: 'DM Sans', sans-serif !important;
1928
- font-size: 12px;
1929
- line-height: 32px;
1930
2365
  }
1931
2366
 
1932
- .interactive-editor-host .ptro-tool-controls .ptro-input,
1933
- .interactive-editor-host .ptro-tool-controls select.ptro-input {
1934
- width: 64px !important;
1935
- height: 32px !important;
1936
- padding: 0 8px !important;
1937
- border: 1px solid var(--line) !important;
1938
- border-radius: 9px;
1939
- color: var(--text) !important;
1940
- background: var(--bg-0) !important;
1941
- box-shadow: none !important;
1942
- font-family: 'DM Sans', sans-serif !important;
1943
- font-size: 13px !important;
2367
+ .game-ui-drop-zone {
2368
+ min-height: 96px;
2369
+ padding: 7px;
2370
+ border: 1px dashed rgba(255, 255, 255, 0.14);
2371
+ background: rgba(10, 12, 16, 0.46);
1944
2372
  }
1945
2373
 
1946
- .interactive-editor-host .ptro-tool-controls .ptro-color-btn {
1947
- position: relative;
1948
- z-index: 2;
1949
- width: 28px !important;
1950
- height: 28px !important;
1951
- flex: 0 0 28px;
1952
- border: 2px solid rgba(255, 255, 255, 0.82) !important;
1953
- border-radius: 50%;
1954
- box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45) !important;
2374
+ .game-ui-option-grid {
2375
+ grid-template-columns: 1fr 1fr;
1955
2376
  }
1956
2377
 
1957
- .interactive-editor-host .ptro-tool-controls .ptro-btn-color-checkers-bar {
1958
- display: none;
2378
+ .game-ui-color-control {
2379
+ display: flex;
2380
+ align-items: center;
2381
+ gap: 7px;
2382
+ min-height: 28px;
1959
2383
  }
1960
2384
 
1961
- .interactive-editor-host .interactive-crop-hint {
1962
- color: var(--muted);
1963
- font-size: 12px;
1964
- white-space: nowrap;
2385
+ .gen-dialog-body .composer-row .game-ui-color-control input[type='color'] {
2386
+ width: 42px;
2387
+ height: 28px;
2388
+ flex: 0 0 42px;
2389
+ padding: 2px;
2390
+ cursor: pointer;
2391
+ }
2392
+
2393
+ .game-ui-color-control code {
2394
+ color: var(--text);
2395
+ font-size: 10px;
2396
+ }
2397
+
2398
+ .gen-dialog-body .composer-row .game-ui-color-control .game-ui-background-mode {
2399
+ width: auto;
2400
+ min-width: 72px;
2401
+ flex: 0 0 auto;
2402
+ }
2403
+
2404
+ .gen-dialog-body .composer-row .game-ui-auto-label {
2405
+ display: flex;
2406
+ flex-direction: row;
2407
+ align-items: center;
2408
+ gap: 6px;
2409
+ padding-top: 16px;
2410
+ }
2411
+
2412
+ .gen-dialog-body .composer-row .game-ui-auto-label input {
2413
+ width: auto;
2414
+ }
2415
+
2416
+ @keyframes ref-drop-pulse {
2417
+ 0%,
2418
+ 100% {
2419
+ outline: 1px dashed rgba(61, 214, 198, 0.35);
2420
+ outline-offset: 0;
2421
+ background: rgba(61, 214, 198, 0.04);
2422
+ box-shadow: 0 0 0 0 rgba(61, 214, 198, 0);
2423
+ }
2424
+ 50% {
2425
+ outline: 1px dashed rgba(61, 214, 198, 0.95);
2426
+ outline-offset: 1px;
2427
+ background: rgba(61, 214, 198, 0.14);
2428
+ box-shadow: 0 0 0 3px rgba(61, 214, 198, 0.18);
2429
+ }
2430
+ }
2431
+
2432
+ .gen-dialog-body .gen-dialog-compact .composer-actions {
2433
+ justify-content: stretch;
2434
+ }
2435
+
2436
+ .gen-dialog-body .gen-dialog-compact .composer-actions button[type='submit'] {
2437
+ width: 100%;
2438
+ }
2439
+
2440
+ .gen-dialog-body .gen-dialog-warning {
2441
+ margin: 0;
2442
+ color: var(--danger);
2443
+ font-size: 11px;
2444
+ line-height: 1.35;
2445
+ }
2446
+
2447
+ .gen-dialog-body .gen-dialog-warning[hidden] {
2448
+ display: none !important;
2449
+ }
2450
+
2451
+ .gen-dialog-body .ref-strip {
2452
+ gap: 4px;
2453
+ margin: 0;
2454
+ }
2455
+
2456
+ .gen-dialog-body .ref-chip {
2457
+ gap: 4px;
2458
+ padding: 2px;
2459
+ border-radius: 8px;
2460
+ }
2461
+
2462
+ .gen-dialog-body .ref-chip img {
2463
+ width: 28px;
2464
+ height: 28px;
2465
+ border-radius: 6px;
2466
+ }
2467
+
2468
+ .gen-dialog-body .ref-chip button {
2469
+ width: 18px;
2470
+ height: 18px;
2471
+ font-size: 12px;
2472
+ }
2473
+
2474
+ .gen-dialog-body .composer-row {
2475
+ display: grid;
2476
+ grid-template-columns: 1fr 1fr;
2477
+ gap: 6px;
2478
+ }
2479
+
2480
+ .gen-dialog-body .composer-row label {
2481
+ display: flex;
2482
+ flex-direction: column;
2483
+ gap: 3px;
2484
+ font-size: 10px;
2485
+ color: var(--muted);
2486
+ letter-spacing: 0.02em;
2487
+ }
2488
+
2489
+ .gen-dialog-body .composer-row select,
2490
+ .gen-dialog-body .composer-row input,
2491
+ .gen-dialog-body .size-input,
2492
+ .gen-dialog-body .chat-composer textarea {
2493
+ width: 100%;
2494
+ border: 1px solid rgba(255, 255, 255, 0.08);
2495
+ border-radius: 7px;
2496
+ background: rgba(10, 12, 16, 0.72);
2497
+ color: var(--text);
2498
+ font-size: 11px;
2499
+ padding: 5px 7px;
2500
+ min-height: 0;
2501
+ line-height: 1.3;
2502
+ }
2503
+
2504
+ .gen-dialog-body .chat-composer textarea {
2505
+ min-height: 44px;
2506
+ resize: vertical;
2507
+ font-size: 12px;
2508
+ padding: 7px 8px;
2509
+ }
2510
+
2511
+ .gen-dialog-body .composer-checks {
2512
+ gap: 10px;
2513
+ padding: 0;
2514
+ font-size: 11px;
2515
+ }
2516
+
2517
+ .gen-dialog-body .composer-checks label {
2518
+ display: inline-flex;
2519
+ align-items: center;
2520
+ gap: 4px;
2521
+ }
2522
+
2523
+ .gen-dialog-body .composer-actions {
2524
+ display: flex;
2525
+ align-items: center;
2526
+ justify-content: flex-end;
2527
+ gap: 6px;
2528
+ margin-top: 2px;
2529
+ }
2530
+
2531
+ .gen-dialog-body .composer-actions .ghost-btn {
2532
+ padding: 4px 8px;
2533
+ font-size: 11px;
2534
+ border-radius: 7px;
2535
+ }
2536
+
2537
+ .gen-dialog-body .composer-actions button[type='submit'] {
2538
+ padding: 5px 12px;
2539
+ font-size: 11px;
2540
+ font-weight: 600;
2541
+ border-radius: 7px;
2542
+ border: none;
2543
+ background: var(--accent);
2544
+ color: #0b1214;
2545
+ cursor: pointer;
2546
+ }
2547
+
2548
+ .gen-dialog-body .composer-actions button[type='submit']:disabled {
2549
+ opacity: 0.55;
2550
+ cursor: not-allowed;
2551
+ }
2552
+
2553
+ .gen-dialog-body .ref-chip-media {
2554
+ padding: 3px 4px;
2555
+ max-width: 100%;
2556
+ }
2557
+
2558
+ .video-frame-slots {
2559
+ display: grid;
2560
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
2561
+ gap: 6px;
2562
+ }
2563
+
2564
+ .video-frame-slot {
2565
+ position: relative;
2566
+ display: grid;
2567
+ place-items: center;
2568
+ min-width: 0;
2569
+ height: 76px;
2570
+ overflow: hidden;
2571
+ border: 1px dashed rgba(255, 255, 255, 0.2);
2572
+ border-radius: 7px;
2573
+ background: rgba(7, 10, 14, 0.48);
2574
+ color: var(--muted);
2575
+ transition: border-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
2576
+ }
2577
+
2578
+ .video-frame-slot strong {
2579
+ position: absolute;
2580
+ top: 5px;
2581
+ left: 6px;
2582
+ z-index: 2;
2583
+ padding: 2px 4px;
2584
+ border-radius: 4px;
2585
+ background: rgba(7, 10, 14, 0.72);
2586
+ color: rgba(238, 245, 247, 0.88);
2587
+ font-size: 9px;
2588
+ font-weight: 600;
2589
+ }
2590
+
2591
+ .video-frame-slot > span {
2592
+ padding-top: 15px;
2593
+ font-size: 10px;
2594
+ }
2595
+
2596
+ .video-frame-slot img {
2597
+ width: 100%;
2598
+ height: 100%;
2599
+ object-fit: cover;
2600
+ }
2601
+
2602
+ .video-frame-slot.is-drop {
2603
+ border-color: rgba(61, 214, 198, 0.78);
2604
+ background: rgba(61, 214, 198, 0.1);
2605
+ box-shadow: inset 0 0 0 1px rgba(61, 214, 198, 0.22);
2606
+ }
2607
+
2608
+ .video-frame-slot-remove {
2609
+ position: absolute;
2610
+ top: 4px;
2611
+ right: 4px;
2612
+ z-index: 3;
2613
+ display: grid;
2614
+ place-items: center;
2615
+ width: 20px;
2616
+ height: 20px;
2617
+ padding: 0;
2618
+ border: 1px solid rgba(255, 255, 255, 0.18);
2619
+ border-radius: 5px;
2620
+ background: rgba(8, 10, 14, 0.76);
2621
+ color: var(--text);
2622
+ cursor: pointer;
2623
+ }
2624
+
2625
+ .video-frame-slot-remove:hover {
2626
+ border-color: rgba(255, 255, 255, 0.34);
2627
+ background: rgba(30, 35, 43, 0.92);
2628
+ }
2629
+
2630
+ .canvas-node.is-animation-dialog {
2631
+ min-width: 400px;
2632
+ container-name: animation-dialog;
2633
+ container-type: inline-size;
2634
+ }
2635
+
2636
+ .animation-pipeline {
2637
+ gap: 8px;
2638
+ padding: 8px;
2639
+ max-height: none;
2640
+ overflow: visible;
2641
+ }
2642
+
2643
+ .animation-preset-tabs {
2644
+ display: flex;
2645
+ flex: 0 0 auto;
2646
+ align-items: flex-end;
2647
+ gap: 4px;
2648
+ padding: 0 4px;
2649
+ border-bottom: 1px solid rgba(255, 255, 255, 0.1);
2650
+ }
2651
+
2652
+ .animation-preset-tab {
2653
+ position: relative;
2654
+ min-width: 58px;
2655
+ margin-bottom: -1px;
2656
+ padding: 7px 12px 6px;
2657
+ border: 1px solid rgba(255, 255, 255, 0.1);
2658
+ border-bottom-color: rgba(255, 255, 255, 0.1);
2659
+ border-radius: 8px 8px 0 0;
2660
+ background: rgba(8, 11, 15, 0.48);
2661
+ color: var(--muted);
2662
+ font: inherit;
2663
+ font-size: 10px;
2664
+ cursor: pointer;
2665
+ }
2666
+
2667
+ .animation-preset-tab:hover:not(:disabled) {
2668
+ border-color: rgba(61, 214, 198, 0.32);
2669
+ color: var(--text);
2670
+ }
2671
+
2672
+ .animation-preset-tab.is-active {
2673
+ z-index: 1;
2674
+ border-color: rgba(61, 214, 198, 0.48);
2675
+ border-bottom-color: #151a21;
2676
+ background: #151a21;
2677
+ color: var(--accent);
2678
+ font-weight: 650;
2679
+ }
2680
+
2681
+ .animation-preset-tab.is-active::after {
2682
+ content: '';
2683
+ position: absolute;
2684
+ right: 8px;
2685
+ bottom: -1px;
2686
+ left: 8px;
2687
+ height: 2px;
2688
+ border-radius: 2px 2px 0 0;
2689
+ background: var(--accent);
2690
+ }
2691
+
2692
+ .animation-preset-tab:disabled {
2693
+ cursor: not-allowed;
2694
+ opacity: 0.38;
2695
+ }
2696
+
2697
+ .animation-module-grid {
2698
+ display: grid;
2699
+ flex: 1 1 auto;
2700
+ min-height: 0;
2701
+ grid-template-columns: minmax(0, 1.12fr) minmax(0, 0.88fr);
2702
+ gap: 8px;
2703
+ align-items: start;
2704
+ }
2705
+
2706
+ .animation-module-column {
2707
+ display: flex;
2708
+ min-width: 0;
2709
+ max-height: 100%;
2710
+ flex-direction: column;
2711
+ gap: 8px;
2712
+ overflow: auto;
2713
+ }
2714
+
2715
+ .canvas-node.is-animation-dialog.is-manual-size > .animation-pipeline {
2716
+ overflow: hidden;
2717
+ }
2718
+
2719
+ @container animation-dialog (max-width: 560px) {
2720
+ .animation-preset-tabs {
2721
+ overflow-x: auto;
2722
+ }
2723
+
2724
+ .animation-preset-tab {
2725
+ flex: 0 0 auto;
2726
+ }
2727
+
2728
+ .animation-module-grid {
2729
+ display: flex;
2730
+ overflow: auto;
2731
+ flex-direction: column;
2732
+ }
2733
+
2734
+ .animation-module-column {
2735
+ flex: 0 0 auto;
2736
+ max-height: none;
2737
+ overflow: visible;
2738
+ }
2739
+ }
2740
+
2741
+ .animation-module {
2742
+ flex: 0 0 auto;
2743
+ overflow: hidden;
2744
+ border: 1px solid rgba(255, 255, 255, 0.09);
2745
+ border-radius: 9px;
2746
+ background: rgba(8, 11, 15, 0.48);
2747
+ }
2748
+
2749
+ .animation-module > summary {
2750
+ display: flex;
2751
+ align-items: center;
2752
+ min-height: 34px;
2753
+ gap: 8px;
2754
+ padding: 7px 9px;
2755
+ cursor: pointer;
2756
+ user-select: none;
2757
+ list-style: none;
2758
+ }
2759
+
2760
+ .animation-module > summary::-webkit-details-marker {
2761
+ display: none;
2762
+ }
2763
+
2764
+ .animation-module > summary::before {
2765
+ content: '';
2766
+ width: 6px;
2767
+ height: 6px;
2768
+ flex: 0 0 auto;
2769
+ border-right: 1.5px solid var(--muted);
2770
+ border-bottom: 1.5px solid var(--muted);
2771
+ transform: rotate(-45deg);
2772
+ transition: transform 0.15s ease;
2773
+ }
2774
+
2775
+ .animation-module[open] > summary::before {
2776
+ transform: rotate(45deg) translate(-1px, -1px);
2777
+ }
2778
+
2779
+ .animation-module > summary > strong {
2780
+ flex: 1 1 auto;
2781
+ font-size: 11px;
2782
+ font-weight: 650;
2783
+ color: var(--text);
2784
+ }
2785
+
2786
+ .animation-module.is-disabled > summary > strong {
2787
+ color: var(--muted);
2788
+ }
2789
+
2790
+ .animation-module-body {
2791
+ display: flex;
2792
+ flex-direction: column;
2793
+ gap: 8px;
2794
+ padding: 0 9px 9px;
2795
+ }
2796
+
2797
+ .animation-module-body[hidden] {
2798
+ display: none;
2799
+ }
2800
+
2801
+ .animation-module-toggle {
2802
+ position: relative;
2803
+ display: block;
2804
+ width: 30px;
2805
+ height: 17px;
2806
+ flex: 0 0 auto;
2807
+ cursor: pointer;
2808
+ }
2809
+
2810
+ .animation-module-toggle input {
2811
+ position: absolute;
2812
+ opacity: 0;
2813
+ pointer-events: none;
2814
+ }
2815
+
2816
+ .animation-module-toggle span {
2817
+ position: absolute;
2818
+ inset: 0;
2819
+ border-radius: 999px;
2820
+ background: rgba(255, 255, 255, 0.13);
2821
+ transition: background 0.15s ease;
2822
+ }
2823
+
2824
+ .animation-module-toggle span::after {
2825
+ content: '';
2826
+ position: absolute;
2827
+ top: 2px;
2828
+ left: 2px;
2829
+ width: 13px;
2830
+ height: 13px;
2831
+ border-radius: 50%;
2832
+ background: #cbd3d7;
2833
+ transition: transform 0.15s ease, background 0.15s ease;
2834
+ }
2835
+
2836
+ .animation-module-toggle input:checked + span {
2837
+ background: rgba(61, 214, 198, 0.48);
2838
+ }
2839
+
2840
+ .animation-module-toggle input:checked + span::after {
2841
+ transform: translateX(13px);
2842
+ background: var(--accent);
2843
+ }
2844
+
2845
+ .animation-module-required {
2846
+ padding: 2px 6px;
2847
+ border-radius: 999px;
2848
+ background: rgba(61, 214, 198, 0.1);
2849
+ color: var(--accent);
2850
+ font-size: 9px;
2851
+ }
2852
+
2853
+ .animation-field {
2854
+ display: flex;
2855
+ flex-direction: column;
2856
+ gap: 5px;
2857
+ color: var(--muted);
2858
+ font-size: 10px;
2859
+ }
2860
+
2861
+ .animation-field textarea,
2862
+ .animation-field input[type='text'],
2863
+ .animation-field input[type='number'],
2864
+ .animation-field select {
2865
+ width: 100%;
2866
+ min-width: 0;
2867
+ padding: 6px 7px;
2868
+ border: 1px solid rgba(255, 255, 255, 0.1);
2869
+ border-radius: 7px;
2870
+ background: rgba(10, 12, 16, 0.72);
2871
+ color: var(--text);
2872
+ font: inherit;
2873
+ }
2874
+
2875
+ .animation-field textarea {
2876
+ min-height: 58px;
2877
+ resize: vertical;
2878
+ line-height: 1.4;
2879
+ }
2880
+
2881
+ .animation-field input[type='color'] {
2882
+ width: 100%;
2883
+ height: 31px;
2884
+ padding: 3px;
2885
+ border: 1px solid rgba(255, 255, 255, 0.1);
2886
+ border-radius: 7px;
2887
+ background: rgba(10, 12, 16, 0.72);
2888
+ }
2889
+
2890
+ .animation-check {
2891
+ display: flex;
2892
+ align-items: center;
2893
+ gap: 7px;
2894
+ color: var(--text);
2895
+ font-size: 10px;
2896
+ line-height: 1.35;
2897
+ }
2898
+
2899
+ .animation-module-hint {
2900
+ margin: 0;
2901
+ color: var(--muted);
2902
+ font-size: 9px;
2903
+ line-height: 1.4;
2904
+ }
2905
+
2906
+ .animation-module.is-unavailable {
2907
+ opacity: 0.62;
2908
+ }
2909
+
2910
+ .animation-actions {
2911
+ position: sticky;
2912
+ bottom: 0;
2913
+ display: flex;
2914
+ justify-content: flex-end;
2915
+ padding-top: 2px;
2916
+ background: linear-gradient(to bottom, transparent, rgba(13, 17, 22, 0.96) 35%);
2917
+ }
2918
+
2919
+ .animation-actions button {
2920
+ min-width: 104px;
2921
+ padding: 7px 14px;
2922
+ border: 0;
2923
+ border-radius: 7px;
2924
+ background: var(--accent);
2925
+ color: #07110f;
2926
+ font-size: 11px;
2927
+ font-weight: 700;
2928
+ cursor: pointer;
2929
+ }
2930
+
2931
+ .animation-actions button:disabled {
2932
+ cursor: not-allowed;
2933
+ opacity: 0.5;
2934
+ }
2935
+
2936
+ .animation-image-slot {
2937
+ height: 88px;
2938
+ }
2939
+
2940
+ .animation-reference-zone {
2941
+ min-height: 72px;
2942
+ }
2943
+
2944
+ .animation-reference-zone.is-empty {
2945
+ display: flex;
2946
+ align-items: center;
2947
+ justify-content: center;
2948
+ }
2949
+
2950
+ .animation-reference-header {
2951
+ display: flex;
2952
+ align-items: center;
2953
+ justify-content: center;
2954
+ gap: 8px;
2955
+ color: var(--muted);
2956
+ font-size: 9px;
2957
+ text-align: center;
2958
+ }
2959
+
2960
+ .animation-size-control {
2961
+ display: flex;
2962
+ flex-direction: column;
2963
+ gap: 6px;
2964
+ width: 100%;
2965
+ min-width: 0;
2966
+ }
2967
+
2968
+ .animation-size-control > select,
2969
+ .animation-size-control > input[type='text'] {
2970
+ width: 100%;
2971
+ min-width: 0;
2972
+ }
2973
+
2974
+ .animation-size-control > input[hidden] {
2975
+ display: none;
2976
+ }
2977
+
2978
+ .animation-reference-header strong {
2979
+ color: var(--text);
2980
+ font-size: 10px;
2981
+ }
2982
+
2983
+ .insp-section .animation-module {
2984
+ width: 100%;
2985
+ }
2986
+
2987
+ .insp-section .animation-module-body .insp-field {
2988
+ margin: 0;
2989
+ }
2990
+
2991
+ .gen-dialog-body .ref-kind-badge {
2992
+ width: 28px;
2993
+ height: 28px;
2994
+ font-size: 9px;
2995
+ border-radius: 6px;
2996
+ }
2997
+
2998
+ .gen-dialog-body .ref-chip-meta span {
2999
+ font-size: 10px;
3000
+ }
3001
+
3002
+ .canvas-node.is-gen-dialog .ref-handle,
3003
+ .canvas-node.is-gen-dialog .canvas-node-caption {
3004
+ display: none;
3005
+ }
3006
+
3007
+ .canvas-node.is-video {
3008
+ padding: 0;
3009
+ overflow: hidden;
3010
+ }
3011
+
3012
+ .canvas-node.is-video video[data-role='frame'] {
3013
+ display: block;
3014
+ width: 100%;
3015
+ height: auto;
3016
+ object-fit: contain;
3017
+ background: #0b0e13;
3018
+ pointer-events: none;
3019
+ border-radius: 10px 10px 0 0;
3020
+ }
3021
+
3022
+ .canvas-node.is-video .canvas-node-caption {
3023
+ position: static;
3024
+ }
3025
+
3026
+ .composer-checks {
3027
+ display: flex;
3028
+ gap: 14px;
3029
+ flex-wrap: wrap;
3030
+ padding: 0 2px;
3031
+ color: var(--muted);
3032
+ font-size: 13px;
3033
+ }
3034
+
3035
+ .ref-chip-media {
3036
+ align-items: center;
3037
+ gap: 8px;
3038
+ min-width: 0;
3039
+ max-width: 100%;
3040
+ }
3041
+
3042
+ .ref-chip-media img {
3043
+ width: 40px;
3044
+ height: 40px;
3045
+ }
3046
+
3047
+ .ref-kind-badge {
3048
+ width: 40px;
3049
+ height: 40px;
3050
+ border-radius: 8px;
3051
+ display: grid;
3052
+ place-items: center;
3053
+ background: rgba(61, 214, 198, 0.12);
3054
+ border: 1px solid var(--line);
3055
+ font-size: 11px;
3056
+ color: var(--accent);
3057
+ }
3058
+
3059
+ .ref-chip-meta {
3060
+ display: flex;
3061
+ flex-direction: column;
3062
+ gap: 4px;
3063
+ min-width: 0;
3064
+ flex: 1;
3065
+ }
3066
+
3067
+ .ref-chip-meta span {
3068
+ font-size: 11px;
3069
+ overflow: hidden;
3070
+ text-overflow: ellipsis;
3071
+ white-space: nowrap;
3072
+ }
3073
+
3074
+ .canvas-node.is-pending {
3075
+ padding: 0;
3076
+ overflow: hidden;
3077
+ border: 1px solid rgba(61, 214, 198, 0.35);
3078
+ background: #10151c;
3079
+ box-shadow:
3080
+ 0 0 0 1px rgba(61, 214, 198, 0.12),
3081
+ 0 18px 40px rgba(0, 0, 0, 0.4);
3082
+ }
3083
+
3084
+ .canvas-node.is-pending-error {
3085
+ border-color: rgba(248, 113, 113, 0.45);
3086
+ box-shadow:
3087
+ 0 0 0 1px rgba(248, 113, 113, 0.14),
3088
+ 0 18px 40px rgba(0, 0, 0, 0.4);
3089
+ }
3090
+
3091
+ .pending-stage {
3092
+ position: relative;
3093
+ width: 100%;
3094
+ height: 100%;
3095
+ min-height: 120px;
3096
+ display: grid;
3097
+ place-items: center;
3098
+ overflow: hidden;
3099
+ isolation: isolate;
3100
+ }
3101
+
3102
+ .pending-aura {
3103
+ position: absolute;
3104
+ inset: -40%;
3105
+ background:
3106
+ conic-gradient(
3107
+ from 0deg,
3108
+ rgba(61, 214, 198, 0.0),
3109
+ rgba(61, 214, 198, 0.55),
3110
+ rgba(240, 180, 41, 0.35),
3111
+ rgba(96, 165, 250, 0.45),
3112
+ rgba(61, 214, 198, 0.0)
3113
+ );
3114
+ animation: pending-spin 2.8s linear infinite;
3115
+ filter: blur(18px);
3116
+ opacity: 0.85;
3117
+ }
3118
+
3119
+ .canvas-node.is-pending-error .pending-aura {
3120
+ background:
3121
+ conic-gradient(
3122
+ from 0deg,
3123
+ rgba(248, 113, 113, 0.0),
3124
+ rgba(248, 113, 113, 0.55),
3125
+ rgba(251, 146, 60, 0.35),
3126
+ rgba(248, 113, 113, 0.45),
3127
+ rgba(248, 113, 113, 0.0)
3128
+ );
3129
+ }
3130
+
3131
+ @keyframes pending-spin {
3132
+ to {
3133
+ transform: rotate(360deg);
3134
+ }
3135
+ }
3136
+
3137
+ .chat-header {
3138
+ padding: 16px 16px 10px;
3139
+ border-bottom: 1px solid var(--line);
3140
+ }
3141
+
3142
+ .chat-header h1 {
3143
+ margin: 0;
3144
+ font-size: 20px;
3145
+ letter-spacing: 0.02em;
3146
+ }
3147
+
3148
+ .chat-header p {
3149
+ margin: 6px 0 0;
3150
+ color: var(--muted);
3151
+ font-size: 13px;
3152
+ }
3153
+
3154
+ .chat-messages {
3155
+ flex: 1;
3156
+ overflow: auto;
3157
+ padding: 14px;
3158
+ display: flex;
3159
+ flex-direction: column;
3160
+ gap: 12px;
3161
+ }
3162
+
3163
+ .chat-empty,
3164
+ .chat-busy {
3165
+ color: var(--muted);
3166
+ font-size: 13px;
3167
+ }
3168
+
3169
+ .chat-bubble {
3170
+ border: 1px solid var(--line);
3171
+ border-radius: 12px;
3172
+ padding: 10px;
3173
+ background: var(--bg-1);
3174
+ }
3175
+
3176
+ .chat-user {
3177
+ border-color: rgba(61, 214, 198, 0.25);
3178
+ }
3179
+
3180
+ .bubble-refs {
3181
+ display: flex;
3182
+ gap: 6px;
3183
+ flex-wrap: wrap;
3184
+ margin-bottom: 8px;
3185
+ }
3186
+
3187
+ .bubble-refs img,
3188
+ .ref-chip img {
3189
+ width: 44px;
3190
+ height: 44px;
3191
+ object-fit: cover;
3192
+ border-radius: 8px;
3193
+ border: 1px solid var(--line);
3194
+ }
3195
+
3196
+ .bubble-text {
3197
+ white-space: pre-wrap;
3198
+ line-height: 1.45;
3199
+ font-size: 14px;
3200
+ }
3201
+
3202
+ .bubble-meta {
3203
+ margin-top: 6px;
3204
+ color: var(--muted);
3205
+ font-size: 11px;
3206
+ font-family: 'JetBrains Mono', monospace;
3207
+ }
3208
+
3209
+ .bubble-result {
3210
+ width: 100%;
3211
+ border-radius: 8px;
3212
+ display: block;
3213
+ }
3214
+
3215
+ .bubble-error {
3216
+ color: var(--danger);
3217
+ font-size: 13px;
3218
+ white-space: pre-wrap;
3219
+ }
3220
+
3221
+ .chat-composer {
3222
+ border-top: 1px solid var(--line);
3223
+ padding: 12px;
3224
+ display: flex;
3225
+ flex-direction: column;
3226
+ gap: 8px;
3227
+ background: rgba(10, 12, 16, 0.55);
3228
+ }
3229
+
3230
+ .chat-composer.is-drop {
3231
+ outline: 2px dashed var(--accent);
3232
+ outline-offset: -6px;
3233
+ }
3234
+
3235
+ .ref-strip {
3236
+ display: flex;
3237
+ gap: 8px;
3238
+ flex-wrap: wrap;
3239
+ }
3240
+
3241
+ .ref-chip {
3242
+ position: relative;
3243
+ }
3244
+
3245
+ .ref-chip button {
3246
+ position: absolute;
3247
+ top: -6px;
3248
+ right: -6px;
3249
+ width: 18px;
3250
+ height: 18px;
3251
+ border-radius: 50%;
3252
+ border: none;
3253
+ background: var(--bg-2);
3254
+ color: var(--text);
3255
+ cursor: pointer;
3256
+ line-height: 1;
3257
+ }
3258
+
3259
+ .composer-row {
3260
+ display: grid;
3261
+ grid-template-columns: 1fr 1fr;
3262
+ gap: 8px;
3263
+ }
3264
+
3265
+ .composer-row label {
3266
+ display: flex;
3267
+ flex-direction: column;
3268
+ gap: 4px;
3269
+ font-size: 12px;
3270
+ color: var(--muted);
3271
+ }
3272
+
3273
+ .composer-row select,
3274
+ .size-input,
3275
+ .chat-composer textarea {
3276
+ width: 100%;
3277
+ border: 1px solid var(--line);
3278
+ background: var(--bg-1);
3279
+ color: var(--text);
3280
+ border-radius: 8px;
3281
+ padding: 8px 10px;
3282
+ }
3283
+
3284
+ .chat-composer textarea {
3285
+ resize: vertical;
3286
+ min-height: 96px;
3287
+ }
3288
+
3289
+ .composer-actions {
3290
+ display: flex;
3291
+ gap: 8px;
3292
+ align-items: center;
3293
+ }
3294
+
3295
+ .composer-actions .ghost-btn {
3296
+ flex: 0 0 auto;
3297
+ white-space: nowrap;
3298
+ }
3299
+
3300
+ .composer-actions button[type='submit'] {
3301
+ flex: 1;
3302
+ border: none;
3303
+ border-radius: 10px;
3304
+ padding: 10px 12px;
3305
+ background: linear-gradient(135deg, #2bb8aa, #3dd6c6 55%, #7be7b0);
3306
+ color: #06221f;
3307
+ font-weight: 700;
3308
+ cursor: pointer;
3309
+ }
3310
+
3311
+ .composer-actions button[type='submit']:disabled {
3312
+ opacity: 0.55;
3313
+ cursor: not-allowed;
3314
+ }
3315
+
3316
+ .ctx-menu {
3317
+ position: fixed;
3318
+ z-index: 50;
3319
+ min-width: 160px;
3320
+ padding: 6px;
3321
+ border-radius: 10px;
3322
+ border: 1px solid var(--line);
3323
+ background: rgba(18, 21, 26, 0.96);
3324
+ box-shadow: var(--shadow);
3325
+ display: flex;
3326
+ flex-direction: column;
3327
+ gap: 2px;
3328
+ }
3329
+
3330
+ .ctx-menu[hidden] {
3331
+ display: none !important;
3332
+ }
3333
+
3334
+ .ctx-menu button {
3335
+ border: none;
3336
+ background: transparent;
3337
+ color: var(--text);
3338
+ text-align: left;
3339
+ padding: 8px 10px;
3340
+ border-radius: 8px;
3341
+ cursor: pointer;
3342
+ }
3343
+
3344
+ .ctx-menu button:hover,
3345
+ .ctx-menu button:focus-visible {
3346
+ background: rgba(61, 214, 198, 0.12);
3347
+ outline: none;
3348
+ }
3349
+
3350
+ .ctx-menu button[hidden] {
3351
+ display: none !important;
3352
+ }
3353
+
3354
+ .ctx-menu button.ctx-danger {
3355
+ color: var(--danger);
3356
+ }
3357
+
3358
+ .ctx-menu button.ctx-danger:hover {
3359
+ background: rgba(255, 107, 122, 0.12);
3360
+ }
3361
+
3362
+ .ctx-submenu {
3363
+ position: relative;
3364
+ }
3365
+
3366
+ .ctx-submenu[hidden] {
3367
+ display: none !important;
3368
+ }
3369
+
3370
+ .ctx-submenu-trigger {
3371
+ width: 100%;
3372
+ display: flex;
3373
+ align-items: center;
3374
+ justify-content: space-between;
3375
+ gap: 16px;
3376
+ }
3377
+
3378
+ .ctx-submenu-arrow {
3379
+ color: var(--muted);
3380
+ font-size: 17px;
3381
+ line-height: 1;
3382
+ }
3383
+
3384
+ .ctx-submenu-panel {
3385
+ position: absolute;
3386
+ z-index: 1;
3387
+ left: calc(100% - 1px);
3388
+ top: -6px;
3389
+ min-width: 160px;
3390
+ padding: 6px;
3391
+ border: 1px solid var(--line);
3392
+ border-radius: 10px;
3393
+ background: rgba(18, 21, 26, 0.98);
3394
+ box-shadow: var(--shadow);
3395
+ display: none;
3396
+ flex-direction: column;
3397
+ gap: 2px;
3398
+ }
3399
+
3400
+ .ctx-menu.is-submenu-left .ctx-submenu-panel {
3401
+ right: calc(100% - 1px);
3402
+ left: auto;
3403
+ }
3404
+
3405
+ .ctx-submenu:hover > .ctx-submenu-panel,
3406
+ .ctx-submenu:focus-within > .ctx-submenu-panel,
3407
+ .ctx-submenu.is-open > .ctx-submenu-panel {
3408
+ display: flex;
3409
+ }
3410
+
3411
+ .ctx-submenu-panel button {
3412
+ width: 100%;
3413
+ white-space: nowrap;
3414
+ }
3415
+
3416
+ .modal-backdrop {
3417
+ position: fixed;
3418
+ inset: 0;
3419
+ z-index: 60;
3420
+ display: flex;
3421
+ align-items: center;
3422
+ justify-content: center;
3423
+ padding: 24px;
3424
+ background: rgba(6, 8, 12, 0.62);
3425
+ backdrop-filter: blur(4px);
3426
+ }
3427
+
3428
+ .modal-backdrop-dark {
3429
+ background: rgba(0, 0, 0, 0.82);
3430
+ backdrop-filter: none;
3431
+ }
3432
+
3433
+ .modal-backdrop[hidden] {
3434
+ display: none !important;
3435
+ }
3436
+
3437
+ .modal-backdrop.canvas-tool-dialog {
3438
+ position: absolute;
3439
+ inset: auto;
3440
+ z-index: 40;
3441
+ display: block;
3442
+ padding: 0;
3443
+ overflow: visible;
3444
+ border: 0;
3445
+ border-radius: 14px;
3446
+ background: transparent;
3447
+ box-shadow: none;
3448
+ backdrop-filter: none;
3449
+ user-select: auto;
3450
+ }
3451
+
3452
+ .modal-backdrop.canvas-tool-dialog > .modal-dialog {
3453
+ width: 100%;
3454
+ max-width: none;
3455
+ max-height: 720px;
3456
+ border-color: rgba(61, 214, 198, 0.22);
3457
+ box-shadow: 0 14px 36px rgba(0, 0, 0, 0.42);
3458
+ }
3459
+
3460
+ .modal-backdrop.canvas-tool-dialog > .modal-dialog > .seq-panel-head {
3461
+ margin: -16px -16px 0;
3462
+ padding: 10px 12px;
3463
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
3464
+ cursor: grab;
3465
+ user-select: none;
3466
+ }
3467
+
3468
+ .modal-backdrop.canvas-tool-dialog[data-canvas-kind='interactive-edit'] > .modal-dialog {
3469
+ height: 720px;
3470
+ max-height: 720px;
3471
+ }
3472
+
3473
+ .modal-backdrop.canvas-tool-dialog[data-canvas-kind='interactive-edit']
3474
+ > .modal-dialog
3475
+ > .seq-panel-head {
3476
+ margin: -12px -12px 0;
3477
+ }
3478
+
3479
+ .modal-backdrop.canvas-tool-dialog.is-manual-size > .modal-dialog {
3480
+ width: 100%;
3481
+ height: 100%;
3482
+ max-height: none;
3483
+ }
3484
+
3485
+ .modal-backdrop.canvas-tool-dialog.is-manual-size[data-canvas-kind='interactive-edit']
3486
+ > .modal-dialog {
3487
+ height: 100%;
3488
+ max-height: none;
3489
+ }
3490
+
3491
+ .modal-backdrop.canvas-tool-dialog.is-manual-size[data-canvas-kind='layer-decomposition']
3492
+ > .modal-dialog
3493
+ > .layer-decomposition-preview {
3494
+ flex: 1 1 auto;
3495
+ min-height: 100px;
3496
+ max-height: none;
3497
+ }
3498
+
3499
+ .modal-backdrop.canvas-tool-dialog.is-manual-size[data-canvas-kind='layer-decomposition']
3500
+ .layer-decomposition-preview img {
3501
+ width: 100%;
3502
+ height: 100%;
3503
+ max-height: none;
3504
+ }
3505
+
3506
+ .modal-dialog {
3507
+ width: min(440px, 100%);
3508
+ max-height: min(80vh, 640px);
3509
+ overflow: auto;
3510
+ padding: 16px;
3511
+ border-radius: 14px;
3512
+ border: 1px solid var(--line);
3513
+ background: rgba(18, 21, 26, 0.98);
3514
+ box-shadow: var(--shadow);
3515
+ display: flex;
3516
+ flex-direction: column;
3517
+ gap: 12px;
3518
+ }
3519
+
3520
+ .modal-dialog-wide {
3521
+ width: min(640px, 100%);
3522
+ }
3523
+
3524
+ .modal-dialog-layer-decomposition {
3525
+ width: min(760px, 100%);
3526
+ max-height: min(92vh, 880px);
3527
+ }
3528
+
3529
+ .modal-dialog-image-canvas-size {
3530
+ width: min(560px, 100%);
3531
+ }
3532
+
3533
+ .image-canvas-size-stage {
3534
+ position: relative;
3535
+ width: 100%;
3536
+ height: 340px;
3537
+ overflow: hidden;
3538
+ border: 1px solid var(--line);
3539
+ border-radius: 10px;
3540
+ background-color: #0d1117;
3541
+ background-image:
3542
+ linear-gradient(45deg, rgba(255, 255, 255, 0.055) 25%, transparent 25%),
3543
+ linear-gradient(-45deg, rgba(255, 255, 255, 0.055) 25%, transparent 25%),
3544
+ linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.055) 75%),
3545
+ linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.055) 75%);
3546
+ background-position: 0 0, 0 8px, 8px -8px, -8px 0;
3547
+ background-size: 16px 16px;
3548
+ touch-action: none;
3549
+ }
3550
+
3551
+ .image-canvas-size-stage canvas {
3552
+ display: block;
3553
+ width: 100%;
3554
+ height: 100%;
3555
+ }
3556
+
3557
+ .image-canvas-size-frame {
3558
+ position: absolute;
3559
+ border: 2px solid var(--accent);
3560
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.72), 0 0 14px rgba(61, 214, 198, 0.2);
3561
+ pointer-events: none;
3562
+ }
3563
+
3564
+ .image-canvas-size-edge {
3565
+ position: absolute;
3566
+ padding: 0;
3567
+ border: 0;
3568
+ border-radius: 0;
3569
+ background: transparent;
3570
+ pointer-events: auto;
3571
+ }
3572
+
3573
+ .image-canvas-size-edge::after {
3574
+ position: absolute;
3575
+ content: '';
3576
+ border-radius: 999px;
3577
+ background: var(--accent);
3578
+ }
3579
+
3580
+ .image-canvas-size-edge.is-top,
3581
+ .image-canvas-size-edge.is-bottom {
3582
+ left: -8px;
3583
+ width: calc(100% + 16px);
3584
+ height: 16px;
3585
+ cursor: ns-resize;
3586
+ }
3587
+
3588
+ .image-canvas-size-edge.is-top { top: -9px; }
3589
+ .image-canvas-size-edge.is-bottom { bottom: -9px; }
3590
+
3591
+ .image-canvas-size-edge.is-top::after,
3592
+ .image-canvas-size-edge.is-bottom::after {
3593
+ top: 7px;
3594
+ left: 50%;
3595
+ width: 44px;
3596
+ height: 3px;
3597
+ transform: translateX(-50%);
3598
+ }
3599
+
3600
+ .image-canvas-size-edge.is-left,
3601
+ .image-canvas-size-edge.is-right {
3602
+ top: -8px;
3603
+ width: 16px;
3604
+ height: calc(100% + 16px);
3605
+ cursor: ew-resize;
3606
+ }
3607
+
3608
+ .image-canvas-size-edge.is-left { left: -9px; }
3609
+ .image-canvas-size-edge.is-right { right: -9px; }
3610
+
3611
+ .image-canvas-size-edge.is-left::after,
3612
+ .image-canvas-size-edge.is-right::after {
3613
+ top: 50%;
3614
+ left: 7px;
3615
+ width: 3px;
3616
+ height: 44px;
3617
+ transform: translateY(-50%);
3618
+ }
3619
+
3620
+ .image-canvas-size-fields {
3621
+ display: grid;
3622
+ grid-template-columns: repeat(2, minmax(0, 1fr));
3623
+ gap: 10px;
3624
+ }
3625
+
3626
+ .image-canvas-size-fields .seq-field {
3627
+ grid-template-columns: auto minmax(80px, 1fr) auto;
3628
+ }
3629
+
3630
+ .modal-dialog-seam-elimination {
3631
+ width: min(520px, 100%);
3632
+ }
3633
+
3634
+ .seam-elimination-preview {
3635
+ display: grid;
3636
+ min-height: 180px;
3637
+ place-items: center;
3638
+ overflow: hidden;
3639
+ border: 1px solid var(--line);
3640
+ border-radius: 10px;
3641
+ background: #0d1117;
3642
+ }
3643
+
3644
+ .seam-elimination-preview img {
3645
+ display: block;
3646
+ width: 100%;
3647
+ max-height: 300px;
3648
+ object-fit: contain;
3649
+ }
3650
+
3651
+ .seam-elimination-size-row {
3652
+ display: flex;
3653
+ align-items: center;
3654
+ justify-content: space-between;
3655
+ gap: 12px;
3656
+ color: var(--muted);
3657
+ font-size: 12px;
3658
+ }
3659
+
3660
+ .seam-elimination-size-row output {
3661
+ color: var(--text);
3662
+ font-family: 'JetBrains Mono', monospace;
3663
+ }
3664
+
3665
+ .modal-dialog-interactive-edit {
3666
+ width: min(1480px, calc(100vw - 32px));
3667
+ height: min(94vh, 980px);
3668
+ max-height: none;
3669
+ overflow: hidden;
3670
+ padding: 12px;
3671
+ }
3672
+
3673
+ .interactive-editor-stage {
3674
+ position: relative;
3675
+ flex: 1 1 auto;
3676
+ min-height: 440px;
3677
+ min-width: 0;
3678
+ }
3679
+
3680
+ .interactive-editor-host {
3681
+ position: absolute;
3682
+ inset: 0;
3683
+ overflow: hidden;
3684
+ border: 1px solid var(--line);
3685
+ border-radius: 14px;
3686
+ background:
3687
+ radial-gradient(circle at 50% 15%, rgba(61, 214, 198, 0.06), transparent 38%),
3688
+ var(--bg-0);
3689
+ }
3690
+
3691
+ .interactive-editor-host .ptro-wrapper {
3692
+ bottom: 0 !important;
3693
+ color: var(--text);
3694
+ background:
3695
+ radial-gradient(circle at 50% 12%, rgba(61, 214, 198, 0.06), transparent 40%),
3696
+ var(--bg-0) !important;
3697
+ font-family: 'DM Sans', sans-serif !important;
3698
+ }
3699
+
3700
+ .interactive-editor-host .ptro-wrapper .ptro-substrate {
3701
+ opacity: 1 !important;
3702
+ background: var(--bg-1) !important;
3703
+ }
3704
+
3705
+ .interactive-editor-host .ptro-scroller {
3706
+ padding: 20px 20px 20px 72px;
3707
+ }
3708
+
3709
+ .interactive-editor-host.is-panning .ptro-scroller,
3710
+ .interactive-editor-host.is-panning .ptro-crp-el {
3711
+ cursor: grabbing !important;
3712
+ }
3713
+
3714
+ .interactive-editor-host .ptro-bar {
3715
+ top: 50% !important;
3716
+ right: auto !important;
3717
+ bottom: auto !important;
3718
+ left: 14px !important;
3719
+ width: auto !important;
3720
+ height: auto !important;
3721
+ display: flex;
3722
+ justify-content: flex-start;
3723
+ transform: translateY(-50%);
3724
+ pointer-events: none;
3725
+ background: transparent !important;
3726
+ color: var(--text) !important;
3727
+ font-family: 'DM Sans', sans-serif !important;
3728
+ z-index: 30;
3729
+ }
3730
+
3731
+ .interactive-editor-host .ptro-bar > div {
3732
+ position: relative;
3733
+ width: max-content;
3734
+ max-width: none;
3735
+ height: auto !important;
3736
+ min-width: 46px;
3737
+ min-height: 0;
3738
+ margin: 0 auto;
3739
+ padding: 6px;
3740
+ display: flex;
3741
+ flex-direction: column;
3742
+ align-items: center;
3743
+ justify-content: center;
3744
+ gap: 4px;
3745
+ overflow: visible !important;
3746
+ pointer-events: auto;
3747
+ border: 1px solid var(--line);
3748
+ border-radius: 15px;
3749
+ background: rgba(26, 31, 39, 0.92);
3750
+ box-shadow: 0 14px 34px rgba(0, 0, 0, 0.42);
3751
+ backdrop-filter: blur(18px);
3752
+ }
3753
+
3754
+ .interactive-editor-host .ptro-bar .ptro-icon-btn {
3755
+ width: 34px !important;
3756
+ height: 34px !important;
3757
+ margin: 0 !important;
3758
+ padding: 0;
3759
+ flex: 0 0 34px;
3760
+ border: 1px solid transparent !important;
3761
+ border-radius: 50%;
3762
+ color: var(--muted) !important;
3763
+ background: transparent !important;
3764
+ box-shadow: none !important;
3765
+ transition:
3766
+ color 120ms ease,
3767
+ border-color 120ms ease,
3768
+ background 120ms ease,
3769
+ transform 120ms ease;
3770
+ }
3771
+
3772
+ .interactive-editor-host .ptro-bar .ptro-icon-btn:hover:not(:disabled) {
3773
+ color: var(--text) !important;
3774
+ border-color: var(--line) !important;
3775
+ background: var(--bg-2) !important;
3776
+ transform: translateY(-1px);
3777
+ }
3778
+
3779
+ .interactive-editor-host .ptro-bar .ptro-icon-btn.ptro-color-active-control {
3780
+ color: #071311 !important;
3781
+ border-color: rgba(61, 214, 198, 0.72) !important;
3782
+ background: var(--accent) !important;
3783
+ box-shadow: 0 6px 18px rgba(61, 214, 198, 0.2) !important;
3784
+ }
3785
+
3786
+ .interactive-editor-host .ptro-bar .ptro-icon-btn:disabled {
3787
+ opacity: 0.3;
3788
+ cursor: not-allowed;
3789
+ }
3790
+
3791
+ .interactive-editor-host .ptro-bar .ptro-icon-btn svg {
3792
+ width: 18px;
3793
+ height: 18px;
3794
+ fill: none;
3795
+ stroke: currentColor;
3796
+ stroke-width: 1.8;
3797
+ stroke-linecap: round;
3798
+ stroke-linejoin: round;
3799
+ pointer-events: none;
3800
+ }
3801
+
3802
+ .interactive-editor-host .ptro-tool-controls {
3803
+ position: absolute;
3804
+ top: 0;
3805
+ bottom: auto;
3806
+ left: calc(100% + 10px);
3807
+ width: max-content;
3808
+ min-height: 42px;
3809
+ max-width: none;
3810
+ padding: 5px 8px;
3811
+ display: flex;
3812
+ align-items: center;
3813
+ justify-content: center;
3814
+ gap: 7px;
3815
+ flex-wrap: nowrap;
3816
+ overflow: visible;
3817
+ transform: translateY(-50%);
3818
+ border: 1px solid var(--line);
3819
+ border-radius: 12px;
3820
+ background: rgba(26, 31, 39, 0.94);
3821
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.36);
3822
+ backdrop-filter: blur(16px);
3823
+ }
3824
+
3825
+ .interactive-editor-host .ptro-bar:not(.has-tool-options) .ptro-tool-controls,
3826
+ .interactive-editor-host .ptro-tool-controls:empty {
3827
+ display: none;
3828
+ }
3829
+
3830
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name {
3831
+ margin: 0 0 0 4px !important;
3832
+ padding: 0 !important;
3833
+ flex: 0 0 auto;
3834
+ border-radius: 0 !important;
3835
+ color: var(--muted);
3836
+ background: transparent !important;
3837
+ font-family: 'DM Sans', sans-serif !important;
3838
+ font-size: 12px;
3839
+ line-height: 32px;
3840
+ }
3841
+
3842
+ .interactive-editor-host .ptro-tool-controls .ptro-input,
3843
+ .interactive-editor-host .ptro-tool-controls select.ptro-input {
3844
+ width: 64px !important;
3845
+ height: 32px !important;
3846
+ padding: 0 8px !important;
3847
+ border: 1px solid var(--line) !important;
3848
+ border-radius: 9px;
3849
+ color: var(--text) !important;
3850
+ background: var(--bg-0) !important;
3851
+ box-shadow: none !important;
3852
+ font-family: 'DM Sans', sans-serif !important;
3853
+ font-size: 13px !important;
3854
+ }
3855
+
3856
+ .interactive-editor-host .ptro-tool-controls .ptro-color-btn {
3857
+ position: relative;
3858
+ z-index: 2;
3859
+ width: 28px !important;
3860
+ height: 28px !important;
3861
+ flex: 0 0 28px;
3862
+ border: 2px solid rgba(255, 255, 255, 0.82) !important;
3863
+ border-radius: 50%;
3864
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45) !important;
3865
+ }
3866
+
3867
+ .interactive-editor-host .ptro-tool-controls .ptro-btn-color-checkers-bar {
3868
+ display: none;
3869
+ }
3870
+
3871
+ .interactive-editor-host .interactive-crop-hint {
3872
+ color: var(--muted);
3873
+ font-size: 12px;
3874
+ white-space: nowrap;
3875
+ }
3876
+
3877
+ .interactive-editor-host .interactive-crop-apply {
3878
+ height: 30px;
3879
+ padding: 0 11px;
3880
+ border: 1px solid rgba(61, 214, 198, 0.42);
3881
+ border-radius: 8px;
3882
+ color: #071311;
3883
+ background: var(--accent);
3884
+ font-size: 12px;
3885
+ font-weight: 700;
3886
+ cursor: pointer;
3887
+ }
3888
+
3889
+ .interactive-editor-host .interactive-crop-apply:hover {
3890
+ filter: brightness(1.06);
3891
+ }
3892
+
3893
+ .interactive-editor-host .ptro-tool-controls [data-id='shadowOn'],
3894
+ .interactive-editor-host .ptro-tool-controls [data-id='fontName'],
3895
+ .interactive-editor-host .ptro-tool-controls [data-id='fontIsBold'],
3896
+ .interactive-editor-host .ptro-tool-controls [data-id='fontIsItalic'],
3897
+ .interactive-editor-host .ptro-tool-controls [data-id='fontStrokeAndShadow'],
3898
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='shadowOn']),
3899
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontName']),
3900
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontIsBold']),
3901
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontIsItalic']),
3902
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontStrokeAndShadow']) {
3903
+ display: none !important;
3904
+ }
3905
+
3906
+ .interactive-editor-host .ptro-info,
3907
+ .interactive-editor-host .ptro-bar-right {
3908
+ display: none !important;
3909
+ }
3910
+
3911
+ .interactive-editor-host .ptro-common-widget-wrapper {
3912
+ color: var(--text);
3913
+ background: rgba(7, 10, 14, 0.62) !important;
3914
+ backdrop-filter: blur(4px);
3915
+ }
3916
+
3917
+ .interactive-editor-host .ptro-pallet,
3918
+ .interactive-editor-host .ptro-color-widget-wrapper .ptro-v-middle-in {
3919
+ border: 1px solid var(--line);
3920
+ border-radius: 14px;
3921
+ background: var(--bg-1);
3922
+ box-shadow: var(--shadow);
3923
+ }
3924
+
3925
+ .interactive-edit-compose {
3926
+ flex: 0 0 auto;
3927
+ display: flex;
3928
+ flex-direction: column;
3929
+ gap: 8px;
3930
+ }
3931
+
3932
+ .interactive-edit-compose .layer-decomposition-prompt {
3933
+ width: 100%;
3934
+ }
3935
+
3936
+ .interactive-edit-model {
3937
+ display: flex;
3938
+ align-items: center;
3939
+ gap: 8px;
3940
+ color: var(--muted);
3941
+ font-size: 12px;
3942
+ }
3943
+
3944
+ .interactive-edit-model select {
3945
+ min-width: 112px;
3946
+ border: 1px solid var(--line);
3947
+ border-radius: 8px;
3948
+ padding: 6px 9px;
3949
+ background: var(--bg-1);
3950
+ color: var(--text);
3951
+ }
3952
+
3953
+ .interactive-edit-zoom {
3954
+ position: absolute;
3955
+ top: 12px;
3956
+ right: 12px;
3957
+ z-index: 35;
3958
+ display: grid;
3959
+ grid-template-columns: auto 96px 36px;
3960
+ align-items: center;
3961
+ gap: 7px;
3962
+ min-height: 32px;
3963
+ padding: 5px 8px;
3964
+ border: 1px solid var(--line);
3965
+ border-radius: 10px;
3966
+ color: var(--muted);
3967
+ background: rgba(26, 31, 39, 0.86);
3968
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.36);
3969
+ backdrop-filter: blur(16px);
3970
+ font-size: 11px;
3971
+ line-height: 1;
3972
+ }
3973
+
3974
+ .interactive-edit-zoom input {
3975
+ width: 96px;
3976
+ height: 16px;
3977
+ margin: 0;
3978
+ }
3979
+
3980
+ .interactive-edit-zoom output {
3981
+ color: var(--text);
3982
+ font-family: 'JetBrains Mono', monospace;
3983
+ font-size: 10px;
3984
+ text-align: right;
3985
+ }
3986
+
3987
+ .interactive-edit-compose > .modal-actions {
3988
+ padding-top: 0;
3989
+ }
3990
+
3991
+ @media (max-width: 760px) {
3992
+ .modal-dialog-interactive-edit {
3993
+ width: calc(100vw - 16px);
3994
+ height: calc(100vh - 16px);
3995
+ }
3996
+
3997
+ .interactive-editor-stage {
3998
+ min-height: 360px;
3999
+ }
4000
+
4001
+ }
4002
+
4003
+ .layer-decomposition-preview {
4004
+ display: flex;
4005
+ align-items: center;
4006
+ justify-content: center;
4007
+ min-height: 260px;
4008
+ max-height: 55vh;
4009
+ overflow: hidden;
4010
+ border: 1px solid var(--line);
4011
+ border-radius: 12px;
4012
+ background:
4013
+ linear-gradient(45deg, rgba(255, 255, 255, 0.035) 25%, transparent 25%),
4014
+ linear-gradient(-45deg, rgba(255, 255, 255, 0.035) 25%, transparent 25%),
4015
+ linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.035) 75%),
4016
+ linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.035) 75%),
4017
+ #0a0c10;
4018
+ background-position: 0 0, 0 10px, 10px -10px, -10px 0;
4019
+ background-size: 20px 20px;
4020
+ }
4021
+
4022
+ .layer-decomposition-preview img {
4023
+ display: block;
4024
+ max-width: 100%;
4025
+ max-height: 55vh;
4026
+ object-fit: contain;
4027
+ }
4028
+
4029
+ .layer-decomposition-prompt {
4030
+ display: flex;
4031
+ flex-direction: column;
4032
+ gap: 7px;
4033
+ color: var(--muted);
4034
+ font-size: 12px;
4035
+ }
4036
+
4037
+ .layer-decomposition-prompt textarea {
4038
+ width: 100%;
4039
+ min-height: 100px;
4040
+ resize: vertical;
4041
+ border: 1px solid var(--line);
4042
+ border-radius: 9px;
4043
+ padding: 10px 12px;
4044
+ background: var(--bg-1);
4045
+ color: var(--text);
4046
+ font: inherit;
4047
+ line-height: 1.5;
4048
+ }
4049
+
4050
+ .layer-decomposition-prompt textarea:focus {
4051
+ outline: 1px solid rgba(61, 214, 198, 0.7);
4052
+ border-color: rgba(61, 214, 198, 0.7);
4053
+ }
4054
+
4055
+ .split-anchor-grid {
4056
+ display: grid;
4057
+ grid-template-columns: repeat(3, minmax(0, 1fr));
4058
+ gap: 8px;
4059
+ }
4060
+
4061
+ .split-anchor-grid.is-disabled {
4062
+ opacity: 0.42;
4063
+ }
4064
+
4065
+ .smart-split-size-toggle {
4066
+ display: flex;
4067
+ align-items: flex-start;
4068
+ gap: 10px;
4069
+ padding: 10px 11px;
4070
+ border: 1px solid var(--line);
4071
+ border-radius: 9px;
4072
+ background: rgba(255, 255, 255, 0.025);
4073
+ color: var(--text);
4074
+ cursor: pointer;
4075
+ }
4076
+
4077
+ .smart-split-size-toggle input {
4078
+ flex: 0 0 auto;
4079
+ margin: 3px 0 0;
4080
+ accent-color: var(--accent);
4081
+ }
4082
+
4083
+ .smart-split-size-toggle span {
4084
+ display: flex;
4085
+ flex-direction: column;
4086
+ gap: 3px;
4087
+ }
4088
+
4089
+ .smart-split-size-toggle strong {
4090
+ font-size: 13px;
4091
+ }
4092
+
4093
+ .smart-split-size-toggle small {
4094
+ color: var(--muted);
4095
+ font-size: 11px;
4096
+ line-height: 1.4;
4097
+ }
4098
+
4099
+ .split-anchor-btn {
4100
+ display: flex;
4101
+ align-items: center;
4102
+ justify-content: center;
4103
+ gap: 7px;
4104
+ min-width: 0;
4105
+ padding: 9px 7px;
4106
+ border: 1px solid var(--line);
4107
+ border-radius: 9px;
4108
+ background: rgba(255, 255, 255, 0.025);
4109
+ color: var(--muted);
4110
+ cursor: pointer;
4111
+ }
4112
+
4113
+ .split-anchor-btn:hover:not(:disabled) {
4114
+ border-color: rgba(61, 214, 198, 0.5);
4115
+ color: var(--text);
4116
+ }
4117
+
4118
+ .split-anchor-btn.is-selected {
4119
+ border-color: var(--accent);
4120
+ background: rgba(61, 214, 198, 0.14);
4121
+ color: var(--text);
4122
+ }
4123
+
4124
+ .split-anchor-btn > span {
4125
+ position: relative;
4126
+ width: 20px;
4127
+ height: 20px;
4128
+ flex: 0 0 auto;
4129
+ border: 1px solid rgba(255, 255, 255, 0.28);
4130
+ border-radius: 4px;
4131
+ }
4132
+
4133
+ .split-anchor-btn > span::after {
4134
+ content: '';
4135
+ position: absolute;
4136
+ width: 5px;
4137
+ height: 5px;
4138
+ border-radius: 50%;
4139
+ background: currentColor;
4140
+ left: var(--anchor-x, 50%);
4141
+ top: var(--anchor-y, 50%);
4142
+ transform: translate(-50%, -50%);
4143
+ }
4144
+
4145
+ .split-anchor-btn[data-anchor$='left'],
4146
+ .split-anchor-btn[data-anchor='left'] { --anchor-x: 15%; }
4147
+ .split-anchor-btn[data-anchor$='right'],
4148
+ .split-anchor-btn[data-anchor='right'] { --anchor-x: 85%; }
4149
+ .split-anchor-btn[data-anchor^='top'],
4150
+ .split-anchor-btn[data-anchor='top'] { --anchor-y: 15%; }
4151
+ .split-anchor-btn[data-anchor^='bottom'],
4152
+ .split-anchor-btn[data-anchor='bottom'] { --anchor-y: 85%; }
4153
+
4154
+ .modal-hint {
4155
+ margin: 0;
4156
+ font-size: 13px;
4157
+ color: var(--muted);
4158
+ }
4159
+
4160
+ .modal-actions {
4161
+ display: flex;
4162
+ justify-content: flex-end;
4163
+ gap: 8px;
4164
+ padding-top: 4px;
4165
+ }
4166
+
4167
+ .frame-extract-field input[type='number'] {
4168
+ width: 72px;
4169
+ border: 1px solid rgba(255, 255, 255, 0.12);
4170
+ border-radius: 7px;
4171
+ background: rgba(10, 12, 16, 0.72);
4172
+ color: var(--text);
4173
+ font-size: 13px;
4174
+ padding: 6px 8px;
4175
+ }
4176
+
4177
+ .frame-extract-range {
4178
+ color: var(--muted);
4179
+ font-family: 'JetBrains Mono', monospace;
4180
+ font-size: 11px;
4181
+ }
4182
+
4183
+ .seq-sheet-fields {
4184
+ display: flex;
4185
+ gap: 16px;
4186
+ flex-wrap: wrap;
4187
+ }
4188
+
4189
+ .seq-sheet-preview {
4190
+ display: grid;
4191
+ gap: 3px;
4192
+ width: fit-content;
4193
+ max-width: 100%;
4194
+ padding: 8px;
4195
+ border-radius: 8px;
4196
+ border: 1px solid rgba(255, 255, 255, 0.08);
4197
+ background: rgba(0, 0, 0, 0.28);
4198
+ }
4199
+
4200
+ .seq-sheet-cell {
4201
+ width: 18px;
4202
+ height: 18px;
4203
+ border-radius: 3px;
4204
+ background: rgba(255, 255, 255, 0.06);
4205
+ border: 1px solid rgba(255, 255, 255, 0.08);
4206
+ font-size: 9px;
4207
+ line-height: 18px;
4208
+ text-align: center;
4209
+ color: rgba(255, 255, 255, 0.35);
4210
+ font-family: 'JetBrains Mono', monospace;
4211
+ }
4212
+
4213
+ .seq-sheet-cell.is-filled {
4214
+ background: rgba(61, 214, 198, 0.35);
4215
+ border-color: rgba(61, 214, 198, 0.55);
4216
+ color: var(--text);
4217
+ }
4218
+
4219
+ .seq-panel-head {
4220
+ display: flex;
4221
+ align-items: center;
4222
+ justify-content: space-between;
4223
+ gap: 8px;
4224
+ }
4225
+
4226
+ .seq-field {
4227
+ display: flex;
4228
+ align-items: center;
4229
+ gap: 8px;
4230
+ font-size: 12px;
4231
+ color: var(--muted);
4232
+ }
4233
+
4234
+ .seq-field input[type='range'] {
4235
+ flex: 1;
4236
+ }
4237
+
4238
+ /* 地图元素只承载 PixiJS 地图和底部拖动条;全部编辑控件挂载到左侧 Inspector。 */
4239
+ .canvas-node.is-tile-map {
4240
+ display: flex;
4241
+ min-width: 620px;
4242
+ min-height: 0;
4243
+ overflow: hidden;
4244
+ border-width: 1px;
4245
+ border-radius: 5px;
4246
+ border-color: rgba(61, 214, 198, 0.3);
4247
+ background: #151a21;
4248
+ }
4249
+
4250
+ .tile-map-editor {
4251
+ position: relative;
4252
+ display: flex;
4253
+ flex: 1 1 auto;
4254
+ width: 100%;
4255
+ height: 100%;
4256
+ min-width: 0;
4257
+ min-height: 0;
4258
+ flex-direction: column;
4259
+ overflow: hidden;
4260
+ background: #0e131a;
4261
+ }
4262
+
4263
+ .tile-map-drag-handle {
4264
+ display: flex;
4265
+ flex: 0 0 22px;
4266
+ min-height: 22px;
4267
+ align-items: center;
4268
+ justify-content: space-between;
4269
+ gap: 12px;
4270
+ padding-block: 3px;
4271
+ border-top: 1px solid var(--line);
4272
+ background: rgba(26, 31, 39, 0.94);
4273
+ cursor: grab;
4274
+ }
4275
+
4276
+ .tile-map-footer-name {
4277
+ min-width: 0;
4278
+ overflow: hidden;
4279
+ text-overflow: ellipsis;
4280
+ }
4281
+
4282
+ .tile-map-footer-spec {
4283
+ flex: 0 0 auto;
4284
+ color: rgba(215, 224, 234, 0.62);
4285
+ }
4286
+
4287
+ .tile-map-drag-handle:active {
4288
+ cursor: grabbing;
4289
+ }
4290
+
4291
+ .tile-map-inspector {
4292
+ position: relative;
4293
+ display: flex;
4294
+ min-height: 100%;
4295
+ flex-direction: column;
4296
+ gap: 8px;
4297
+ }
4298
+
4299
+ .tile-map-inspector button,
4300
+ .tile-map-inspector input {
4301
+ font: inherit;
4302
+ }
4303
+
4304
+ .tile-map-layer-section {
4305
+ display: flex;
4306
+ flex: 0 0 auto;
4307
+ min-width: 0;
4308
+ height: 320px;
4309
+ min-height: 320px;
4310
+ max-height: 320px;
4311
+ flex-direction: column;
4312
+ gap: 6px;
4313
+ padding: 7px;
4314
+ border: 1px solid rgba(255, 255, 255, 0.1);
4315
+ border-radius: 7px;
4316
+ background: rgba(9, 13, 18, 0.44);
4317
+ }
4318
+
4319
+ .tile-map-layer-header {
4320
+ display: flex;
4321
+ align-items: center;
4322
+ justify-content: space-between;
4323
+ gap: 8px;
4324
+ font-size: 11px;
4325
+ }
4326
+
4327
+ .tile-map-layer-header .tile-map-button {
4328
+ min-height: 24px;
4329
+ padding: 2px 7px;
4330
+ }
4331
+
4332
+ .tile-map-layer-list {
4333
+ display: flex;
4334
+ min-height: 0;
4335
+ flex-direction: column;
4336
+ gap: 5px;
4337
+ overflow-y: auto;
4338
+ }
4339
+
4340
+ .tile-map-layer-item {
4341
+ display: grid;
4342
+ min-width: 0;
4343
+ grid-template-columns: 14px 56px minmax(0, 1fr) 24px;
4344
+ align-items: center;
4345
+ gap: 6px;
4346
+ padding: 4px;
4347
+ border: 1px solid transparent;
4348
+ border-radius: 6px;
4349
+ background: rgba(255, 255, 255, 0.035);
4350
+ cursor: pointer;
4351
+ transition: border-color 120ms ease, background 120ms ease, box-shadow 120ms ease, opacity 120ms ease;
4352
+ }
4353
+
4354
+ .tile-map-layer-item:hover {
4355
+ background: rgba(255, 255, 255, 0.065);
4356
+ }
4357
+
4358
+ .tile-map-layer-item.is-active {
4359
+ border-color: rgba(61, 214, 198, 0.62);
4360
+ background: rgba(61, 214, 198, 0.12);
4361
+ }
4362
+
4363
+ .tile-map-layer-item.is-dragging {
4364
+ opacity: 0.42;
4365
+ }
4366
+
4367
+ .tile-map-layer-item.is-drop-before {
4368
+ box-shadow: inset 0 2px 0 #3dd6c6;
4369
+ }
4370
+
4371
+ .tile-map-layer-item.is-drop-after {
4372
+ box-shadow: inset 0 -2px 0 #3dd6c6;
4373
+ }
4374
+
4375
+ .tile-map-layer-drag-handle {
4376
+ display: flex;
4377
+ width: 14px;
4378
+ height: 32px;
4379
+ align-items: center;
4380
+ justify-content: center;
4381
+ color: rgba(255, 255, 255, 0.42);
4382
+ cursor: grab;
4383
+ font-size: 18px;
4384
+ line-height: 1;
4385
+ user-select: none;
4386
+ }
4387
+
4388
+ .tile-map-layer-drag-handle:hover {
4389
+ color: #3dd6c6;
4390
+ }
4391
+
4392
+ .tile-map-layer-drag-handle:active {
4393
+ cursor: grabbing;
4394
+ }
4395
+
4396
+ .tile-map-layer-thumbnail {
4397
+ display: block;
4398
+ width: 56px;
4399
+ height: 40px;
4400
+ border: 1px solid rgba(255, 255, 255, 0.1);
4401
+ border-radius: 4px;
4402
+ background: #101720;
4403
+ image-rendering: pixelated;
4404
+ }
4405
+
4406
+ .tile-map-layer-name {
4407
+ min-width: 0;
4408
+ width: 100%;
4409
+ padding: 4px 5px;
4410
+ border: 1px solid transparent;
4411
+ border-radius: 4px;
4412
+ color: var(--text);
4413
+ background: transparent;
4414
+ font-size: 11px;
4415
+ }
4416
+
4417
+ .tile-map-layer-name:focus {
4418
+ border-color: rgba(61, 214, 198, 0.65);
4419
+ outline: none;
4420
+ background: rgba(0, 0, 0, 0.24);
4421
+ }
4422
+
4423
+ .tile-map-layer-delete {
4424
+ width: 24px;
4425
+ height: 24px;
4426
+ padding: 0;
4427
+ border: 0;
4428
+ border-radius: 4px;
4429
+ color: var(--muted);
4430
+ background: transparent;
4431
+ cursor: pointer;
4432
+ }
4433
+
4434
+ .tile-map-layer-delete:hover:not(:disabled) {
4435
+ color: #ff8585;
4436
+ background: rgba(255, 80, 80, 0.14);
4437
+ }
4438
+
4439
+ .tile-map-layer-delete:disabled {
4440
+ cursor: not-allowed;
4441
+ opacity: 0.28;
4442
+ }
4443
+
4444
+ .tile-map-grid-fields,
4445
+ .tile-map-slice-actions {
4446
+ display: flex;
4447
+ align-items: center;
4448
+ gap: 6px;
4449
+ }
4450
+
4451
+ .tile-map-button {
4452
+ min-height: 28px;
4453
+ padding: 4px 9px;
4454
+ border: 1px solid rgba(255, 255, 255, 0.12);
4455
+ border-radius: 6px;
4456
+ color: var(--text);
4457
+ background: rgba(255, 255, 255, 0.055);
4458
+ cursor: pointer;
4459
+ font-size: 11px;
4460
+ }
4461
+
4462
+ .tile-map-button:hover:not(:disabled),
4463
+ .tile-map-button.is-active {
4464
+ border-color: rgba(61, 214, 198, 0.65);
4465
+ background: rgba(61, 214, 198, 0.16);
4466
+ }
4467
+
4468
+ .tile-map-button:disabled {
4469
+ cursor: not-allowed;
4470
+ opacity: 0.42;
4471
+ }
4472
+
4473
+ .tile-map-button-primary {
4474
+ border-color: rgba(61, 214, 198, 0.58);
4475
+ background: rgba(61, 214, 198, 0.2);
4476
+ }
4477
+
4478
+ .tile-map-inspector.is-image-over .tile-map-palette {
4479
+ border-color: var(--accent);
4480
+ box-shadow: inset 0 0 0 2px rgba(61, 214, 198, 0.16);
4481
+ }
4482
+
4483
+ .tile-map-palette {
4484
+ position: relative;
4485
+ width: 100%;
4486
+ min-height: 0;
4487
+ aspect-ratio: 1;
4488
+ flex: 0 0 auto;
4489
+ overflow: auto;
4490
+ border: 1px solid rgba(255, 255, 255, 0.1);
4491
+ border-radius: 5px;
4492
+ background: #0b1016;
4493
+ }
4494
+
4495
+ .tile-map-tileset-canvas {
4496
+ position: relative;
4497
+ z-index: 1;
4498
+ display: block;
4499
+ min-width: 0;
4500
+ max-width: none;
4501
+ height: auto;
4502
+ image-rendering: pixelated;
4503
+ cursor: crosshair;
4504
+ touch-action: none;
4505
+ }
4506
+
4507
+ .tile-map-tileset-selection {
4508
+ position: absolute;
4509
+ z-index: 2;
4510
+ top: 0;
4511
+ left: 0;
4512
+ display: block;
4513
+ height: auto;
4514
+ image-rendering: pixelated;
4515
+ pointer-events: none;
4516
+ }
4517
+
4518
+ .tile-map-tileset-canvas[hidden] {
4519
+ display: none;
4520
+ }
4521
+
4522
+ .tile-map-palette-empty {
4523
+ position: absolute;
4524
+ z-index: 0;
4525
+ inset: auto 12px 14px;
4526
+ margin: 0;
4527
+ color: rgba(190, 201, 214, 0.38);
4528
+ font-size: 11px;
4529
+ text-align: center;
4530
+ pointer-events: none;
4531
+ }
4532
+
4533
+ .tile-map-brush-context-menu {
4534
+ position: fixed;
4535
+ z-index: 1000;
4536
+ min-width: 112px;
4537
+ padding: 5px;
4538
+ border: 1px solid rgba(255, 255, 255, 0.14);
4539
+ border-radius: 7px;
4540
+ background: rgba(20, 24, 31, 0.98);
4541
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.42);
4542
+ }
4543
+
4544
+ .tile-map-brush-context-menu button {
4545
+ width: 100%;
4546
+ padding: 7px 9px;
4547
+ border: 0;
4548
+ border-radius: 5px;
4549
+ color: #ff9292;
4550
+ background: transparent;
4551
+ cursor: pointer;
4552
+ font: inherit;
4553
+ font-size: 11px;
4554
+ text-align: left;
4555
+ }
4556
+
4557
+ .tile-map-brush-context-menu button:hover {
4558
+ background: rgba(255, 80, 80, 0.14);
4559
+ }
4560
+
4561
+ .tile-map-tool-strip {
4562
+ display: grid;
4563
+ grid-template-columns: repeat(5, minmax(0, 1fr));
4564
+ gap: 6px;
4565
+ }
4566
+
4567
+ .tile-map-icon-button {
4568
+ display: inline-flex;
4569
+ min-width: 0;
4570
+ height: 34px;
4571
+ align-items: center;
4572
+ justify-content: center;
4573
+ padding: 0;
4574
+ border: 1px solid rgba(255, 255, 255, 0.12);
4575
+ border-radius: 6px;
4576
+ color: var(--muted);
4577
+ background: rgba(255, 255, 255, 0.055);
4578
+ cursor: pointer;
4579
+ }
4580
+
4581
+ .tile-map-icon-button svg {
4582
+ width: 17px;
4583
+ height: 17px;
4584
+ fill: none;
4585
+ stroke: currentColor;
4586
+ stroke-width: 1.8;
4587
+ stroke-linecap: round;
4588
+ stroke-linejoin: round;
4589
+ }
4590
+
4591
+ .tile-map-icon-button:hover:not(:disabled),
4592
+ .tile-map-icon-button.is-active {
4593
+ border-color: rgba(61, 214, 198, 0.65);
4594
+ color: var(--text);
4595
+ background: rgba(61, 214, 198, 0.16);
4596
+ }
4597
+
4598
+ .tile-map-icon-button:disabled {
4599
+ cursor: not-allowed;
4600
+ opacity: 0.35;
4601
+ }
4602
+
4603
+ .tile-map-grid-fields {
4604
+ display: grid;
4605
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4606
+ margin-left: 0;
4607
+ }
4608
+
4609
+ .tile-map-zoom-label {
4610
+ min-width: 38px;
4611
+ color: var(--muted);
4612
+ font-family: 'JetBrains Mono', monospace;
4613
+ font-size: 10px;
4614
+ text-align: center;
4615
+ }
4616
+
4617
+ .tile-map-number-field {
4618
+ display: flex;
4619
+ align-items: center;
4620
+ gap: 4px;
4621
+ color: var(--muted);
4622
+ font-size: 10px;
4623
+ }
4624
+
4625
+ .tile-map-number-field input {
4626
+ width: 54px;
4627
+ height: 27px;
4628
+ padding: 3px 5px;
4629
+ border: 1px solid rgba(255, 255, 255, 0.11);
4630
+ border-radius: 5px;
4631
+ outline: none;
4632
+ color: var(--text);
4633
+ background: rgba(0, 0, 0, 0.28);
4634
+ font-family: 'JetBrains Mono', monospace;
4635
+ font-size: 10px;
4636
+ }
4637
+
4638
+ .tile-map-number-field input:focus {
4639
+ border-color: var(--accent);
4640
+ }
4641
+
4642
+ .tile-map-unit {
4643
+ margin-left: -2px;
4644
+ }
4645
+
4646
+ .tile-map-stage {
4647
+ position: relative;
4648
+ width: 100%;
4649
+ height: auto;
4650
+ min-width: 0;
4651
+ min-height: 0;
4652
+ flex: 1 1 auto;
4653
+ overflow: hidden;
4654
+ background: #17202b;
4655
+ }
4656
+
4657
+ .tile-map-pixi-canvas {
4658
+ position: absolute;
4659
+ inset: 0;
4660
+ display: block;
4661
+ width: 100%;
4662
+ height: 100%;
4663
+ image-rendering: pixelated;
4664
+ cursor: crosshair;
4665
+ }
4666
+
4667
+ .tile-map-slice-overlay {
4668
+ position: absolute;
4669
+ z-index: 20;
4670
+ inset: 0;
4671
+ display: grid;
4672
+ place-items: center;
4673
+ padding: 18px;
4674
+ background: rgba(4, 7, 10, 0.8);
4675
+ backdrop-filter: blur(4px);
4676
+ }
4677
+
4678
+ .tile-map-slice-dialog {
4679
+ display: grid;
4680
+ width: min(470px, 100%);
4681
+ max-height: 100%;
4682
+ gap: 12px;
4683
+ padding: 16px;
4684
+ overflow: auto;
4685
+ border: 1px solid rgba(61, 214, 198, 0.32);
4686
+ border-radius: 12px;
4687
+ background: #1b222c;
4688
+ box-shadow: 0 20px 48px rgba(0, 0, 0, 0.48);
4689
+ }
4690
+
4691
+ .tile-map-slice-head {
4692
+ display: flex;
4693
+ align-items: baseline;
4694
+ justify-content: space-between;
4695
+ gap: 12px;
4696
+ font-size: 13px;
4697
+ font-weight: 700;
4698
+ }
4699
+
4700
+ .tile-map-slice-head small {
4701
+ color: var(--muted);
4702
+ font-family: 'JetBrains Mono', monospace;
4703
+ font-size: 10px;
4704
+ font-weight: 400;
4705
+ }
4706
+
4707
+ .tile-map-slice-preview {
4708
+ display: block;
4709
+ max-width: 100%;
4710
+ max-height: 210px;
4711
+ margin: 0 auto;
4712
+ border: 1px solid rgba(255, 255, 255, 0.1);
4713
+ border-radius: 6px;
4714
+ background: #0d1117;
4715
+ image-rendering: pixelated;
4716
+ }
4717
+
4718
+ .tile-map-slice-fields {
4719
+ display: grid;
4720
+ grid-template-columns: repeat(2, minmax(0, 1fr));
4721
+ gap: 8px 12px;
4722
+ }
4723
+
4724
+ .tile-map-slice-fields .tile-map-number-field {
4725
+ justify-content: space-between;
4726
+ }
4727
+
4728
+ .tile-map-slice-fields .tile-map-number-field input {
4729
+ width: 74px;
1965
4730
  }
1966
4731
 
1967
- .interactive-editor-host .interactive-crop-apply {
1968
- height: 30px;
1969
- padding: 0 11px;
1970
- border: 1px solid rgba(61, 214, 198, 0.42);
1971
- border-radius: 8px;
1972
- color: #071311;
1973
- background: var(--accent);
1974
- font-size: 12px;
1975
- font-weight: 700;
1976
- cursor: pointer;
4732
+ .tile-map-slice-validation {
4733
+ min-height: 18px;
4734
+ color: var(--muted);
4735
+ font-size: 11px;
1977
4736
  }
1978
4737
 
1979
- .interactive-editor-host .interactive-crop-apply:hover {
1980
- filter: brightness(1.06);
4738
+ .tile-map-slice-validation.is-error {
4739
+ color: var(--danger);
1981
4740
  }
1982
4741
 
1983
- .interactive-editor-host .ptro-tool-controls [data-id='shadowOn'],
1984
- .interactive-editor-host .ptro-tool-controls [data-id='fontName'],
1985
- .interactive-editor-host .ptro-tool-controls [data-id='fontIsBold'],
1986
- .interactive-editor-host .ptro-tool-controls [data-id='fontIsItalic'],
1987
- .interactive-editor-host .ptro-tool-controls [data-id='fontStrokeAndShadow'],
1988
- .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='shadowOn']),
1989
- .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontName']),
1990
- .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontIsBold']),
1991
- .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontIsItalic']),
1992
- .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontStrokeAndShadow']) {
1993
- display: none !important;
4742
+ .tile-map-slice-actions {
4743
+ justify-content: flex-end;
1994
4744
  }
1995
4745
 
1996
- .interactive-editor-host .ptro-info,
1997
- .interactive-editor-host .ptro-bar-right {
1998
- display: none !important;
4746
+ @media (max-width: 960px) {
4747
+ .app {
4748
+ display: block;
4749
+ }
1999
4750
  }
2000
4751
 
2001
- .interactive-editor-host .ptro-common-widget-wrapper {
2002
- color: var(--text);
2003
- background: rgba(7, 10, 14, 0.62) !important;
2004
- backdrop-filter: blur(4px);
4752
+ /* Shared native controls. Change this block and the --control-* tokens above to
4753
+ restyle scrollbars, range sliders, and numeric steppers across every module. */
4754
+ * {
4755
+ scrollbar-width: thin;
4756
+ scrollbar-color: var(--control-thumb) var(--control-track);
2005
4757
  }
2006
4758
 
2007
- .interactive-editor-host .ptro-pallet,
2008
- .interactive-editor-host .ptro-color-widget-wrapper .ptro-v-middle-in {
2009
- border: 1px solid var(--line);
2010
- border-radius: 14px;
2011
- background: var(--bg-1);
2012
- box-shadow: var(--shadow);
4759
+ *::-webkit-scrollbar {
4760
+ width: var(--control-scrollbar-size);
4761
+ height: var(--control-scrollbar-size);
2013
4762
  }
2014
4763
 
2015
- .interactive-edit-compose {
2016
- flex: 0 0 auto;
2017
- display: flex;
2018
- flex-direction: column;
2019
- gap: 8px;
4764
+ *::-webkit-scrollbar-track {
4765
+ border-radius: var(--control-scrollbar-radius);
4766
+ background: var(--control-track);
2020
4767
  }
2021
4768
 
2022
- .interactive-edit-compose .layer-decomposition-prompt {
2023
- width: 100%;
4769
+ *::-webkit-scrollbar-thumb {
4770
+ min-width: 28px;
4771
+ min-height: 28px;
4772
+ border: 3px solid transparent;
4773
+ border-radius: var(--control-scrollbar-radius);
4774
+ background: var(--control-thumb);
4775
+ background-clip: padding-box;
2024
4776
  }
2025
4777
 
2026
- .interactive-edit-compose > .modal-actions {
2027
- padding-top: 0;
4778
+ *::-webkit-scrollbar-thumb:hover {
4779
+ background-color: var(--control-thumb-hover);
2028
4780
  }
2029
4781
 
2030
- @media (max-width: 760px) {
2031
- .modal-dialog-interactive-edit {
2032
- width: calc(100vw - 16px);
2033
- height: calc(100vh - 16px);
2034
- }
4782
+ *::-webkit-scrollbar-thumb:active {
4783
+ background-color: var(--control-thumb-active);
4784
+ }
2035
4785
 
2036
- .interactive-editor-host {
2037
- min-height: 360px;
2038
- }
4786
+ *::-webkit-scrollbar-corner {
4787
+ background: transparent;
4788
+ }
2039
4789
 
4790
+ *::-webkit-scrollbar-button {
4791
+ display: none;
4792
+ width: 0;
4793
+ height: 0;
2040
4794
  }
2041
4795
 
2042
- .layer-decomposition-preview {
2043
- display: flex;
2044
- align-items: center;
2045
- justify-content: center;
2046
- min-height: 260px;
2047
- max-height: 55vh;
2048
- overflow: hidden;
2049
- border: 1px solid var(--line);
2050
- border-radius: 12px;
2051
- background:
2052
- linear-gradient(45deg, rgba(255, 255, 255, 0.035) 25%, transparent 25%),
2053
- linear-gradient(-45deg, rgba(255, 255, 255, 0.035) 25%, transparent 25%),
2054
- linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.035) 75%),
2055
- linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.035) 75%),
2056
- #0a0c10;
2057
- background-position: 0 0, 0 10px, 10px -10px, -10px 0;
2058
- background-size: 20px 20px;
4796
+ input[type='range'] {
4797
+ appearance: none;
4798
+ min-height: var(--control-range-thumb-size);
4799
+ margin-block: 3px;
4800
+ outline: none;
4801
+ background: transparent;
4802
+ cursor: pointer;
2059
4803
  }
2060
4804
 
2061
- .layer-decomposition-preview img {
2062
- display: block;
2063
- max-width: 100%;
2064
- max-height: 55vh;
2065
- object-fit: contain;
4805
+ input[type='range']::-webkit-slider-runnable-track {
4806
+ height: var(--control-range-track-height);
4807
+ border-radius: var(--control-scrollbar-radius);
4808
+ background: var(--control-track);
2066
4809
  }
2067
4810
 
2068
- .layer-decomposition-prompt {
2069
- display: flex;
2070
- flex-direction: column;
2071
- gap: 7px;
2072
- color: var(--muted);
2073
- font-size: 12px;
4811
+ input[type='range']:hover::-webkit-slider-runnable-track {
4812
+ background: var(--control-track-hover);
2074
4813
  }
2075
4814
 
2076
- .layer-decomposition-prompt textarea {
2077
- width: 100%;
2078
- min-height: 100px;
2079
- resize: vertical;
2080
- border: 1px solid var(--line);
2081
- border-radius: 9px;
2082
- padding: 10px 12px;
2083
- background: var(--bg-1);
2084
- color: var(--text);
2085
- font: inherit;
2086
- line-height: 1.5;
4815
+ input[type='range']::-webkit-slider-thumb {
4816
+ appearance: none;
4817
+ width: var(--control-range-thumb-size);
4818
+ height: var(--control-range-thumb-size);
4819
+ margin-top: calc((var(--control-range-track-height) - var(--control-range-thumb-size)) / 2);
4820
+ border: 2px solid var(--bg-1);
4821
+ border-radius: 50%;
4822
+ background: var(--control-thumb-hover);
4823
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.42);
2087
4824
  }
2088
4825
 
2089
- .layer-decomposition-prompt textarea:focus {
2090
- outline: 1px solid rgba(61, 214, 198, 0.7);
2091
- border-color: rgba(61, 214, 198, 0.7);
4826
+ input[type='range']:hover::-webkit-slider-thumb,
4827
+ input[type='range']:focus-visible::-webkit-slider-thumb {
4828
+ background: var(--control-thumb-active);
2092
4829
  }
2093
4830
 
2094
- .split-anchor-grid {
2095
- display: grid;
2096
- grid-template-columns: repeat(3, minmax(0, 1fr));
2097
- gap: 8px;
4831
+ input[type='range']::-moz-range-track {
4832
+ height: var(--control-range-track-height);
4833
+ border-radius: var(--control-scrollbar-radius);
4834
+ background: var(--control-track);
2098
4835
  }
2099
4836
 
2100
- .split-anchor-btn {
2101
- display: flex;
2102
- align-items: center;
2103
- justify-content: center;
2104
- gap: 7px;
2105
- min-width: 0;
2106
- padding: 9px 7px;
2107
- border: 1px solid var(--line);
2108
- border-radius: 9px;
2109
- background: rgba(255, 255, 255, 0.025);
2110
- color: var(--muted);
2111
- cursor: pointer;
4837
+ input[type='range']::-moz-range-progress {
4838
+ height: var(--control-range-track-height);
4839
+ border-radius: var(--control-scrollbar-radius);
4840
+ background: color-mix(in srgb, var(--accent) 65%, transparent);
2112
4841
  }
2113
4842
 
2114
- .split-anchor-btn:hover:not(:disabled) {
2115
- border-color: rgba(61, 214, 198, 0.5);
2116
- color: var(--text);
4843
+ input[type='range']::-moz-range-thumb {
4844
+ width: var(--control-range-thumb-size);
4845
+ height: var(--control-range-thumb-size);
4846
+ border: 2px solid var(--bg-1);
4847
+ border-radius: 50%;
4848
+ background: var(--control-thumb-hover);
4849
+ box-shadow: 0 1px 5px rgba(0, 0, 0, 0.42);
2117
4850
  }
2118
4851
 
2119
- .split-anchor-btn.is-selected {
2120
- border-color: var(--accent);
2121
- background: rgba(61, 214, 198, 0.14);
2122
- color: var(--text);
4852
+ input[type='range']:hover::-moz-range-thumb,
4853
+ input[type='range']:focus-visible::-moz-range-thumb {
4854
+ background: var(--control-thumb-active);
2123
4855
  }
2124
4856
 
2125
- .split-anchor-btn > span {
2126
- position: relative;
2127
- width: 20px;
2128
- height: 20px;
2129
- flex: 0 0 auto;
2130
- border: 1px solid rgba(255, 255, 255, 0.28);
2131
- border-radius: 4px;
4857
+ input[type='range']:disabled {
4858
+ cursor: not-allowed;
4859
+ opacity: 0.42;
2132
4860
  }
2133
4861
 
2134
- .split-anchor-btn > span::after {
2135
- content: '';
2136
- position: absolute;
2137
- width: 5px;
2138
- height: 5px;
2139
- border-radius: 50%;
2140
- background: currentColor;
2141
- left: var(--anchor-x, 50%);
2142
- top: var(--anchor-y, 50%);
2143
- transform: translate(-50%, -50%);
4862
+ input[type='number'] {
4863
+ color-scheme: dark;
4864
+ font-variant-numeric: tabular-nums;
2144
4865
  }
2145
4866
 
2146
- .split-anchor-btn[data-anchor$='left'],
2147
- .split-anchor-btn[data-anchor='left'] { --anchor-x: 15%; }
2148
- .split-anchor-btn[data-anchor$='right'],
2149
- .split-anchor-btn[data-anchor='right'] { --anchor-x: 85%; }
2150
- .split-anchor-btn[data-anchor^='top'],
2151
- .split-anchor-btn[data-anchor='top'] { --anchor-y: 15%; }
2152
- .split-anchor-btn[data-anchor^='bottom'],
2153
- .split-anchor-btn[data-anchor='bottom'] { --anchor-y: 85%; }
4867
+ input[type='number']:hover,
4868
+ input[type='number']:focus-visible {
4869
+ background-color: rgba(61, 214, 198, 0.055);
4870
+ }
2154
4871
 
2155
- .modal-hint {
2156
- margin: 0;
2157
- font-size: 13px;
2158
- color: var(--muted);
4872
+ .ui-number-stepper {
4873
+ position: relative;
4874
+ display: inline-grid;
4875
+ min-width: 0;
4876
+ max-width: 100%;
2159
4877
  }
2160
4878
 
2161
- .modal-actions {
2162
- display: flex;
2163
- justify-content: flex-end;
2164
- gap: 8px;
2165
- padding-top: 4px;
4879
+ .ui-number-stepper.is-fluid {
4880
+ width: 100%;
2166
4881
  }
2167
4882
 
2168
- .frame-extract-field input[type='number'] {
2169
- width: 72px;
2170
- border: 1px solid rgba(255, 255, 255, 0.12);
2171
- border-radius: 7px;
2172
- background: rgba(10, 12, 16, 0.72);
2173
- color: var(--text);
2174
- font-size: 13px;
2175
- padding: 6px 8px;
4883
+ .ui-number-stepper > input[type='number'] {
4884
+ width: 100% !important;
4885
+ min-width: 0;
4886
+ padding-right: calc(var(--control-number-stepper-width) + 6px) !important;
4887
+ appearance: textfield;
2176
4888
  }
2177
4889
 
2178
- .frame-extract-range {
2179
- color: var(--muted);
2180
- font-family: 'JetBrains Mono', monospace;
2181
- font-size: 11px;
4890
+ .ui-number-stepper > input[type='number']::-webkit-inner-spin-button,
4891
+ .ui-number-stepper > input[type='number']::-webkit-outer-spin-button {
4892
+ margin: 0;
4893
+ appearance: none;
2182
4894
  }
2183
4895
 
2184
- .seq-sheet-fields {
2185
- display: flex;
2186
- gap: 16px;
2187
- flex-wrap: wrap;
4896
+ .ui-number-stepper-controls {
4897
+ position: absolute;
4898
+ top: 1px;
4899
+ right: 1px;
4900
+ bottom: 1px;
4901
+ display: grid;
4902
+ width: var(--control-number-stepper-width);
4903
+ grid-template-rows: repeat(2, minmax(0, 1fr));
4904
+ overflow: hidden;
4905
+ border-left: 1px solid var(--control-track-hover);
4906
+ border-radius: 0 5px 5px 0;
2188
4907
  }
2189
4908
 
2190
- .seq-sheet-preview {
4909
+ .ui-number-stepper-button {
2191
4910
  display: grid;
2192
- gap: 3px;
2193
- width: fit-content;
2194
- max-width: 100%;
2195
- padding: 8px;
2196
- border-radius: 8px;
2197
- border: 1px solid rgba(255, 255, 255, 0.08);
2198
- background: rgba(0, 0, 0, 0.28);
4911
+ min-width: 0;
4912
+ min-height: 0;
4913
+ place-items: center;
4914
+ padding: 0;
4915
+ border: 0;
4916
+ color: var(--muted);
4917
+ background: rgba(255, 255, 255, 0.025);
4918
+ cursor: pointer;
2199
4919
  }
2200
4920
 
2201
- .seq-sheet-cell {
2202
- width: 18px;
2203
- height: 18px;
2204
- border-radius: 3px;
2205
- background: rgba(255, 255, 255, 0.06);
2206
- border: 1px solid rgba(255, 255, 255, 0.08);
2207
- font-size: 9px;
2208
- line-height: 18px;
2209
- text-align: center;
2210
- color: rgba(255, 255, 255, 0.35);
2211
- font-family: 'JetBrains Mono', monospace;
4921
+ .ui-number-stepper-button + .ui-number-stepper-button {
4922
+ border-top: 1px solid var(--control-track);
2212
4923
  }
2213
4924
 
2214
- .seq-sheet-cell.is-filled {
2215
- background: rgba(61, 214, 198, 0.35);
2216
- border-color: rgba(61, 214, 198, 0.55);
4925
+ .ui-number-stepper-button:hover {
2217
4926
  color: var(--text);
4927
+ background: rgba(61, 214, 198, 0.16);
2218
4928
  }
2219
4929
 
2220
- .seq-panel-head {
2221
- display: flex;
2222
- align-items: center;
2223
- justify-content: space-between;
2224
- gap: 8px;
4930
+ .ui-number-stepper-button:active {
4931
+ color: #07100f;
4932
+ background: var(--accent);
2225
4933
  }
2226
4934
 
2227
- .seq-field {
2228
- display: flex;
2229
- align-items: center;
2230
- gap: 8px;
2231
- font-size: 12px;
2232
- color: var(--muted);
4935
+ .ui-number-stepper-button svg {
4936
+ width: 10px;
4937
+ height: 7px;
4938
+ fill: none;
4939
+ stroke: currentColor;
4940
+ stroke-width: 1.6;
4941
+ stroke-linecap: round;
4942
+ stroke-linejoin: round;
4943
+ pointer-events: none;
2233
4944
  }
2234
4945
 
2235
- .seq-field input[type='range'] {
2236
- flex: 1;
4946
+ .ui-number-stepper:has(input:disabled) {
4947
+ opacity: 0.48;
2237
4948
  }
2238
4949
 
2239
- @media (max-width: 960px) {
2240
- .app {
2241
- display: block;
2242
- }
2243
-
2244
- .inspector {
2245
- width: min(300px, 85vw);
2246
- }
4950
+ .ui-number-stepper:has(input:disabled) .ui-number-stepper-button {
4951
+ cursor: not-allowed;
4952
+ pointer-events: none;
2247
4953
  }