@twick/studio 0.14.5 → 0.14.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/studio.css CHANGED
@@ -1,284 +1,2160 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');
2
- @tailwind base;
3
- @tailwind components;
4
- @tailwind utilities;
5
- @layer base {
6
- * {
7
- @apply border-gray-600;
8
- }
9
-
10
- body {
11
- @apply bg-neutral-900 text-gray-100 font-sans;
12
- font-feature-settings: "rlig" 1, "calt" 1;
13
- }
14
-
15
- html {
16
- @apply scroll-smooth;
17
- }
18
- }
19
- @layer components {
20
- /* Custom scrollbar */
21
- .custom-scrollbar {
22
- scrollbar-width: thin;
23
- scrollbar-color: theme('colors.purple.600') theme('colors.gray.700');
24
- }
25
-
26
- .custom-scrollbar::-webkit-scrollbar {
27
- width: 6px;
28
- height: 6px;
29
- }
30
-
31
- .custom-scrollbar::-webkit-scrollbar-track {
32
- @apply bg-neutral-700;
33
- }
34
-
35
- .custom-scrollbar::-webkit-scrollbar-thumb {
36
- @apply bg-purple-600 rounded-full;
37
- }
38
-
39
- .custom-scrollbar::-webkit-scrollbar-thumb:hover {
40
- @apply bg-purple-500;
41
- }
42
-
43
- /* Glass morphism effect */
44
- .glass {
45
- @apply bg-neutral-800/70 backdrop-blur-md border border-gray-600/50 shadow-lg;
46
- }
47
-
48
- /* Button styles */
49
- .btn {
50
- @apply inline-flex items-center justify-center rounded-lg px-3 py-2 text-sm font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-800 disabled:opacity-50 disabled:cursor-not-allowed;
51
- }
52
-
53
- .btn-primary {
54
- @apply bg-gradient-to-r from-purple-600 to-purple-700 text-white hover:from-purple-700 hover:to-purple-800 focus:ring-purple-500 shadow-lg shadow-purple-500/25 hover:shadow-xl hover:shadow-purple-500/30;
55
- }
56
-
57
- .btn-secondary {
58
- @apply bg-gradient-to-r from-purple-200 to-purple-300 text-gray-600 hover:from-purple-200 hover:to-purple-300 focus:ring-purple-100 shadow-lg shadow-purple-100/25 hover:shadow-xl hover:shadow-purple-100/30;
59
- }
60
-
61
- .btn-ghost {
62
- @apply text-gray-300 hover:text-white hover:bg-neutral-700/50 focus:ring-gray-500;
63
- }
64
-
65
- .btn-outline {
66
- @apply border border-purple-500 text-purple-400 hover:bg-purple-500 hover:text-white focus:ring-purple-500;
67
- }
68
-
69
- .btn-danger {
70
- @apply bg-gradient-to-r from-red-600 to-red-700 text-white hover:from-red-700 hover:to-red-800 focus:ring-red-500;
71
- }
72
-
73
- /* Input styles */
74
- .input {
75
- @apply w-full rounded-lg border border-gray-600 bg-neutral-700/80 px-3 py-2 text-sm text-gray-100 placeholder-gray-400 focus:border-purple-500 focus:outline-none focus:ring-2 focus:ring-purple-500/20 transition-all duration-200 backdrop-blur-sm shadow-sm;
76
- }
77
-
78
- /* Card styles */
79
- .card {
80
- @apply rounded-xl border border-gray-600/50 bg-neutral-800/60 backdrop-blur-md shadow-lg;
81
- }
82
-
83
- /* Panel styles */
84
- .panel {
85
- @apply card p-4;
86
- }
87
-
88
- /* Sidebar styles */
89
- .sidebar {
90
- @apply w-16 bg-neutral-800/80 border-r border-gray-600/50 flex flex-col backdrop-blur-md shadow-lg;
91
- }
92
-
93
- /* Timeline track styles */
94
- .timeline-track {
95
- @apply relative h-12 bg-neutral-700/50 border border-gray-600/50 rounded-lg overflow-hidden backdrop-blur-sm shadow-md;
96
- }
97
-
98
- .timeline-element {
99
- @apply absolute top-1 bottom-1 rounded-md border border-purple-500/50 bg-gradient-to-r from-purple-600/30 to-purple-600/30 hover:from-purple-600/50 hover:to-purple-600/50 transition-all duration-200 cursor-pointer shadow-lg;
100
- }
101
-
102
- /* Canvas styles */
103
- .canvas-container {
104
- @apply relative overflow-hidden shadow-xl;
105
- }
106
-
107
- /* Toolbar styles */
108
- .toolbar {
109
- @apply flex items-center gap-2 p-3 bg-neutral-800/80 backdrop-blur-md border-b border-gray-600/50 shadow-md;
110
- }
111
-
112
- /* Header styles */
113
- .header {
114
- @apply h-14 bg-neutral-800/90 border-b border-gray-600/50 flex items-center justify-between px-4 backdrop-blur-md shadow-lg;
115
- }
116
-
117
- /* Media library styles */
118
- .media-item {
119
- @apply transition-all duration-200 hover:scale-105 hover:shadow-lg hover:shadow-purple-500/20;
120
- }
121
-
122
- /* Progress bar styling */
123
- .progress-bar {
124
- @apply transition-all duration-150 ease-out bg-gradient-to-r from-purple-500 to-purple-500;
125
- }
126
-
127
- /* Button hover effects */
128
- .btn-hover {
129
- @apply transform hover:scale-105 active:scale-95 transition-transform duration-200;
130
- }
131
-
132
- /* Accent colors */
133
- .accent-purple {
134
- @apply text-purple-400;
135
- }
136
-
137
- .accent-blue {
138
- @apply text-purple-400;
139
- }
140
-
141
- /* Gradient text */
142
- .text-gradient-purple {
143
- @apply bg-gradient-to-r from-purple-400 to-purple-600 bg-clip-text text-transparent;
144
- }
145
-
146
- .text-gradient-blue {
147
- @apply bg-gradient-to-r from-purple-400 to-purple-600 bg-clip-text text-transparent;
148
- }
149
-
150
- /* Glow effects */
151
- .glow-purple {
152
- box-shadow: 0 0 20px theme('colors.purple.500/20');
153
- }
154
-
155
- .glow-blue {
156
- box-shadow: 0 0 20px theme('colors.blue.500/20');
157
- }
158
-
159
- /* Form elements */
160
- .aspect-ratio-btn {
161
- @apply px-3 py-1.5 rounded-lg border border-gray-600 text-gray-300 hover:border-purple-500 hover:text-purple-400 transition-all duration-200 text-sm;
162
- }
163
-
164
- .aspect-ratio-btn.active {
165
- @apply border-purple-500 bg-purple-500/20 text-purple-400 shadow-md shadow-purple-500/25;
166
- }
167
-
168
- .slider-thumb {
169
- @apply appearance-none bg-transparent cursor-pointer;
170
- }
171
-
172
- .slider-thumb::-webkit-slider-thumb {
173
- @apply appearance-none w-3 h-3 bg-gradient-to-r from-purple-500 to-purple-500 rounded-full shadow-lg cursor-pointer hover:shadow-xl hover:shadow-purple-500/30 transition-all duration-200;
174
- }
175
-
176
- .slider-thumb::-moz-range-thumb {
177
- @apply appearance-none w-3 h-3 bg-gradient-to-r from-purple-500 to-purple-500 rounded-full shadow-lg cursor-pointer border-0 hover:shadow-xl hover:shadow-purple-500/30 transition-all duration-200;
178
- }
179
-
180
- .slider-thumb::-webkit-slider-track {
181
- @apply w-full h-1.5 bg-neutral-600/50 rounded-full;
182
- }
183
-
184
- .slider-thumb::-moz-range-track {
185
- @apply w-full h-1.5 bg-neutral-600/50 rounded-full border-0;
186
- }
187
-
188
- /* Form control buttons */
189
- .form-btn {
190
- @apply w-8 h-8 bg-gradient-to-br from-gray-700 to-gray-800 hover:from-gray-600 hover:to-gray-700 rounded-lg flex items-center justify-center text-gray-300 hover:text-white transition-all duration-200 shadow-sm hover:shadow-md hover:shadow-purple-500/20;
191
- }
192
-
193
- .form-btn.active {
194
- @apply bg-gradient-to-br from-purple-500 to-purple-600 text-white shadow-md shadow-purple-500/25;
195
- }
196
-
197
- /* Toolbar buttons */
198
- .toolbar-btn {
199
- @apply w-12 max-h-12 rounded-lg flex flex-col items-center justify-center transition-all duration-200 shadow-sm hover:shadow-md;
200
- }
201
-
202
- .toolbar-btn.active {
203
- @apply bg-gradient-to-br from-purple-500 to-purple-600 text-white shadow-lg shadow-purple-500/25;
204
- }
205
-
206
- .toolbar-btn:not(.active) {
207
- @apply text-gray-400 hover:text-white hover:bg-neutral-700/50;
208
- }
209
-
210
- /* Props Toolbar buttons */
211
- .props-toolbar-btn {
212
- @apply w-14 max-h-14 rounded-lg flex flex-col items-center justify-center transition-all duration-200 shadow-sm hover:shadow-md;
213
- }
214
-
215
- .props-toolbar-btn.active {
216
- @apply bg-gradient-to-br from-purple-500 to-purple-600 text-white shadow-lg shadow-purple-500/25;
217
- }
218
-
219
- .props-toolbar-btn:not(.active) {
220
- @apply text-gray-400 hover:text-white hover:bg-neutral-700/50;
221
- }
222
- }
223
- @layer utilities {
224
- /* Text gradients */
225
- .text-gradient {
226
- @apply bg-gradient-to-r from-purple-400 to-purple-400 bg-clip-text text-transparent;
227
- }
228
-
229
- /* Glow effects */
230
- .glow-primary {
231
- box-shadow: 0 0 20px theme('colors.purple.500/20');
232
- }
233
-
234
- .glow-accent {
235
- box-shadow: 0 0 20px theme('colors.blue.500/20');
236
- }
237
-
238
- /* Grid layouts */
239
- .grid-auto-fit {
240
- grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
241
- }
242
-
243
- .grid-auto-fill {
244
- grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
245
- }
246
-
247
- /* Backdrop blur utilities */
248
- .backdrop-blur-sm {
249
- -webkit-backdrop-filter: blur(4px);
250
- backdrop-filter: blur(4px);
251
- }
252
-
253
- .backdrop-blur-md {
254
- -webkit-backdrop-filter: blur(12px);
255
- backdrop-filter: blur(12px);
256
- }
257
-
258
- .backdrop-blur-lg {
259
- -webkit-backdrop-filter: blur(16px);
260
- backdrop-filter: blur(16px);
261
- }
262
- }
263
- /* Video player customizations */
264
- video::-webkit-media-controls,
265
- video::-webkit-media-controls-panel {
266
- display: none;
267
- }
268
- .main-container {
269
- max-width: calc(100% - 634px);
270
- }
271
- /* Custom scrollbar */
272
- ::-webkit-scrollbar {
273
- width: 6px;
274
- }
275
- ::-webkit-scrollbar-track {
276
- background: #374151;
277
- }
278
- ::-webkit-scrollbar-thumb {
279
- background: #9333ea;
280
- border-radius: 3px;
281
- }
282
- ::-webkit-scrollbar-thumb:hover {
283
- background: #a855f7;
284
- }
1
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap');@import url('https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap');@import url('https://fonts.googleapis.com/css2?family=Mulish:ital,wght@0,200..1000;1,200..1000&display=swap');@import url('https://fonts.googleapis.com/css2?family=Luckiest+Guy&family=Mulish:ital,wght@0,200..1000;1,200..1000&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap');@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap');@import url('https://fonts.googleapis.com/css2?family=Bangers&family=Birthstone&family=Corinthia:wght@400;700&family=Imperial+Script&family=Kumar+One+Outline&family=Londrina+Outline&family=Marck+Script&family=Montserrat:ital,wght@0,100..900;1,100..900&family=Pattaya&family=Playfair+Display:ital,wght@0,400..900;1,400..900&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');@import url('https://fonts.cdnfonts.com/css/peralta');@import url('https://fonts.cdnfonts.com/css/impact');@import url('https://fonts.cdnfonts.com/css/lumanosimo');@import url('https://fonts.cdnfonts.com/css/kapakana');@import url('https://fonts.cdnfonts.com/css/handyrush');@import url('https://fonts.cdnfonts.com/css/dasher');@import url('https://fonts.cdnfonts.com/css/brittany-signature');
2
+
3
+ :root {
4
+ /* Additional Studio-specific variables */
5
+ --transition-all: all 0.2s ease;
6
+ }
7
+
8
+ /* Base styles */
9
+
10
+ *,
11
+ *::before,
12
+ *::after {
13
+ box-sizing: border-box;
14
+ }
15
+
16
+ * {
17
+ border-color: var(--color-neutral-600);
18
+ }
19
+
20
+ body {
21
+ background-color: var(--color-neutral-900);
22
+ color: var(--color-gray-100);
23
+ font-family: 'Inter', sans-serif;
24
+ font-feature-settings: "rlig" 1, "calt" 1;
25
+ }
26
+
27
+ html {
28
+ scroll-behavior: smooth;
29
+ }
30
+
31
+ /* Components */
32
+
33
+ /* ========================================
34
+ SEARCH UTILITIES
35
+ ======================================== */
36
+
37
+ .search-container {
38
+ display: flex;
39
+ position: relative;
40
+ width: 100%;
41
+ }
42
+
43
+ .search-input {
44
+ width: 100%;
45
+ padding-left: 2.5rem !important;
46
+ }
47
+
48
+ .search-icon {
49
+ position: absolute;
50
+ left: 0.75rem;
51
+ top: 50%;
52
+ transform: translateY(-50%);
53
+ color: var(--color-gray-400);
54
+ transition: var(--transition-all);
55
+ pointer-events: none;
56
+ }
57
+
58
+ .search-icon:hover {
59
+ color: var(--color-gray-300);
60
+ }
61
+
62
+ /* ========================================
63
+ FILE INPUT UTILITIES
64
+ ======================================== */
65
+
66
+ .file-input-container {
67
+ display: flex;
68
+ position: relative;
69
+ width: 100%;
70
+ }
71
+
72
+ .file-input-hidden {
73
+ position: absolute;
74
+ opacity: 0;
75
+ pointer-events: none;
76
+ }
77
+
78
+ .file-input-label {
79
+ display: inline-flex;
80
+ align-items: center;
81
+ justify-content: center;
82
+ gap: 0.5rem;
83
+ padding: 0.5rem 1rem;
84
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
85
+ color: white;
86
+ border-radius: 0.5rem;
87
+ cursor: pointer;
88
+ transition: var(--transition-all);
89
+ }
90
+
91
+ /* Panel styles */
92
+
93
+ .panel-container {
94
+ height: 100%;
95
+ width: 18rem;
96
+ min-width: 18rem;
97
+ max-width: 18rem;
98
+ display: flex;
99
+ flex-direction: column;
100
+ background-color: var(--color-neutral-900);
101
+ padding: 0.5rem;
102
+ overflow-x: hidden;
103
+ overflow-y: auto;
104
+ }
105
+
106
+ .panel-title {
107
+ font-size: 1.125rem;
108
+ font-weight: 600;
109
+ color: var(--color-gray-100);
110
+ margin-bottom: 1rem;
111
+ }
112
+
113
+ .panel-section {
114
+ display: flex;
115
+ flex-direction: column;
116
+ margin-bottom: 0.75rem;
117
+ }
118
+
119
+ .panel-content {
120
+ flex: 1;
121
+ overflow-y: auto;
122
+ }
123
+
124
+ /* Properties Panel */
125
+
126
+ .properties-panel {
127
+ width: 18rem;
128
+ height: 100%;
129
+ background: linear-gradient(to bottom, rgba(38, 38, 38, 0.9), rgba(23, 23, 23, 0.8));
130
+ border-left: 1px solid rgba(75, 85, 99, 0.4);
131
+ overflow-y: hidden;
132
+ overflow-x: hidden;
133
+ backdrop-filter: blur(24px);
134
+ box-shadow: var(--shadow-xl);
135
+ }
136
+
137
+ .properties-header {
138
+ padding: 0.75rem;
139
+ border-bottom: 1px solid rgba(75, 85, 99, 0.3);
140
+ background: linear-gradient(to right, rgba(147, 51, 234, 0.1), transparent);
141
+ }
142
+
143
+ .properties-title {
144
+ font-size: 1.125rem;
145
+ font-weight: 700;
146
+ color: white;
147
+ }
148
+
149
+ /* Property Groups */
150
+
151
+ .properties-group {
152
+ display: flex;
153
+ flex-direction: column;
154
+ gap: 0.75rem;
155
+ }
156
+
157
+ .property-section {
158
+ background-color: rgba(38, 38, 38, 0.4);
159
+ border-radius: 0.5rem;
160
+ padding: 0.625rem;
161
+ border: 1px solid rgba(75, 85, 99, 0.2);
162
+ }
163
+
164
+ .property-title {
165
+ font-size: 0.75rem;
166
+ font-weight: 600;
167
+ color: var(--color-gray-200);
168
+ margin-bottom: 0.5rem;
169
+ display: flex;
170
+ align-items: center;
171
+ gap: 0.375rem;
172
+ }
173
+
174
+ .property-indicator {
175
+ width: 0.375rem;
176
+ height: 0.375rem;
177
+ background-color: var(--color-purple-400);
178
+ border-radius: 9999px;
179
+ }
180
+
181
+ .property-grid {
182
+ display: grid;
183
+ grid-template-columns: repeat(2, 1fr);
184
+ gap: 0.5rem;
185
+ }
186
+
187
+ .property-label {
188
+ display: block;
189
+ font-size: 0.75rem;
190
+ color: var(--color-gray-400);
191
+ margin-bottom: 0.25rem;
192
+ }
193
+
194
+ .property-input {
195
+ width: 100%;
196
+ background-color: rgba(64, 64, 64, 0.6);
197
+ border: 1px solid rgba(75, 85, 99, 0.4);
198
+ border-radius: 0.375rem;
199
+ color: white;
200
+ font-size: 0.75rem;
201
+ padding: 0.375rem 0.5rem;
202
+ transition: var(--transition-all);
203
+ }
204
+
205
+ .property-input:focus {
206
+ border-color: var(--color-purple-500);
207
+ outline: none;
208
+ box-shadow: 0 0 0 1px rgba(147, 51, 234, 0.3);
209
+ }
210
+
211
+ .property-range-labels {
212
+ display: flex;
213
+ justify-content: space-between;
214
+ font-size: 0.75rem;
215
+ color: var(--color-gray-400);
216
+ margin-top: 0.25rem;
217
+ }
218
+
219
+ .media-content {
220
+ flex: 1;
221
+ overflow-y: auto;
222
+ min-height: 300px;
223
+ }
224
+
225
+ /* Media List */
226
+
227
+ .media-list {
228
+ display: flex;
229
+ flex-direction: column;
230
+ gap: 0.5rem;
231
+ padding: 0.5rem;
232
+ }
233
+
234
+ .media-list-item {
235
+ position: relative;
236
+ cursor: pointer;
237
+ border-radius: 0.5rem;
238
+ background-color: var(--color-neutral-800);
239
+ overflow: hidden;
240
+ transition: background-color 0.2s;
241
+ }
242
+
243
+ .media-list-item:hover {
244
+ background-color: var(--color-neutral-700);
245
+ }
246
+
247
+ .media-list-content {
248
+ display: flex;
249
+ align-items: center;
250
+ gap: 0.75rem;
251
+ padding: 0.75rem;
252
+ }
253
+
254
+ .media-list-icon {
255
+ width: 2.5rem;
256
+ height: 2.5rem;
257
+ border-radius: 0.5rem;
258
+ background-color: var(--color-neutral-700);
259
+ display: flex;
260
+ align-items: center;
261
+ justify-content: center;
262
+ color: var(--color-gray-300);
263
+ transition: all 0.2s;
264
+ }
265
+
266
+ .media-list-icon.active {
267
+ background-color: var(--color-purple-500);
268
+ color: white;
269
+ }
270
+
271
+ .media-list-title {
272
+ flex: 1;
273
+ font-size: 0.875rem;
274
+ color: var(--color-gray-100);
275
+ white-space: nowrap;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ }
279
+
280
+ /* Icon Grid */
281
+
282
+ .icon-grid {
283
+ display: grid;
284
+ grid-template-columns: repeat(4, minmax(56px, 1fr));
285
+ gap: 0.75rem;
286
+ padding: 0.25rem;
287
+ }
288
+
289
+ .icon-item {
290
+ position: relative;
291
+ cursor: pointer;
292
+ border-radius: 0.5rem;
293
+ background-color: var(--color-neutral-800);
294
+ aspect-ratio: 1;
295
+ overflow: hidden;
296
+ }
297
+
298
+ .icon-item:hover {
299
+ background-color: var(--color-neutral-700);
300
+ }
301
+
302
+ .icon-content {
303
+ display: flex;
304
+ align-items: center;
305
+ justify-content: center;
306
+ padding: 1rem;
307
+ }
308
+
309
+ .icon-content svg {
310
+ width: 100%;
311
+ height: 100%;
312
+ color: var(--color-gray-300);
313
+ transition: color 0.2s;
314
+ }
315
+
316
+ .icon-item:hover .icon-content svg {
317
+ color: var(--color-gray-100);
318
+ }
319
+
320
+ .icon-actions {
321
+ position: absolute;
322
+ width: 100%;
323
+ justify-content: space-between;
324
+ top: 0rem;
325
+ right: 0rem;
326
+ display: flex;
327
+ gap: 0.5rem;
328
+ opacity: 0;
329
+ transition: opacity 0.2s;
330
+ }
331
+
332
+ .icon-item:hover .icon-actions {
333
+ opacity: 1;
334
+ }
335
+
336
+ .icon-action-btn {
337
+ width: 1.5rem;
338
+ height: 1.5rem;
339
+ border-radius: 0.375rem;
340
+ background-color: rgba(0, 0, 0, 0.7);
341
+ border: none;
342
+ display: flex;
343
+ align-items: center;
344
+ justify-content: center;
345
+ color: white;
346
+ cursor: pointer;
347
+ transition: background-color 0.2s;
348
+ }
349
+
350
+ .icon-action-btn:hover {
351
+ background-color: var(--color-purple-500);
352
+ }
353
+
354
+ .icon-name {
355
+ position: absolute;
356
+ bottom: 0;
357
+ left: 0;
358
+ right: 0;
359
+ padding: 0.2rem;
360
+ background-color: rgba(0, 0, 0, 0.7);
361
+ color: white;
362
+ font-size: 0.75rem;
363
+ text-align: center;
364
+ white-space: nowrap;
365
+ overflow: hidden;
366
+ text-overflow: ellipsis;
367
+ opacity: 0;
368
+ transition: opacity 0.2s;
369
+ }
370
+
371
+ .icon-item:hover .icon-name {
372
+ opacity: 1;
373
+ }
374
+
375
+ .media-count {
376
+ padding: 0.5rem 0.75rem;
377
+ color: var(--color-gray-400);
378
+ font-size: 0.875rem;
379
+ }
380
+
381
+ /* Media styles */
382
+
383
+ .media-grid {
384
+ display: grid;
385
+ grid-template-columns: repeat(2, minmax(125px, 1fr));
386
+ gap: 0.75rem;
387
+ padding: 0.25rem;
388
+ overflow: hidden;
389
+ }
390
+
391
+ .media-item {
392
+ position: relative;
393
+ cursor: pointer;
394
+ overflow: hidden;
395
+ border-radius: 0.5rem;
396
+ background-color: var(--color-neutral-800);
397
+ aspect-ratio: 9/16;
398
+ }
399
+
400
+ .media-item:hover {
401
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
402
+ }
403
+
404
+ .media-item-content {
405
+ width: 100%;
406
+ height: 100%;
407
+ object-fit: cover;
408
+ }
409
+
410
+ .media-duration {
411
+ position: absolute;
412
+ bottom: 0.5rem;
413
+ right: 0.5rem;
414
+ background-color: rgba(0, 0, 0, 0.7);
415
+ color: white;
416
+ padding: 0.25rem 0.5rem;
417
+ border-radius: 0.25rem;
418
+ font-size: 0.75rem;
419
+ }
420
+
421
+ .media-video {
422
+ height: 100%;
423
+ width: 100%;
424
+ object-fit: cover;
425
+ transition: transform 200ms;
426
+ }
427
+
428
+ .media-video.playing {
429
+ transform: scale(1.05);
430
+ }
431
+
432
+ .media-video:not(.playing):hover {
433
+ transform: scale(1.05);
434
+ }
435
+
436
+ .media-overlay {
437
+ position: absolute;
438
+ inset: 0;
439
+ background-color: black;
440
+ opacity: 0;
441
+ transition: opacity 200ms;
442
+ }
443
+
444
+ .media-overlay.active {
445
+ opacity: 0.3;
446
+ }
447
+
448
+ .media-item:hover .media-overlay:not(.active) {
449
+ opacity: 0.2;
450
+ }
451
+
452
+ .media-actions {
453
+ position: absolute;
454
+ top: 0.5rem;
455
+ right: 0.5rem;
456
+ display: flex;
457
+ gap: 0.5rem;
458
+ opacity: 0;
459
+ transition: opacity 0.2s;
460
+ }
461
+
462
+ .media-item:hover .media-actions {
463
+ opacity: 1;
464
+ }
465
+
466
+ .media-action-btn {
467
+ width: 2rem;
468
+ height: 2rem;
469
+ border-radius: 0.375rem;
470
+ background-color: rgba(0, 0, 0, 0.7);
471
+ border: none;
472
+ display: flex;
473
+ align-items: center;
474
+ justify-content: center;
475
+ color: white;
476
+ cursor: pointer;
477
+ transition: background-color 0.2s;
478
+ }
479
+
480
+ .media-action-btn:hover {
481
+ background-color: var(--color-purple-500);
482
+ }
483
+
484
+ /* Empty state */
485
+
486
+ .empty-state {
487
+ display: flex;
488
+ align-items: center;
489
+ justify-content: center;
490
+ height: 6rem;
491
+ }
492
+
493
+ .empty-state-content {
494
+ text-align: center;
495
+ }
496
+
497
+ .empty-state-icon {
498
+ width: 2.5rem;
499
+ height: 2.5rem;
500
+ margin: 0 auto 0.5rem;
501
+ color: rgba(147, 51, 234, 0.5);
502
+ }
503
+
504
+ .empty-state-text {
505
+ color: var(--color-gray-300);
506
+ font-size: 0.875rem;
507
+ font-weight: 500;
508
+ }
509
+
510
+ .empty-state-subtext {
511
+ color: var(--color-gray-400);
512
+ font-size: 0.75rem;
513
+ }
514
+
515
+ /* Icon sizes - using twick-utilities.css */
516
+
517
+ /* Sidebar styles */
518
+
519
+ .sidebar {
520
+ min-width: 3.5rem;
521
+ max-width: 3.5rem;
522
+ padding-top: 0.75rem;
523
+ background-color: rgba(38, 38, 38, 0.8);
524
+ border-right: 1px solid rgba(75, 85, 99, 0.5);
525
+ display: flex;
526
+ flex-direction: column;
527
+ align-items: center;
528
+ gap: 1rem;
529
+ padding: 0.35rem;
530
+ backdrop-filter: blur(12px);
531
+ box-shadow: var(--shadow-lg);
532
+ }
533
+
534
+ .toolbar-label {
535
+ text-align: center;
536
+ font-size: smaller;
537
+ color: var(--color-gray-300);
538
+ }
539
+
540
+ /* Timeline track styles */
541
+
542
+ .timeline-track {
543
+ position: relative;
544
+ height: 3rem;
545
+ background-color: rgba(64, 64, 64, 0.5);
546
+ border: 1px solid rgba(75, 85, 99, 0.5);
547
+ border-radius: 0.5rem;
548
+ overflow: hidden;
549
+ backdrop-filter: blur(4px);
550
+ box-shadow: var(--shadow-md);
551
+ }
552
+
553
+ .timeline-element {
554
+ position: absolute;
555
+ top: 0.25rem;
556
+ bottom: 0.25rem;
557
+ border-radius: 0.375rem;
558
+ border: 1px solid rgba(147, 51, 234, 0.5);
559
+ background: linear-gradient(to right, rgba(147, 51, 234, 0.3), rgba(147, 51, 234, 0.3));
560
+ transition: var(--transition-all);
561
+ cursor: pointer;
562
+ box-shadow: var(--shadow-lg);
563
+ }
564
+
565
+ .timeline-element:hover {
566
+ background: linear-gradient(to right, rgba(147, 51, 234, 0.5), rgba(147, 51, 234, 0.5));
567
+ }
568
+
569
+ /* Canvas styles */
570
+
571
+ .canvas-container {
572
+ position: relative;
573
+ overflow: hidden;
574
+ box-shadow: var(--shadow-xl);
575
+ }
576
+
577
+ /* Props Toolbar styles */
578
+
579
+ .props-toolbar-label {
580
+ text-align: center;
581
+ font-size: xx-small;
582
+ color: var(--color-gray-300);
583
+ margin-top: 0.25rem;
584
+ transition: var(--transition-all);
585
+ word-wrap: break-word;
586
+ hyphens: auto;
587
+ max-width: 100%;
588
+ overflow: hidden;
589
+ text-overflow: ellipsis;
590
+ }
591
+
592
+ /* Toolbar styles */
593
+
594
+ .toolbar {
595
+ display: flex;
596
+ align-items: center;
597
+ gap: 0.5rem;
598
+ padding: 0.75rem;
599
+ background-color: rgba(38, 38, 38, 0.8);
600
+ backdrop-filter: blur(12px);
601
+ border-bottom: 1px solid rgba(75, 85, 99, 0.5);
602
+ box-shadow: var(--shadow-md);
603
+ }
604
+
605
+ /* Header styles */
606
+
607
+ .header {
608
+ height: 3.5rem;
609
+ background-color: rgba(38, 38, 38, 0.9);
610
+ border-bottom: 1px solid rgba(75, 85, 99, 0.5);
611
+ display: flex;
612
+ align-items: center;
613
+ justify-content: space-between;
614
+ padding: 0 1rem;
615
+ backdrop-filter: blur(12px);
616
+ box-shadow: var(--shadow-lg);
617
+ }
618
+
619
+ /* Media library styles */
620
+
621
+ .media-item {
622
+ transition: var(--transition-all);
623
+ }
624
+
625
+ .media-item:hover {
626
+ transform: scale(1.05);
627
+ box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.2);
628
+ }
629
+
630
+ /* Progress bar styling */
631
+
632
+ .progress-bar {
633
+ transition: all 150ms ease-out;
634
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-500));
635
+ }
636
+
637
+ /* Button hover effects - using twick-utilities.css */
638
+
639
+ /* Accent colors */
640
+
641
+ .accent-purple {
642
+ color: var(--color-purple-400);
643
+ }
644
+
645
+ /* Gradient text - using twick-utilities.css */
646
+
647
+ /* Glow effects - using twick-utilities.css */
648
+
649
+ /* Form elements */
650
+
651
+ .aspect-ratio-btn {
652
+ padding: 0.375rem 0.75rem;
653
+ border-radius: 0.5rem;
654
+ border: 1px solid var(--color-gray-600);
655
+ color: var(--color-gray-300);
656
+ transition: var(--transition-all);
657
+ font-size: 0.875rem;
658
+ }
659
+
660
+ .aspect-ratio-btn:hover {
661
+ border-color: var(--color-purple-500);
662
+ color: var(--color-purple-400);
663
+ }
664
+
665
+ .aspect-ratio-btn.active {
666
+ border-color: var(--color-purple-500);
667
+ background-color: rgba(147, 51, 234, 0.2);
668
+ color: var(--color-purple-400);
669
+ box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.25);
670
+ }
671
+
672
+ /* Slider styles */
673
+
674
+ .slider-thumb {
675
+ appearance: none;
676
+ background-color: transparent;
677
+ cursor: pointer;
678
+ }
679
+
680
+ .slider-thumb::-webkit-slider-thumb {
681
+ appearance: none;
682
+ width: 0.75rem;
683
+ height: 0.75rem;
684
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-500));
685
+ border-radius: 9999px;
686
+ box-shadow: var(--shadow-lg);
687
+ cursor: pointer;
688
+ transition: var(--transition-all);
689
+ }
690
+
691
+ .slider-thumb::-webkit-slider-thumb:hover {
692
+ box-shadow: 0 20px 25px -5px rgba(147, 51, 234, 0.3);
693
+ }
694
+
695
+ .slider-thumb::-moz-range-thumb {
696
+ width: 0.75rem;
697
+ height: 0.75rem;
698
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-500));
699
+ border-radius: 9999px;
700
+ box-shadow: var(--shadow-lg);
701
+ cursor: pointer;
702
+ border: 0;
703
+ transition: var(--transition-all);
704
+ }
705
+
706
+ .slider-thumb::-webkit-slider-track {
707
+ width: 100%;
708
+ height: 0.375rem;
709
+ background-color: rgba(64, 64, 64, 0.5);
710
+ border-radius: 9999px;
711
+ }
712
+
713
+ .slider-thumb::-moz-range-track {
714
+ width: 100%;
715
+ height: 0.375rem;
716
+ background-color: rgba(64, 64, 64, 0.5);
717
+ border-radius: 9999px;
718
+ border: 0;
719
+ }
720
+
721
+ /* Form control buttons */
722
+
723
+ .form-btn {
724
+ width: 2rem;
725
+ height: 2rem;
726
+ background: linear-gradient(to bottom right, var(--color-gray-700), var(--color-gray-800));
727
+ border-radius: 0.5rem;
728
+ display: flex;
729
+ align-items: center;
730
+ justify-content: center;
731
+ color: var(--color-gray-300);
732
+ transition: var(--transition-all);
733
+ box-shadow: var(--shadow-sm);
734
+ }
735
+
736
+ .form-btn:hover {
737
+ background: linear-gradient(to bottom right, var(--color-gray-600), var(--color-gray-700));
738
+ color: white;
739
+ box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.2);
740
+ }
741
+
742
+ .form-btn.active {
743
+ background: linear-gradient(to bottom right, var(--color-purple-500), var(--color-purple-600));
744
+ color: white;
745
+ box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.25);
746
+ }
747
+
748
+ /* Toolbar buttons */
749
+
750
+ .toolbar-btn {
751
+ padding: 0.25rem 0;
752
+ width: 3rem;
753
+ max-height: 3rem;
754
+ border-radius: 0.5rem;
755
+ display: flex;
756
+ flex-direction: column;
757
+ align-items: center;
758
+ justify-content: center;
759
+ transition: var(--transition-all);
760
+ box-shadow: var(--shadow-sm);
761
+ }
762
+
763
+ .toolbar-btn.active {
764
+ background: linear-gradient(to bottom right, var(--color-purple-500), var(--color-purple-600));
765
+ color: white;
766
+ box-shadow: 0 10px 15px -3px rgba(147, 51, 234, 0.25);
767
+ }
768
+
769
+ .toolbar-btn:not(.active) {
770
+ color: var(--color-gray-400);
771
+ }
772
+
773
+ .toolbar-btn:not(.active):hover {
774
+ color: white;
775
+ background-color: rgba(64, 64, 64, 0.5);
776
+ }
777
+
778
+ /* Props Toolbar buttons */
779
+
780
+ .props-toolbar-btn {
781
+ width: 3.5rem;
782
+ max-height: 3.5rem;
783
+ border-radius: 0.5rem;
784
+ display: flex;
785
+ flex-direction: column;
786
+ align-items: center;
787
+ justify-content: center;
788
+ transition: var(--transition-all);
789
+ box-shadow: var(--shadow-sm);
790
+ }
791
+
792
+ .props-toolbar-btn.active {
793
+ background: linear-gradient(to bottom right, var(--color-purple-500), var(--color-purple-600));
794
+ color: white;
795
+ box-shadow: 0 10px 15px -3px rgba(147, 51, 234, 0.25);
796
+ }
797
+
798
+ .props-toolbar-btn:not(.active) {
799
+ color: var(--color-gray-400);
800
+ }
801
+
802
+ .props-toolbar-btn:not(.active):hover {
803
+ color: white;
804
+ background-color: rgba(64, 64, 64, 0.5);
805
+ }
806
+
807
+ /* Props Container */
808
+
809
+ .prop-header {
810
+ width: 100%;
811
+ display: flex;
812
+ align-items: center;
813
+ justify-content: space-between;
814
+ padding: 0.625rem 0.75rem;
815
+ text-align: left;
816
+ color: var(--color-gray-200);
817
+ transition: var(--transition-all);
818
+ border-left: 2px solid transparent;
819
+ }
820
+
821
+ .prop-header:hover {
822
+ color: white;
823
+ background: linear-gradient(to right, rgba(147, 51, 234, 0.2), rgba(147, 51, 234, 0.1));
824
+ border-left-color: rgba(147, 51, 234, 0.5);
825
+ }
826
+
827
+ .prop-content {
828
+ overflow-x: hidden;
829
+ overflow-y: auto;
830
+ padding: 0.25rem;
831
+ transition: var(--transition-all);
832
+ }
833
+
834
+ /* Accordion */
835
+
836
+ .accordion-item {
837
+ border-bottom: 1px solid rgba(75, 85, 99, 0.3);
838
+ background: linear-gradient(to bottom, rgba(38, 38, 38, 0.4), rgba(38, 38, 38, 0.2));
839
+ backdrop-filter: blur(4px);
840
+ }
841
+
842
+ .accordion-item:last-child {
843
+ border-bottom: none;
844
+ }
845
+
846
+ .accordion-header {
847
+ width: 100%;
848
+ display: flex;
849
+ align-items: center;
850
+ justify-content: space-between;
851
+ padding: 0.625rem 0.75rem;
852
+ text-align: left;
853
+ color: var(--color-gray-200);
854
+ transition: var(--transition-all);
855
+ border-left: 2px solid transparent;
856
+ }
857
+
858
+ .accordion-header:hover {
859
+ color: white;
860
+ background: linear-gradient(to right, rgba(147, 51, 234, 0.2), rgba(147, 51, 234, 0.1));
861
+ border-left-color: rgba(147, 51, 234, 0.5);
862
+ }
863
+
864
+ .accordion-content {
865
+ overflow-x: hidden;
866
+ overflow-y: auto;
867
+ max-height: 0;
868
+ opacity: 0;
869
+ transition: all 300ms ease-in-out;
870
+ }
871
+
872
+ .accordion-content.expanded {
873
+ max-height: 24rem;
874
+ opacity: 1;
875
+ }
876
+
877
+ .accordion-panel {
878
+ padding: 0.5rem 0.75rem;
879
+ background-color: rgba(23, 23, 23, 0.3);
880
+ border-left: 2px solid rgba(147, 51, 234, 0.3);
881
+ margin-left: 0.5rem;
882
+ }
883
+
884
+ /* Studio-specific utilities */
885
+
886
+ .label-dark {
887
+ display: block;
888
+ color: var(--color-gray-300);
889
+ font-size: 0.875rem;
890
+ margin-bottom: 0.5rem;
891
+ }
892
+
893
+ .label-small {
894
+ display: block;
895
+ color: var(--color-gray-400);
896
+ font-size: 0.75rem;
897
+ margin-bottom: 0.25rem;
898
+ }
899
+
900
+ /* input-dark - using twick-utilities.css */
901
+
902
+ .slider-container {
903
+ display: flex;
904
+ align-items: center;
905
+ gap: 1rem;
906
+ }
907
+
908
+ .slider-purple {
909
+ flex: 1;
910
+ height: 0.25rem;
911
+ background: var(--color-neutral-700);
912
+ border-radius: 9999px;
913
+ appearance: none;
914
+ cursor: pointer;
915
+ }
916
+
917
+ .slider-purple::-webkit-slider-thumb {
918
+ appearance: none;
919
+ width: 1rem;
920
+ height: 1rem;
921
+ background: var(--color-purple-500);
922
+ border-radius: 50%;
923
+ cursor: pointer;
924
+ border: 2px solid var(--color-neutral-900);
925
+ }
926
+
927
+ .slider-value {
928
+ min-width: 3rem;
929
+ color: var(--color-gray-300);
930
+ font-size: 0.875rem;
931
+ }
932
+
933
+ .font-controls {
934
+ display: flex;
935
+ gap: 0.5rem;
936
+ }
937
+
938
+ .select-dark {
939
+ flex: 1;
940
+ background-color: var(--color-neutral-800);
941
+ border: 1px solid var(--color-gray-600);
942
+ border-radius: 0.5rem;
943
+ color: var(--color-gray-100);
944
+ padding: 0.5rem;
945
+ font-size: 0.875rem;
946
+ }
947
+
948
+ .btn-icon {
949
+ width: 2.5rem;
950
+ height: 2.5rem;
951
+ display: flex;
952
+ align-items: center;
953
+ justify-content: center;
954
+ background-color: var(--color-neutral-800);
955
+ border: 1px solid var(--color-gray-600);
956
+ border-radius: 0.5rem;
957
+ color: var(--color-gray-300);
958
+ font-size: 0.875rem;
959
+ cursor: pointer;
960
+ }
961
+
962
+ .btn-icon-active {
963
+ background-color: var(--color-purple-500);
964
+ border-color: var(--color-purple-600);
965
+ color: white;
966
+ }
967
+
968
+ .color-section {
969
+ display: flex;
970
+ flex-direction: column;
971
+ gap: 1rem;
972
+ }
973
+
974
+ .color-control {
975
+ display: flex;
976
+ flex-direction: column;
977
+ gap: 0.5rem;
978
+ }
979
+
980
+ .color-inputs {
981
+ display: flex;
982
+ gap: 0.5rem;
983
+ }
984
+
985
+ .color-picker {
986
+ width: 2.5rem;
987
+ height: 2.5rem;
988
+ padding: 0;
989
+ border: none;
990
+ border-radius: 0.375rem;
991
+ cursor: pointer;
992
+ background: none;
993
+ }
994
+
995
+ .color-text {
996
+ flex: 1;
997
+ background-color: var(--color-neutral-800);
998
+ border: 1px solid var(--color-gray-600);
999
+ border-radius: 0.5rem;
1000
+ color: var(--color-gray-100);
1001
+ padding: 0.5rem;
1002
+ font-size: 0.875rem;
1003
+ }
1004
+
1005
+ .checkbox-control {
1006
+ display: flex;
1007
+ align-items: center;
1008
+ gap: 0.5rem;
1009
+ }
1010
+
1011
+ .checkbox-label {
1012
+ display: flex;
1013
+ align-items: center;
1014
+ gap: 0.5rem;
1015
+ color: var(--color-gray-300);
1016
+ font-size: 0.875rem;
1017
+ cursor: pointer;
1018
+ }
1019
+
1020
+ .checkbox-purple {
1021
+ width: 1rem;
1022
+ height: 1rem;
1023
+ border-radius: 0.25rem;
1024
+ border: 2px solid var(--color-gray-600);
1025
+ appearance: none;
1026
+ cursor: pointer;
1027
+ }
1028
+
1029
+ .checkbox-purple:checked {
1030
+ background-color: var(--color-purple-500);
1031
+ border-color: var(--color-purple-600);
1032
+ }
1033
+
1034
+ /* btn-primary - using twick-utilities.css */
1035
+
1036
+ /* Studio layout */
1037
+
1038
+ .studio-container {
1039
+ display: flex;
1040
+ flex-direction: column;
1041
+ height: 100dvh;
1042
+ width: 100dvw;
1043
+ overflow: hidden;
1044
+ background-color: var(--color-neutral-900);
1045
+ color: var(--color-gray-100);
1046
+ }
1047
+
1048
+ .studio-content {
1049
+ display: flex;
1050
+ width: 100%;
1051
+ height: calc(100vh - 56px);
1052
+ }
1053
+
1054
+ .main-container {
1055
+ flex: 1;
1056
+ display: flex;
1057
+ flex-direction: column;
1058
+ background-color: var(--color-neutral-700);
1059
+ max-width: calc(100% - 43rem);
1060
+ }
1061
+
1062
+ .canvas-wrapper {
1063
+ flex: 1;
1064
+ overflow-y: auto;
1065
+ padding: 0.25rem;
1066
+ }
1067
+
1068
+ /* Color Input */
1069
+
1070
+ .color-container {
1071
+ display: flex;
1072
+ align-items: center;
1073
+ gap: 0.5rem;
1074
+ }
1075
+
1076
+ .color-picker {
1077
+ width: 2.5rem;
1078
+ height: 2.5rem;
1079
+ border-radius: 0.375rem;
1080
+ border: 1px solid var(--color-gray-600);
1081
+ cursor: pointer;
1082
+ }
1083
+
1084
+ /* Video player customizations */
1085
+
1086
+ video::-webkit-media-controls,
1087
+ video::-webkit-media-controls-panel {
1088
+ display: none;
1089
+ }
1090
+
1091
+ /* Global scrollbar styles */
1092
+
1093
+ ::-webkit-scrollbar {
1094
+ width: 6px;
1095
+ }
1096
+
1097
+ ::-webkit-scrollbar-track {
1098
+ background: var(--color-gray-700);
1099
+ }
1100
+
1101
+ ::-webkit-scrollbar-thumb {
1102
+ background: var(--color-purple-600);
1103
+ border-radius: 3px;
1104
+ }
1105
+
1106
+ ::-webkit-scrollbar-thumb:hover {
1107
+ background: var(--color-purple-500);
1108
+ }:root {
1109
+ /* Colors */
1110
+ --color-purple-100: #f3e8ff;
1111
+ --color-purple-200: #e9d5ff;
1112
+ --color-purple-300: #d8b4fe;
1113
+ --color-purple-400: #c084fc;
1114
+ --color-purple-500: #a855f7;
1115
+ --color-purple-600: #9333ea;
1116
+ --color-purple-700: #7e22ce;
1117
+ --color-purple-800: #6b21a8;
1118
+ --color-purple-900: #581c87;
1119
+
1120
+ --color-gray-100: #f3f4f6;
1121
+ --color-gray-200: #e5e7eb;
1122
+ --color-gray-300: #d1d5db;
1123
+ --color-gray-400: #9ca3af;
1124
+ --color-gray-500: #6b7280;
1125
+ --color-gray-600: #4b5563;
1126
+ --color-gray-700: #374151;
1127
+ --color-gray-800: #1f2937;
1128
+ --color-gray-900: #111827;
1129
+
1130
+ --color-neutral-100: #f5f5f5;
1131
+ --color-neutral-200: #e5e5e5;
1132
+ --color-neutral-300: #d4d4d4;
1133
+ --color-neutral-400: #a3a3a3;
1134
+ --color-neutral-500: #737373;
1135
+ --color-neutral-600: #525252;
1136
+ --color-neutral-700: #404040;
1137
+ --color-neutral-800: #262626;
1138
+ --color-neutral-900: #171717;
1139
+
1140
+ --color-red-100: #fee2e2;
1141
+ --color-red-200: #fecaca;
1142
+ --color-red-300: #fca5a5;
1143
+ --color-red-400: #f87171;
1144
+ --color-red-500: #ef4444;
1145
+ --color-red-600: #dc2626;
1146
+ --color-red-700: #b91c1c;
1147
+ --color-red-800: #991b1b;
1148
+ --color-red-900: #7f1d1d;
1149
+
1150
+ /* Shadows */
1151
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1152
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1153
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1154
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1155
+
1156
+ /* Transitions */
1157
+ --transition-all: all 0.2s ease;
1158
+ }/* ========================================
1159
+ LAYOUT UTILITIES
1160
+ ======================================== *//* Flexbox utilities */.flex {
1161
+ display: flex;
1162
+ }.flex-col {
1163
+ flex-direction: column;
1164
+ }.flex-row {
1165
+ flex-direction: row;
1166
+ }.flex-container {
1167
+ display: flex;
1168
+ align-items: center;
1169
+ gap: 0.5rem;
1170
+ }.items-center {
1171
+ align-items: center;
1172
+ }.justify-center {
1173
+ justify-content: center;
1174
+ }.justify-between {
1175
+ justify-content: space-between;
1176
+ }/* Gap utilities */.gap-1 {
1177
+ gap: 0.25rem;
1178
+ }.gap-2 {
1179
+ gap: 0.5rem;
1180
+ }.gap-3 {
1181
+ gap: 0.75rem;
1182
+ }.gap-4 {
1183
+ gap: 1rem;
1184
+ }/* Width/Height utilities */.w-full {
1185
+ width: 100%;
1186
+ }.h-full {
1187
+ height: 100%;
1188
+ }/* ========================================
1189
+ ICON UTILITIES
1190
+ ======================================== */.icon-xs {
1191
+ width: 0.75rem;
1192
+ height: 0.75rem;
1193
+ }.icon-sm {
1194
+ width: 1rem;
1195
+ height: 1rem;
1196
+ }.icon-md {
1197
+ width: 1.5rem;
1198
+ height: 1.5rem;
1199
+ }.icon-lg {
1200
+ width: 2rem;
1201
+ height: 2rem;
1202
+ }.icon-margin {
1203
+ margin-right: 0.5rem;
1204
+ }/* ========================================
1205
+ TEXT UTILITIES
1206
+ ======================================== */.text-sm {
1207
+ font-size: 0.875rem;
1208
+ }.text-base {
1209
+ font-size: 1rem;
1210
+ }.text-lg {
1211
+ font-size: 1.125rem;
1212
+ }.font-bold {
1213
+ font-weight: 700;
1214
+ }.text-gradient {
1215
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
1216
+ -webkit-background-clip: text;
1217
+ background-clip: text;
1218
+ font-size: 1.5rem;
1219
+ font-weight: 700;
1220
+ color: transparent;
1221
+ }.text-gradient-purple,
1222
+ .text-gradient-blue {
1223
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
1224
+ -webkit-background-clip: text;
1225
+ -webkit-text-fill-color: transparent;
1226
+ background-clip: text;
1227
+ }/* ========================================
1228
+ GRID UTILITIES
1229
+ ======================================== */.grid-auto-fit {
1230
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1231
+ }.grid-auto-fill {
1232
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1233
+ }/* ========================================
1234
+ BACKDROP UTILITIES
1235
+ ======================================== */.backdrop-blur-sm {
1236
+ backdrop-filter: blur(4px);
1237
+ }.backdrop-blur-md {
1238
+ backdrop-filter: blur(8px);
1239
+ }.backdrop-blur-lg {
1240
+ backdrop-filter: blur(12px);
1241
+ }/* ========================================
1242
+ SCROLLBAR UTILITIES
1243
+ ======================================== */.custom-scrollbar {
1244
+ scrollbar-width: thin;
1245
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
1246
+ }.custom-scrollbar::-webkit-scrollbar {
1247
+ width: 6px;
1248
+ height: 6px;
1249
+ }.custom-scrollbar::-webkit-scrollbar-track {
1250
+ background: var(--color-neutral-800);
1251
+ border-radius: 3px;
1252
+ }.custom-scrollbar::-webkit-scrollbar-thumb {
1253
+ background: var(--color-neutral-600);
1254
+ border-radius: 3px;
1255
+ }.custom-scrollbar::-webkit-scrollbar-thumb:hover {
1256
+ background: var(--color-neutral-500);
1257
+ }/* ========================================
1258
+ GLASS EFFECT UTILITIES
1259
+ ======================================== */.glass {
1260
+ background: rgba(255, 255, 255, 0.05);
1261
+ backdrop-filter: blur(12px);
1262
+ border: 1px solid rgba(75, 85, 99, 0.5);
1263
+ box-shadow: var(--shadow-lg);
1264
+ }/* ========================================
1265
+ GLOW EFFECTS
1266
+ ======================================== */.glow-purple {
1267
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
1268
+ }.glow-blue {
1269
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
1270
+ }/* ========================================
1271
+ BUTTON BASE UTILITIES
1272
+ ======================================== */.btn {
1273
+ display: inline-flex;
1274
+ align-items: center;
1275
+ justify-content: center;
1276
+ border-radius: 0.5rem;
1277
+ padding: 0.5rem;
1278
+ gap: 0.35rem;
1279
+ font-size: 0.875rem;
1280
+ font-weight: 600;
1281
+ border: none;
1282
+ cursor: pointer;
1283
+ position: relative;
1284
+ overflow: hidden;
1285
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1286
+ text-transform: uppercase;
1287
+ letter-spacing: 0.025em;
1288
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1289
+ }.btn::before {
1290
+ content: '';
1291
+ position: absolute;
1292
+ top: 0;
1293
+ left: 0;
1294
+ right: 0;
1295
+ height: 50%;
1296
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
1297
+ border-radius: 0.75rem 0.75rem 0 0;
1298
+ pointer-events: none;
1299
+ }.btn:focus {
1300
+ outline: none;
1301
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1302
+ }.btn:active {
1303
+ transform: translateY(1px);
1304
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1305
+ }.btn:disabled {
1306
+ opacity: 0.6;
1307
+ cursor: not-allowed;
1308
+ transform: none;
1309
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
1310
+ }/* Button variants */.btn-primary {
1311
+ display: inline-flex;
1312
+ align-items: center;
1313
+ justify-content: center;
1314
+ border-radius: 0.5rem;
1315
+ padding: 0.5rem;
1316
+ gap: 0.35rem;
1317
+ font-size: 0.875rem;
1318
+ font-weight: 600;
1319
+ border: none;
1320
+ cursor: pointer;
1321
+ position: relative;
1322
+ overflow: hidden;
1323
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1324
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1325
+ color: white;
1326
+ border: 1px solid var(--color-purple-500);
1327
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1328
+ }.btn-primary:hover {
1329
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1330
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1331
+ transform: translateY(-2px);
1332
+ }.btn-primary:active {
1333
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1334
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1335
+ }.btn-secondary {
1336
+ display: inline-flex;
1337
+ align-items: center;
1338
+ justify-content: center;
1339
+ border-radius: 0.5rem;
1340
+ padding: 0.5rem;
1341
+ gap: 0.35rem;
1342
+ font-size: 0.875rem;
1343
+ font-weight: 600;
1344
+ border: none;
1345
+ cursor: pointer;
1346
+ position: relative;
1347
+ overflow: hidden;
1348
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1349
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
1350
+ color: var(--color-neutral-700);
1351
+ border: 1px solid var(--color-purple-300);
1352
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
1353
+ }.btn-secondary:hover {
1354
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
1355
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
1356
+ transform: translateY(-2px);
1357
+ }.btn-ghost {
1358
+ display: inline-flex;
1359
+ align-items: center;
1360
+ justify-content: center;
1361
+ border-radius: 0.5rem;
1362
+ padding: 0.5rem;
1363
+ gap: 0.35rem;
1364
+ font-size: 0.875rem;
1365
+ font-weight: 600;
1366
+ border: none;
1367
+ cursor: pointer;
1368
+ position: relative;
1369
+ overflow: hidden;
1370
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1371
+ background: rgba(64, 64, 64, 0.3);
1372
+ color: var(--color-neutral-300);
1373
+ border: 1px solid rgba(255, 255, 255, 0.1);
1374
+ backdrop-filter: blur(10px);
1375
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1376
+ }.btn-ghost:hover {
1377
+ background: rgba(255, 255, 255, 0.1);
1378
+ color: white;
1379
+ border-color: rgba(255, 255, 255, 0.2);
1380
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1381
+ transform: translateY(-2px);
1382
+ }.btn-outline {
1383
+ display: inline-flex;
1384
+ align-items: center;
1385
+ justify-content: center;
1386
+ border-radius: 0.5rem;
1387
+ padding: 0.5rem;
1388
+ gap: 0.35rem;
1389
+ font-size: 0.875rem;
1390
+ font-weight: 600;
1391
+ border: none;
1392
+ cursor: pointer;
1393
+ position: relative;
1394
+ overflow: hidden;
1395
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1396
+ background: transparent;
1397
+ border: 2px solid var(--color-purple-500);
1398
+ color: var(--color-purple-400);
1399
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1400
+ }.btn-outline:hover {
1401
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1402
+ color: white;
1403
+ border-color: var(--color-purple-400);
1404
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1405
+ transform: translateY(-2px);
1406
+ }.btn-danger {
1407
+ display: inline-flex;
1408
+ align-items: center;
1409
+ justify-content: center;
1410
+ border-radius: 0.5rem;
1411
+ padding: 0.5rem;
1412
+ gap: 0.35rem;
1413
+ font-size: 0.875rem;
1414
+ font-weight: 600;
1415
+ border: none;
1416
+ cursor: pointer;
1417
+ position: relative;
1418
+ overflow: hidden;
1419
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1420
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
1421
+ color: white;
1422
+ border: 1px solid var(--color-red-500);
1423
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1424
+ }.btn-danger:hover {
1425
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
1426
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1427
+ transform: translateY(-2px);
1428
+ }.btn-danger:active {
1429
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
1430
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1431
+ }.btn-primary {
1432
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
1433
+ color: white;
1434
+ border: 1px solid var(--color-purple-500);
1435
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
1436
+ }.btn-primary:hover {
1437
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1438
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
1439
+ }/* ========================================
1440
+ INPUT UTILITIES
1441
+ ======================================== */.input {
1442
+ width: 100%;
1443
+ border-radius: 0.5rem;
1444
+ padding: 0.5rem 0.75rem;
1445
+ font-size: 0.875rem;
1446
+ border: 1px solid var(--color-neutral-600);
1447
+ background-color: var(--color-neutral-800);
1448
+ color: var(--color-neutral-100);
1449
+ transition: var(--transition-all);
1450
+ }.input::placeholder {
1451
+ color: var(--color-neutral-400);
1452
+ }.input:focus {
1453
+ outline: none;
1454
+ border-color: var(--color-purple-500);
1455
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1456
+ }.input-dark {
1457
+ width: 100%;
1458
+ padding: 0.75rem;
1459
+ background-color: var(--color-neutral-700);
1460
+ border: 1px solid var(--color-neutral-600);
1461
+ border-radius: 0.5rem;
1462
+ color: var(--color-neutral-100);
1463
+ font-size: 0.875rem;
1464
+ transition: var(--transition-all);
1465
+ }.input-dark:focus {
1466
+ outline: none;
1467
+ border-color: var(--color-purple-500);
1468
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1469
+ }/* ========================================
1470
+ CARD UTILITIES
1471
+ ======================================== */.card {
1472
+ background: var(--color-neutral-800);
1473
+ border: 1px solid var(--color-neutral-700);
1474
+ border-radius: 0.5rem;
1475
+ padding: 1rem;
1476
+ box-shadow: var(--shadow-md);
1477
+ }.twick-editor-main-container {
1478
+ display: flex;
1479
+ flex-direction: column;
1480
+ width: 100%;
1481
+ height: 100%;
1482
+ gap: 6px;
1483
+ }.twick-editor-view-section {
1484
+ display: flex;
1485
+ flex-direction: row;
1486
+ justify-content: space-between;
1487
+ gap: 6px;
1488
+ width: 100%;
1489
+ height: 100%;
1490
+ }.twick-editor-timeline-section {
1491
+ display: flex;
1492
+ flex-direction: column;
1493
+ width: 100%;
1494
+ height: 100%;
1495
+ background-color: #252525;
1496
+ border-radius: 10px;
1497
+ overflow-x: hidden;
1498
+ }.twick-editor-container {
1499
+ position: relative;
1500
+ height: 80dvh;
1501
+ overflow: hidden;
1502
+ border-radius: 10px;
1503
+ background-color: #000;
1504
+ color: #fff;
1505
+ }.twick-editor-canvas-container {
1506
+ position: absolute;
1507
+ top: 0;
1508
+ left: 0;
1509
+ width: 100%;
1510
+ height: 100%;
1511
+ }.twick-editor-canvas {
1512
+ width: 100%;
1513
+ height: 100%;
1514
+ }.twick-editor-loading-overlay {
1515
+ position: absolute;
1516
+ z-index: 30;
1517
+ background-color: rgba(0, 0, 0, 0.5);
1518
+ top: 0;
1519
+ left: 0;
1520
+ width: 100%;
1521
+ height: 100%;
1522
+ display: flex;
1523
+ }.twick-editor-loading-spinner {
1524
+ width: 48px;
1525
+ height: 48px;
1526
+ border: 6px solid #444;
1527
+ border-top: 6px solid #fff;
1528
+ border-radius: 50%;
1529
+ animation: twick-editor-spin 1s linear infinite;
1530
+ margin: auto;
1531
+ }@keyframes twick-editor-spin {
1532
+ 0% { transform: rotate(0deg); }
1533
+ 100% { transform: rotate(360deg); }
1534
+ }.twick-timeline-scroll-container {
1535
+ display: flex;
1536
+ flex-direction: column;
1537
+ flex: 1;
1538
+ overflow-x: auto;
1539
+ overflow-y: hidden;
1540
+ }/* Timeline Container Styles */.twick-timeline-container {
1541
+ display: flex;
1542
+ height: 2.75rem;
1543
+ position: relative;
1544
+ }.twick-timeline-header-container {
1545
+ position: sticky;
1546
+ left: 0;
1547
+ z-index: 30;
1548
+ }.twick-seek-track-container {
1549
+ display: flex;
1550
+ position: relative;
1551
+ min-width: 100%;
1552
+ height: 2rem;
1553
+ width: 100%;
1554
+ }.twick-seek-track-empty-space {
1555
+ position: sticky;
1556
+ left: 0;
1557
+ z-index: 40;
1558
+ display: flex;
1559
+ justify-content: center;
1560
+ align-items: center;
1561
+ flex-grow: 0;
1562
+ min-width: 40px;
1563
+ height: 34px;
1564
+ background-color: #171717;
1565
+ }.twick-seek-track {
1566
+ position: relative;
1567
+ width: 100%;
1568
+ border-top: 1px solid #262626;
1569
+ border-bottom: 1px solid #262626;
1570
+ background-color: #171717;
1571
+ }.twick-seek-track-canvas {
1572
+ min-width: 100%;
1573
+ height: 2rem;
1574
+ }.twick-seek-track-playhead {
1575
+ position: absolute;
1576
+ top: 0;
1577
+ left: 0;
1578
+ z-index: 30;
1579
+ cursor: ew-resize;
1580
+ width: 100%;
1581
+ height: 100%;
1582
+ }.twick-seek-track-pin {
1583
+ position: absolute;
1584
+ top: 0;
1585
+ left: 0;
1586
+ z-index: 30;
1587
+ width: 1.5px;
1588
+ height: 100%;
1589
+ background-color: #FFFFFF;
1590
+ }.twick-seek-track-handle {
1591
+ position: absolute;
1592
+ top: 0;
1593
+ left: 0;
1594
+ width: 0.75rem;
1595
+ height: 0.75rem;
1596
+ transform: translate(-50%, -50%);
1597
+ background-color: #FFFFFF;
1598
+ border-radius: 25%;
1599
+ }.twick-track-element {
1600
+ position: absolute;
1601
+ height: 100%;
1602
+ cursor: pointer;
1603
+ border-radius: 6px;
1604
+ transition: background-color 0.2s ease-in-out;
1605
+ }.twick-track-element-selected {
1606
+ border: 2px solid #FFFFFF;
1607
+ z-index: 10;
1608
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.8);
1609
+ }.twick-track-element-default {
1610
+ border: 1px solid #d1d1d1;
1611
+ }.twick-track-element-dragging {
1612
+ border: 1px solid #ffffff;
1613
+ }.twick-track-element-content {
1614
+ display: flex;
1615
+ align-items: center;
1616
+ width: 100%;
1617
+ height: 100%;
1618
+ cursor: grab;
1619
+ transition: background-color 0.2s ease-in-out;
1620
+ padding: 0.25rem;
1621
+ white-space: nowrap;
1622
+ overflow: hidden;
1623
+ text-overflow: ellipsis;
1624
+ }.twick-track-element-handle {
1625
+ position: absolute;
1626
+ width: 2px;
1627
+ height: 60%;
1628
+ cursor: ew-resize;
1629
+ transition: background-color 0.2s ease-in-out;
1630
+ top: 50%;
1631
+ transform: translate(-50%, -50%);
1632
+ background-color: #FFFFFF;
1633
+ border-radius: 25%;
1634
+ z-index: 10;
1635
+ }.twick-track-element-handle-start {
1636
+ left: 0px;
1637
+ }.twick-track-element-handle-end {
1638
+ right: -2px;
1639
+ }.twick-track-element-frame-effect {
1640
+ position: absolute;
1641
+ flex: 1;
1642
+ top: 0;
1643
+ display: flex;
1644
+ align-items: center;
1645
+ padding: 0 0.5rem;
1646
+ font-size: 0.75rem;
1647
+ opacity: 0.5;
1648
+ }.twick-track-header {
1649
+ display: flex;
1650
+ flex: none;
1651
+ position: relative;
1652
+ width: 40px;
1653
+ height: 100%;
1654
+ background-color: #171717;
1655
+ border-right: 1px solid #262626;
1656
+ align-items: center;
1657
+ }.twick-track-header-selected {
1658
+ border: 2px solid #FFFFFF;
1659
+ z-index: 10;
1660
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.8);
1661
+ outline: 2px solid #FFFFFF;
1662
+ }.twick-track-header-default {
1663
+ border: 1px solid #404040;
1664
+ }.twick-track-header-lock {
1665
+ position: absolute;
1666
+ top: 14px;
1667
+ right: 2px;
1668
+ width: 16px;
1669
+ height: 16px;
1670
+ z-index: 20;
1671
+ color: #333;
1672
+ }.twick-track-header-content {
1673
+ display: flex;
1674
+ align-items: center;
1675
+ width: 100%;
1676
+ height: 100%;
1677
+ padding: 0 0.5rem;
1678
+ }.twick-track-header-grip {
1679
+ display: flex;
1680
+ align-items: center;
1681
+ justify-content: center;
1682
+ margin-top: 4px;
1683
+ width: 20px;
1684
+ height: 20px;
1685
+ cursor: grab;
1686
+ }.twick-track-header-name {
1687
+ display: flex;
1688
+ align-items: center;
1689
+ width: 100%;
1690
+ height: 100%;
1691
+ padding: 0 0.5rem;
1692
+ }.twick-track {
1693
+ min-width: 100%;
1694
+ position: relative;
1695
+ height: 2.5rem;
1696
+ margin-top: 2px;
1697
+ background-color: #474747;
1698
+ }:root {
1699
+ /* Colors */
1700
+ --color-purple-100: #f3e8ff;
1701
+ --color-purple-200: #e9d5ff;
1702
+ --color-purple-300: #d8b4fe;
1703
+ --color-purple-400: #c084fc;
1704
+ --color-purple-500: #a855f7;
1705
+ --color-purple-600: #9333ea;
1706
+ --color-purple-700: #7e22ce;
1707
+ --color-purple-800: #6b21a8;
1708
+ --color-purple-900: #581c87;
1709
+
1710
+ --color-gray-100: #f3f4f6;
1711
+ --color-gray-200: #e5e7eb;
1712
+ --color-gray-300: #d1d5db;
1713
+ --color-gray-400: #9ca3af;
1714
+ --color-gray-500: #6b7280;
1715
+ --color-gray-600: #4b5563;
1716
+ --color-gray-700: #374151;
1717
+ --color-gray-800: #1f2937;
1718
+ --color-gray-900: #111827;
1719
+
1720
+ --color-neutral-100: #f5f5f5;
1721
+ --color-neutral-200: #e5e5e5;
1722
+ --color-neutral-300: #d4d4d4;
1723
+ --color-neutral-400: #a3a3a3;
1724
+ --color-neutral-500: #737373;
1725
+ --color-neutral-600: #525252;
1726
+ --color-neutral-700: #404040;
1727
+ --color-neutral-800: #262626;
1728
+ --color-neutral-900: #171717;
1729
+
1730
+ --color-red-100: #fee2e2;
1731
+ --color-red-200: #fecaca;
1732
+ --color-red-300: #fca5a5;
1733
+ --color-red-400: #f87171;
1734
+ --color-red-500: #ef4444;
1735
+ --color-red-600: #dc2626;
1736
+ --color-red-700: #b91c1c;
1737
+ --color-red-800: #991b1b;
1738
+ --color-red-900: #7f1d1d;
1739
+
1740
+ /* Shadows */
1741
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1742
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1743
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1744
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1745
+
1746
+ /* Transitions */
1747
+ --transition-all: all 0.2s ease;
1748
+ }/* ========================================
1749
+ LAYOUT UTILITIES
1750
+ ======================================== *//* Flexbox utilities */.flex {
1751
+ display: flex;
1752
+ }.flex-col {
1753
+ flex-direction: column;
1754
+ }.flex-row {
1755
+ flex-direction: row;
1756
+ }.flex-container {
1757
+ display: flex;
1758
+ align-items: center;
1759
+ gap: 0.5rem;
1760
+ }.items-center {
1761
+ align-items: center;
1762
+ }.justify-center {
1763
+ justify-content: center;
1764
+ }.justify-between {
1765
+ justify-content: space-between;
1766
+ }/* Gap utilities */.gap-1 {
1767
+ gap: 0.25rem;
1768
+ }.gap-2 {
1769
+ gap: 0.5rem;
1770
+ }.gap-3 {
1771
+ gap: 0.75rem;
1772
+ }.gap-4 {
1773
+ gap: 1rem;
1774
+ }/* Width/Height utilities */.w-full {
1775
+ width: 100%;
1776
+ }.h-full {
1777
+ height: 100%;
1778
+ }/* ========================================
1779
+ ICON UTILITIES
1780
+ ======================================== */.icon-xs {
1781
+ width: 0.75rem;
1782
+ height: 0.75rem;
1783
+ }.icon-sm {
1784
+ width: 1rem;
1785
+ height: 1rem;
1786
+ }.icon-md {
1787
+ width: 1.5rem;
1788
+ height: 1.5rem;
1789
+ }.icon-lg {
1790
+ width: 2rem;
1791
+ height: 2rem;
1792
+ }.icon-margin {
1793
+ margin-right: 0.5rem;
1794
+ }/* ========================================
1795
+ TEXT UTILITIES
1796
+ ======================================== */.text-sm {
1797
+ font-size: 0.875rem;
1798
+ }.text-base {
1799
+ font-size: 1rem;
1800
+ }.text-lg {
1801
+ font-size: 1.125rem;
1802
+ }.font-bold {
1803
+ font-weight: 700;
1804
+ }.text-gradient {
1805
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
1806
+ -webkit-background-clip: text;
1807
+ background-clip: text;
1808
+ font-size: 1.5rem;
1809
+ font-weight: 700;
1810
+ color: transparent;
1811
+ }.text-gradient-purple,
1812
+ .text-gradient-blue {
1813
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
1814
+ -webkit-background-clip: text;
1815
+ -webkit-text-fill-color: transparent;
1816
+ background-clip: text;
1817
+ }/* ========================================
1818
+ GRID UTILITIES
1819
+ ======================================== */.grid-auto-fit {
1820
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1821
+ }.grid-auto-fill {
1822
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1823
+ }/* ========================================
1824
+ BACKDROP UTILITIES
1825
+ ======================================== */.backdrop-blur-sm {
1826
+ backdrop-filter: blur(4px);
1827
+ }.backdrop-blur-md {
1828
+ backdrop-filter: blur(8px);
1829
+ }.backdrop-blur-lg {
1830
+ backdrop-filter: blur(12px);
1831
+ }/* ========================================
1832
+ SCROLLBAR UTILITIES
1833
+ ======================================== */.custom-scrollbar {
1834
+ scrollbar-width: thin;
1835
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
1836
+ }.custom-scrollbar::-webkit-scrollbar {
1837
+ width: 6px;
1838
+ height: 6px;
1839
+ }.custom-scrollbar::-webkit-scrollbar-track {
1840
+ background: var(--color-neutral-800);
1841
+ border-radius: 3px;
1842
+ }.custom-scrollbar::-webkit-scrollbar-thumb {
1843
+ background: var(--color-neutral-600);
1844
+ border-radius: 3px;
1845
+ }.custom-scrollbar::-webkit-scrollbar-thumb:hover {
1846
+ background: var(--color-neutral-500);
1847
+ }/* ========================================
1848
+ GLASS EFFECT UTILITIES
1849
+ ======================================== */.glass {
1850
+ background: rgba(255, 255, 255, 0.05);
1851
+ backdrop-filter: blur(12px);
1852
+ border: 1px solid rgba(75, 85, 99, 0.5);
1853
+ box-shadow: var(--shadow-lg);
1854
+ }/* ========================================
1855
+ GLOW EFFECTS
1856
+ ======================================== */.glow-purple {
1857
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
1858
+ }.glow-blue {
1859
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
1860
+ }/* ========================================
1861
+ BUTTON BASE UTILITIES
1862
+ ======================================== */.btn {
1863
+ display: inline-flex;
1864
+ align-items: center;
1865
+ justify-content: center;
1866
+ border-radius: 0.5rem;
1867
+ padding: 0.5rem;
1868
+ gap: 0.35rem;
1869
+ font-size: 0.875rem;
1870
+ font-weight: 600;
1871
+ border: none;
1872
+ cursor: pointer;
1873
+ position: relative;
1874
+ overflow: hidden;
1875
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1876
+ text-transform: uppercase;
1877
+ letter-spacing: 0.025em;
1878
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1879
+ }.btn::before {
1880
+ content: '';
1881
+ position: absolute;
1882
+ top: 0;
1883
+ left: 0;
1884
+ right: 0;
1885
+ height: 50%;
1886
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
1887
+ border-radius: 0.75rem 0.75rem 0 0;
1888
+ pointer-events: none;
1889
+ }.btn:focus {
1890
+ outline: none;
1891
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1892
+ }.btn:active {
1893
+ transform: translateY(1px);
1894
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1895
+ }.btn:disabled {
1896
+ opacity: 0.6;
1897
+ cursor: not-allowed;
1898
+ transform: none;
1899
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
1900
+ }/* Button variants */.btn-primary {
1901
+ display: inline-flex;
1902
+ align-items: center;
1903
+ justify-content: center;
1904
+ border-radius: 0.5rem;
1905
+ padding: 0.5rem;
1906
+ gap: 0.35rem;
1907
+ font-size: 0.875rem;
1908
+ font-weight: 600;
1909
+ border: none;
1910
+ cursor: pointer;
1911
+ position: relative;
1912
+ overflow: hidden;
1913
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1914
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1915
+ color: white;
1916
+ border: 1px solid var(--color-purple-500);
1917
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1918
+ }.btn-primary:hover {
1919
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1920
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1921
+ transform: translateY(-2px);
1922
+ }.btn-primary:active {
1923
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1924
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1925
+ }.btn-secondary {
1926
+ display: inline-flex;
1927
+ align-items: center;
1928
+ justify-content: center;
1929
+ border-radius: 0.5rem;
1930
+ padding: 0.5rem;
1931
+ gap: 0.35rem;
1932
+ font-size: 0.875rem;
1933
+ font-weight: 600;
1934
+ border: none;
1935
+ cursor: pointer;
1936
+ position: relative;
1937
+ overflow: hidden;
1938
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1939
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
1940
+ color: var(--color-neutral-700);
1941
+ border: 1px solid var(--color-purple-300);
1942
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
1943
+ }.btn-secondary:hover {
1944
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
1945
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
1946
+ transform: translateY(-2px);
1947
+ }.btn-ghost {
1948
+ display: inline-flex;
1949
+ align-items: center;
1950
+ justify-content: center;
1951
+ border-radius: 0.5rem;
1952
+ padding: 0.5rem;
1953
+ gap: 0.35rem;
1954
+ font-size: 0.875rem;
1955
+ font-weight: 600;
1956
+ border: none;
1957
+ cursor: pointer;
1958
+ position: relative;
1959
+ overflow: hidden;
1960
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1961
+ background: rgba(64, 64, 64, 0.3);
1962
+ color: var(--color-neutral-300);
1963
+ border: 1px solid rgba(255, 255, 255, 0.1);
1964
+ backdrop-filter: blur(10px);
1965
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1966
+ }.btn-ghost:hover {
1967
+ background: rgba(255, 255, 255, 0.1);
1968
+ color: white;
1969
+ border-color: rgba(255, 255, 255, 0.2);
1970
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1971
+ transform: translateY(-2px);
1972
+ }.btn-outline {
1973
+ display: inline-flex;
1974
+ align-items: center;
1975
+ justify-content: center;
1976
+ border-radius: 0.5rem;
1977
+ padding: 0.5rem;
1978
+ gap: 0.35rem;
1979
+ font-size: 0.875rem;
1980
+ font-weight: 600;
1981
+ border: none;
1982
+ cursor: pointer;
1983
+ position: relative;
1984
+ overflow: hidden;
1985
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1986
+ background: transparent;
1987
+ border: 2px solid var(--color-purple-500);
1988
+ color: var(--color-purple-400);
1989
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1990
+ }.btn-outline:hover {
1991
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1992
+ color: white;
1993
+ border-color: var(--color-purple-400);
1994
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1995
+ transform: translateY(-2px);
1996
+ }.btn-danger {
1997
+ display: inline-flex;
1998
+ align-items: center;
1999
+ justify-content: center;
2000
+ border-radius: 0.5rem;
2001
+ padding: 0.5rem;
2002
+ gap: 0.35rem;
2003
+ font-size: 0.875rem;
2004
+ font-weight: 600;
2005
+ border: none;
2006
+ cursor: pointer;
2007
+ position: relative;
2008
+ overflow: hidden;
2009
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2010
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
2011
+ color: white;
2012
+ border: 1px solid var(--color-red-500);
2013
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2014
+ }.btn-danger:hover {
2015
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
2016
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
2017
+ transform: translateY(-2px);
2018
+ }.btn-danger:active {
2019
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
2020
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2021
+ }.btn-primary {
2022
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
2023
+ color: white;
2024
+ border: 1px solid var(--color-purple-500);
2025
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
2026
+ }.btn-primary:hover {
2027
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
2028
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
2029
+ }/* ========================================
2030
+ INPUT UTILITIES
2031
+ ======================================== */.input {
2032
+ width: 100%;
2033
+ border-radius: 0.5rem;
2034
+ padding: 0.5rem 0.75rem;
2035
+ font-size: 0.875rem;
2036
+ border: 1px solid var(--color-neutral-600);
2037
+ background-color: var(--color-neutral-800);
2038
+ color: var(--color-neutral-100);
2039
+ transition: var(--transition-all);
2040
+ }.input::placeholder {
2041
+ color: var(--color-neutral-400);
2042
+ }.input:focus {
2043
+ outline: none;
2044
+ border-color: var(--color-purple-500);
2045
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
2046
+ }.input-dark {
2047
+ width: 100%;
2048
+ padding: 0.75rem;
2049
+ background-color: var(--color-neutral-700);
2050
+ border: 1px solid var(--color-neutral-600);
2051
+ border-radius: 0.5rem;
2052
+ color: var(--color-neutral-100);
2053
+ font-size: 0.875rem;
2054
+ transition: var(--transition-all);
2055
+ }.input-dark:focus {
2056
+ outline: none;
2057
+ border-color: var(--color-purple-500);
2058
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
2059
+ }/* ========================================
2060
+ CARD UTILITIES
2061
+ ======================================== */.card {
2062
+ background: var(--color-neutral-800);
2063
+ border: 1px solid var(--color-neutral-700);
2064
+ border-radius: 0.5rem;
2065
+ padding: 1rem;
2066
+ box-shadow: var(--shadow-md);
2067
+ }/* Player Controls */.player-controls {
2068
+ height: 3rem;
2069
+ background-color: var(--color-neutral-800);
2070
+ border-top: 1px solid var(--color-neutral-600);
2071
+ padding: 0 0.5rem;
2072
+ display: flex;
2073
+ align-items: center;
2074
+ justify-content: space-between;
2075
+ }/* Edit Controls */.edit-controls {
2076
+ display: flex;
2077
+ align-items: center;
2078
+ gap: 0.5rem;
2079
+ }.playback-controls {
2080
+ display: flex;
2081
+ align-items: center;
2082
+ gap: 0.5rem;
2083
+ }/* Control Buttons */.control-btn {
2084
+ display: flex;
2085
+ align-items: center;
2086
+ justify-content: center;
2087
+ padding: 0.25rem 0.5rem;
2088
+ border-radius: 0.375rem;
2089
+ background: transparent;
2090
+ border: none;
2091
+ color: var(--color-neutral-400);
2092
+ transition: var(--transition-all);
2093
+ cursor: pointer;
2094
+ }.control-btn:hover {
2095
+ color: var(--color-neutral-100);
2096
+ background-color: var(--color-neutral-700);
2097
+ }.control-btn:active {
2098
+ transform: scale(0.95);
2099
+ background-color: var(--color-neutral-600);
2100
+ }.control-btn.btn-disabled {
2101
+ opacity: 0.5;
2102
+ cursor: not-allowed;
2103
+ pointer-events: none;
2104
+ color: var(--color-neutral-600);
2105
+ }/* Specific Button Styles */.delete-btn {
2106
+ color: var(--color-red-400);
2107
+ }.delete-btn:hover {
2108
+ color: var(--color-red-300);
2109
+ }.split-btn {
2110
+ color: var(--color-purple-400);
2111
+ }.split-btn:hover {
2112
+ color: var(--color-purple-300);
2113
+ }.play-pause-btn {
2114
+ padding: 0.75rem;
2115
+ color: white;
2116
+ }/* Time Display */.time-display {
2117
+ display: flex;
2118
+ align-items: center;
2119
+ gap: 0.5rem;
2120
+ color: var(--color-neutral-400);
2121
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
2122
+ }.current-time {
2123
+ font-size: 0.875rem;
2124
+ font-weight: 500;
2125
+ color: var(--color-neutral-200);
2126
+ }.time-separator {
2127
+ color: var(--color-neutral-600);
2128
+ }.total-time {
2129
+ font-size: 0.875rem;
2130
+ color: var(--color-neutral-500);
2131
+ }/* Zoom Controls */.twick-track-zoom-container {
2132
+ display: flex;
2133
+ align-items: center;
2134
+ gap: 0.75rem;
2135
+ }.zoom-level {
2136
+ font-size: 0.875rem;
2137
+ color: var(--color-neutral-400);
2138
+ font-weight: 500;
2139
+ min-width: 3rem;
2140
+ text-align: center;
2141
+ }/* Icon sizes */.icon-md {
2142
+ width: 1.25rem;
2143
+ height: 1.25rem;
2144
+ }.icon-lg {
2145
+ width: 1.5rem;
2146
+ height: 1.5rem;
2147
+ }/* Animation */.animate-spin {
2148
+ animation: spin 1s linear infinite;
2149
+ }@keyframes spin {
2150
+ from {
2151
+ transform: rotate(0deg);
2152
+ }
2153
+ to {
2154
+ transform: rotate(360deg);
2155
+ }
2156
+ }/* Undo/Redo Controls */.undo-redo-controls {
2157
+ display: flex;
2158
+ align-items: center;
2159
+ gap: 0.5rem;
2160
+ }