@twick/studio 0.14.5 → 0.14.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/studio.css CHANGED
@@ -1,284 +1,2176 @@
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
+ .text-error {
1085
+ color: var(--color-error);
1086
+ font-size: 0.875rem;
1087
+ }
1088
+
1089
+ /* Video player customizations */
1090
+
1091
+ video::-webkit-media-controls,
1092
+ video::-webkit-media-controls-panel {
1093
+ display: none;
1094
+ }
1095
+
1096
+ /* Global scrollbar styles */
1097
+
1098
+ ::-webkit-scrollbar {
1099
+ width: 6px;
1100
+ }
1101
+
1102
+ ::-webkit-scrollbar-track {
1103
+ background: var(--color-gray-700);
1104
+ }
1105
+
1106
+ ::-webkit-scrollbar-thumb {
1107
+ background: var(--color-purple-600);
1108
+ border-radius: 3px;
1109
+ }
1110
+
1111
+ ::-webkit-scrollbar-thumb:hover {
1112
+ background: var(--color-purple-500);
1113
+ }:root {
1114
+ /* Colors */
1115
+ --color-purple-100: #f3e8ff;
1116
+ --color-purple-200: #e9d5ff;
1117
+ --color-purple-300: #d8b4fe;
1118
+ --color-purple-400: #c084fc;
1119
+ --color-purple-500: #a855f7;
1120
+ --color-purple-600: #9333ea;
1121
+ --color-purple-700: #7e22ce;
1122
+ --color-purple-800: #6b21a8;
1123
+ --color-purple-900: #581c87;
1124
+
1125
+ --color-gray-100: #f3f4f6;
1126
+ --color-gray-200: #e5e7eb;
1127
+ --color-gray-300: #d1d5db;
1128
+ --color-gray-400: #9ca3af;
1129
+ --color-gray-500: #6b7280;
1130
+ --color-gray-600: #4b5563;
1131
+ --color-gray-700: #374151;
1132
+ --color-gray-800: #1f2937;
1133
+ --color-gray-900: #111827;
1134
+
1135
+ --color-neutral-100: #f5f5f5;
1136
+ --color-neutral-200: #e5e5e5;
1137
+ --color-neutral-300: #d4d4d4;
1138
+ --color-neutral-400: #a3a3a3;
1139
+ --color-neutral-500: #737373;
1140
+ --color-neutral-600: #525252;
1141
+ --color-neutral-700: #404040;
1142
+ --color-neutral-800: #262626;
1143
+ --color-neutral-900: #171717;
1144
+
1145
+ --color-red-100: #fee2e2;
1146
+ --color-red-200: #fecaca;
1147
+ --color-red-300: #fca5a5;
1148
+ --color-red-400: #f87171;
1149
+ --color-red-500: #ef4444;
1150
+ --color-red-600: #dc2626;
1151
+ --color-red-700: #b91c1c;
1152
+ --color-red-800: #991b1b;
1153
+ --color-red-900: #7f1d1d;
1154
+
1155
+ /* Shadows */
1156
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1157
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1158
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1159
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1160
+
1161
+ /* Transitions */
1162
+ --transition-all: all 0.2s ease;
1163
+ }/* ========================================
1164
+ LAYOUT UTILITIES
1165
+ ======================================== *//* Flexbox utilities */.flex {
1166
+ display: flex;
1167
+ }.flex-col {
1168
+ flex-direction: column;
1169
+ }.flex-row {
1170
+ flex-direction: row;
1171
+ }.flex-container {
1172
+ display: flex;
1173
+ align-items: center;
1174
+ gap: 0.5rem;
1175
+ }.items-center {
1176
+ align-items: center;
1177
+ }.justify-center {
1178
+ justify-content: center;
1179
+ }.justify-between {
1180
+ justify-content: space-between;
1181
+ }/* Gap utilities */.gap-1 {
1182
+ gap: 0.25rem;
1183
+ }.gap-2 {
1184
+ gap: 0.5rem;
1185
+ }.gap-3 {
1186
+ gap: 0.75rem;
1187
+ }.gap-4 {
1188
+ gap: 1rem;
1189
+ }/* Width/Height utilities */.w-full {
1190
+ width: 100%;
1191
+ }.h-full {
1192
+ height: 100%;
1193
+ }/* ========================================
1194
+ ICON UTILITIES
1195
+ ======================================== */.icon-xs {
1196
+ width: 0.75rem;
1197
+ height: 0.75rem;
1198
+ }.icon-sm {
1199
+ width: 1rem;
1200
+ height: 1rem;
1201
+ }.icon-md {
1202
+ width: 1.5rem;
1203
+ height: 1.5rem;
1204
+ }.icon-lg {
1205
+ width: 2rem;
1206
+ height: 2rem;
1207
+ }.icon-margin {
1208
+ margin-right: 0.5rem;
1209
+ }/* ========================================
1210
+ TEXT UTILITIES
1211
+ ======================================== */.text-sm {
1212
+ font-size: 0.875rem;
1213
+ }.text-base {
1214
+ font-size: 1rem;
1215
+ }.text-lg {
1216
+ font-size: 1.125rem;
1217
+ }.font-bold {
1218
+ font-weight: 700;
1219
+ }.text-gradient {
1220
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
1221
+ -webkit-background-clip: text;
1222
+ background-clip: text;
1223
+ font-size: 1.5rem;
1224
+ font-weight: 700;
1225
+ color: transparent;
1226
+ }.text-gradient-purple,
1227
+ .text-gradient-blue {
1228
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
1229
+ -webkit-background-clip: text;
1230
+ -webkit-text-fill-color: transparent;
1231
+ background-clip: text;
1232
+ }/* ========================================
1233
+ GRID UTILITIES
1234
+ ======================================== */.grid-auto-fit {
1235
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1236
+ }.grid-auto-fill {
1237
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1238
+ }/* ========================================
1239
+ BACKDROP UTILITIES
1240
+ ======================================== */.backdrop-blur-sm {
1241
+ backdrop-filter: blur(4px);
1242
+ }.backdrop-blur-md {
1243
+ backdrop-filter: blur(8px);
1244
+ }.backdrop-blur-lg {
1245
+ backdrop-filter: blur(12px);
1246
+ }/* ========================================
1247
+ SCROLLBAR UTILITIES
1248
+ ======================================== */.custom-scrollbar {
1249
+ scrollbar-width: thin;
1250
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
1251
+ }.custom-scrollbar::-webkit-scrollbar {
1252
+ width: 6px;
1253
+ height: 6px;
1254
+ }.custom-scrollbar::-webkit-scrollbar-track {
1255
+ background: var(--color-neutral-800);
1256
+ border-radius: 3px;
1257
+ }.custom-scrollbar::-webkit-scrollbar-thumb {
1258
+ background: var(--color-neutral-600);
1259
+ border-radius: 3px;
1260
+ }.custom-scrollbar::-webkit-scrollbar-thumb:hover {
1261
+ background: var(--color-neutral-500);
1262
+ }/* ========================================
1263
+ GLASS EFFECT UTILITIES
1264
+ ======================================== */.glass {
1265
+ background: rgba(255, 255, 255, 0.05);
1266
+ backdrop-filter: blur(12px);
1267
+ border: 1px solid rgba(75, 85, 99, 0.5);
1268
+ box-shadow: var(--shadow-lg);
1269
+ }/* ========================================
1270
+ GLOW EFFECTS
1271
+ ======================================== */.glow-purple {
1272
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
1273
+ }.glow-blue {
1274
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
1275
+ }/* ========================================
1276
+ BUTTON BASE UTILITIES
1277
+ ======================================== */.btn {
1278
+ display: inline-flex;
1279
+ align-items: center;
1280
+ justify-content: center;
1281
+ border-radius: 0.5rem;
1282
+ padding: 0.5rem;
1283
+ gap: 0.35rem;
1284
+ font-size: 0.875rem;
1285
+ font-weight: 600;
1286
+ border: none;
1287
+ cursor: pointer;
1288
+ position: relative;
1289
+ overflow: hidden;
1290
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1291
+ text-transform: uppercase;
1292
+ letter-spacing: 0.025em;
1293
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1294
+ }.btn::before {
1295
+ content: '';
1296
+ position: absolute;
1297
+ top: 0;
1298
+ left: 0;
1299
+ right: 0;
1300
+ height: 50%;
1301
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
1302
+ border-radius: 0.75rem 0.75rem 0 0;
1303
+ pointer-events: none;
1304
+ }.btn:focus {
1305
+ outline: none;
1306
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1307
+ }.btn:active {
1308
+ transform: translateY(1px);
1309
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1310
+ }.btn:disabled {
1311
+ opacity: 0.6;
1312
+ cursor: not-allowed;
1313
+ transform: none;
1314
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
1315
+ }/* Button variants */.btn-primary {
1316
+ display: inline-flex;
1317
+ align-items: center;
1318
+ justify-content: center;
1319
+ border-radius: 0.5rem;
1320
+ padding: 0.5rem;
1321
+ gap: 0.35rem;
1322
+ font-size: 0.875rem;
1323
+ font-weight: 600;
1324
+ border: none;
1325
+ cursor: pointer;
1326
+ position: relative;
1327
+ overflow: hidden;
1328
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1329
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1330
+ color: white;
1331
+ border: 1px solid var(--color-purple-500);
1332
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1333
+ }.btn-primary:hover {
1334
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1335
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1336
+ transform: translateY(-2px);
1337
+ }.btn-primary:active {
1338
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1339
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1340
+ }.btn-secondary {
1341
+ display: inline-flex;
1342
+ align-items: center;
1343
+ justify-content: center;
1344
+ border-radius: 0.5rem;
1345
+ padding: 0.5rem;
1346
+ gap: 0.35rem;
1347
+ font-size: 0.875rem;
1348
+ font-weight: 600;
1349
+ border: none;
1350
+ cursor: pointer;
1351
+ position: relative;
1352
+ overflow: hidden;
1353
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1354
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
1355
+ color: var(--color-neutral-700);
1356
+ border: 1px solid var(--color-purple-300);
1357
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
1358
+ }.btn-secondary:hover {
1359
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
1360
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
1361
+ transform: translateY(-2px);
1362
+ }.btn-ghost {
1363
+ display: inline-flex;
1364
+ align-items: center;
1365
+ justify-content: center;
1366
+ border-radius: 0.5rem;
1367
+ padding: 0.5rem;
1368
+ gap: 0.35rem;
1369
+ font-size: 0.875rem;
1370
+ font-weight: 600;
1371
+ border: none;
1372
+ cursor: pointer;
1373
+ position: relative;
1374
+ overflow: hidden;
1375
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1376
+ background: rgba(64, 64, 64, 0.3);
1377
+ color: var(--color-neutral-300);
1378
+ border: 1px solid rgba(255, 255, 255, 0.1);
1379
+ backdrop-filter: blur(10px);
1380
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1381
+ }.btn-ghost:hover {
1382
+ background: rgba(255, 255, 255, 0.1);
1383
+ color: white;
1384
+ border-color: rgba(255, 255, 255, 0.2);
1385
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1386
+ transform: translateY(-2px);
1387
+ }.btn-outline {
1388
+ display: inline-flex;
1389
+ align-items: center;
1390
+ justify-content: center;
1391
+ border-radius: 0.5rem;
1392
+ padding: 0.5rem;
1393
+ gap: 0.35rem;
1394
+ font-size: 0.875rem;
1395
+ font-weight: 600;
1396
+ border: none;
1397
+ cursor: pointer;
1398
+ position: relative;
1399
+ overflow: hidden;
1400
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1401
+ background: transparent;
1402
+ border: 2px solid var(--color-purple-500);
1403
+ color: var(--color-purple-400);
1404
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1405
+ }.btn-outline:hover {
1406
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1407
+ color: white;
1408
+ border-color: var(--color-purple-400);
1409
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1410
+ transform: translateY(-2px);
1411
+ }.btn-danger {
1412
+ display: inline-flex;
1413
+ align-items: center;
1414
+ justify-content: center;
1415
+ border-radius: 0.5rem;
1416
+ padding: 0.5rem;
1417
+ gap: 0.35rem;
1418
+ font-size: 0.875rem;
1419
+ font-weight: 600;
1420
+ border: none;
1421
+ cursor: pointer;
1422
+ position: relative;
1423
+ overflow: hidden;
1424
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1425
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
1426
+ color: white;
1427
+ border: 1px solid var(--color-red-500);
1428
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1429
+ }.btn-danger:hover {
1430
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
1431
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1432
+ transform: translateY(-2px);
1433
+ }.btn-danger:active {
1434
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
1435
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1436
+ }.btn-primary {
1437
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
1438
+ color: white;
1439
+ border: 1px solid var(--color-purple-500);
1440
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
1441
+ }.btn-primary:hover {
1442
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1443
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
1444
+ }/* ========================================
1445
+ INPUT UTILITIES
1446
+ ======================================== */.input {
1447
+ width: 100%;
1448
+ border-radius: 0.5rem;
1449
+ padding: 0.5rem 0.75rem;
1450
+ font-size: 0.875rem;
1451
+ border: 1px solid var(--color-neutral-600);
1452
+ background-color: var(--color-neutral-800);
1453
+ color: var(--color-neutral-100);
1454
+ transition: var(--transition-all);
1455
+ }.input::placeholder {
1456
+ color: var(--color-neutral-400);
1457
+ }.input:focus {
1458
+ outline: none;
1459
+ border-color: var(--color-purple-500);
1460
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1461
+ }.input-dark {
1462
+ width: 100%;
1463
+ padding: 0.75rem;
1464
+ background-color: var(--color-neutral-700);
1465
+ border: 1px solid var(--color-neutral-600);
1466
+ border-radius: 0.5rem;
1467
+ color: var(--color-neutral-100);
1468
+ font-size: 0.875rem;
1469
+ transition: var(--transition-all);
1470
+ }.input-dark:focus {
1471
+ outline: none;
1472
+ border-color: var(--color-purple-500);
1473
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1474
+ }/* ========================================
1475
+ CARD UTILITIES
1476
+ ======================================== */.card {
1477
+ background: var(--color-neutral-800);
1478
+ border: 1px solid var(--color-neutral-700);
1479
+ border-radius: 0.5rem;
1480
+ padding: 1rem;
1481
+ box-shadow: var(--shadow-md);
1482
+ }.twick-editor-main-container {
1483
+ display: flex;
1484
+ flex-direction: column;
1485
+ width: 100%;
1486
+ height: 100%;
1487
+ gap: 6px;
1488
+ }.twick-editor-view-section {
1489
+ display: flex;
1490
+ flex-direction: row;
1491
+ justify-content: space-between;
1492
+ gap: 6px;
1493
+ width: 100%;
1494
+ height: 100%;
1495
+ }.twick-editor-timeline-section {
1496
+ display: flex;
1497
+ flex-direction: column;
1498
+ width: 100%;
1499
+ height: 100%;
1500
+ background-color: #252525;
1501
+ border-radius: 10px;
1502
+ overflow-x: hidden;
1503
+ }.twick-editor-container {
1504
+ position: relative;
1505
+ height: 80dvh;
1506
+ overflow: hidden;
1507
+ border-radius: 10px;
1508
+ background-color: #000;
1509
+ color: #fff;
1510
+ }.twick-editor-canvas-container {
1511
+ position: absolute;
1512
+ top: 0;
1513
+ left: 0;
1514
+ width: 100%;
1515
+ height: 100%;
1516
+ }.twick-editor-canvas {
1517
+ width: 100%;
1518
+ height: 100%;
1519
+ }.twick-editor-loading-overlay {
1520
+ position: absolute;
1521
+ z-index: 30;
1522
+ background-color: rgba(0, 0, 0, 0.5);
1523
+ top: 0;
1524
+ left: 0;
1525
+ width: 100%;
1526
+ height: 100%;
1527
+ display: flex;
1528
+ }.twick-editor-loading-spinner {
1529
+ width: 48px;
1530
+ height: 48px;
1531
+ border: 6px solid #444;
1532
+ border-top: 6px solid #fff;
1533
+ border-radius: 50%;
1534
+ animation: twick-editor-spin 1s linear infinite;
1535
+ margin: auto;
1536
+ }@keyframes twick-editor-spin {
1537
+ 0% { transform: rotate(0deg); }
1538
+ 100% { transform: rotate(360deg); }
1539
+ }.twick-timeline-scroll-container {
1540
+ display: flex;
1541
+ flex-direction: column;
1542
+ flex: 1;
1543
+ overflow-x: auto;
1544
+ overflow-y: hidden;
1545
+ }/* Timeline Container Styles */.twick-timeline-container {
1546
+ display: flex;
1547
+ height: 2.75rem;
1548
+ position: relative;
1549
+ }.twick-timeline-header-container {
1550
+ position: sticky;
1551
+ left: 0;
1552
+ z-index: 30;
1553
+ }.twick-seek-track-container {
1554
+ display: flex;
1555
+ position: relative;
1556
+ min-width: 100%;
1557
+ height: 2rem;
1558
+ width: 100%;
1559
+ }.twick-seek-track-container-no-scrollbar {
1560
+ display: flex;
1561
+ position: relative;
1562
+ min-width: 100%;
1563
+ height: 2rem;
1564
+ width: 100%;
1565
+ /* Hide scrollbar for all browsers */
1566
+ scrollbar-width: none; /* Firefox */
1567
+ -ms-overflow-style: none; /* IE and Edge */
1568
+ }.twick-seek-track-container-no-scrollbar::-webkit-scrollbar {
1569
+ display: none; /* Chrome, Safari, Opera */
1570
+ }.twick-seek-track-empty-space {
1571
+ position: sticky;
1572
+ left: 0;
1573
+ z-index: 40;
1574
+ display: flex;
1575
+ justify-content: center;
1576
+ align-items: center;
1577
+ flex-grow: 0;
1578
+ min-width: 40px;
1579
+ height: 34px;
1580
+ background-color: #171717;
1581
+ }.twick-seek-track {
1582
+ position: relative;
1583
+ width: 100%;
1584
+ border-top: 1px solid #262626;
1585
+ border-bottom: 1px solid #262626;
1586
+ background-color: #171717;
1587
+ }.twick-seek-track-canvas {
1588
+ min-width: 100%;
1589
+ height: 2rem;
1590
+ }.twick-seek-track-playhead {
1591
+ position: absolute;
1592
+ top: 0;
1593
+ left: 0;
1594
+ z-index: 30;
1595
+ cursor: ew-resize;
1596
+ width: 100%;
1597
+ height: 100%;
1598
+ }.twick-seek-track-pin {
1599
+ position: absolute;
1600
+ top: 0;
1601
+ left: 0;
1602
+ z-index: 30;
1603
+ width: 1.5px;
1604
+ height: 100%;
1605
+ background-color: #FFFFFF;
1606
+ }.twick-seek-track-handle {
1607
+ position: absolute;
1608
+ top: 0;
1609
+ left: 0;
1610
+ width: 0.75rem;
1611
+ height: 0.75rem;
1612
+ transform: translate(-50%, -50%);
1613
+ background-color: #FFFFFF;
1614
+ border-radius: 25%;
1615
+ }.twick-track-element {
1616
+ position: absolute;
1617
+ height: 100%;
1618
+ cursor: pointer;
1619
+ border-radius: 6px;
1620
+ transition: background-color 0.2s ease-in-out;
1621
+ }.twick-track-element-selected {
1622
+ border: 2px solid #FFFFFF;
1623
+ z-index: 10;
1624
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.8);
1625
+ }.twick-track-element-default {
1626
+ border: 1px solid #d1d1d1;
1627
+ }.twick-track-element-dragging {
1628
+ border: 1px solid #ffffff;
1629
+ }.twick-track-element-content {
1630
+ display: flex;
1631
+ align-items: center;
1632
+ width: 100%;
1633
+ height: 100%;
1634
+ cursor: grab;
1635
+ transition: background-color 0.2s ease-in-out;
1636
+ padding: 0.25rem;
1637
+ white-space: nowrap;
1638
+ overflow: hidden;
1639
+ text-overflow: ellipsis;
1640
+ }.twick-track-element-handle {
1641
+ position: absolute;
1642
+ width: 2px;
1643
+ height: 60%;
1644
+ cursor: ew-resize;
1645
+ transition: background-color 0.2s ease-in-out;
1646
+ top: 50%;
1647
+ transform: translate(-50%, -50%);
1648
+ background-color: #FFFFFF;
1649
+ border-radius: 25%;
1650
+ z-index: 10;
1651
+ }.twick-track-element-handle-start {
1652
+ left: 0px;
1653
+ }.twick-track-element-handle-end {
1654
+ right: -2px;
1655
+ }.twick-track-element-frame-effect {
1656
+ position: absolute;
1657
+ flex: 1;
1658
+ top: 0;
1659
+ display: flex;
1660
+ align-items: center;
1661
+ padding: 0 0.5rem;
1662
+ font-size: 0.75rem;
1663
+ opacity: 0.5;
1664
+ }.twick-track-header {
1665
+ display: flex;
1666
+ flex: none;
1667
+ position: relative;
1668
+ width: 40px;
1669
+ height: 100%;
1670
+ background-color: #171717;
1671
+ border-right: 1px solid #262626;
1672
+ align-items: center;
1673
+ }.twick-track-header-selected {
1674
+ border: 2px solid #FFFFFF;
1675
+ z-index: 10;
1676
+ box-shadow: 0 0 0 1px rgba(255,255,255,0.8);
1677
+ outline: 2px solid #FFFFFF;
1678
+ }.twick-track-header-default {
1679
+ border: 1px solid #404040;
1680
+ }.twick-track-header-lock {
1681
+ position: absolute;
1682
+ top: 14px;
1683
+ right: 2px;
1684
+ width: 16px;
1685
+ height: 16px;
1686
+ z-index: 20;
1687
+ color: #333;
1688
+ }.twick-track-header-content {
1689
+ display: flex;
1690
+ align-items: center;
1691
+ width: 100%;
1692
+ height: 100%;
1693
+ padding: 0 0.5rem;
1694
+ }.twick-track-header-grip {
1695
+ display: flex;
1696
+ align-items: center;
1697
+ justify-content: center;
1698
+ margin-top: 4px;
1699
+ width: 20px;
1700
+ height: 20px;
1701
+ cursor: grab;
1702
+ }.twick-track-header-name {
1703
+ display: flex;
1704
+ align-items: center;
1705
+ width: 100%;
1706
+ height: 100%;
1707
+ padding: 0 0.5rem;
1708
+ }.twick-track {
1709
+ min-width: 100%;
1710
+ position: relative;
1711
+ height: 2.5rem;
1712
+ margin-top: 2px;
1713
+ background-color: #474747;
1714
+ }:root {
1715
+ /* Colors */
1716
+ --color-purple-100: #f3e8ff;
1717
+ --color-purple-200: #e9d5ff;
1718
+ --color-purple-300: #d8b4fe;
1719
+ --color-purple-400: #c084fc;
1720
+ --color-purple-500: #a855f7;
1721
+ --color-purple-600: #9333ea;
1722
+ --color-purple-700: #7e22ce;
1723
+ --color-purple-800: #6b21a8;
1724
+ --color-purple-900: #581c87;
1725
+
1726
+ --color-gray-100: #f3f4f6;
1727
+ --color-gray-200: #e5e7eb;
1728
+ --color-gray-300: #d1d5db;
1729
+ --color-gray-400: #9ca3af;
1730
+ --color-gray-500: #6b7280;
1731
+ --color-gray-600: #4b5563;
1732
+ --color-gray-700: #374151;
1733
+ --color-gray-800: #1f2937;
1734
+ --color-gray-900: #111827;
1735
+
1736
+ --color-neutral-100: #f5f5f5;
1737
+ --color-neutral-200: #e5e5e5;
1738
+ --color-neutral-300: #d4d4d4;
1739
+ --color-neutral-400: #a3a3a3;
1740
+ --color-neutral-500: #737373;
1741
+ --color-neutral-600: #525252;
1742
+ --color-neutral-700: #404040;
1743
+ --color-neutral-800: #262626;
1744
+ --color-neutral-900: #171717;
1745
+
1746
+ --color-red-100: #fee2e2;
1747
+ --color-red-200: #fecaca;
1748
+ --color-red-300: #fca5a5;
1749
+ --color-red-400: #f87171;
1750
+ --color-red-500: #ef4444;
1751
+ --color-red-600: #dc2626;
1752
+ --color-red-700: #b91c1c;
1753
+ --color-red-800: #991b1b;
1754
+ --color-red-900: #7f1d1d;
1755
+
1756
+ /* Shadows */
1757
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1758
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1759
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1760
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
1761
+
1762
+ /* Transitions */
1763
+ --transition-all: all 0.2s ease;
1764
+ }/* ========================================
1765
+ LAYOUT UTILITIES
1766
+ ======================================== *//* Flexbox utilities */.flex {
1767
+ display: flex;
1768
+ }.flex-col {
1769
+ flex-direction: column;
1770
+ }.flex-row {
1771
+ flex-direction: row;
1772
+ }.flex-container {
1773
+ display: flex;
1774
+ align-items: center;
1775
+ gap: 0.5rem;
1776
+ }.items-center {
1777
+ align-items: center;
1778
+ }.justify-center {
1779
+ justify-content: center;
1780
+ }.justify-between {
1781
+ justify-content: space-between;
1782
+ }/* Gap utilities */.gap-1 {
1783
+ gap: 0.25rem;
1784
+ }.gap-2 {
1785
+ gap: 0.5rem;
1786
+ }.gap-3 {
1787
+ gap: 0.75rem;
1788
+ }.gap-4 {
1789
+ gap: 1rem;
1790
+ }/* Width/Height utilities */.w-full {
1791
+ width: 100%;
1792
+ }.h-full {
1793
+ height: 100%;
1794
+ }/* ========================================
1795
+ ICON UTILITIES
1796
+ ======================================== */.icon-xs {
1797
+ width: 0.75rem;
1798
+ height: 0.75rem;
1799
+ }.icon-sm {
1800
+ width: 1rem;
1801
+ height: 1rem;
1802
+ }.icon-md {
1803
+ width: 1.5rem;
1804
+ height: 1.5rem;
1805
+ }.icon-lg {
1806
+ width: 2rem;
1807
+ height: 2rem;
1808
+ }.icon-margin {
1809
+ margin-right: 0.5rem;
1810
+ }/* ========================================
1811
+ TEXT UTILITIES
1812
+ ======================================== */.text-sm {
1813
+ font-size: 0.875rem;
1814
+ }.text-base {
1815
+ font-size: 1rem;
1816
+ }.text-lg {
1817
+ font-size: 1.125rem;
1818
+ }.font-bold {
1819
+ font-weight: 700;
1820
+ }.text-gradient {
1821
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
1822
+ -webkit-background-clip: text;
1823
+ background-clip: text;
1824
+ font-size: 1.5rem;
1825
+ font-weight: 700;
1826
+ color: transparent;
1827
+ }.text-gradient-purple,
1828
+ .text-gradient-blue {
1829
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
1830
+ -webkit-background-clip: text;
1831
+ -webkit-text-fill-color: transparent;
1832
+ background-clip: text;
1833
+ }/* ========================================
1834
+ GRID UTILITIES
1835
+ ======================================== */.grid-auto-fit {
1836
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
1837
+ }.grid-auto-fill {
1838
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
1839
+ }/* ========================================
1840
+ BACKDROP UTILITIES
1841
+ ======================================== */.backdrop-blur-sm {
1842
+ backdrop-filter: blur(4px);
1843
+ }.backdrop-blur-md {
1844
+ backdrop-filter: blur(8px);
1845
+ }.backdrop-blur-lg {
1846
+ backdrop-filter: blur(12px);
1847
+ }/* ========================================
1848
+ SCROLLBAR UTILITIES
1849
+ ======================================== */.custom-scrollbar {
1850
+ scrollbar-width: thin;
1851
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
1852
+ }.custom-scrollbar::-webkit-scrollbar {
1853
+ width: 6px;
1854
+ height: 6px;
1855
+ }.custom-scrollbar::-webkit-scrollbar-track {
1856
+ background: var(--color-neutral-800);
1857
+ border-radius: 3px;
1858
+ }.custom-scrollbar::-webkit-scrollbar-thumb {
1859
+ background: var(--color-neutral-600);
1860
+ border-radius: 3px;
1861
+ }.custom-scrollbar::-webkit-scrollbar-thumb:hover {
1862
+ background: var(--color-neutral-500);
1863
+ }/* ========================================
1864
+ GLASS EFFECT UTILITIES
1865
+ ======================================== */.glass {
1866
+ background: rgba(255, 255, 255, 0.05);
1867
+ backdrop-filter: blur(12px);
1868
+ border: 1px solid rgba(75, 85, 99, 0.5);
1869
+ box-shadow: var(--shadow-lg);
1870
+ }/* ========================================
1871
+ GLOW EFFECTS
1872
+ ======================================== */.glow-purple {
1873
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
1874
+ }.glow-blue {
1875
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
1876
+ }/* ========================================
1877
+ BUTTON BASE UTILITIES
1878
+ ======================================== */.btn {
1879
+ display: inline-flex;
1880
+ align-items: center;
1881
+ justify-content: center;
1882
+ border-radius: 0.5rem;
1883
+ padding: 0.5rem;
1884
+ gap: 0.35rem;
1885
+ font-size: 0.875rem;
1886
+ font-weight: 600;
1887
+ border: none;
1888
+ cursor: pointer;
1889
+ position: relative;
1890
+ overflow: hidden;
1891
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1892
+ text-transform: uppercase;
1893
+ letter-spacing: 0.025em;
1894
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1895
+ }.btn::before {
1896
+ content: '';
1897
+ position: absolute;
1898
+ top: 0;
1899
+ left: 0;
1900
+ right: 0;
1901
+ height: 50%;
1902
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
1903
+ border-radius: 0.75rem 0.75rem 0 0;
1904
+ pointer-events: none;
1905
+ }.btn:focus {
1906
+ outline: none;
1907
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1908
+ }.btn:active {
1909
+ transform: translateY(1px);
1910
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1911
+ }.btn:disabled {
1912
+ opacity: 0.6;
1913
+ cursor: not-allowed;
1914
+ transform: none;
1915
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
1916
+ }/* Button variants */.btn-primary {
1917
+ display: inline-flex;
1918
+ align-items: center;
1919
+ justify-content: center;
1920
+ border-radius: 0.5rem;
1921
+ padding: 0.5rem;
1922
+ gap: 0.35rem;
1923
+ font-size: 0.875rem;
1924
+ font-weight: 600;
1925
+ border: none;
1926
+ cursor: pointer;
1927
+ position: relative;
1928
+ overflow: hidden;
1929
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1930
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1931
+ color: white;
1932
+ border: 1px solid var(--color-purple-500);
1933
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1934
+ }.btn-primary:hover {
1935
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1936
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1937
+ transform: translateY(-2px);
1938
+ }.btn-primary:active {
1939
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1940
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1941
+ }.btn-secondary {
1942
+ display: inline-flex;
1943
+ align-items: center;
1944
+ justify-content: center;
1945
+ border-radius: 0.5rem;
1946
+ padding: 0.5rem;
1947
+ gap: 0.35rem;
1948
+ font-size: 0.875rem;
1949
+ font-weight: 600;
1950
+ border: none;
1951
+ cursor: pointer;
1952
+ position: relative;
1953
+ overflow: hidden;
1954
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1955
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
1956
+ color: var(--color-neutral-700);
1957
+ border: 1px solid var(--color-purple-300);
1958
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
1959
+ }.btn-secondary:hover {
1960
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
1961
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
1962
+ transform: translateY(-2px);
1963
+ }.btn-ghost {
1964
+ display: inline-flex;
1965
+ align-items: center;
1966
+ justify-content: center;
1967
+ border-radius: 0.5rem;
1968
+ padding: 0.5rem;
1969
+ gap: 0.35rem;
1970
+ font-size: 0.875rem;
1971
+ font-weight: 600;
1972
+ border: none;
1973
+ cursor: pointer;
1974
+ position: relative;
1975
+ overflow: hidden;
1976
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1977
+ background: rgba(64, 64, 64, 0.3);
1978
+ color: var(--color-neutral-300);
1979
+ border: 1px solid rgba(255, 255, 255, 0.1);
1980
+ backdrop-filter: blur(10px);
1981
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1982
+ }.btn-ghost:hover {
1983
+ background: rgba(255, 255, 255, 0.1);
1984
+ color: white;
1985
+ border-color: rgba(255, 255, 255, 0.2);
1986
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1987
+ transform: translateY(-2px);
1988
+ }.btn-outline {
1989
+ display: inline-flex;
1990
+ align-items: center;
1991
+ justify-content: center;
1992
+ border-radius: 0.5rem;
1993
+ padding: 0.5rem;
1994
+ gap: 0.35rem;
1995
+ font-size: 0.875rem;
1996
+ font-weight: 600;
1997
+ border: none;
1998
+ cursor: pointer;
1999
+ position: relative;
2000
+ overflow: hidden;
2001
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2002
+ background: transparent;
2003
+ border: 2px solid var(--color-purple-500);
2004
+ color: var(--color-purple-400);
2005
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
2006
+ }.btn-outline:hover {
2007
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
2008
+ color: white;
2009
+ border-color: var(--color-purple-400);
2010
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2011
+ transform: translateY(-2px);
2012
+ }.btn-danger {
2013
+ display: inline-flex;
2014
+ align-items: center;
2015
+ justify-content: center;
2016
+ border-radius: 0.5rem;
2017
+ padding: 0.5rem;
2018
+ gap: 0.35rem;
2019
+ font-size: 0.875rem;
2020
+ font-weight: 600;
2021
+ border: none;
2022
+ cursor: pointer;
2023
+ position: relative;
2024
+ overflow: hidden;
2025
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2026
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
2027
+ color: white;
2028
+ border: 1px solid var(--color-red-500);
2029
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2030
+ }.btn-danger:hover {
2031
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
2032
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
2033
+ transform: translateY(-2px);
2034
+ }.btn-danger:active {
2035
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
2036
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2037
+ }.btn-primary {
2038
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
2039
+ color: white;
2040
+ border: 1px solid var(--color-purple-500);
2041
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
2042
+ }.btn-primary:hover {
2043
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
2044
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
2045
+ }/* ========================================
2046
+ INPUT UTILITIES
2047
+ ======================================== */.input {
2048
+ width: 100%;
2049
+ border-radius: 0.5rem;
2050
+ padding: 0.5rem 0.75rem;
2051
+ font-size: 0.875rem;
2052
+ border: 1px solid var(--color-neutral-600);
2053
+ background-color: var(--color-neutral-800);
2054
+ color: var(--color-neutral-100);
2055
+ transition: var(--transition-all);
2056
+ }.input::placeholder {
2057
+ color: var(--color-neutral-400);
2058
+ }.input:focus {
2059
+ outline: none;
2060
+ border-color: var(--color-purple-500);
2061
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
2062
+ }.input-dark {
2063
+ width: 100%;
2064
+ padding: 0.75rem;
2065
+ background-color: var(--color-neutral-700);
2066
+ border: 1px solid var(--color-neutral-600);
2067
+ border-radius: 0.5rem;
2068
+ color: var(--color-neutral-100);
2069
+ font-size: 0.875rem;
2070
+ transition: var(--transition-all);
2071
+ }.input-dark:focus {
2072
+ outline: none;
2073
+ border-color: var(--color-purple-500);
2074
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
2075
+ }/* ========================================
2076
+ CARD UTILITIES
2077
+ ======================================== */.card {
2078
+ background: var(--color-neutral-800);
2079
+ border: 1px solid var(--color-neutral-700);
2080
+ border-radius: 0.5rem;
2081
+ padding: 1rem;
2082
+ box-shadow: var(--shadow-md);
2083
+ }/* Player Controls */.player-controls {
2084
+ height: 3rem;
2085
+ background-color: var(--color-neutral-800);
2086
+ border-top: 1px solid var(--color-neutral-600);
2087
+ padding: 0 0.5rem;
2088
+ display: flex;
2089
+ align-items: center;
2090
+ justify-content: space-between;
2091
+ }/* Edit Controls */.edit-controls {
2092
+ display: flex;
2093
+ align-items: center;
2094
+ gap: 0.5rem;
2095
+ }.playback-controls {
2096
+ display: flex;
2097
+ align-items: center;
2098
+ gap: 0.5rem;
2099
+ }/* Control Buttons */.control-btn {
2100
+ display: flex;
2101
+ align-items: center;
2102
+ justify-content: center;
2103
+ padding: 0.25rem 0.5rem;
2104
+ border-radius: 0.375rem;
2105
+ background: transparent;
2106
+ border: none;
2107
+ color: var(--color-neutral-400);
2108
+ transition: var(--transition-all);
2109
+ cursor: pointer;
2110
+ }.control-btn:hover {
2111
+ color: var(--color-neutral-100);
2112
+ background-color: var(--color-neutral-700);
2113
+ }.control-btn:active {
2114
+ transform: scale(0.95);
2115
+ background-color: var(--color-neutral-600);
2116
+ }.control-btn.btn-disabled {
2117
+ opacity: 0.5;
2118
+ cursor: not-allowed;
2119
+ pointer-events: none;
2120
+ color: var(--color-neutral-600);
2121
+ }/* Specific Button Styles */.delete-btn {
2122
+ color: var(--color-red-400);
2123
+ }.delete-btn:hover {
2124
+ color: var(--color-red-300);
2125
+ }.split-btn {
2126
+ color: var(--color-purple-400);
2127
+ }.split-btn:hover {
2128
+ color: var(--color-purple-300);
2129
+ }.play-pause-btn {
2130
+ padding: 0.75rem;
2131
+ color: white;
2132
+ }/* Time Display */.time-display {
2133
+ display: flex;
2134
+ align-items: center;
2135
+ gap: 0.5rem;
2136
+ color: var(--color-neutral-400);
2137
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
2138
+ }.current-time {
2139
+ font-size: 0.875rem;
2140
+ font-weight: 500;
2141
+ color: var(--color-neutral-200);
2142
+ }.time-separator {
2143
+ color: var(--color-neutral-600);
2144
+ }.total-time {
2145
+ font-size: 0.875rem;
2146
+ color: var(--color-neutral-500);
2147
+ }/* Zoom Controls */.twick-track-zoom-container {
2148
+ display: flex;
2149
+ align-items: center;
2150
+ gap: 0.75rem;
2151
+ }.zoom-level {
2152
+ font-size: 0.875rem;
2153
+ color: var(--color-neutral-400);
2154
+ font-weight: 500;
2155
+ min-width: 3rem;
2156
+ text-align: center;
2157
+ }/* Icon sizes */.icon-md {
2158
+ width: 1.25rem;
2159
+ height: 1.25rem;
2160
+ }.icon-lg {
2161
+ width: 1.5rem;
2162
+ height: 1.5rem;
2163
+ }/* Animation */.animate-spin {
2164
+ animation: spin 1s linear infinite;
2165
+ }@keyframes spin {
2166
+ from {
2167
+ transform: rotate(0deg);
2168
+ }
2169
+ to {
2170
+ transform: rotate(360deg);
2171
+ }
2172
+ }/* Undo/Redo Controls */.undo-redo-controls {
2173
+ display: flex;
2174
+ align-items: center;
2175
+ gap: 0.5rem;
2176
+ }