@pheem49/mint 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/Cargo.lock +55 -3
  2. package/Cargo.toml +2 -1
  3. package/Release_Note.md +285 -140
  4. package/bin/mint +0 -0
  5. package/crates/mint-cli/Cargo.toml +1 -0
  6. package/crates/mint-cli/src/actions.rs +233 -0
  7. package/crates/mint-cli/src/agent.rs +287 -43
  8. package/crates/mint-cli/src/gmail.rs +22 -2
  9. package/crates/mint-cli/src/interactive.rs +2888 -0
  10. package/crates/mint-cli/src/main.rs +336 -2854
  11. package/crates/mint-cli/src/markdown.rs +294 -0
  12. package/crates/mint-cli/src/onboard.rs +44 -1
  13. package/crates/mint-cli/src/updater.rs +48 -6
  14. package/crates/mint-core/Cargo.toml +1 -0
  15. package/crates/mint-core/src/agent_loop.rs +1 -0
  16. package/crates/mint-core/src/api_server.rs +376 -13
  17. package/crates/mint-core/src/browser.rs +629 -101
  18. package/crates/mint-core/src/channels.rs +105 -6
  19. package/crates/mint-core/src/chat.rs +52 -4
  20. package/crates/mint-core/src/code_tools.rs +29 -11
  21. package/crates/mint-core/src/config.rs +118 -0
  22. package/crates/mint-core/src/image_gen.rs +294 -33
  23. package/crates/mint-core/src/lib.rs +5 -2
  24. package/crates/mint-core/src/mcp.rs +119 -6
  25. package/crates/mint-core/src/orchestration.rs +133 -11
  26. package/crates/mint-core/src/pictures.rs +64 -1
  27. package/crates/mint-core/src/skills.rs +82 -6
  28. package/crates/mint-core/src/video_gen.rs +235 -0
  29. package/package.json +8 -2
  30. package/shared-modules/luajit/luajit.json +2 -2
  31. package/skills-lock.json +41 -0
  32. package/src/renderer/index-web.html +1 -1
  33. package/src/renderer/index.html +1 -1
  34. package/src/renderer/shared/constants/slashCommands.ts +27 -0
  35. package/src/renderer/shared/platform.ts +3 -0
  36. package/src/renderer/shared/types.ts +4 -0
  37. package/src/renderer/shared/utils/approval.tsx +86 -7
  38. package/src/renderer/shared/utils/markdown.tsx +217 -88
  39. package/src/renderer/shared/utils/slashCommandProcessor.ts +239 -0
  40. package/src/renderer/src/components/ChatPanel.tsx +461 -64
  41. package/src/renderer/src/components/DashboardSidebar.tsx +11 -2
  42. package/src/renderer/src/components/ImageStudioPanel.tsx +87 -4
  43. package/src/renderer/src/components/MintDashboard.tsx +150 -5
  44. package/src/renderer/src/components/PicturesLibrary.tsx +156 -15
  45. package/src/renderer/src/components/Settings/AutomationTab.tsx +316 -18
  46. package/src/renderer/src/components/Settings/GeneralTab.tsx +762 -634
  47. package/src/renderer/src/components/Settings/PluginsTab.tsx +304 -70
  48. package/src/renderer/src/components/Settings/ThemeTab.tsx +6 -1
  49. package/src/renderer/src/components/SettingsWindow.tsx +38 -2
  50. package/src/renderer/src/components/VeoStudioPanel.tsx +549 -0
  51. package/src/renderer/src/css/image-studio.css +106 -0
  52. package/src/renderer/src/css/settings.css +158 -0
  53. package/src/renderer/src/css/styles.css +352 -1
  54. package/src/renderer/src/css/veo-studio.css +626 -0
  55. package/src/renderer/src/index.css +1 -0
  56. package/src/renderer/src/tauri.ts +144 -17
  57. package/src/renderer/src-web/components/ChatPanel.tsx +360 -88
  58. package/src/renderer/src-web/components/DashboardSidebar.tsx +16 -1
  59. package/src/renderer/src-web/components/ImageStudioPanel.tsx +87 -4
  60. package/src/renderer/src-web/components/MintDashboard.tsx +137 -4
  61. package/src/renderer/src-web/components/PicturesLibrary.tsx +155 -15
  62. package/src/renderer/src-web/components/Settings/AutomationTab.tsx +316 -18
  63. package/src/renderer/src-web/components/Settings/GeneralTab.tsx +762 -629
  64. package/src/renderer/src-web/components/Settings/PluginsTab.tsx +304 -70
  65. package/src/renderer/src-web/components/Settings/ThemeTab.tsx +6 -1
  66. package/src/renderer/src-web/components/SettingsWindow.tsx +35 -2
  67. package/src/renderer/src-web/components/VeoStudioPanel.tsx +549 -0
  68. package/src/renderer/src-web/css/image-studio.css +106 -0
  69. package/src/renderer/src-web/css/settings.css +158 -0
  70. package/src/renderer/src-web/css/styles.css +353 -1
  71. package/src/renderer/src-web/css/veo-studio.css +650 -0
  72. package/src/renderer/src-web/index.css +1 -0
  73. package/src/renderer/src-web/tauri.ts +135 -16
  74. package/src-tauri/src/lib.rs +114 -8
  75. package/src-tauri/src/webhooks.rs +45 -31
  76. package/src-tauri/src/workflows.rs +1 -0
  77. package/src-tauri/tauri.conf.json +1 -1
  78. package/temp_gridgeist/AGENTS.md +8 -0
  79. package/temp_gridgeist/CHANGELOG.md +130 -0
  80. package/temp_gridgeist/LICENSE +21 -0
  81. package/temp_gridgeist/README.md +323 -0
  82. package/temp_gridgeist/README.th.md +325 -0
  83. package/temp_gridgeist/skills/gridgeist/SKILL.md +88 -0
  84. package/temp_gridgeist/skills/gridgeist/agents/openai.yaml +9 -0
  85. package/temp_gridgeist/skills/gridgeist/assets/gridgeist-small.svg +10 -0
  86. package/temp_gridgeist/skills/gridgeist/assets/gridgeist.png +0 -0
  87. package/temp_gridgeist/skills/gridgeist/assets/gridgeist.svg +18 -0
  88. package/temp_gridgeist/skills/gridgeist/references/design-language.md +88 -0
  89. package/temp_gridgeist/skills/gridgeist/references/review-checklist.md +128 -0
  90. package/temp_gridgeist/skills/gridgeist/references/system-contract.md +109 -0
@@ -0,0 +1,626 @@
1
+ /* ============================================================
2
+ Veo Studio Panel — AI Video Generation
3
+ Dynamically aligns with selected application theme
4
+ ============================================================ */
5
+
6
+ /* Root panel: overlays the main content area, aligned with sidebar */
7
+ .veo-studio {
8
+ display: flex;
9
+ position: absolute;
10
+ top: 0;
11
+ bottom: 0;
12
+ right: 0;
13
+ left: var(--sidebar-expanded-width, 264px);
14
+ flex-direction: column;
15
+ overflow: hidden;
16
+ background: var(--bg-gradient, radial-gradient(circle at top left, #064e3b, #111827 52%, #0b1020));
17
+ z-index: 10;
18
+ opacity: 0;
19
+ pointer-events: none;
20
+ transform: translateY(12px) scale(0.995);
21
+ transition: left 0.22s ease, opacity 0.22s cubic-bezier(0.4, 0, 0.2, 1), transform 0.22s cubic-bezier(0.4, 0, 0.2, 1);
22
+ }
23
+
24
+ /* Adjust left position when the sidebar is collapsed */
25
+ .app-body.sidebar-collapsed .veo-studio {
26
+ left: calc(var(--sidebar-collapsed-width, 56px) + var(--sidebar-content-gap, 10px));
27
+ }
28
+
29
+ /* Only visible when view === 'veo' */
30
+ .veo-studio.is-visible {
31
+ opacity: 1;
32
+ pointer-events: auto;
33
+ transform: translateY(0) scale(1);
34
+ }
35
+
36
+ /* ── Header ─────────────────────────────────────────────── */
37
+ .veo-studio-header {
38
+ padding: 20px 28px 12px;
39
+ border-bottom: 1px solid var(--border);
40
+ background: var(--chrome-bg);
41
+ backdrop-filter: var(--glass-blur, blur(16px));
42
+ flex-shrink: 0;
43
+ }
44
+
45
+ .veo-studio-header-title {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 10px;
49
+ color: var(--text-main);
50
+ margin-bottom: 4px;
51
+ }
52
+
53
+ .veo-studio-header-title h1 {
54
+ margin: 0;
55
+ font-size: 1.18rem;
56
+ font-weight: 700;
57
+ color: var(--text-main);
58
+ }
59
+
60
+ .veo-studio-header-title svg {
61
+ color: var(--accent);
62
+ flex-shrink: 0;
63
+ }
64
+
65
+ .veo-studio-badge {
66
+ display: inline-flex;
67
+ align-items: center;
68
+ padding: 2px 8px;
69
+ border-radius: 99px;
70
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
71
+ border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent);
72
+ color: var(--accent-hover);
73
+ font-size: 0.68rem;
74
+ font-weight: 600;
75
+ letter-spacing: 0.03em;
76
+ text-transform: uppercase;
77
+ margin-left: 4px;
78
+ }
79
+
80
+ .veo-studio-subtitle {
81
+ margin: 6px 0 0;
82
+ color: var(--text-muted);
83
+ font-size: 0.80rem;
84
+ }
85
+
86
+ /* ── Main layout: 2-column ─────────────────────────────── */
87
+ .veo-studio-content {
88
+ display: grid;
89
+ grid-template-columns: 320px 1fr;
90
+ min-height: 0;
91
+ flex: 1;
92
+ overflow: hidden;
93
+ }
94
+
95
+ /* ── Controls (left column) ────────────────────────────── */
96
+ .veo-studio-controls {
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: 18px;
100
+ padding: 22px 20px;
101
+ border-right: 1px solid var(--border);
102
+ background: var(--panel-soft);
103
+ overflow-y: auto;
104
+ scrollbar-width: thin;
105
+ scrollbar-color: color-mix(in srgb, var(--accent) 20%, transparent) transparent;
106
+ }
107
+
108
+ .veo-studio-controls::-webkit-scrollbar,
109
+ .veo-studio-results::-webkit-scrollbar {
110
+ width: 6px;
111
+ }
112
+
113
+ .veo-studio-controls::-webkit-scrollbar-track,
114
+ .veo-studio-results::-webkit-scrollbar-track {
115
+ background: transparent;
116
+ }
117
+
118
+ .veo-studio-controls::-webkit-scrollbar-thumb,
119
+ .veo-studio-results::-webkit-scrollbar-thumb {
120
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
121
+ border-radius: 99px;
122
+ }
123
+
124
+ .veo-studio-controls::-webkit-scrollbar-thumb:hover,
125
+ .veo-studio-results::-webkit-scrollbar-thumb:hover {
126
+ background: color-mix(in srgb, var(--accent) 30%, transparent);
127
+ }
128
+
129
+ /* ── Field groups ──────────────────────────────────────── */
130
+ .veo-studio-field {
131
+ display: flex;
132
+ flex-direction: column;
133
+ gap: 7px;
134
+ }
135
+
136
+ .veo-studio-label {
137
+ display: flex;
138
+ align-items: center;
139
+ gap: 8px;
140
+ color: var(--text-soft);
141
+ font-size: 0.76rem;
142
+ font-weight: 500;
143
+ letter-spacing: 0.02em;
144
+ text-transform: uppercase;
145
+ }
146
+
147
+ .veo-studio-label-hint {
148
+ text-transform: none;
149
+ font-weight: 400;
150
+ color: var(--text-muted);
151
+ letter-spacing: 0;
152
+ }
153
+
154
+ /* ── Textarea / Inputs ──────────────────────────────────── */
155
+ .veo-studio-textarea {
156
+ width: 100%;
157
+ padding: 10px 12px;
158
+ border: 1px solid var(--border);
159
+ border-radius: 10px;
160
+ background: var(--input-bg);
161
+ color: var(--text-main);
162
+ font-size: 0.87rem;
163
+ line-height: 1.55;
164
+ resize: vertical;
165
+ outline: none;
166
+ transition: border-color 0.15s, box-shadow 0.15s;
167
+ box-sizing: border-box;
168
+ }
169
+
170
+ .veo-studio-textarea:focus {
171
+ border-color: var(--accent);
172
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent) 15%, transparent);
173
+ }
174
+
175
+ .veo-studio-textarea--sm {
176
+ font-size: 0.82rem;
177
+ }
178
+
179
+ .veo-studio-prompt-hint {
180
+ color: var(--text-muted);
181
+ font-size: 0.70rem;
182
+ text-align: right;
183
+ opacity: 0.85;
184
+ }
185
+
186
+ /* ── Style suggestion chips ──────────────────────────────── */
187
+ .veo-studio-chips {
188
+ display: flex;
189
+ flex-wrap: wrap;
190
+ gap: 6px;
191
+ }
192
+
193
+ .veo-studio-chip {
194
+ padding: 5px 11px;
195
+ border-radius: 99px;
196
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
197
+ border: 1px solid var(--border);
198
+ color: var(--text-soft);
199
+ font-size: 0.74rem;
200
+ font-weight: 500;
201
+ cursor: pointer;
202
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
203
+ }
204
+
205
+ .veo-studio-chip:hover:not(:disabled) {
206
+ background: color-mix(in srgb, var(--accent) 18%, transparent);
207
+ border-color: var(--accent);
208
+ color: var(--text-main);
209
+ }
210
+
211
+ /* ── Negative prompt toggle ──────────────────────────────── */
212
+ .veo-studio-toggle {
213
+ display: inline-flex;
214
+ align-items: center;
215
+ gap: 6px;
216
+ background: none;
217
+ border: none;
218
+ color: var(--text-muted);
219
+ font-size: 0.82rem;
220
+ font-weight: 500;
221
+ cursor: pointer;
222
+ padding: 2px 0;
223
+ transition: color 0.12s;
224
+ outline: none;
225
+ }
226
+
227
+ .veo-studio-toggle:hover {
228
+ color: var(--text-soft);
229
+ }
230
+
231
+ .veo-studio-badge-dot {
232
+ display: inline-block;
233
+ width: 6px;
234
+ height: 6px;
235
+ border-radius: 50%;
236
+ background: var(--accent);
237
+ }
238
+
239
+ /* ── Aspect ratio & Duration buttons ────────────────────────── */
240
+ .veo-studio-aspect-group,
241
+ .veo-studio-duration-group {
242
+ display: flex;
243
+ gap: 8px;
244
+ }
245
+
246
+ .veo-studio-aspect-btn,
247
+ .veo-studio-duration-btn {
248
+ display: inline-flex;
249
+ align-items: center;
250
+ justify-content: center;
251
+ gap: 6px;
252
+ flex: 1;
253
+ padding: 8px 12px;
254
+ border-radius: 10px;
255
+ background: var(--input-bg);
256
+ border: 1px solid var(--border);
257
+ color: var(--text-soft);
258
+ font-size: 0.82rem;
259
+ font-weight: 500;
260
+ cursor: pointer;
261
+ transition: background 0.15s, border-color 0.15s, color 0.15s;
262
+ outline: none;
263
+ }
264
+
265
+ .veo-studio-aspect-btn:hover:not(:disabled),
266
+ .veo-studio-duration-btn:hover:not(:disabled) {
267
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
268
+ border-color: var(--accent);
269
+ color: var(--text-main);
270
+ }
271
+
272
+ .veo-studio-aspect-btn.is-active,
273
+ .veo-studio-duration-btn.is-active {
274
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
275
+ border-color: var(--accent);
276
+ color: var(--text-main);
277
+ font-weight: 600;
278
+ box-shadow: 0 0 0 1px var(--accent);
279
+ }
280
+
281
+ .veo-studio-aspect-btn:disabled,
282
+ .veo-studio-duration-btn:disabled {
283
+ opacity: 0.45;
284
+ cursor: not-allowed;
285
+ }
286
+
287
+ .veo-studio-aspect-icon {
288
+ font-size: 0.65rem;
289
+ line-height: 1;
290
+ }
291
+
292
+ /* ── Generate button ─────────────────────────────────────── */
293
+ .veo-studio-generate-btn {
294
+ display: flex;
295
+ align-items: center;
296
+ justify-content: center;
297
+ gap: 8px;
298
+ width: 100%;
299
+ padding: 12px 16px;
300
+ border-radius: 10px;
301
+ background: var(--accent);
302
+ border: 1px solid var(--accent);
303
+ color: #fff;
304
+ font-size: 0.90rem;
305
+ font-weight: 600;
306
+ cursor: pointer;
307
+ transition: opacity 0.15s, box-shadow 0.15s, transform 0.1s;
308
+ outline: none;
309
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 20%, transparent);
310
+ }
311
+
312
+ .veo-studio-generate-btn:hover:not(:disabled) {
313
+ background: var(--accent-hover);
314
+ border-color: var(--accent-hover);
315
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--accent) 35%, transparent);
316
+ transform: translateY(-1px);
317
+ }
318
+
319
+ .veo-studio-generate-btn:disabled {
320
+ opacity: 0.5;
321
+ cursor: not-allowed;
322
+ transform: none;
323
+ box-shadow: none;
324
+ }
325
+
326
+ .veo-studio-generate-btn.is-loading {
327
+ cursor: wait;
328
+ }
329
+
330
+ .veo-studio-spinner {
331
+ display: inline-block;
332
+ width: 14px;
333
+ height: 14px;
334
+ border: 2px solid rgb(255 255 255 / 30%);
335
+ border-top-color: #fff;
336
+ border-radius: 50%;
337
+ animation: veo-spin 0.7s linear infinite;
338
+ flex-shrink: 0;
339
+ }
340
+
341
+ /* ── Error Display ───────────────────────────────────────── */
342
+ .veo-studio-error {
343
+ display: flex;
344
+ align-items: flex-start;
345
+ gap: 8px;
346
+ padding: 10px 12px;
347
+ background: rgb(239 68 68 / 10%);
348
+ border: 1px solid rgb(239 68 68 / 25%);
349
+ border-radius: 8px;
350
+ color: #fca5a5;
351
+ font-size: 0.8rem;
352
+ line-height: 1.5;
353
+ }
354
+
355
+ .veo-studio-error span {
356
+ flex: 1;
357
+ }
358
+
359
+ .veo-studio-error button {
360
+ background: none;
361
+ border: none;
362
+ color: #fca5a5;
363
+ cursor: pointer;
364
+ font-size: 1rem;
365
+ padding: 0;
366
+ line-height: 1;
367
+ flex-shrink: 0;
368
+ opacity: 0.7;
369
+ }
370
+
371
+ /* ── Recent Prompts ──────────────────────────────────────── */
372
+ .veo-studio-history {
373
+ display: flex;
374
+ flex-direction: column;
375
+ gap: 4px;
376
+ }
377
+
378
+ .veo-studio-history-item {
379
+ display: flex;
380
+ align-items: center;
381
+ gap: 7px;
382
+ padding: 6px 9px;
383
+ border-radius: 8px;
384
+ background: var(--input-bg);
385
+ border: 1px solid var(--border);
386
+ color: var(--text-soft);
387
+ font-size: 0.78rem;
388
+ cursor: pointer;
389
+ text-align: left;
390
+ transition: background 0.15s, color 0.15s;
391
+ outline: none;
392
+ white-space: nowrap;
393
+ overflow: hidden;
394
+ text-overflow: ellipsis;
395
+ }
396
+
397
+ .veo-studio-history-item span {
398
+ overflow: hidden;
399
+ text-overflow: ellipsis;
400
+ }
401
+
402
+ .veo-studio-history-item:hover:not(:disabled) {
403
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
404
+ color: var(--text-main);
405
+ }
406
+
407
+ /* ── Right Column (Results Workspace) ────────────────────── */
408
+ .veo-studio-results {
409
+ display: flex;
410
+ flex-direction: column;
411
+ overflow-y: auto;
412
+ }
413
+
414
+ .veo-studio-active-workspace {
415
+ flex-shrink: 0;
416
+ padding: 24px;
417
+ min-height: 320px;
418
+ display: flex;
419
+ flex-direction: column;
420
+ justify-content: center;
421
+ align-items: center;
422
+ background: var(--chrome-bg);
423
+ border-bottom: 1px solid var(--border);
424
+ }
425
+
426
+ /* ── Loading Skeleton ────────────────────────────────────── */
427
+ .veo-studio-skeleton-wrap {
428
+ display: flex;
429
+ flex-direction: column;
430
+ align-items: center;
431
+ gap: 16px;
432
+ width: 100%;
433
+ }
434
+
435
+ .veo-studio-skeleton {
436
+ position: relative;
437
+ width: 100%;
438
+ max-width: 560px;
439
+ aspect-ratio: 16 / 9;
440
+ border-radius: 12px;
441
+ background: var(--input-bg);
442
+ border: 1px solid var(--border);
443
+ overflow: hidden;
444
+ display: flex;
445
+ align-items: center;
446
+ justify-content: center;
447
+ }
448
+
449
+ .veo-studio-skeleton-shine {
450
+ position: absolute;
451
+ inset: 0;
452
+ background: linear-gradient(
453
+ 90deg,
454
+ transparent 0%,
455
+ color-mix(in srgb, var(--accent) 5%, transparent) 40%,
456
+ color-mix(in srgb, var(--accent) 15%, transparent) 50%,
457
+ color-mix(in srgb, var(--accent) 5%, transparent) 60%,
458
+ transparent 100%
459
+ );
460
+ background-size: 200% 100%;
461
+ animation: veo-shimmer 1.6s ease-in-out infinite;
462
+ }
463
+
464
+ .veo-studio-skeleton-icon {
465
+ color: var(--text-muted);
466
+ }
467
+
468
+ /* ── Video Card ──────────────────────────────────────────── */
469
+ .veo-studio-video-grid {
470
+ display: flex;
471
+ justify-content: center;
472
+ width: 100%;
473
+ max-width: 560px;
474
+ }
475
+
476
+ .veo-studio-card {
477
+ width: 100%;
478
+ border-radius: 12px;
479
+ border: 1px solid var(--border);
480
+ background: var(--panel-soft);
481
+ overflow: hidden;
482
+ }
483
+
484
+ .veo-studio-card-video-wrap {
485
+ width: 100%;
486
+ aspect-ratio: 16 / 9;
487
+ background: #000;
488
+ }
489
+
490
+ .veo-studio-card-video {
491
+ width: 100%;
492
+ height: 100%;
493
+ object-fit: contain;
494
+ }
495
+
496
+ /* ── Video Action buttons ────────────────────────────────── */
497
+ .veo-studio-card-actions {
498
+ display: flex;
499
+ gap: 8px;
500
+ padding: 10px 12px;
501
+ background: var(--chrome-bg);
502
+ border-top: 1px solid var(--border);
503
+ }
504
+
505
+ .veo-studio-action-btn {
506
+ display: inline-flex;
507
+ align-items: center;
508
+ gap: 5px;
509
+ padding: 6px 12px;
510
+ border-radius: 8px;
511
+ background: var(--input-bg);
512
+ border: 1px solid var(--border);
513
+ color: var(--text-soft);
514
+ font-size: 0.78rem;
515
+ font-weight: 500;
516
+ cursor: pointer;
517
+ transition: background 0.15s, color 0.15s;
518
+ }
519
+
520
+ .veo-studio-action-btn:hover {
521
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
522
+ color: var(--text-main);
523
+ border-color: var(--accent);
524
+ }
525
+
526
+ .veo-studio-action-btn--primary {
527
+ background: var(--accent);
528
+ border-color: var(--accent);
529
+ color: #fff;
530
+ }
531
+
532
+ .veo-studio-action-btn--primary:hover {
533
+ background: var(--accent-hover);
534
+ border-color: var(--accent-hover);
535
+ }
536
+
537
+ /* ── Meta info ───────────────────────────────────────────── */
538
+ .veo-studio-meta {
539
+ font-size: 0.76rem;
540
+ color: var(--text-muted);
541
+ margin-top: 10px;
542
+ }
543
+
544
+ /* ── Workspace Empty State ───────────────────────────────── */
545
+ .veo-studio-active-empty {
546
+ display: flex;
547
+ flex-direction: column;
548
+ align-items: center;
549
+ gap: 12px;
550
+ color: var(--text-muted);
551
+ }
552
+
553
+ .veo-studio-empty-icon {
554
+ color: var(--text-muted);
555
+ opacity: 0.6;
556
+ }
557
+
558
+ .veo-studio-active-empty p {
559
+ margin: 0;
560
+ font-size: 0.95rem;
561
+ color: var(--text-soft);
562
+ font-weight: 600;
563
+ }
564
+
565
+ .veo-studio-active-empty span {
566
+ font-size: 0.82rem;
567
+ }
568
+
569
+ /* ── History Divider Header ──────────────────────────────── */
570
+ .veo-studio-history-header {
571
+ padding: 10px 24px;
572
+ border-bottom: 1px solid var(--border);
573
+ background: var(--chrome-soft, var(--chrome-bg));
574
+ }
575
+
576
+ .veo-studio-history-title {
577
+ display: flex;
578
+ align-items: center;
579
+ gap: 8px;
580
+ color: var(--text-soft);
581
+ font-size: 0.78rem;
582
+ font-weight: 600;
583
+ text-transform: uppercase;
584
+ letter-spacing: 0.04em;
585
+ }
586
+
587
+ .veo-studio-history-badge {
588
+ display: inline-flex;
589
+ align-items: center;
590
+ justify-content: center;
591
+ min-width: 18px;
592
+ height: 18px;
593
+ padding: 0 5px;
594
+ border-radius: 99px;
595
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
596
+ color: var(--accent-hover);
597
+ font-size: 0.72rem;
598
+ font-weight: 700;
599
+ }
600
+
601
+ /* ── History Gallery List ────────────────────────────────── */
602
+ .veo-studio-history-gallery {
603
+ flex: 1;
604
+ padding: 24px;
605
+ background: var(--bg-gradient, transparent);
606
+ }
607
+
608
+ .veo-studio-gallery-empty {
609
+ display: flex;
610
+ flex-direction: column;
611
+ align-items: center;
612
+ gap: 6px;
613
+ padding: 32px 0;
614
+ }
615
+
616
+ .veo-studio-gallery-empty p {
617
+ margin: 0;
618
+ font-size: 0.9rem;
619
+ color: var(--text-soft);
620
+ font-weight: 500;
621
+ }
622
+
623
+ .veo-studio-gallery-empty span {
624
+ font-size: 0.78rem;
625
+ color: var(--text-muted);
626
+ }
@@ -4,6 +4,7 @@
4
4
  @import './css/widget.css';
5
5
  @import './css/image-studio.css';
6
6
  @import './css/workflows.css';
7
+ @import './css/veo-studio.css';
7
8
 
8
9
  * {
9
10
  box-sizing: border-box;