evomeme-dev 0.1.7

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 (101) hide show
  1. package/README.md +247 -0
  2. package/bin/evomeme +28 -0
  3. package/dist/canvas-public/app.js +5857 -0
  4. package/dist/canvas-public/cycle-detect.js +166 -0
  5. package/dist/canvas-public/index.html +395 -0
  6. package/dist/canvas-public/sequence-sheet.js +59 -0
  7. package/dist/canvas-public/smart-split.js +185 -0
  8. package/dist/canvas-public/styles.css +2276 -0
  9. package/dist/canvas-public/vendor/painterro.min.js +3 -0
  10. package/dist/index.js +25586 -0
  11. package/package.json +69 -0
  12. package/skills/evomeme-cloud-fs/SKILL.md +176 -0
  13. package/skills/evomeme-cloud-fs/agents/openai.yaml +7 -0
  14. package/skills/evomeme-cover/SKILL.md +132 -0
  15. package/skills/evomeme-cover/agents/openai.yaml +7 -0
  16. package/skills/evomeme-game-maker/SKILL.md +214 -0
  17. package/skills/evomeme-game-maker/agents/openai.yaml +4 -0
  18. package/skills/evomeme-login/SKILL.md +92 -0
  19. package/skills/evomeme-login/agents/openai.yaml +7 -0
  20. package/skills/evomeme-native-bridge-sdk/SKILL.md +286 -0
  21. package/skills/evomeme-native-bridge-sdk/agents/openai.yaml +7 -0
  22. package/skills/evomeme-tos-upload/SKILL.md +46 -0
  23. package/skills/evomeme-tos-upload/agents/openai.yaml +4 -0
  24. package/skills/game-art/SKILL.md +121 -0
  25. package/skills/game-art/agents/openai.yaml +7 -0
  26. package/skills/game-asset-image-generator/SKILL.md +104 -0
  27. package/skills/game-asset-image-generator/agents/openai.yaml +7 -0
  28. package/skills/game-asset-image-generator/references/background.md +32 -0
  29. package/skills/game-asset-image-generator/references/static-game-assets.md +38 -0
  30. package/skills/game-audio/SKILL.md +82 -0
  31. package/skills/game-audio/agents/openai.yaml +4 -0
  32. package/skills/game-audio/references/bgm-cdn.md +127 -0
  33. package/skills/game-audio/references/sfx-cdn.md +77 -0
  34. package/skills/game-demo/SKILL.md +103 -0
  35. package/skills/game-demo/agents/openai.yaml +7 -0
  36. package/skills/game-maker/SKILL.md +111 -0
  37. package/skills/game-maker/agents/openai.yaml +4 -0
  38. package/skills/game-test/SKILL.md +58 -0
  39. package/skills/game-test/agents/openai.yaml +7 -0
  40. package/skills/game-test/references/checklists/playtest-qa.md +12 -0
  41. package/skills/game-ui/SKILL.md +169 -0
  42. package/skills/game-ui/agents/openai.yaml +4 -0
  43. package/skills/game-ui/references/checklists/game-ui-quality.md +14 -0
  44. package/skills/game-ui/references/checklists/hud-readability.md +12 -0
  45. package/skills/game-ui/references/checklists/mobile-input.md +12 -0
  46. package/skills/game-ui/references/checklists/responsive-ui-fit.md +12 -0
  47. package/skills/game-ui/references/ui-patterns.md +140 -0
  48. package/skills/game-ui/references/ui-prompt-templates.md +63 -0
  49. package/skills/phaser-2d-game/SKILL.md +127 -0
  50. package/skills/phaser-2d-game/agents/openai.yaml +7 -0
  51. package/skills/phaser-2d-game/references/engine-performance.md +64 -0
  52. package/skills/phaser-2d-game/references/engine-physics.md +139 -0
  53. package/skills/phaser-2d-game/references/engine-runtime.md +129 -0
  54. package/skills/phaser-2d-game/references/engine-spritesheets.md +99 -0
  55. package/skills/phaser-2d-game/references/engine-tilemaps.md +80 -0
  56. package/skills/phaser-2d-game/references/file-structure.md +94 -0
  57. package/skills/phaser-2d-graphics-builder/SKILL.md +68 -0
  58. package/skills/phaser-2d-graphics-builder/agents/openai.yaml +7 -0
  59. package/skills/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-1.jpeg +0 -0
  60. package/skills/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-2.jpeg +0 -0
  61. package/skills/phaser-2d-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  62. package/skills/phaser-2d-graphics-builder/references/checklists/compose-quality.md +10 -0
  63. package/skills/phaser-2d-graphics-builder/references/checklists/performance-safe-visual-detail.md +9 -0
  64. package/skills/phaser-2d-graphics-builder/references/checklists/premium-game-quality-gate.md +15 -0
  65. package/skills/phaser-2d-graphics-builder/references/checklists/sprite-quality.md +10 -0
  66. package/skills/phaser-2d-graphics-builder/references/checklists/technical-art-quality.md +9 -0
  67. package/skills/phaser-2d-graphics-builder/references/checklists/visual-scorecard.md +9 -0
  68. package/skills/phaser-2d-graphics-builder/references/compose-recipes.md +71 -0
  69. package/skills/phaser-2d-graphics-builder/references/graphics-prompt-templates.md +33 -0
  70. package/skills/phaser-2d-graphics-builder/references/implementation-blueprint.md +82 -0
  71. package/skills/phaser-2d-graphics-builder/references/sprite-recipes.md +90 -0
  72. package/skills/phaser-2d-graphics-builder/references/technical-art.md +67 -0
  73. package/skills/phaser-2d-graphics-builder/references/vfx-recipes.md +67 -0
  74. package/skills/phaser-2d-graphics-builder/references/visual-scorecard.md +129 -0
  75. package/skills/threejs-3d-game/SKILL.md +113 -0
  76. package/skills/threejs-3d-game/agents/openai.yaml +7 -0
  77. package/skills/threejs-3d-game/references/engine-asset-pipeline.md +116 -0
  78. package/skills/threejs-3d-game/references/engine-audio.md +70 -0
  79. package/skills/threejs-3d-game/references/engine-input-camera.md +84 -0
  80. package/skills/threejs-3d-game/references/engine-performance.md +96 -0
  81. package/skills/threejs-3d-game/references/engine-physics.md +142 -0
  82. package/skills/threejs-3d-game/references/engine-runtime.md +199 -0
  83. package/skills/threejs-3d-game/references/file-structure.md +353 -0
  84. package/skills/threejs-aaa-graphics-builder/SKILL.md +62 -0
  85. package/skills/threejs-aaa-graphics-builder/agents/openai.yaml +7 -0
  86. package/skills/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-1.jpg +0 -0
  87. package/skills/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-2.jpg +0 -0
  88. package/skills/threejs-aaa-graphics-builder/assets/scorecard-anchors/scene-3.jpg +0 -0
  89. package/skills/threejs-aaa-graphics-builder/references/checklists/aaa-game-quality-gate.md +23 -0
  90. package/skills/threejs-aaa-graphics-builder/references/checklists/aaa-visual-scorecard.md +19 -0
  91. package/skills/threejs-aaa-graphics-builder/references/checklists/material-lighting-quality.md +14 -0
  92. package/skills/threejs-aaa-graphics-builder/references/checklists/performance-safe-visual-detail.md +14 -0
  93. package/skills/threejs-aaa-graphics-builder/references/checklists/procedural-model-quality.md +15 -0
  94. package/skills/threejs-aaa-graphics-builder/references/checklists/technical-art-quality.md +17 -0
  95. package/skills/threejs-aaa-graphics-builder/references/graphics-prompt-templates.md +236 -0
  96. package/skills/threejs-aaa-graphics-builder/references/implementation-blueprint.md +161 -0
  97. package/skills/threejs-aaa-graphics-builder/references/model-recipes.md +146 -0
  98. package/skills/threejs-aaa-graphics-builder/references/render-recipes.md +90 -0
  99. package/skills/threejs-aaa-graphics-builder/references/shader-cookbook.md +292 -0
  100. package/skills/threejs-aaa-graphics-builder/references/technical-art.md +167 -0
  101. package/skills/threejs-aaa-graphics-builder/references/visual-scorecard.md +147 -0
@@ -0,0 +1,2276 @@
1
+ :root {
2
+ --bg-0: #12151a;
3
+ --bg-1: #1a1f27;
4
+ --bg-2: #232a34;
5
+ --line: rgba(255, 255, 255, 0.08);
6
+ --text: #e8edf4;
7
+ --muted: #93a0b4;
8
+ --accent: #3dd6c6;
9
+ --danger: #ff6b7a;
10
+ --shadow: 0 18px 40px rgba(0, 0, 0, 0.35);
11
+ font-family: 'DM Sans', sans-serif;
12
+ color: var(--text);
13
+ background: var(--bg-0);
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ html,
21
+ body {
22
+ margin: 0;
23
+ height: 100%;
24
+ }
25
+
26
+ body {
27
+ background:
28
+ radial-gradient(1200px 700px at 10% 0%, rgba(61, 214, 198, 0.12), transparent 55%),
29
+ radial-gradient(900px 600px at 90% 20%, rgba(240, 180, 41, 0.08), transparent 50%),
30
+ linear-gradient(160deg, #101318, #171c24 45%, #10141b);
31
+ }
32
+
33
+ button,
34
+ input,
35
+ select,
36
+ textarea {
37
+ font: inherit;
38
+ }
39
+
40
+ .app {
41
+ display: block;
42
+ height: 100%;
43
+ min-height: 100vh;
44
+ }
45
+
46
+ .app[hidden],
47
+ .welcome[hidden] {
48
+ display: none !important;
49
+ }
50
+
51
+ .welcome {
52
+ min-height: 100vh;
53
+ display: grid;
54
+ place-items: center;
55
+ padding: 32px 20px;
56
+ }
57
+
58
+ .welcome-card {
59
+ width: min(480px, 100%);
60
+ padding: 36px 32px 28px;
61
+ border: 1px solid var(--line);
62
+ border-radius: 16px;
63
+ background:
64
+ linear-gradient(165deg, rgba(35, 42, 52, 0.92), rgba(18, 21, 26, 0.96));
65
+ box-shadow: var(--shadow);
66
+ }
67
+
68
+ .welcome-brand {
69
+ margin: 0 0 8px;
70
+ font-size: 13px;
71
+ font-weight: 600;
72
+ letter-spacing: 0.08em;
73
+ text-transform: uppercase;
74
+ color: var(--accent);
75
+ }
76
+
77
+ .welcome-card h1 {
78
+ margin: 0 0 12px;
79
+ font-size: 28px;
80
+ font-weight: 700;
81
+ letter-spacing: -0.02em;
82
+ }
83
+
84
+ .welcome-desc {
85
+ margin: 0 0 24px;
86
+ color: var(--muted);
87
+ font-size: 14px;
88
+ line-height: 1.55;
89
+ }
90
+
91
+ .welcome-desc code {
92
+ font-family: 'JetBrains Mono', monospace;
93
+ font-size: 12px;
94
+ color: var(--text);
95
+ }
96
+
97
+ .primary-btn {
98
+ display: inline-flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ min-width: 140px;
102
+ border: none;
103
+ border-radius: 10px;
104
+ padding: 10px 18px;
105
+ background: var(--accent);
106
+ color: #0b1214;
107
+ font-weight: 600;
108
+ cursor: pointer;
109
+ }
110
+
111
+ .primary-btn:hover:not(:disabled) {
112
+ filter: brightness(1.06);
113
+ }
114
+
115
+ .primary-btn:disabled {
116
+ opacity: 0.65;
117
+ cursor: wait;
118
+ }
119
+
120
+ .welcome-recent {
121
+ margin-top: 28px;
122
+ padding-top: 20px;
123
+ border-top: 1px solid var(--line);
124
+ }
125
+
126
+ .welcome-recent h2 {
127
+ margin: 0 0 10px;
128
+ font-size: 13px;
129
+ font-weight: 600;
130
+ color: var(--muted);
131
+ }
132
+
133
+ .welcome-recent ul {
134
+ list-style: none;
135
+ margin: 0;
136
+ padding: 0;
137
+ display: flex;
138
+ flex-direction: column;
139
+ gap: 6px;
140
+ }
141
+
142
+ .recent-item {
143
+ width: 100%;
144
+ display: flex;
145
+ flex-direction: column;
146
+ align-items: flex-start;
147
+ gap: 2px;
148
+ text-align: left;
149
+ border: 1px solid var(--line);
150
+ border-radius: 10px;
151
+ padding: 10px 12px;
152
+ background: rgba(255, 255, 255, 0.02);
153
+ color: var(--text);
154
+ cursor: pointer;
155
+ }
156
+
157
+ .recent-item:hover {
158
+ border-color: rgba(61, 214, 198, 0.45);
159
+ }
160
+
161
+ .recent-item strong {
162
+ font-size: 14px;
163
+ font-weight: 600;
164
+ }
165
+
166
+ .recent-item span {
167
+ font-family: 'JetBrains Mono', monospace;
168
+ font-size: 11px;
169
+ color: var(--muted);
170
+ word-break: break-all;
171
+ }
172
+
173
+ .welcome-error {
174
+ margin: 16px 0 0;
175
+ color: var(--danger);
176
+ font-size: 13px;
177
+ line-height: 1.45;
178
+ }
179
+
180
+ .project-bar {
181
+ display: flex;
182
+ align-items: center;
183
+ gap: 8px;
184
+ min-width: 0;
185
+ z-index: 1;
186
+ }
187
+
188
+ .toolbar-actions {
189
+ display: flex;
190
+ align-items: center;
191
+ justify-content: center;
192
+ gap: 8px;
193
+ flex-shrink: 0;
194
+ position: absolute;
195
+ left: 50%;
196
+ transform: translateX(-50%);
197
+ }
198
+
199
+ .tool-btn {
200
+ border: 1px solid rgba(61, 214, 198, 0.35);
201
+ background: rgba(61, 214, 198, 0.12);
202
+ color: var(--text);
203
+ border-radius: 8px;
204
+ padding: 6px 12px;
205
+ cursor: pointer;
206
+ font-weight: 600;
207
+ font-size: 13px;
208
+ }
209
+
210
+ .tool-btn:hover {
211
+ border-color: rgba(61, 214, 198, 0.65);
212
+ background: rgba(61, 214, 198, 0.2);
213
+ }
214
+
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
+ .project-name {
229
+ min-width: 0;
230
+ max-width: 220px;
231
+ overflow: hidden;
232
+ text-overflow: ellipsis;
233
+ white-space: nowrap;
234
+ font-size: 13px;
235
+ font-weight: 600;
236
+ color: var(--text);
237
+ }
238
+
239
+ .canvas-pane {
240
+ position: relative;
241
+ width: 100%;
242
+ height: 100%;
243
+ min-height: 100vh;
244
+ min-width: 0;
245
+ }
246
+
247
+ .canvas-main {
248
+ position: relative;
249
+ height: 100%;
250
+ min-width: 0;
251
+ display: flex;
252
+ flex-direction: column;
253
+ }
254
+
255
+ .inspector {
256
+ position: absolute;
257
+ z-index: 8;
258
+ left: 0;
259
+ top: 0;
260
+ bottom: 0;
261
+ width: 300px;
262
+ display: flex;
263
+ flex-direction: column;
264
+ min-height: 0;
265
+ border-right: 1px solid var(--line);
266
+ background: rgba(18, 21, 26, 0.94);
267
+ backdrop-filter: blur(10px);
268
+ box-shadow: 12px 0 32px rgba(0, 0, 0, 0.28);
269
+ }
270
+
271
+ .inspector[hidden] {
272
+ display: none !important;
273
+ }
274
+
275
+ .inspector-header {
276
+ display: flex;
277
+ align-items: center;
278
+ justify-content: space-between;
279
+ gap: 8px;
280
+ padding: 14px 14px 10px;
281
+ border-bottom: 1px solid var(--line);
282
+ }
283
+
284
+ .inspector-header h2 {
285
+ margin: 0;
286
+ font-size: 15px;
287
+ font-weight: 600;
288
+ }
289
+
290
+ .inspector-header .ghost-btn {
291
+ width: 32px;
292
+ height: 32px;
293
+ padding: 0;
294
+ line-height: 1;
295
+ font-size: 18px;
296
+ }
297
+
298
+ .inspector-body {
299
+ flex: 1;
300
+ overflow: auto;
301
+ padding: 12px 14px 20px;
302
+ display: flex;
303
+ flex-direction: column;
304
+ gap: 12px;
305
+ }
306
+
307
+ .insp-section {
308
+ display: flex;
309
+ flex-direction: column;
310
+ gap: 8px;
311
+ }
312
+
313
+ .insp-kv {
314
+ display: grid;
315
+ grid-template-columns: 72px 1fr;
316
+ gap: 6px 10px;
317
+ font-size: 12px;
318
+ line-height: 1.4;
319
+ }
320
+
321
+ .insp-kv dt {
322
+ margin: 0;
323
+ color: var(--muted);
324
+ }
325
+
326
+ .insp-kv dd {
327
+ margin: 0;
328
+ word-break: break-all;
329
+ font-family: 'JetBrains Mono', monospace;
330
+ font-size: 11px;
331
+ white-space: pre-wrap;
332
+ }
333
+
334
+ .insp-prompt {
335
+ margin: 0;
336
+ padding: 8px 10px;
337
+ border-radius: 8px;
338
+ border: 1px solid var(--line);
339
+ background: rgba(10, 12, 16, 0.55);
340
+ color: var(--text);
341
+ font-size: 12px;
342
+ line-height: 1.45;
343
+ white-space: pre-wrap;
344
+ word-break: break-word;
345
+ max-height: 160px;
346
+ overflow: auto;
347
+ }
348
+
349
+ .insp-preview {
350
+ width: 100%;
351
+ border-radius: 8px;
352
+ border: 1px solid var(--line);
353
+ background:
354
+ linear-gradient(45deg, #2a3140 25%, transparent 25%),
355
+ linear-gradient(-45deg, #2a3140 25%, transparent 25%),
356
+ linear-gradient(45deg, transparent 75%, #2a3140 75%),
357
+ linear-gradient(-45deg, transparent 75%, #2a3140 75%);
358
+ background-size: 16px 16px;
359
+ background-position: 0 0, 0 8px, 8px -8px, -8px 0;
360
+ display: block;
361
+ }
362
+
363
+ .insp-field {
364
+ display: flex;
365
+ flex-direction: column;
366
+ gap: 6px;
367
+ font-size: 12px;
368
+ color: var(--muted);
369
+ }
370
+
371
+ .insp-tos-link {
372
+ color: var(--accent);
373
+ text-decoration: none;
374
+ overflow-wrap: anywhere;
375
+ }
376
+
377
+ .insp-tos-link:hover {
378
+ text-decoration: underline;
379
+ }
380
+
381
+ .insp-field[hidden] {
382
+ display: none !important;
383
+ }
384
+
385
+ .insp-field select,
386
+ .insp-field input[type='text'],
387
+ .insp-field input[type='number'] {
388
+ width: 100%;
389
+ border: 1px solid rgba(255, 255, 255, 0.1);
390
+ border-radius: 7px;
391
+ background: rgba(10, 12, 16, 0.72);
392
+ color: var(--text);
393
+ font-size: 12px;
394
+ padding: 7px 8px;
395
+ }
396
+
397
+ .insp-action-btn {
398
+ margin-top: 4px;
399
+ width: 100%;
400
+ justify-content: center;
401
+ }
402
+
403
+ .insp-field-row {
404
+ display: flex;
405
+ align-items: center;
406
+ gap: 8px;
407
+ }
408
+
409
+ .insp-field input[type='range'] {
410
+ flex: 1;
411
+ }
412
+
413
+ .insp-field-val {
414
+ min-width: 2.5em;
415
+ color: var(--text);
416
+ font-family: 'JetBrains Mono', monospace;
417
+ font-size: 12px;
418
+ }
419
+
420
+ .insp-check {
421
+ display: flex;
422
+ align-items: center;
423
+ gap: 8px;
424
+ font-size: 13px;
425
+ color: var(--text);
426
+ }
427
+
428
+ .insp-label {
429
+ font-size: 12px;
430
+ color: var(--muted);
431
+ font-weight: 600;
432
+ }
433
+
434
+ .insp-frame-box {
435
+ border: 1px solid var(--line);
436
+ border-radius: 10px;
437
+ padding: 8px;
438
+ background: rgba(10, 12, 16, 0.45);
439
+ max-height: 260px;
440
+ overflow: auto;
441
+ }
442
+
443
+ .insp-frame-hint {
444
+ margin: 0 0 8px;
445
+ font-size: 11px;
446
+ color: var(--muted);
447
+ }
448
+
449
+ .insp-frame-grid {
450
+ display: grid;
451
+ grid-template-columns: repeat(auto-fill, minmax(52px, 1fr));
452
+ gap: 6px;
453
+ }
454
+
455
+ .insp-frame {
456
+ position: relative;
457
+ min-width: 0;
458
+ padding: 3px;
459
+ border-radius: 7px;
460
+ border: 1px solid var(--line);
461
+ background: var(--bg-1);
462
+ cursor: grab;
463
+ user-select: none;
464
+ }
465
+
466
+ .insp-frame:active {
467
+ cursor: grabbing;
468
+ }
469
+
470
+ .insp-frame.is-dragging {
471
+ opacity: 0.4;
472
+ }
473
+
474
+ .insp-frame.is-drop-target {
475
+ border-color: var(--accent);
476
+ box-shadow: 0 0 0 1px rgba(61, 214, 198, 0.35);
477
+ }
478
+
479
+ .insp-frame-index {
480
+ position: absolute;
481
+ z-index: 1;
482
+ left: 5px;
483
+ top: 5px;
484
+ min-width: 14px;
485
+ height: 14px;
486
+ padding: 0 3px;
487
+ border-radius: 4px;
488
+ background: rgba(18, 21, 26, 0.82);
489
+ color: var(--text);
490
+ font-size: 9px;
491
+ font-family: 'JetBrains Mono', monospace;
492
+ line-height: 14px;
493
+ text-align: center;
494
+ pointer-events: none;
495
+ }
496
+
497
+ .insp-frame-del {
498
+ position: absolute;
499
+ z-index: 2;
500
+ right: 2px;
501
+ top: 2px;
502
+ width: 16px;
503
+ height: 16px;
504
+ padding: 0;
505
+ border: 1px solid var(--line);
506
+ border-radius: 4px;
507
+ background: rgba(18, 21, 26, 0.88);
508
+ color: var(--muted);
509
+ font-size: 11px;
510
+ line-height: 1;
511
+ cursor: pointer;
512
+ }
513
+
514
+ .insp-frame-del:hover {
515
+ color: var(--danger);
516
+ border-color: rgba(255, 107, 122, 0.45);
517
+ }
518
+
519
+ .insp-frame-thumb {
520
+ width: 100%;
521
+ aspect-ratio: 1;
522
+ display: flex;
523
+ align-items: center;
524
+ justify-content: center;
525
+ border-radius: 4px;
526
+ overflow: hidden;
527
+ background:
528
+ linear-gradient(45deg, #2a3140 25%, transparent 25%),
529
+ linear-gradient(-45deg, #2a3140 25%, transparent 25%),
530
+ linear-gradient(45deg, transparent 75%, #2a3140 75%),
531
+ linear-gradient(-45deg, transparent 75%, #2a3140 75%);
532
+ background-size: 10px 10px;
533
+ background-position: 0 0, 0 5px, 5px -5px, -5px 0;
534
+ pointer-events: none;
535
+ }
536
+
537
+ .insp-frame-thumb img {
538
+ max-width: 100%;
539
+ max-height: 100%;
540
+ width: auto;
541
+ height: auto;
542
+ object-fit: contain;
543
+ display: block;
544
+ }
545
+
546
+ .insp-list {
547
+ display: flex;
548
+ flex-direction: column;
549
+ gap: 6px;
550
+ }
551
+
552
+ .insp-list-item {
553
+ display: flex;
554
+ flex-direction: column;
555
+ gap: 2px;
556
+ width: 100%;
557
+ text-align: left;
558
+ padding: 10px;
559
+ border-radius: 8px;
560
+ border: 1px solid var(--line);
561
+ background: var(--bg-1);
562
+ color: var(--text);
563
+ cursor: pointer;
564
+ }
565
+
566
+ .insp-list-item:hover {
567
+ border-color: rgba(61, 214, 198, 0.45);
568
+ }
569
+
570
+ .insp-list-item .name {
571
+ font-size: 13px;
572
+ font-weight: 500;
573
+ word-break: break-all;
574
+ }
575
+
576
+ .insp-list-item .meta {
577
+ font-size: 11px;
578
+ color: var(--muted);
579
+ font-family: 'JetBrains Mono', monospace;
580
+ }
581
+
582
+ .canvas-shell {
583
+ display: flex;
584
+ flex-direction: column;
585
+ height: 100%;
586
+ min-height: 0;
587
+ }
588
+
589
+ .canvas-toolbar {
590
+ position: relative;
591
+ display: flex;
592
+ align-items: center;
593
+ justify-content: space-between;
594
+ flex-wrap: nowrap;
595
+ gap: 10px 14px;
596
+ padding: 10px 14px;
597
+ border-bottom: 1px solid var(--line);
598
+ background: rgba(18, 21, 26, 0.72);
599
+ backdrop-filter: blur(8px);
600
+ min-height: 48px;
601
+ }
602
+
603
+ .ghost-btn {
604
+ border: 1px solid var(--line);
605
+ background: transparent;
606
+ color: var(--text);
607
+ border-radius: 8px;
608
+ padding: 6px 10px;
609
+ cursor: pointer;
610
+ }
611
+
612
+ .ghost-btn:hover {
613
+ border-color: rgba(61, 214, 198, 0.45);
614
+ }
615
+
616
+ .canvas-viewport {
617
+ position: relative;
618
+ flex: 1;
619
+ overflow: hidden;
620
+ cursor: default;
621
+ background-image:
622
+ linear-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px),
623
+ linear-gradient(90deg, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
624
+ background-size: 32px 32px;
625
+ background-position: center;
626
+ }
627
+
628
+ .canvas-viewport.is-panning {
629
+ cursor: grabbing;
630
+ }
631
+
632
+ .marquee {
633
+ position: absolute;
634
+ z-index: 5;
635
+ border: 1px solid rgba(61, 214, 198, 0.85);
636
+ background: rgba(61, 214, 198, 0.12);
637
+ pointer-events: none;
638
+ }
639
+
640
+ .marquee[hidden] {
641
+ display: none !important;
642
+ }
643
+
644
+ .canvas-world {
645
+ position: absolute;
646
+ inset: 0;
647
+ transform-origin: 0 0;
648
+ }
649
+
650
+ .dependency-layer {
651
+ position: absolute;
652
+ z-index: 0;
653
+ left: 0;
654
+ top: 0;
655
+ width: 100%;
656
+ height: 100%;
657
+ overflow: visible;
658
+ pointer-events: none;
659
+ }
660
+
661
+ .dependency-path {
662
+ fill: none;
663
+ vector-effect: non-scaling-stroke;
664
+ }
665
+
666
+ .dependency-path-glow {
667
+ stroke: #3dd6c6;
668
+ stroke-width: 9;
669
+ stroke-linecap: round;
670
+ opacity: 0.14;
671
+ filter: url('#dependency-glow');
672
+ animation: dependency-pulse 2.4s ease-in-out infinite;
673
+ }
674
+
675
+ .dependency-path-base {
676
+ stroke: rgba(61, 214, 198, 0.52);
677
+ stroke-width: 1.6;
678
+ }
679
+
680
+ .dependency-path-flow {
681
+ stroke: #9ffff4;
682
+ stroke-width: 2.4;
683
+ stroke-linecap: round;
684
+ stroke-dasharray: 3 13;
685
+ filter: drop-shadow(0 0 4px rgba(111, 255, 239, 0.95));
686
+ animation: dependency-flow 1.15s linear infinite;
687
+ }
688
+
689
+ .dependency-arrow {
690
+ fill: #8ffff2;
691
+ filter: drop-shadow(0 0 4px rgba(111, 255, 239, 0.9));
692
+ }
693
+
694
+ .dependency-edge.is-active .dependency-path-base {
695
+ stroke: rgba(124, 255, 241, 0.86);
696
+ stroke-width: 2;
697
+ }
698
+
699
+ .dependency-edge.is-active .dependency-path-glow {
700
+ opacity: 0.26;
701
+ }
702
+
703
+ @keyframes dependency-flow {
704
+ to {
705
+ stroke-dashoffset: -32;
706
+ }
707
+ }
708
+
709
+ @keyframes dependency-pulse {
710
+ 0%,
711
+ 100% {
712
+ opacity: 0.1;
713
+ }
714
+ 50% {
715
+ opacity: 0.24;
716
+ }
717
+ }
718
+
719
+ @media (prefers-reduced-motion: reduce) {
720
+ .dependency-path-flow,
721
+ .dependency-path-glow {
722
+ animation: none;
723
+ }
724
+ }
725
+
726
+ .canvas-node {
727
+ position: absolute;
728
+ z-index: 1;
729
+ isolation: isolate;
730
+ border: 1px solid transparent;
731
+ border-radius: 10px;
732
+ background: rgba(26, 31, 39, 0.88);
733
+ box-shadow: var(--shadow);
734
+ overflow: hidden;
735
+ user-select: none;
736
+ cursor: default;
737
+ }
738
+
739
+ .canvas-viewport.is-panning .canvas-node {
740
+ cursor: grabbing;
741
+ }
742
+
743
+ .ref-handle {
744
+ position: absolute;
745
+ top: 8px;
746
+ right: 8px;
747
+ z-index: 1;
748
+ padding: 4px 8px;
749
+ border-radius: 999px;
750
+ border: 1px solid rgba(61, 214, 198, 0.45);
751
+ background: rgba(18, 21, 26, 0.88);
752
+ color: var(--accent);
753
+ font-size: 11px;
754
+ font-weight: 600;
755
+ cursor: grab;
756
+ opacity: 0;
757
+ pointer-events: none;
758
+ transition: opacity 120ms ease;
759
+ }
760
+
761
+ .canvas-node:hover > .ref-handle {
762
+ opacity: 1;
763
+ pointer-events: auto;
764
+ }
765
+
766
+ .canvas-node.is-selected {
767
+ z-index: 5;
768
+ border-color: var(--accent);
769
+ box-shadow: 0 0 0 1px rgba(61, 214, 198, 0.35), var(--shadow);
770
+ }
771
+
772
+ .canvas-node.is-image {
773
+ background: transparent;
774
+ }
775
+
776
+ .canvas-node img[data-role='frame'] {
777
+ display: block;
778
+ width: 100%;
779
+ height: auto;
780
+ pointer-events: none;
781
+ border-radius: 10px 10px 0 0;
782
+ background: transparent;
783
+ }
784
+
785
+ .canvas-node-caption {
786
+ padding: 6px 8px;
787
+ font-size: 11px;
788
+ color: var(--muted);
789
+ font-family: 'JetBrains Mono', monospace;
790
+ white-space: nowrap;
791
+ overflow: hidden;
792
+ text-overflow: ellipsis;
793
+ }
794
+
795
+ .canvas-node.is-image .canvas-node-caption {
796
+ background: rgba(26, 31, 39, 0.88);
797
+ }
798
+
799
+ .banner-error {
800
+ position: absolute;
801
+ left: 14px;
802
+ bottom: 14px;
803
+ padding: 8px 12px;
804
+ border-radius: 10px;
805
+ background: rgba(18, 21, 26, 0.88);
806
+ border: 1px solid var(--line);
807
+ font-size: 12px;
808
+ color: var(--danger);
809
+ max-width: min(520px, calc(100% - 28px));
810
+ }
811
+
812
+ .chat-panel {
813
+ display: none;
814
+ }
815
+
816
+ .canvas-node.is-gen-dialog {
817
+ width: 268px;
818
+ padding: 0;
819
+ overflow: hidden;
820
+ background: linear-gradient(165deg, rgba(28, 34, 42, 0.98), rgba(16, 19, 24, 0.98));
821
+ border: 1px solid rgba(61, 214, 198, 0.22);
822
+ border-radius: 12px;
823
+ box-shadow:
824
+ 0 10px 28px rgba(0, 0, 0, 0.38),
825
+ inset 0 1px 0 rgba(255, 255, 255, 0.04);
826
+ cursor: default;
827
+ font-size: 12px;
828
+ }
829
+
830
+ .canvas-node.is-gen-dialog.is-selected {
831
+ outline: 1.5px solid rgba(61, 214, 198, 0.65);
832
+ outline-offset: 0;
833
+ }
834
+
835
+ .canvas-node.is-video-dialog {
836
+ width: 288px;
837
+ }
838
+
839
+ .gen-dialog-chrome {
840
+ display: flex;
841
+ align-items: center;
842
+ justify-content: space-between;
843
+ gap: 6px;
844
+ padding: 6px 8px 6px 10px;
845
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
846
+ background: rgba(255, 255, 255, 0.02);
847
+ cursor: grab;
848
+ user-select: none;
849
+ }
850
+
851
+ .gen-dialog-chrome strong {
852
+ font-size: 12px;
853
+ font-weight: 600;
854
+ letter-spacing: 0.02em;
855
+ }
856
+
857
+ .gen-dialog-chrome .ghost-btn {
858
+ width: 22px;
859
+ height: 22px;
860
+ padding: 0;
861
+ line-height: 1;
862
+ border-radius: 6px;
863
+ font-size: 14px;
864
+ opacity: 0.7;
865
+ cursor: pointer;
866
+ position: relative;
867
+ z-index: 2;
868
+ }
869
+
870
+ .gen-dialog-chrome .ghost-btn:hover {
871
+ opacity: 1;
872
+ }
873
+
874
+ .gen-dialog-body {
875
+ display: flex;
876
+ flex-direction: column;
877
+ max-height: min(58vh, 380px);
878
+ cursor: default;
879
+ }
880
+
881
+ .gen-dialog-body .chat-messages {
882
+ flex: 0 1 auto;
883
+ max-height: 96px;
884
+ min-height: 0;
885
+ padding: 6px 8px;
886
+ gap: 6px;
887
+ }
888
+
889
+ .gen-dialog-body .chat-messages[hidden] {
890
+ display: none !important;
891
+ }
892
+
893
+ .gen-dialog-body .chat-bubble {
894
+ padding: 6px 8px;
895
+ border-radius: 8px;
896
+ font-size: 11px;
897
+ }
898
+
899
+ .gen-dialog-body .bubble-meta {
900
+ font-size: 10px;
901
+ margin-top: 4px;
902
+ }
903
+
904
+ .gen-dialog-body .chat-composer {
905
+ display: flex;
906
+ flex-direction: column;
907
+ border-top: none;
908
+ padding: 8px;
909
+ gap: 6px;
910
+ }
911
+
912
+ .gen-dialog-body .chat-composer.is-drop {
913
+ outline: 1px dashed rgba(61, 214, 198, 0.55);
914
+ outline-offset: -3px;
915
+ }
916
+
917
+ .gen-dialog-body .prompt-drop-zone {
918
+ display: flex;
919
+ flex-direction: column;
920
+ gap: 6px;
921
+ border-radius: 8px;
922
+ padding: 2px;
923
+ transition: outline-color 0.15s ease, background 0.15s ease, box-shadow 0.15s ease;
924
+ }
925
+
926
+ .gen-dialog-body .prompt-drop-zone.is-drop {
927
+ outline: 1px dashed rgba(61, 214, 198, 0.65);
928
+ outline-offset: 0;
929
+ background: rgba(61, 214, 198, 0.06);
930
+ }
931
+
932
+ .gen-dialog-body .prompt-drop-zone.is-ref-target {
933
+ animation: ref-drop-pulse 1s ease-in-out infinite;
934
+ }
935
+
936
+ .gen-dialog-body .prompt-drop-zone.is-ref-target textarea {
937
+ border-color: rgba(61, 214, 198, 0.55);
938
+ }
939
+
940
+ @keyframes ref-drop-pulse {
941
+ 0%,
942
+ 100% {
943
+ outline: 1px dashed rgba(61, 214, 198, 0.35);
944
+ outline-offset: 0;
945
+ background: rgba(61, 214, 198, 0.04);
946
+ box-shadow: 0 0 0 0 rgba(61, 214, 198, 0);
947
+ }
948
+ 50% {
949
+ outline: 1px dashed rgba(61, 214, 198, 0.95);
950
+ outline-offset: 1px;
951
+ background: rgba(61, 214, 198, 0.14);
952
+ box-shadow: 0 0 0 3px rgba(61, 214, 198, 0.18);
953
+ }
954
+ }
955
+
956
+ .gen-dialog-body .gen-dialog-compact .composer-actions {
957
+ justify-content: stretch;
958
+ }
959
+
960
+ .gen-dialog-body .gen-dialog-compact .composer-actions button[type='submit'] {
961
+ width: 100%;
962
+ }
963
+
964
+ .gen-dialog-body .gen-dialog-warning {
965
+ margin: 0;
966
+ color: var(--danger);
967
+ font-size: 11px;
968
+ line-height: 1.35;
969
+ }
970
+
971
+ .gen-dialog-body .gen-dialog-warning[hidden] {
972
+ display: none !important;
973
+ }
974
+
975
+ .gen-dialog-body .ref-strip {
976
+ gap: 4px;
977
+ margin: 0;
978
+ }
979
+
980
+ .gen-dialog-body .ref-chip {
981
+ gap: 4px;
982
+ padding: 2px;
983
+ border-radius: 8px;
984
+ }
985
+
986
+ .gen-dialog-body .ref-chip img {
987
+ width: 28px;
988
+ height: 28px;
989
+ border-radius: 6px;
990
+ }
991
+
992
+ .gen-dialog-body .ref-chip button {
993
+ width: 18px;
994
+ height: 18px;
995
+ font-size: 12px;
996
+ }
997
+
998
+ .gen-dialog-body .composer-row {
999
+ display: grid;
1000
+ grid-template-columns: 1fr 1fr;
1001
+ gap: 6px;
1002
+ }
1003
+
1004
+ .gen-dialog-body .composer-row label {
1005
+ display: flex;
1006
+ flex-direction: column;
1007
+ gap: 3px;
1008
+ font-size: 10px;
1009
+ color: var(--muted);
1010
+ letter-spacing: 0.02em;
1011
+ }
1012
+
1013
+ .gen-dialog-body .composer-row select,
1014
+ .gen-dialog-body .composer-row input,
1015
+ .gen-dialog-body .size-input,
1016
+ .gen-dialog-body .chat-composer textarea {
1017
+ width: 100%;
1018
+ border: 1px solid rgba(255, 255, 255, 0.08);
1019
+ border-radius: 7px;
1020
+ background: rgba(10, 12, 16, 0.72);
1021
+ color: var(--text);
1022
+ font-size: 11px;
1023
+ padding: 5px 7px;
1024
+ min-height: 0;
1025
+ line-height: 1.3;
1026
+ }
1027
+
1028
+ .gen-dialog-body .chat-composer textarea {
1029
+ min-height: 44px;
1030
+ resize: vertical;
1031
+ font-size: 12px;
1032
+ padding: 7px 8px;
1033
+ }
1034
+
1035
+ .gen-dialog-body .composer-checks {
1036
+ gap: 10px;
1037
+ padding: 0;
1038
+ font-size: 11px;
1039
+ }
1040
+
1041
+ .gen-dialog-body .composer-checks label {
1042
+ display: inline-flex;
1043
+ align-items: center;
1044
+ gap: 4px;
1045
+ }
1046
+
1047
+ .gen-dialog-body .composer-actions {
1048
+ display: flex;
1049
+ align-items: center;
1050
+ justify-content: flex-end;
1051
+ gap: 6px;
1052
+ margin-top: 2px;
1053
+ }
1054
+
1055
+ .gen-dialog-body .composer-actions .ghost-btn {
1056
+ padding: 4px 8px;
1057
+ font-size: 11px;
1058
+ border-radius: 7px;
1059
+ }
1060
+
1061
+ .gen-dialog-body .composer-actions button[type='submit'] {
1062
+ padding: 5px 12px;
1063
+ font-size: 11px;
1064
+ font-weight: 600;
1065
+ border-radius: 7px;
1066
+ border: none;
1067
+ background: var(--accent);
1068
+ color: #0b1214;
1069
+ cursor: pointer;
1070
+ }
1071
+
1072
+ .gen-dialog-body .composer-actions button[type='submit']:disabled {
1073
+ opacity: 0.55;
1074
+ cursor: not-allowed;
1075
+ }
1076
+
1077
+ .gen-dialog-body .ref-chip-media {
1078
+ padding: 3px 4px;
1079
+ max-width: 100%;
1080
+ }
1081
+
1082
+ .gen-dialog-body .ref-kind-badge {
1083
+ width: 28px;
1084
+ height: 28px;
1085
+ font-size: 9px;
1086
+ border-radius: 6px;
1087
+ }
1088
+
1089
+ .gen-dialog-body .ref-chip-meta span {
1090
+ font-size: 10px;
1091
+ }
1092
+
1093
+ .gen-dialog-body .ref-chip-meta select {
1094
+ font-size: 10px;
1095
+ padding: 1px 3px;
1096
+ border-radius: 5px;
1097
+ }
1098
+
1099
+ .canvas-node.is-gen-dialog .ref-handle,
1100
+ .canvas-node.is-gen-dialog .canvas-node-caption {
1101
+ display: none;
1102
+ }
1103
+
1104
+ .canvas-node.is-video {
1105
+ padding: 0;
1106
+ overflow: hidden;
1107
+ }
1108
+
1109
+ .canvas-node.is-video video[data-role='frame'] {
1110
+ display: block;
1111
+ width: 100%;
1112
+ height: auto;
1113
+ object-fit: contain;
1114
+ background: #0b0e13;
1115
+ pointer-events: none;
1116
+ border-radius: 10px 10px 0 0;
1117
+ }
1118
+
1119
+ .canvas-node.is-video .canvas-node-caption {
1120
+ position: static;
1121
+ }
1122
+
1123
+ .composer-checks {
1124
+ display: flex;
1125
+ gap: 14px;
1126
+ flex-wrap: wrap;
1127
+ padding: 0 2px;
1128
+ color: var(--muted);
1129
+ font-size: 13px;
1130
+ }
1131
+
1132
+ .ref-chip-media {
1133
+ align-items: center;
1134
+ gap: 8px;
1135
+ min-width: 0;
1136
+ max-width: 100%;
1137
+ }
1138
+
1139
+ .ref-chip-media img {
1140
+ width: 40px;
1141
+ height: 40px;
1142
+ }
1143
+
1144
+ .ref-kind-badge {
1145
+ width: 40px;
1146
+ height: 40px;
1147
+ border-radius: 8px;
1148
+ display: grid;
1149
+ place-items: center;
1150
+ background: rgba(61, 214, 198, 0.12);
1151
+ border: 1px solid var(--line);
1152
+ font-size: 11px;
1153
+ color: var(--accent);
1154
+ }
1155
+
1156
+ .ref-chip-meta {
1157
+ display: flex;
1158
+ flex-direction: column;
1159
+ gap: 4px;
1160
+ min-width: 0;
1161
+ flex: 1;
1162
+ }
1163
+
1164
+ .ref-chip-meta span {
1165
+ font-size: 11px;
1166
+ overflow: hidden;
1167
+ text-overflow: ellipsis;
1168
+ white-space: nowrap;
1169
+ }
1170
+
1171
+ .ref-chip-meta select {
1172
+ font-size: 11px;
1173
+ border-radius: 6px;
1174
+ border: 1px solid var(--line);
1175
+ background: var(--bg-2);
1176
+ color: var(--text);
1177
+ padding: 2px 4px;
1178
+ }
1179
+
1180
+ .canvas-node.is-pending {
1181
+ padding: 0;
1182
+ overflow: hidden;
1183
+ border: 1px solid rgba(61, 214, 198, 0.35);
1184
+ background: #10151c;
1185
+ box-shadow:
1186
+ 0 0 0 1px rgba(61, 214, 198, 0.12),
1187
+ 0 18px 40px rgba(0, 0, 0, 0.4);
1188
+ }
1189
+
1190
+ .canvas-node.is-pending-error {
1191
+ border-color: rgba(248, 113, 113, 0.45);
1192
+ box-shadow:
1193
+ 0 0 0 1px rgba(248, 113, 113, 0.14),
1194
+ 0 18px 40px rgba(0, 0, 0, 0.4);
1195
+ }
1196
+
1197
+ .pending-stage {
1198
+ position: relative;
1199
+ width: 100%;
1200
+ height: 100%;
1201
+ min-height: 120px;
1202
+ display: grid;
1203
+ place-items: center;
1204
+ overflow: hidden;
1205
+ isolation: isolate;
1206
+ }
1207
+
1208
+ .pending-aura {
1209
+ position: absolute;
1210
+ inset: -40%;
1211
+ background:
1212
+ conic-gradient(
1213
+ from 0deg,
1214
+ rgba(61, 214, 198, 0.0),
1215
+ rgba(61, 214, 198, 0.55),
1216
+ rgba(240, 180, 41, 0.35),
1217
+ rgba(96, 165, 250, 0.45),
1218
+ rgba(61, 214, 198, 0.0)
1219
+ );
1220
+ animation: pending-spin 2.8s linear infinite;
1221
+ filter: blur(18px);
1222
+ opacity: 0.85;
1223
+ }
1224
+
1225
+ .canvas-node.is-pending-error .pending-aura {
1226
+ background:
1227
+ conic-gradient(
1228
+ from 0deg,
1229
+ rgba(248, 113, 113, 0.0),
1230
+ rgba(248, 113, 113, 0.55),
1231
+ rgba(251, 146, 60, 0.35),
1232
+ rgba(248, 113, 113, 0.45),
1233
+ rgba(248, 113, 113, 0.0)
1234
+ );
1235
+ }
1236
+
1237
+ @keyframes pending-spin {
1238
+ to {
1239
+ transform: rotate(360deg);
1240
+ }
1241
+ }
1242
+
1243
+ .chat-header {
1244
+ padding: 16px 16px 10px;
1245
+ border-bottom: 1px solid var(--line);
1246
+ }
1247
+
1248
+ .chat-header h1 {
1249
+ margin: 0;
1250
+ font-size: 20px;
1251
+ letter-spacing: 0.02em;
1252
+ }
1253
+
1254
+ .chat-header p {
1255
+ margin: 6px 0 0;
1256
+ color: var(--muted);
1257
+ font-size: 13px;
1258
+ }
1259
+
1260
+ .chat-messages {
1261
+ flex: 1;
1262
+ overflow: auto;
1263
+ padding: 14px;
1264
+ display: flex;
1265
+ flex-direction: column;
1266
+ gap: 12px;
1267
+ }
1268
+
1269
+ .chat-empty,
1270
+ .chat-busy {
1271
+ color: var(--muted);
1272
+ font-size: 13px;
1273
+ }
1274
+
1275
+ .chat-bubble {
1276
+ border: 1px solid var(--line);
1277
+ border-radius: 12px;
1278
+ padding: 10px;
1279
+ background: var(--bg-1);
1280
+ }
1281
+
1282
+ .chat-user {
1283
+ border-color: rgba(61, 214, 198, 0.25);
1284
+ }
1285
+
1286
+ .bubble-refs {
1287
+ display: flex;
1288
+ gap: 6px;
1289
+ flex-wrap: wrap;
1290
+ margin-bottom: 8px;
1291
+ }
1292
+
1293
+ .bubble-refs img,
1294
+ .ref-chip img {
1295
+ width: 44px;
1296
+ height: 44px;
1297
+ object-fit: cover;
1298
+ border-radius: 8px;
1299
+ border: 1px solid var(--line);
1300
+ }
1301
+
1302
+ .bubble-text {
1303
+ white-space: pre-wrap;
1304
+ line-height: 1.45;
1305
+ font-size: 14px;
1306
+ }
1307
+
1308
+ .bubble-meta {
1309
+ margin-top: 6px;
1310
+ color: var(--muted);
1311
+ font-size: 11px;
1312
+ font-family: 'JetBrains Mono', monospace;
1313
+ }
1314
+
1315
+ .bubble-result {
1316
+ width: 100%;
1317
+ border-radius: 8px;
1318
+ display: block;
1319
+ }
1320
+
1321
+ .bubble-error {
1322
+ color: var(--danger);
1323
+ font-size: 13px;
1324
+ white-space: pre-wrap;
1325
+ }
1326
+
1327
+ .chat-composer {
1328
+ border-top: 1px solid var(--line);
1329
+ padding: 12px;
1330
+ display: flex;
1331
+ flex-direction: column;
1332
+ gap: 8px;
1333
+ background: rgba(10, 12, 16, 0.55);
1334
+ }
1335
+
1336
+ .chat-composer.is-drop {
1337
+ outline: 2px dashed var(--accent);
1338
+ outline-offset: -6px;
1339
+ }
1340
+
1341
+ .ref-strip {
1342
+ display: flex;
1343
+ gap: 8px;
1344
+ flex-wrap: wrap;
1345
+ }
1346
+
1347
+ .ref-chip {
1348
+ position: relative;
1349
+ }
1350
+
1351
+ .ref-chip button {
1352
+ position: absolute;
1353
+ top: -6px;
1354
+ right: -6px;
1355
+ width: 18px;
1356
+ height: 18px;
1357
+ border-radius: 50%;
1358
+ border: none;
1359
+ background: var(--bg-2);
1360
+ color: var(--text);
1361
+ cursor: pointer;
1362
+ line-height: 1;
1363
+ }
1364
+
1365
+ .composer-row {
1366
+ display: grid;
1367
+ grid-template-columns: 1fr 1fr;
1368
+ gap: 8px;
1369
+ }
1370
+
1371
+ .composer-row label {
1372
+ display: flex;
1373
+ flex-direction: column;
1374
+ gap: 4px;
1375
+ font-size: 12px;
1376
+ color: var(--muted);
1377
+ }
1378
+
1379
+ .composer-row select,
1380
+ .size-input,
1381
+ .chat-composer textarea {
1382
+ width: 100%;
1383
+ border: 1px solid var(--line);
1384
+ background: var(--bg-1);
1385
+ color: var(--text);
1386
+ border-radius: 8px;
1387
+ padding: 8px 10px;
1388
+ }
1389
+
1390
+ .chat-composer textarea {
1391
+ resize: vertical;
1392
+ min-height: 96px;
1393
+ }
1394
+
1395
+ .composer-actions {
1396
+ display: flex;
1397
+ gap: 8px;
1398
+ align-items: center;
1399
+ }
1400
+
1401
+ .composer-actions .ghost-btn {
1402
+ flex: 0 0 auto;
1403
+ white-space: nowrap;
1404
+ }
1405
+
1406
+ .composer-actions button[type='submit'] {
1407
+ flex: 1;
1408
+ border: none;
1409
+ border-radius: 10px;
1410
+ padding: 10px 12px;
1411
+ background: linear-gradient(135deg, #2bb8aa, #3dd6c6 55%, #7be7b0);
1412
+ color: #06221f;
1413
+ font-weight: 700;
1414
+ cursor: pointer;
1415
+ }
1416
+
1417
+ .composer-actions button[type='submit']:disabled {
1418
+ opacity: 0.55;
1419
+ cursor: not-allowed;
1420
+ }
1421
+
1422
+ .canvas-node.is-sequence .seq-badge {
1423
+ position: absolute;
1424
+ left: 8px;
1425
+ top: 8px;
1426
+ z-index: 2;
1427
+ padding: 3px 8px;
1428
+ border-radius: 999px;
1429
+ background: rgba(18, 21, 26, 0.88);
1430
+ border: 1px solid rgba(61, 214, 198, 0.45);
1431
+ color: var(--accent);
1432
+ font-size: 11px;
1433
+ font-weight: 600;
1434
+ pointer-events: none;
1435
+ }
1436
+
1437
+ .ctx-menu {
1438
+ position: fixed;
1439
+ z-index: 50;
1440
+ min-width: 160px;
1441
+ padding: 6px;
1442
+ border-radius: 10px;
1443
+ border: 1px solid var(--line);
1444
+ background: rgba(18, 21, 26, 0.96);
1445
+ box-shadow: var(--shadow);
1446
+ display: flex;
1447
+ flex-direction: column;
1448
+ gap: 2px;
1449
+ }
1450
+
1451
+ .ctx-menu[hidden] {
1452
+ display: none !important;
1453
+ }
1454
+
1455
+ .ctx-menu button {
1456
+ border: none;
1457
+ background: transparent;
1458
+ color: var(--text);
1459
+ text-align: left;
1460
+ padding: 8px 10px;
1461
+ border-radius: 8px;
1462
+ cursor: pointer;
1463
+ }
1464
+
1465
+ .ctx-menu button:hover {
1466
+ background: rgba(61, 214, 198, 0.12);
1467
+ }
1468
+
1469
+ .ctx-menu button[hidden] {
1470
+ display: none !important;
1471
+ }
1472
+
1473
+ .ctx-menu button.ctx-danger {
1474
+ color: var(--danger);
1475
+ }
1476
+
1477
+ .ctx-menu button.ctx-danger:hover {
1478
+ background: rgba(255, 107, 122, 0.12);
1479
+ }
1480
+
1481
+ .modal-backdrop {
1482
+ position: fixed;
1483
+ inset: 0;
1484
+ z-index: 60;
1485
+ display: flex;
1486
+ align-items: center;
1487
+ justify-content: center;
1488
+ padding: 24px;
1489
+ background: rgba(6, 8, 12, 0.62);
1490
+ backdrop-filter: blur(4px);
1491
+ }
1492
+
1493
+ .modal-backdrop-dark {
1494
+ background: rgba(0, 0, 0, 0.82);
1495
+ backdrop-filter: none;
1496
+ }
1497
+
1498
+ .modal-backdrop[hidden] {
1499
+ display: none !important;
1500
+ }
1501
+
1502
+ .modal-dialog {
1503
+ width: min(440px, 100%);
1504
+ max-height: min(80vh, 640px);
1505
+ overflow: auto;
1506
+ padding: 16px;
1507
+ border-radius: 14px;
1508
+ border: 1px solid var(--line);
1509
+ background: rgba(18, 21, 26, 0.98);
1510
+ box-shadow: var(--shadow);
1511
+ display: flex;
1512
+ flex-direction: column;
1513
+ gap: 12px;
1514
+ }
1515
+
1516
+ .modal-dialog-wide {
1517
+ width: min(640px, 100%);
1518
+ }
1519
+
1520
+ .modal-dialog-layer-decomposition {
1521
+ width: min(760px, 100%);
1522
+ max-height: min(92vh, 880px);
1523
+ }
1524
+
1525
+ .modal-dialog-interactive-edit {
1526
+ width: min(1480px, calc(100vw - 32px));
1527
+ height: min(94vh, 980px);
1528
+ max-height: none;
1529
+ overflow: hidden;
1530
+ padding: 12px;
1531
+ }
1532
+
1533
+ .interactive-editor-host {
1534
+ position: relative;
1535
+ flex: 1 1 auto;
1536
+ min-height: 440px;
1537
+ overflow: hidden;
1538
+ border: 1px solid var(--line);
1539
+ border-radius: 14px;
1540
+ background:
1541
+ radial-gradient(circle at 50% 15%, rgba(61, 214, 198, 0.06), transparent 38%),
1542
+ var(--bg-0);
1543
+ }
1544
+
1545
+ .interactive-editor-host .ptro-wrapper {
1546
+ bottom: 0 !important;
1547
+ color: var(--text);
1548
+ background:
1549
+ radial-gradient(circle at 50% 12%, rgba(61, 214, 198, 0.06), transparent 40%),
1550
+ var(--bg-0) !important;
1551
+ font-family: 'DM Sans', sans-serif !important;
1552
+ }
1553
+
1554
+ .interactive-editor-host .ptro-wrapper .ptro-substrate {
1555
+ opacity: 1 !important;
1556
+ background: var(--bg-1) !important;
1557
+ }
1558
+
1559
+ .interactive-editor-host .ptro-scroller {
1560
+ padding: 20px 20px 20px 72px;
1561
+ scrollbar-color: rgba(147, 160, 180, 0.45) transparent;
1562
+ scrollbar-width: thin;
1563
+ }
1564
+
1565
+ .interactive-editor-host .ptro-scroller::-webkit-scrollbar {
1566
+ width: 8px;
1567
+ height: 8px;
1568
+ }
1569
+
1570
+ .interactive-editor-host .ptro-scroller::-webkit-scrollbar-thumb {
1571
+ border: 2px solid transparent;
1572
+ border-radius: 999px;
1573
+ background: rgba(147, 160, 180, 0.45);
1574
+ background-clip: padding-box;
1575
+ }
1576
+
1577
+ .interactive-editor-host.is-panning .ptro-scroller,
1578
+ .interactive-editor-host.is-panning .ptro-crp-el {
1579
+ cursor: grabbing !important;
1580
+ }
1581
+
1582
+ .interactive-editor-host .ptro-bar {
1583
+ top: 50% !important;
1584
+ right: auto !important;
1585
+ bottom: auto !important;
1586
+ left: 14px !important;
1587
+ width: auto !important;
1588
+ height: auto !important;
1589
+ display: flex;
1590
+ justify-content: flex-start;
1591
+ transform: translateY(-50%);
1592
+ pointer-events: none;
1593
+ background: transparent !important;
1594
+ color: var(--text) !important;
1595
+ font-family: 'DM Sans', sans-serif !important;
1596
+ z-index: 30;
1597
+ }
1598
+
1599
+ .interactive-editor-host .ptro-bar > div {
1600
+ position: relative;
1601
+ width: max-content;
1602
+ max-width: none;
1603
+ height: auto !important;
1604
+ min-width: 46px;
1605
+ min-height: 0;
1606
+ margin: 0 auto;
1607
+ padding: 6px;
1608
+ display: flex;
1609
+ flex-direction: column;
1610
+ align-items: center;
1611
+ justify-content: center;
1612
+ gap: 4px;
1613
+ overflow: visible !important;
1614
+ pointer-events: auto;
1615
+ border: 1px solid var(--line);
1616
+ border-radius: 15px;
1617
+ background: rgba(26, 31, 39, 0.92);
1618
+ box-shadow: 0 14px 34px rgba(0, 0, 0, 0.42);
1619
+ backdrop-filter: blur(18px);
1620
+ }
1621
+
1622
+ .interactive-editor-host .ptro-bar .ptro-icon-btn {
1623
+ width: 34px !important;
1624
+ height: 34px !important;
1625
+ margin: 0 !important;
1626
+ padding: 0;
1627
+ flex: 0 0 34px;
1628
+ border: 1px solid transparent !important;
1629
+ border-radius: 50%;
1630
+ color: var(--muted) !important;
1631
+ background: transparent !important;
1632
+ box-shadow: none !important;
1633
+ transition:
1634
+ color 120ms ease,
1635
+ border-color 120ms ease,
1636
+ background 120ms ease,
1637
+ transform 120ms ease;
1638
+ }
1639
+
1640
+ .interactive-editor-host .ptro-bar .ptro-icon-btn:hover:not(:disabled) {
1641
+ color: var(--text) !important;
1642
+ border-color: var(--line) !important;
1643
+ background: var(--bg-2) !important;
1644
+ transform: translateY(-1px);
1645
+ }
1646
+
1647
+ .interactive-editor-host .ptro-bar .ptro-icon-btn.ptro-color-active-control {
1648
+ color: #071311 !important;
1649
+ border-color: rgba(61, 214, 198, 0.72) !important;
1650
+ background: var(--accent) !important;
1651
+ box-shadow: 0 6px 18px rgba(61, 214, 198, 0.2) !important;
1652
+ }
1653
+
1654
+ .interactive-editor-host .ptro-bar .ptro-icon-btn:disabled {
1655
+ opacity: 0.3;
1656
+ cursor: not-allowed;
1657
+ }
1658
+
1659
+ .interactive-editor-host .ptro-bar .ptro-icon-btn svg {
1660
+ width: 18px;
1661
+ height: 18px;
1662
+ fill: none;
1663
+ stroke: currentColor;
1664
+ stroke-width: 1.8;
1665
+ stroke-linecap: round;
1666
+ stroke-linejoin: round;
1667
+ pointer-events: none;
1668
+ }
1669
+
1670
+ .interactive-editor-host .ptro-tool-controls {
1671
+ position: absolute;
1672
+ top: 0;
1673
+ bottom: auto;
1674
+ left: calc(100% + 10px);
1675
+ width: max-content;
1676
+ min-height: 42px;
1677
+ max-width: none;
1678
+ padding: 5px 8px;
1679
+ display: flex;
1680
+ align-items: center;
1681
+ justify-content: center;
1682
+ gap: 7px;
1683
+ flex-wrap: nowrap;
1684
+ overflow: visible;
1685
+ transform: translateY(-50%);
1686
+ border: 1px solid var(--line);
1687
+ border-radius: 12px;
1688
+ background: rgba(26, 31, 39, 0.94);
1689
+ box-shadow: 0 10px 28px rgba(0, 0, 0, 0.36);
1690
+ backdrop-filter: blur(16px);
1691
+ }
1692
+
1693
+ .interactive-editor-host .ptro-bar:not(.has-tool-options) .ptro-tool-controls,
1694
+ .interactive-editor-host .ptro-tool-controls:empty {
1695
+ display: none;
1696
+ }
1697
+
1698
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name {
1699
+ margin: 0 0 0 4px !important;
1700
+ padding: 0 !important;
1701
+ flex: 0 0 auto;
1702
+ border-radius: 0 !important;
1703
+ color: var(--muted);
1704
+ background: transparent !important;
1705
+ font-family: 'DM Sans', sans-serif !important;
1706
+ font-size: 12px;
1707
+ line-height: 32px;
1708
+ }
1709
+
1710
+ .interactive-editor-host .ptro-tool-controls .ptro-input,
1711
+ .interactive-editor-host .ptro-tool-controls select.ptro-input {
1712
+ width: 64px !important;
1713
+ height: 32px !important;
1714
+ padding: 0 8px !important;
1715
+ border: 1px solid var(--line) !important;
1716
+ border-radius: 9px;
1717
+ color: var(--text) !important;
1718
+ background: var(--bg-0) !important;
1719
+ box-shadow: none !important;
1720
+ font-family: 'DM Sans', sans-serif !important;
1721
+ font-size: 13px !important;
1722
+ }
1723
+
1724
+ .interactive-editor-host .ptro-tool-controls .ptro-color-btn {
1725
+ position: relative;
1726
+ z-index: 2;
1727
+ width: 28px !important;
1728
+ height: 28px !important;
1729
+ flex: 0 0 28px;
1730
+ border: 2px solid rgba(255, 255, 255, 0.82) !important;
1731
+ border-radius: 50%;
1732
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45) !important;
1733
+ }
1734
+
1735
+ .interactive-editor-host .ptro-tool-controls .ptro-btn-color-checkers-bar {
1736
+ display: none;
1737
+ }
1738
+
1739
+ .interactive-editor-host .interactive-crop-hint {
1740
+ color: var(--muted);
1741
+ font-size: 12px;
1742
+ white-space: nowrap;
1743
+ }
1744
+
1745
+ .interactive-editor-host .interactive-crop-apply {
1746
+ height: 30px;
1747
+ padding: 0 11px;
1748
+ border: 1px solid rgba(61, 214, 198, 0.42);
1749
+ border-radius: 8px;
1750
+ color: #071311;
1751
+ background: var(--accent);
1752
+ font-size: 12px;
1753
+ font-weight: 700;
1754
+ cursor: pointer;
1755
+ }
1756
+
1757
+ .interactive-editor-host .interactive-crop-apply:hover {
1758
+ filter: brightness(1.06);
1759
+ }
1760
+
1761
+ .interactive-editor-host .ptro-tool-controls [data-id='shadowOn'],
1762
+ .interactive-editor-host .ptro-tool-controls [data-id='fontName'],
1763
+ .interactive-editor-host .ptro-tool-controls [data-id='fontIsBold'],
1764
+ .interactive-editor-host .ptro-tool-controls [data-id='fontIsItalic'],
1765
+ .interactive-editor-host .ptro-tool-controls [data-id='fontStrokeAndShadow'],
1766
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='shadowOn']),
1767
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontName']),
1768
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontIsBold']),
1769
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontIsItalic']),
1770
+ .interactive-editor-host .ptro-tool-controls .ptro-tool-ctl-name:has(+ [data-id='fontStrokeAndShadow']) {
1771
+ display: none !important;
1772
+ }
1773
+
1774
+ .interactive-editor-host .ptro-info,
1775
+ .interactive-editor-host .ptro-bar-right {
1776
+ display: none !important;
1777
+ }
1778
+
1779
+ .interactive-editor-host .ptro-common-widget-wrapper {
1780
+ color: var(--text);
1781
+ background: rgba(7, 10, 14, 0.62) !important;
1782
+ backdrop-filter: blur(4px);
1783
+ }
1784
+
1785
+ .interactive-editor-host .ptro-pallet,
1786
+ .interactive-editor-host .ptro-color-widget-wrapper .ptro-v-middle-in {
1787
+ border: 1px solid var(--line);
1788
+ border-radius: 14px;
1789
+ background: var(--bg-1);
1790
+ box-shadow: var(--shadow);
1791
+ }
1792
+
1793
+ .interactive-edit-compose {
1794
+ flex: 0 0 auto;
1795
+ display: flex;
1796
+ flex-direction: column;
1797
+ gap: 8px;
1798
+ }
1799
+
1800
+ .interactive-edit-compose .layer-decomposition-prompt {
1801
+ width: 100%;
1802
+ }
1803
+
1804
+ .interactive-edit-compose > .modal-actions {
1805
+ padding-top: 0;
1806
+ }
1807
+
1808
+ @media (max-width: 760px) {
1809
+ .modal-dialog-interactive-edit {
1810
+ width: calc(100vw - 16px);
1811
+ height: calc(100vh - 16px);
1812
+ }
1813
+
1814
+ .interactive-editor-host {
1815
+ min-height: 360px;
1816
+ }
1817
+
1818
+ }
1819
+
1820
+ .layer-decomposition-preview {
1821
+ display: flex;
1822
+ align-items: center;
1823
+ justify-content: center;
1824
+ min-height: 260px;
1825
+ max-height: 55vh;
1826
+ overflow: hidden;
1827
+ border: 1px solid var(--line);
1828
+ border-radius: 12px;
1829
+ background:
1830
+ linear-gradient(45deg, rgba(255, 255, 255, 0.035) 25%, transparent 25%),
1831
+ linear-gradient(-45deg, rgba(255, 255, 255, 0.035) 25%, transparent 25%),
1832
+ linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.035) 75%),
1833
+ linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.035) 75%),
1834
+ #0a0c10;
1835
+ background-position: 0 0, 0 10px, 10px -10px, -10px 0;
1836
+ background-size: 20px 20px;
1837
+ }
1838
+
1839
+ .layer-decomposition-preview img {
1840
+ display: block;
1841
+ max-width: 100%;
1842
+ max-height: 55vh;
1843
+ object-fit: contain;
1844
+ }
1845
+
1846
+ .layer-decomposition-prompt {
1847
+ display: flex;
1848
+ flex-direction: column;
1849
+ gap: 7px;
1850
+ color: var(--muted);
1851
+ font-size: 12px;
1852
+ }
1853
+
1854
+ .layer-decomposition-prompt textarea {
1855
+ width: 100%;
1856
+ min-height: 100px;
1857
+ resize: vertical;
1858
+ border: 1px solid var(--line);
1859
+ border-radius: 9px;
1860
+ padding: 10px 12px;
1861
+ background: var(--bg-1);
1862
+ color: var(--text);
1863
+ font: inherit;
1864
+ line-height: 1.5;
1865
+ }
1866
+
1867
+ .layer-decomposition-prompt textarea:focus {
1868
+ outline: 1px solid rgba(61, 214, 198, 0.7);
1869
+ border-color: rgba(61, 214, 198, 0.7);
1870
+ }
1871
+
1872
+ .split-anchor-grid {
1873
+ display: grid;
1874
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1875
+ gap: 8px;
1876
+ }
1877
+
1878
+ .split-anchor-btn {
1879
+ display: flex;
1880
+ align-items: center;
1881
+ justify-content: center;
1882
+ gap: 7px;
1883
+ min-width: 0;
1884
+ padding: 9px 7px;
1885
+ border: 1px solid var(--line);
1886
+ border-radius: 9px;
1887
+ background: rgba(255, 255, 255, 0.025);
1888
+ color: var(--muted);
1889
+ cursor: pointer;
1890
+ }
1891
+
1892
+ .split-anchor-btn:hover:not(:disabled) {
1893
+ border-color: rgba(61, 214, 198, 0.5);
1894
+ color: var(--text);
1895
+ }
1896
+
1897
+ .split-anchor-btn.is-selected {
1898
+ border-color: var(--accent);
1899
+ background: rgba(61, 214, 198, 0.14);
1900
+ color: var(--text);
1901
+ }
1902
+
1903
+ .split-anchor-btn > span {
1904
+ position: relative;
1905
+ width: 20px;
1906
+ height: 20px;
1907
+ flex: 0 0 auto;
1908
+ border: 1px solid rgba(255, 255, 255, 0.28);
1909
+ border-radius: 4px;
1910
+ }
1911
+
1912
+ .split-anchor-btn > span::after {
1913
+ content: '';
1914
+ position: absolute;
1915
+ width: 5px;
1916
+ height: 5px;
1917
+ border-radius: 50%;
1918
+ background: currentColor;
1919
+ left: var(--anchor-x, 50%);
1920
+ top: var(--anchor-y, 50%);
1921
+ transform: translate(-50%, -50%);
1922
+ }
1923
+
1924
+ .split-anchor-btn[data-anchor$='left'],
1925
+ .split-anchor-btn[data-anchor='left'] { --anchor-x: 15%; }
1926
+ .split-anchor-btn[data-anchor$='right'],
1927
+ .split-anchor-btn[data-anchor='right'] { --anchor-x: 85%; }
1928
+ .split-anchor-btn[data-anchor^='top'],
1929
+ .split-anchor-btn[data-anchor='top'] { --anchor-y: 15%; }
1930
+ .split-anchor-btn[data-anchor^='bottom'],
1931
+ .split-anchor-btn[data-anchor='bottom'] { --anchor-y: 85%; }
1932
+
1933
+ .trim-player {
1934
+ display: flex;
1935
+ flex-direction: column;
1936
+ gap: 10px;
1937
+ }
1938
+
1939
+ .trim-stage {
1940
+ width: 100%;
1941
+ border-radius: 10px;
1942
+ overflow: hidden;
1943
+ border: 1px solid var(--line);
1944
+ background: #000;
1945
+ line-height: 0;
1946
+ }
1947
+
1948
+ .trim-stage video {
1949
+ display: block;
1950
+ width: 100%;
1951
+ height: auto;
1952
+ max-height: min(42vh, 360px);
1953
+ object-fit: contain;
1954
+ background: #000;
1955
+ }
1956
+
1957
+ .trim-bar {
1958
+ display: flex;
1959
+ align-items: center;
1960
+ gap: 10px;
1961
+ }
1962
+
1963
+ .trim-play-btn {
1964
+ width: 36px;
1965
+ height: 36px;
1966
+ border-radius: 8px;
1967
+ border: 1px solid rgba(61, 214, 198, 0.45);
1968
+ background: rgba(61, 214, 198, 0.12);
1969
+ color: var(--text);
1970
+ cursor: pointer;
1971
+ font-size: 14px;
1972
+ line-height: 1;
1973
+ padding: 0;
1974
+ flex: 0 0 auto;
1975
+ }
1976
+
1977
+ .trim-play-btn:hover {
1978
+ background: rgba(61, 214, 198, 0.22);
1979
+ }
1980
+
1981
+ .trim-clock {
1982
+ display: inline-flex;
1983
+ align-items: center;
1984
+ gap: 4px;
1985
+ font-size: 12px;
1986
+ color: var(--muted);
1987
+ font-family: 'JetBrains Mono', monospace;
1988
+ }
1989
+
1990
+ .trim-clock strong {
1991
+ color: var(--text);
1992
+ font-weight: 500;
1993
+ }
1994
+
1995
+ .trim-times {
1996
+ display: flex;
1997
+ justify-content: space-between;
1998
+ gap: 8px;
1999
+ font-size: 12px;
2000
+ color: var(--muted);
2001
+ }
2002
+
2003
+ .trim-times strong {
2004
+ color: var(--text);
2005
+ font-family: 'JetBrains Mono', monospace;
2006
+ font-weight: 500;
2007
+ }
2008
+
2009
+ .trim-timeline {
2010
+ min-width: 0;
2011
+ padding: 14px 0 10px;
2012
+ }
2013
+
2014
+ .trim-track {
2015
+ position: relative;
2016
+ height: 14px;
2017
+ border-radius: 999px;
2018
+ background: rgba(255, 255, 255, 0.12);
2019
+ touch-action: none;
2020
+ user-select: none;
2021
+ }
2022
+
2023
+ .trim-range {
2024
+ position: absolute;
2025
+ top: 0;
2026
+ bottom: 0;
2027
+ left: 0;
2028
+ width: 100%;
2029
+ border-radius: 999px;
2030
+ background: rgba(61, 214, 198, 0.35);
2031
+ pointer-events: none;
2032
+ z-index: 1;
2033
+ }
2034
+
2035
+ .trim-scrub-input {
2036
+ position: absolute;
2037
+ inset: 0;
2038
+ width: 100%;
2039
+ height: 100%;
2040
+ margin: 0;
2041
+ padding: 0;
2042
+ background: transparent;
2043
+ appearance: none;
2044
+ -webkit-appearance: none;
2045
+ cursor: pointer;
2046
+ z-index: 2;
2047
+ }
2048
+
2049
+ .trim-scrub-input:focus {
2050
+ outline: none;
2051
+ }
2052
+
2053
+ .trim-scrub-input::-webkit-slider-runnable-track {
2054
+ height: 14px;
2055
+ background: transparent;
2056
+ border: none;
2057
+ }
2058
+
2059
+ .trim-scrub-input::-webkit-slider-thumb {
2060
+ -webkit-appearance: none;
2061
+ appearance: none;
2062
+ width: 16px;
2063
+ height: 16px;
2064
+ margin-top: -1px;
2065
+ border-radius: 50%;
2066
+ border: 2px solid #fff;
2067
+ background: #fff;
2068
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
2069
+ cursor: grab;
2070
+ position: relative;
2071
+ z-index: 5;
2072
+ }
2073
+
2074
+ .trim-scrub-input:active::-webkit-slider-thumb {
2075
+ cursor: grabbing;
2076
+ }
2077
+
2078
+ .trim-scrub-input::-moz-range-track {
2079
+ height: 14px;
2080
+ background: transparent;
2081
+ border: none;
2082
+ }
2083
+
2084
+ .trim-scrub-input::-moz-range-thumb {
2085
+ width: 14px;
2086
+ height: 14px;
2087
+ border-radius: 50%;
2088
+ border: 2px solid #fff;
2089
+ background: #fff;
2090
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
2091
+ cursor: grab;
2092
+ }
2093
+
2094
+ .trim-handle {
2095
+ position: absolute;
2096
+ top: 50%;
2097
+ width: 12px;
2098
+ height: 26px;
2099
+ margin: 0;
2100
+ padding: 0;
2101
+ border: 2px solid rgba(61, 214, 198, 0.95);
2102
+ border-radius: 4px;
2103
+ background: rgba(18, 21, 26, 0.95);
2104
+ transform: translate(-50%, -50%);
2105
+ cursor: ew-resize;
2106
+ z-index: 4;
2107
+ touch-action: none;
2108
+ user-select: none;
2109
+ box-sizing: border-box;
2110
+ }
2111
+
2112
+ .trim-handle::after {
2113
+ content: '';
2114
+ position: absolute;
2115
+ left: 50%;
2116
+ top: 5px;
2117
+ bottom: 5px;
2118
+ width: 2px;
2119
+ transform: translateX(-50%);
2120
+ background: rgba(61, 214, 198, 0.75);
2121
+ }
2122
+
2123
+ .trim-handle:hover,
2124
+ .trim-handle:focus-visible {
2125
+ filter: brightness(1.1);
2126
+ }
2127
+
2128
+ .modal-hint {
2129
+ margin: 0;
2130
+ font-size: 13px;
2131
+ color: var(--muted);
2132
+ }
2133
+
2134
+ .modal-actions {
2135
+ display: flex;
2136
+ justify-content: flex-end;
2137
+ gap: 8px;
2138
+ padding-top: 4px;
2139
+ }
2140
+
2141
+ .frame-extract-field input[type='number'] {
2142
+ width: 72px;
2143
+ border: 1px solid rgba(255, 255, 255, 0.12);
2144
+ border-radius: 7px;
2145
+ background: rgba(10, 12, 16, 0.72);
2146
+ color: var(--text);
2147
+ font-size: 13px;
2148
+ padding: 6px 8px;
2149
+ }
2150
+
2151
+ .frame-extract-range {
2152
+ color: var(--muted);
2153
+ font-family: 'JetBrains Mono', monospace;
2154
+ font-size: 11px;
2155
+ }
2156
+
2157
+ .seq-sheet-fields {
2158
+ display: flex;
2159
+ gap: 16px;
2160
+ flex-wrap: wrap;
2161
+ }
2162
+
2163
+ .seq-sheet-preview {
2164
+ display: grid;
2165
+ gap: 3px;
2166
+ width: fit-content;
2167
+ max-width: 100%;
2168
+ padding: 8px;
2169
+ border-radius: 8px;
2170
+ border: 1px solid rgba(255, 255, 255, 0.08);
2171
+ background: rgba(0, 0, 0, 0.28);
2172
+ }
2173
+
2174
+ .seq-sheet-cell {
2175
+ width: 18px;
2176
+ height: 18px;
2177
+ border-radius: 3px;
2178
+ background: rgba(255, 255, 255, 0.06);
2179
+ border: 1px solid rgba(255, 255, 255, 0.08);
2180
+ font-size: 9px;
2181
+ line-height: 18px;
2182
+ text-align: center;
2183
+ color: rgba(255, 255, 255, 0.35);
2184
+ font-family: 'JetBrains Mono', monospace;
2185
+ }
2186
+
2187
+ .seq-sheet-cell.is-filled {
2188
+ background: rgba(61, 214, 198, 0.35);
2189
+ border-color: rgba(61, 214, 198, 0.55);
2190
+ color: var(--text);
2191
+ }
2192
+
2193
+ .seq-panel-head {
2194
+ display: flex;
2195
+ align-items: center;
2196
+ justify-content: space-between;
2197
+ gap: 8px;
2198
+ }
2199
+
2200
+ .seq-field {
2201
+ display: flex;
2202
+ align-items: center;
2203
+ gap: 8px;
2204
+ font-size: 12px;
2205
+ color: var(--muted);
2206
+ }
2207
+
2208
+ .seq-field input[type='range'] {
2209
+ flex: 1;
2210
+ }
2211
+
2212
+ .seq-check {
2213
+ color: var(--text);
2214
+ }
2215
+
2216
+ .seq-frames {
2217
+ display: flex;
2218
+ flex-direction: column;
2219
+ gap: 6px;
2220
+ }
2221
+
2222
+ .seq-frame-row {
2223
+ display: grid;
2224
+ grid-template-columns: 44px 1fr auto;
2225
+ gap: 8px;
2226
+ align-items: center;
2227
+ padding: 6px;
2228
+ border-radius: 8px;
2229
+ border: 1px solid var(--line);
2230
+ background: var(--bg-1);
2231
+ }
2232
+
2233
+ .seq-frame-row img {
2234
+ width: 44px;
2235
+ height: 44px;
2236
+ object-fit: cover;
2237
+ border-radius: 6px;
2238
+ }
2239
+
2240
+ .seq-frame-row .seq-frame-name {
2241
+ font-size: 11px;
2242
+ color: var(--muted);
2243
+ font-family: 'JetBrains Mono', monospace;
2244
+ overflow: hidden;
2245
+ text-overflow: ellipsis;
2246
+ white-space: nowrap;
2247
+ }
2248
+
2249
+ .seq-frame-actions {
2250
+ display: flex;
2251
+ gap: 4px;
2252
+ }
2253
+
2254
+ .seq-frame-actions button {
2255
+ border: 1px solid var(--line);
2256
+ background: transparent;
2257
+ color: var(--text);
2258
+ border-radius: 6px;
2259
+ width: 28px;
2260
+ height: 28px;
2261
+ cursor: pointer;
2262
+ }
2263
+
2264
+ .seq-frame-actions button:hover {
2265
+ border-color: rgba(61, 214, 198, 0.45);
2266
+ }
2267
+
2268
+ @media (max-width: 960px) {
2269
+ .app {
2270
+ display: block;
2271
+ }
2272
+
2273
+ .inspector {
2274
+ width: min(300px, 85vw);
2275
+ }
2276
+ }