@pheem49/mint 1.8.2 → 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 (106) hide show
  1. package/Cargo.lock +55 -3
  2. package/Cargo.toml +2 -1
  3. package/Release_Note.md +297 -107
  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 +382 -127
  8. package/crates/mint-cli/src/gmail.rs +22 -2
  9. package/crates/mint-cli/src/image.rs +8 -8
  10. package/crates/mint-cli/src/interactive.rs +2888 -0
  11. package/crates/mint-cli/src/main.rs +391 -2506
  12. package/crates/mint-cli/src/markdown.rs +294 -0
  13. package/crates/mint-cli/src/onboard.rs +152 -109
  14. package/crates/mint-cli/src/setup.rs +143 -143
  15. package/crates/mint-cli/src/updater.rs +48 -6
  16. package/crates/mint-core/Cargo.toml +1 -0
  17. package/crates/mint-core/src/agent_loop.rs +1 -0
  18. package/crates/mint-core/src/api_server.rs +431 -65
  19. package/crates/mint-core/src/browser.rs +630 -102
  20. package/crates/mint-core/src/channels.rs +105 -6
  21. package/crates/mint-core/src/chat.rs +174 -11
  22. package/crates/mint-core/src/code_tools.rs +47 -31
  23. package/crates/mint-core/src/config.rs +302 -17
  24. package/crates/mint-core/src/image_gen.rs +299 -38
  25. package/crates/mint-core/src/lib.rs +10 -7
  26. package/crates/mint-core/src/mcp.rs +119 -6
  27. package/crates/mint-core/src/memory.rs +6 -1
  28. package/crates/mint-core/src/orchestration.rs +237 -96
  29. package/crates/mint-core/src/pictures.rs +67 -5
  30. package/crates/mint-core/src/semantic.rs +1 -1
  31. package/crates/mint-core/src/shell.rs +1 -1
  32. package/crates/mint-core/src/skills.rs +128 -25
  33. package/crates/mint-core/src/video_gen.rs +235 -0
  34. package/package.json +8 -2
  35. package/shared-modules/linux-audio/fluidsynth2-static.json +9 -3
  36. package/shared-modules/linux-audio/fluidsynth2.json +8 -2
  37. package/shared-modules/linux-audio/lilv.json +26 -19
  38. package/shared-modules/linux-audio/lv2.json +0 -1
  39. package/shared-modules/luajit/luajit.json +2 -2
  40. package/skills-lock.json +41 -0
  41. package/src/renderer/index-web.html +1 -1
  42. package/src/renderer/index.html +1 -1
  43. package/src/renderer/shared/components/AgentActivityTable.tsx +25 -6
  44. package/src/renderer/shared/constants/slashCommands.ts +27 -0
  45. package/src/renderer/shared/platform.ts +3 -0
  46. package/src/renderer/shared/types.ts +4 -0
  47. package/src/renderer/shared/utils/approval.tsx +86 -7
  48. package/src/renderer/shared/utils/fileIcons.ts +135 -0
  49. package/src/renderer/shared/utils/markdown.tsx +217 -88
  50. package/src/renderer/shared/utils/slashCommandProcessor.ts +239 -0
  51. package/src/renderer/src/components/ChatPanel.tsx +486 -69
  52. package/src/renderer/src/components/DashboardSidebar.tsx +11 -2
  53. package/src/renderer/src/components/ImageStudioPanel.tsx +87 -4
  54. package/src/renderer/src/components/MintDashboard.tsx +195 -7
  55. package/src/renderer/src/components/PicturesLibrary.tsx +156 -15
  56. package/src/renderer/src/components/Settings/AgentsTab.tsx +21 -2
  57. package/src/renderer/src/components/Settings/AutomationTab.tsx +316 -18
  58. package/src/renderer/src/components/Settings/GeneralTab.tsx +795 -413
  59. package/src/renderer/src/components/Settings/PluginsTab.tsx +304 -70
  60. package/src/renderer/src/components/Settings/ThemeTab.tsx +6 -1
  61. package/src/renderer/src/components/SettingsWindow.tsx +106 -3
  62. package/src/renderer/src/components/VeoStudioPanel.tsx +549 -0
  63. package/src/renderer/src/components/WorkspacePanel.tsx +7 -125
  64. package/src/renderer/src/css/image-studio.css +106 -0
  65. package/src/renderer/src/css/settings.css +158 -0
  66. package/src/renderer/src/css/styles.css +368 -1
  67. package/src/renderer/src/css/veo-studio.css +626 -0
  68. package/src/renderer/src/index.css +1 -0
  69. package/src/renderer/src/tauri.ts +144 -17
  70. package/src/renderer/src-web/components/ChatPanel.tsx +385 -93
  71. package/src/renderer/src-web/components/DashboardSidebar.tsx +16 -1
  72. package/src/renderer/src-web/components/ImageStudioPanel.tsx +87 -4
  73. package/src/renderer/src-web/components/MintDashboard.tsx +156 -5
  74. package/src/renderer/src-web/components/PicturesLibrary.tsx +155 -15
  75. package/src/renderer/src-web/components/Settings/AgentsTab.tsx +21 -2
  76. package/src/renderer/src-web/components/Settings/AutomationTab.tsx +316 -18
  77. package/src/renderer/src-web/components/Settings/GeneralTab.tsx +795 -411
  78. package/src/renderer/src-web/components/Settings/PluginsTab.tsx +304 -70
  79. package/src/renderer/src-web/components/Settings/ThemeTab.tsx +6 -1
  80. package/src/renderer/src-web/components/SettingsWindow.tsx +110 -3
  81. package/src/renderer/src-web/components/VeoStudioPanel.tsx +549 -0
  82. package/src/renderer/src-web/css/image-studio.css +106 -0
  83. package/src/renderer/src-web/css/settings.css +158 -0
  84. package/src/renderer/src-web/css/styles.css +369 -1
  85. package/src/renderer/src-web/css/veo-studio.css +650 -0
  86. package/src/renderer/src-web/index.css +1 -0
  87. package/src/renderer/src-web/tauri.ts +135 -16
  88. package/src-tauri/src/desktop.rs +18 -16
  89. package/src-tauri/src/discord_rpc.rs +1 -1
  90. package/src-tauri/src/lib.rs +155 -25
  91. package/src-tauri/src/webhooks.rs +45 -31
  92. package/src-tauri/src/workflows.rs +1 -0
  93. package/src-tauri/tauri.conf.json +1 -1
  94. package/temp_gridgeist/AGENTS.md +8 -0
  95. package/temp_gridgeist/CHANGELOG.md +130 -0
  96. package/temp_gridgeist/LICENSE +21 -0
  97. package/temp_gridgeist/README.md +323 -0
  98. package/temp_gridgeist/README.th.md +325 -0
  99. package/temp_gridgeist/skills/gridgeist/SKILL.md +88 -0
  100. package/temp_gridgeist/skills/gridgeist/agents/openai.yaml +9 -0
  101. package/temp_gridgeist/skills/gridgeist/assets/gridgeist-small.svg +10 -0
  102. package/temp_gridgeist/skills/gridgeist/assets/gridgeist.png +0 -0
  103. package/temp_gridgeist/skills/gridgeist/assets/gridgeist.svg +18 -0
  104. package/temp_gridgeist/skills/gridgeist/references/design-language.md +88 -0
  105. package/temp_gridgeist/skills/gridgeist/references/review-checklist.md +128 -0
  106. package/temp_gridgeist/skills/gridgeist/references/system-contract.md +109 -0
@@ -0,0 +1,650 @@
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
+ transform: none;
286
+ }
287
+
288
+ .veo-studio-aspect-icon {
289
+ font-size: 0.65rem;
290
+ line-height: 1;
291
+ }
292
+
293
+ /* ── Generate button ─────────────────────────────────────── */
294
+ .veo-studio-generate-btn {
295
+ display: flex;
296
+ align-items: center;
297
+ justify-content: center;
298
+ gap: 8px;
299
+ width: 100%;
300
+ padding: 12px 16px;
301
+ border-radius: 10px;
302
+ background: var(--accent);
303
+ border: 1px solid var(--accent);
304
+ color: #fff;
305
+ font-size: 0.90rem;
306
+ font-weight: 600;
307
+ cursor: pointer;
308
+ transition: opacity 0.15s, box-shadow 0.15s, transform 0.1s;
309
+ outline: none;
310
+ box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 20%, transparent);
311
+ }
312
+
313
+ .veo-studio-generate-btn:hover:not(:disabled) {
314
+ background: var(--accent-hover);
315
+ border-color: var(--accent-hover);
316
+ box-shadow: 0 6px 18px color-mix(in srgb, var(--accent) 35%, transparent);
317
+ transform: translateY(-1px);
318
+ }
319
+
320
+ .veo-studio-generate-btn:disabled {
321
+ opacity: 0.5;
322
+ cursor: not-allowed;
323
+ transform: none;
324
+ box-shadow: none;
325
+ }
326
+
327
+ .veo-studio-generate-btn.is-loading {
328
+ cursor: wait;
329
+ }
330
+
331
+ .veo-studio-spinner {
332
+ display: inline-block;
333
+ width: 14px;
334
+ height: 14px;
335
+ border: 2px solid rgb(255 255 255 / 30%);
336
+ border-top-color: #fff;
337
+ border-radius: 50%;
338
+ animation: veo-spin 0.7s linear infinite;
339
+ flex-shrink: 0;
340
+ }
341
+
342
+ /* ── Error Display ───────────────────────────────────────── */
343
+ .veo-studio-error {
344
+ display: flex;
345
+ align-items: flex-start;
346
+ gap: 8px;
347
+ padding: 10px 12px;
348
+ background: rgb(239 68 68 / 10%);
349
+ border: 1px solid rgb(239 68 68 / 25%);
350
+ border-radius: 8px;
351
+ color: #fca5a5;
352
+ font-size: 0.8rem;
353
+ line-height: 1.5;
354
+ }
355
+
356
+ .veo-studio-error span {
357
+ flex: 1;
358
+ }
359
+
360
+ .veo-studio-error button {
361
+ background: none;
362
+ border: none;
363
+ color: #fca5a5;
364
+ cursor: pointer;
365
+ font-size: 1rem;
366
+ padding: 0;
367
+ line-height: 1;
368
+ flex-shrink: 0;
369
+ opacity: 0.7;
370
+ }
371
+
372
+ /* ── Recent Prompts ──────────────────────────────────────── */
373
+ .veo-studio-history {
374
+ display: flex;
375
+ flex-direction: column;
376
+ gap: 4px;
377
+ }
378
+
379
+ .veo-studio-history-item {
380
+ display: flex;
381
+ align-items: center;
382
+ gap: 7px;
383
+ padding: 6px 9px;
384
+ border-radius: 8px;
385
+ background: var(--input-bg);
386
+ border: 1px solid var(--border);
387
+ color: var(--text-soft);
388
+ font-size: 0.78rem;
389
+ cursor: pointer;
390
+ text-align: left;
391
+ transition: background 0.15s, color 0.15s;
392
+ outline: none;
393
+ white-space: nowrap;
394
+ overflow: hidden;
395
+ text-overflow: ellipsis;
396
+ }
397
+
398
+ .veo-studio-history-item span {
399
+ overflow: hidden;
400
+ text-overflow: ellipsis;
401
+ }
402
+
403
+ .veo-studio-history-item:hover:not(:disabled) {
404
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
405
+ color: var(--text-main);
406
+ }
407
+
408
+ /* ── Right Column (Results Workspace) ────────────────────── */
409
+ .veo-studio-results {
410
+ display: flex;
411
+ flex-direction: column;
412
+ overflow-y: auto;
413
+ }
414
+
415
+ .veo-studio-active-workspace {
416
+ flex-shrink: 0;
417
+ padding: 24px;
418
+ min-height: 320px;
419
+ display: flex;
420
+ flex-direction: column;
421
+ justify-content: center;
422
+ align-items: center;
423
+ background: var(--chrome-bg);
424
+ border-bottom: 1px solid var(--border);
425
+ }
426
+
427
+ /* ── Loading Skeleton ────────────────────────────────────── */
428
+ .veo-studio-skeleton-wrap {
429
+ display: flex;
430
+ flex-direction: column;
431
+ align-items: center;
432
+ gap: 16px;
433
+ width: 100%;
434
+ }
435
+
436
+ .veo-studio-skeleton {
437
+ position: relative;
438
+ width: 100%;
439
+ max-width: 560px;
440
+ aspect-ratio: 16 / 9;
441
+ border-radius: 12px;
442
+ background: var(--input-bg);
443
+ border: 1px solid var(--border);
444
+ overflow: hidden;
445
+ display: flex;
446
+ align-items: center;
447
+ justify-content: center;
448
+ }
449
+
450
+ .veo-studio-skeleton-shine {
451
+ position: absolute;
452
+ inset: 0;
453
+ background: linear-gradient(
454
+ 90deg,
455
+ transparent 0%,
456
+ color-mix(in srgb, var(--accent) 5%, transparent) 40%,
457
+ color-mix(in srgb, var(--accent) 50%, transparent) 50%,
458
+ color-mix(in srgb, var(--accent) 5%, transparent) 60%,
459
+ transparent 100%
460
+ );
461
+ background-size: 200% 100%;
462
+ animation: veo-shimmer 1.6s ease-in-out infinite;
463
+ }
464
+
465
+ .veo-studio-skeleton-icon {
466
+ color: var(--text-muted);
467
+ }
468
+
469
+ /* ── Video Card ──────────────────────────────────────────── */
470
+ .veo-studio-video-grid {
471
+ display: flex;
472
+ justify-content: center;
473
+ width: 100%;
474
+ max-width: 560px;
475
+ }
476
+
477
+ .veo-studio-card {
478
+ width: 100%;
479
+ border-radius: 12px;
480
+ border: 1px solid var(--border);
481
+ background: var(--panel-soft);
482
+ overflow: hidden;
483
+ }
484
+
485
+ .veo-studio-card-video-wrap {
486
+ width: 100%;
487
+ aspect-ratio: 16 / 9;
488
+ background: #000;
489
+ }
490
+
491
+ .veo-studio-card-video {
492
+ width: 100%;
493
+ height: 100%;
494
+ object-fit: contain;
495
+ }
496
+
497
+ /* ── Video Action buttons ────────────────────────────────── */
498
+ .veo-studio-card-actions {
499
+ display: flex;
500
+ gap: 8px;
501
+ padding: 10px 12px;
502
+ background: var(--chrome-bg);
503
+ border-top: 1px solid var(--border);
504
+ }
505
+
506
+ .veo-studio-action-btn {
507
+ display: inline-flex;
508
+ align-items: center;
509
+ gap: 5px;
510
+ padding: 6px 12px;
511
+ border-radius: 8px;
512
+ background: var(--input-bg);
513
+ border: 1px solid var(--border);
514
+ color: var(--text-soft);
515
+ font-size: 0.78rem;
516
+ font-weight: 500;
517
+ cursor: pointer;
518
+ transition: background 0.15s, color 0.15s;
519
+ }
520
+
521
+ .veo-studio-action-btn:hover {
522
+ background: color-mix(in srgb, var(--accent) 8%, transparent);
523
+ color: var(--text-main);
524
+ border-color: var(--accent);
525
+ }
526
+
527
+ .veo-studio-action-btn--primary {
528
+ background: var(--accent);
529
+ border-color: var(--accent);
530
+ color: #fff;
531
+ }
532
+
533
+ .veo-studio-action-btn--primary:hover {
534
+ background: var(--accent-hover);
535
+ border-color: var(--accent-hover);
536
+ }
537
+
538
+ /* ── Meta info ───────────────────────────────────────────── */
539
+ .veo-studio-meta {
540
+ font-size: 0.76rem;
541
+ color: var(--text-muted);
542
+ margin-top: 10px;
543
+ }
544
+
545
+ /* ── Workspace Empty State ───────────────────────────────── */
546
+ .veo-studio-active-empty {
547
+ display: flex;
548
+ flex-direction: column;
549
+ align-items: center;
550
+ gap: 12px;
551
+ color: var(--text-muted);
552
+ }
553
+
554
+ .veo-studio-empty-icon {
555
+ color: var(--text-muted);
556
+ opacity: 0.6;
557
+ }
558
+
559
+ .veo-studio-active-empty p {
560
+ margin: 0;
561
+ font-size: 0.95rem;
562
+ color: var(--text-soft);
563
+ font-weight: 600;
564
+ }
565
+
566
+ .veo-studio-active-empty span {
567
+ font-size: 0.82rem;
568
+ }
569
+
570
+ /* ── History Divider Header ──────────────────────────────── */
571
+ .veo-studio-history-header {
572
+ padding: 10px 24px;
573
+ border-bottom: 1px solid var(--border);
574
+ background: var(--chrome-soft, var(--chrome-bg));
575
+ }
576
+
577
+ .veo-studio-history-title {
578
+ display: flex;
579
+ align-items: center;
580
+ gap: 8px;
581
+ color: var(--text-soft);
582
+ font-size: 0.78rem;
583
+ font-weight: 600;
584
+ text-transform: uppercase;
585
+ letter-spacing: 0.04em;
586
+ }
587
+
588
+ .veo-studio-history-badge {
589
+ display: inline-flex;
590
+ align-items: center;
591
+ justify-content: center;
592
+ min-width: 18px;
593
+ height: 18px;
594
+ padding: 0 5px;
595
+ border-radius: 99px;
596
+ background: color-mix(in srgb, var(--accent) 15%, transparent);
597
+ color: var(--accent-hover);
598
+ font-size: 0.72rem;
599
+ font-weight: 700;
600
+ }
601
+
602
+ .veo-studio-history-gallery {
603
+ padding: 20px;
604
+ flex: 1;
605
+ background: var(--chrome-bg);
606
+ }
607
+
608
+ .veo-studio-gallery-empty {
609
+ padding: 40px 0;
610
+ text-align: center;
611
+ color: var(--text-muted);
612
+ }
613
+
614
+ .veo-studio-gallery-empty p {
615
+ margin: 0 0 6px;
616
+ font-size: 0.88rem;
617
+ font-weight: 600;
618
+ color: var(--text-soft);
619
+ }
620
+
621
+ .veo-studio-gallery-empty span {
622
+ font-size: 0.78rem;
623
+ }
624
+
625
+ @keyframes veo-spin {
626
+ to { transform: rotate(360deg); }
627
+ }
628
+
629
+ @keyframes veo-shimmer {
630
+ 0% { background-position: -200% 0; }
631
+ 100% { background-position: 200% 0; }
632
+ }
633
+
634
+ /* Responsive adjustments */
635
+ @media (max-width: 900px) {
636
+ .veo-studio-content {
637
+ grid-template-columns: 1fr;
638
+ }
639
+ .veo-studio-controls {
640
+ border-right: none;
641
+ border-bottom: 1px solid var(--border);
642
+ max-height: 400px;
643
+ }
644
+ }
645
+
646
+ @media (max-width: 760px) {
647
+ .veo-studio {
648
+ left: 0 !important;
649
+ }
650
+ }
@@ -3,6 +3,7 @@
3
3
  @import './css/spotlight.css';
4
4
  @import './css/widget.css';
5
5
  @import './css/image-studio.css';
6
+ @import './css/veo-studio.css';
6
7
 
7
8
  * {
8
9
  box-sizing: border-box;