@twick/video-editor 0.14.4 → 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.
@@ -10,6 +10,454 @@
10
10
 
11
11
 
12
12
 
13
+
14
+ :root {
15
+ /* Colors */
16
+ --color-purple-100: #f3e8ff;
17
+ --color-purple-200: #e9d5ff;
18
+ --color-purple-300: #d8b4fe;
19
+ --color-purple-400: #c084fc;
20
+ --color-purple-500: #a855f7;
21
+ --color-purple-600: #9333ea;
22
+ --color-purple-700: #7e22ce;
23
+ --color-purple-800: #6b21a8;
24
+ --color-purple-900: #581c87;
25
+
26
+ --color-gray-100: #f3f4f6;
27
+ --color-gray-200: #e5e7eb;
28
+ --color-gray-300: #d1d5db;
29
+ --color-gray-400: #9ca3af;
30
+ --color-gray-500: #6b7280;
31
+ --color-gray-600: #4b5563;
32
+ --color-gray-700: #374151;
33
+ --color-gray-800: #1f2937;
34
+ --color-gray-900: #111827;
35
+
36
+ --color-neutral-100: #f5f5f5;
37
+ --color-neutral-200: #e5e5e5;
38
+ --color-neutral-300: #d4d4d4;
39
+ --color-neutral-400: #a3a3a3;
40
+ --color-neutral-500: #737373;
41
+ --color-neutral-600: #525252;
42
+ --color-neutral-700: #404040;
43
+ --color-neutral-800: #262626;
44
+ --color-neutral-900: #171717;
45
+
46
+ --color-red-100: #fee2e2;
47
+ --color-red-200: #fecaca;
48
+ --color-red-300: #fca5a5;
49
+ --color-red-400: #f87171;
50
+ --color-red-500: #ef4444;
51
+ --color-red-600: #dc2626;
52
+ --color-red-700: #b91c1c;
53
+ --color-red-800: #991b1b;
54
+ --color-red-900: #7f1d1d;
55
+
56
+ /* Shadows */
57
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
58
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
59
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
60
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
61
+
62
+ /* Transitions */
63
+ --transition-all: all 0.2s ease;
64
+ }
65
+ /* ========================================
66
+ LAYOUT UTILITIES
67
+ ======================================== */
68
+ /* Flexbox utilities */
69
+ .flex {
70
+ display: flex;
71
+ }
72
+ .flex-col {
73
+ flex-direction: column;
74
+ }
75
+ .flex-row {
76
+ flex-direction: row;
77
+ }
78
+ .flex-container {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.5rem;
82
+ }
83
+ .items-center {
84
+ align-items: center;
85
+ }
86
+ .justify-center {
87
+ justify-content: center;
88
+ }
89
+ .justify-between {
90
+ justify-content: space-between;
91
+ }
92
+ /* Gap utilities */
93
+ .gap-1 {
94
+ gap: 0.25rem;
95
+ }
96
+ .gap-2 {
97
+ gap: 0.5rem;
98
+ }
99
+ .gap-3 {
100
+ gap: 0.75rem;
101
+ }
102
+ .gap-4 {
103
+ gap: 1rem;
104
+ }
105
+ /* Width/Height utilities */
106
+ .w-full {
107
+ width: 100%;
108
+ }
109
+ .h-full {
110
+ height: 100%;
111
+ }
112
+ /* ========================================
113
+ ICON UTILITIES
114
+ ======================================== */
115
+ .icon-xs {
116
+ width: 0.75rem;
117
+ height: 0.75rem;
118
+ }
119
+ .icon-sm {
120
+ width: 1rem;
121
+ height: 1rem;
122
+ }
123
+ .icon-md {
124
+ width: 1.5rem;
125
+ height: 1.5rem;
126
+ }
127
+ .icon-lg {
128
+ width: 2rem;
129
+ height: 2rem;
130
+ }
131
+ .icon-margin {
132
+ margin-right: 0.5rem;
133
+ }
134
+ /* ========================================
135
+ TEXT UTILITIES
136
+ ======================================== */
137
+ .text-sm {
138
+ font-size: 0.875rem;
139
+ }
140
+ .text-base {
141
+ font-size: 1rem;
142
+ }
143
+ .text-lg {
144
+ font-size: 1.125rem;
145
+ }
146
+ .font-bold {
147
+ font-weight: 700;
148
+ }
149
+ .text-gradient {
150
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
151
+ -webkit-background-clip: text;
152
+ background-clip: text;
153
+ font-size: 1.5rem;
154
+ font-weight: 700;
155
+ color: transparent;
156
+ }
157
+ .text-gradient-purple,
158
+ .text-gradient-blue {
159
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
160
+ -webkit-background-clip: text;
161
+ -webkit-text-fill-color: transparent;
162
+ background-clip: text;
163
+ }
164
+ /* ========================================
165
+ GRID UTILITIES
166
+ ======================================== */
167
+ .grid-auto-fit {
168
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
169
+ }
170
+ .grid-auto-fill {
171
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
172
+ }
173
+ /* ========================================
174
+ BACKDROP UTILITIES
175
+ ======================================== */
176
+ .backdrop-blur-sm {
177
+ backdrop-filter: blur(4px);
178
+ }
179
+ .backdrop-blur-md {
180
+ backdrop-filter: blur(8px);
181
+ }
182
+ .backdrop-blur-lg {
183
+ backdrop-filter: blur(12px);
184
+ }
185
+ /* ========================================
186
+ SCROLLBAR UTILITIES
187
+ ======================================== */
188
+ .custom-scrollbar {
189
+ scrollbar-width: thin;
190
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
191
+ }
192
+ .custom-scrollbar::-webkit-scrollbar {
193
+ width: 6px;
194
+ height: 6px;
195
+ }
196
+ .custom-scrollbar::-webkit-scrollbar-track {
197
+ background: var(--color-neutral-800);
198
+ border-radius: 3px;
199
+ }
200
+ .custom-scrollbar::-webkit-scrollbar-thumb {
201
+ background: var(--color-neutral-600);
202
+ border-radius: 3px;
203
+ }
204
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
205
+ background: var(--color-neutral-500);
206
+ }
207
+ /* ========================================
208
+ GLASS EFFECT UTILITIES
209
+ ======================================== */
210
+ .glass {
211
+ background: rgba(255, 255, 255, 0.05);
212
+ backdrop-filter: blur(12px);
213
+ border: 1px solid rgba(75, 85, 99, 0.5);
214
+ box-shadow: var(--shadow-lg);
215
+ }
216
+ /* ========================================
217
+ GLOW EFFECTS
218
+ ======================================== */
219
+ .glow-purple {
220
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
221
+ }
222
+ .glow-blue {
223
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
224
+ }
225
+ /* ========================================
226
+ BUTTON BASE UTILITIES
227
+ ======================================== */
228
+ .btn {
229
+ display: inline-flex;
230
+ align-items: center;
231
+ justify-content: center;
232
+ border-radius: 0.5rem;
233
+ padding: 0.5rem;
234
+ gap: 0.35rem;
235
+ font-size: 0.875rem;
236
+ font-weight: 600;
237
+ border: none;
238
+ cursor: pointer;
239
+ position: relative;
240
+ overflow: hidden;
241
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
242
+ text-transform: uppercase;
243
+ letter-spacing: 0.025em;
244
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
245
+ }
246
+ .btn::before {
247
+ content: '';
248
+ position: absolute;
249
+ top: 0;
250
+ left: 0;
251
+ right: 0;
252
+ height: 50%;
253
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
254
+ border-radius: 0.75rem 0.75rem 0 0;
255
+ pointer-events: none;
256
+ }
257
+ .btn:focus {
258
+ outline: none;
259
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
260
+ }
261
+ .btn:active {
262
+ transform: translateY(1px);
263
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
264
+ }
265
+ .btn:disabled {
266
+ opacity: 0.6;
267
+ cursor: not-allowed;
268
+ transform: none;
269
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
270
+ }
271
+ /* Button variants */
272
+ .btn-primary {
273
+ display: inline-flex;
274
+ align-items: center;
275
+ justify-content: center;
276
+ border-radius: 0.5rem;
277
+ padding: 0.5rem;
278
+ gap: 0.35rem;
279
+ font-size: 0.875rem;
280
+ font-weight: 600;
281
+ border: none;
282
+ cursor: pointer;
283
+ position: relative;
284
+ overflow: hidden;
285
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
286
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
287
+ color: white;
288
+ border: 1px solid var(--color-purple-500);
289
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
290
+ }
291
+ .btn-primary:hover {
292
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
293
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
294
+ transform: translateY(-2px);
295
+ }
296
+ .btn-primary:active {
297
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
298
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
299
+ }
300
+ .btn-secondary {
301
+ display: inline-flex;
302
+ align-items: center;
303
+ justify-content: center;
304
+ border-radius: 0.5rem;
305
+ padding: 0.5rem;
306
+ gap: 0.35rem;
307
+ font-size: 0.875rem;
308
+ font-weight: 600;
309
+ border: none;
310
+ cursor: pointer;
311
+ position: relative;
312
+ overflow: hidden;
313
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
314
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
315
+ color: var(--color-neutral-700);
316
+ border: 1px solid var(--color-purple-300);
317
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
318
+ }
319
+ .btn-secondary:hover {
320
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
321
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
322
+ transform: translateY(-2px);
323
+ }
324
+ .btn-ghost {
325
+ display: inline-flex;
326
+ align-items: center;
327
+ justify-content: center;
328
+ border-radius: 0.5rem;
329
+ padding: 0.5rem;
330
+ gap: 0.35rem;
331
+ font-size: 0.875rem;
332
+ font-weight: 600;
333
+ border: none;
334
+ cursor: pointer;
335
+ position: relative;
336
+ overflow: hidden;
337
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
338
+ background: rgba(64, 64, 64, 0.3);
339
+ color: var(--color-neutral-300);
340
+ border: 1px solid rgba(255, 255, 255, 0.1);
341
+ backdrop-filter: blur(10px);
342
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
343
+ }
344
+ .btn-ghost:hover {
345
+ background: rgba(255, 255, 255, 0.1);
346
+ color: white;
347
+ border-color: rgba(255, 255, 255, 0.2);
348
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
349
+ transform: translateY(-2px);
350
+ }
351
+ .btn-outline {
352
+ display: inline-flex;
353
+ align-items: center;
354
+ justify-content: center;
355
+ border-radius: 0.5rem;
356
+ padding: 0.5rem;
357
+ gap: 0.35rem;
358
+ font-size: 0.875rem;
359
+ font-weight: 600;
360
+ border: none;
361
+ cursor: pointer;
362
+ position: relative;
363
+ overflow: hidden;
364
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
365
+ background: transparent;
366
+ border: 2px solid var(--color-purple-500);
367
+ color: var(--color-purple-400);
368
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
369
+ }
370
+ .btn-outline:hover {
371
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
372
+ color: white;
373
+ border-color: var(--color-purple-400);
374
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
375
+ transform: translateY(-2px);
376
+ }
377
+ .btn-danger {
378
+ display: inline-flex;
379
+ align-items: center;
380
+ justify-content: center;
381
+ border-radius: 0.5rem;
382
+ padding: 0.5rem;
383
+ gap: 0.35rem;
384
+ font-size: 0.875rem;
385
+ font-weight: 600;
386
+ border: none;
387
+ cursor: pointer;
388
+ position: relative;
389
+ overflow: hidden;
390
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
391
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
392
+ color: white;
393
+ border: 1px solid var(--color-red-500);
394
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
395
+ }
396
+ .btn-danger:hover {
397
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
398
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
399
+ transform: translateY(-2px);
400
+ }
401
+ .btn-danger:active {
402
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
403
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
404
+ }
405
+ .btn-primary {
406
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
407
+ color: white;
408
+ border: 1px solid var(--color-purple-500);
409
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
410
+ }
411
+ .btn-primary:hover {
412
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
413
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
414
+ }
415
+ /* ========================================
416
+ INPUT UTILITIES
417
+ ======================================== */
418
+ .input {
419
+ width: 100%;
420
+ border-radius: 0.5rem;
421
+ padding: 0.5rem 0.75rem;
422
+ font-size: 0.875rem;
423
+ border: 1px solid var(--color-neutral-600);
424
+ background-color: var(--color-neutral-800);
425
+ color: var(--color-neutral-100);
426
+ transition: var(--transition-all);
427
+ }
428
+ .input::placeholder {
429
+ color: var(--color-neutral-400);
430
+ }
431
+ .input:focus {
432
+ outline: none;
433
+ border-color: var(--color-purple-500);
434
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
435
+ }
436
+ .input-dark {
437
+ width: 100%;
438
+ padding: 0.75rem;
439
+ background-color: var(--color-neutral-700);
440
+ border: 1px solid var(--color-neutral-600);
441
+ border-radius: 0.5rem;
442
+ color: var(--color-neutral-100);
443
+ font-size: 0.875rem;
444
+ transition: var(--transition-all);
445
+ }
446
+ .input-dark:focus {
447
+ outline: none;
448
+ border-color: var(--color-purple-500);
449
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
450
+ }
451
+ /* ========================================
452
+ CARD UTILITIES
453
+ ======================================== */
454
+ .card {
455
+ background: var(--color-neutral-800);
456
+ border: 1px solid var(--color-neutral-700);
457
+ border-radius: 0.5rem;
458
+ padding: 1rem;
459
+ box-shadow: var(--shadow-md);
460
+ }
13
461
  .twick-editor-main-container {
14
462
  display: flex;
15
463
  flex-direction: column;
@@ -183,6 +631,8 @@
183
631
  }
184
632
 
185
633
  .twick-track-element-content {
634
+ display: flex;
635
+ align-items: center;
186
636
  width: 100%;
187
637
  height: 100%;
188
638
  cursor: grab;
@@ -291,206 +741,684 @@
291
741
  margin-top: 2px;
292
742
  background-color: #474747;
293
743
  }
294
- .player-controls {
295
- background: #474747;
296
- padding: 12px 16px;
744
+ :root {
745
+ /* Colors */
746
+ --color-purple-100: #f3e8ff;
747
+ --color-purple-200: #e9d5ff;
748
+ --color-purple-300: #d8b4fe;
749
+ --color-purple-400: #c084fc;
750
+ --color-purple-500: #a855f7;
751
+ --color-purple-600: #9333ea;
752
+ --color-purple-700: #7e22ce;
753
+ --color-purple-800: #6b21a8;
754
+ --color-purple-900: #581c87;
755
+
756
+ --color-gray-100: #f3f4f6;
757
+ --color-gray-200: #e5e7eb;
758
+ --color-gray-300: #d1d5db;
759
+ --color-gray-400: #9ca3af;
760
+ --color-gray-500: #6b7280;
761
+ --color-gray-600: #4b5563;
762
+ --color-gray-700: #374151;
763
+ --color-gray-800: #1f2937;
764
+ --color-gray-900: #111827;
765
+
766
+ --color-neutral-100: #f5f5f5;
767
+ --color-neutral-200: #e5e5e5;
768
+ --color-neutral-300: #d4d4d4;
769
+ --color-neutral-400: #a3a3a3;
770
+ --color-neutral-500: #737373;
771
+ --color-neutral-600: #525252;
772
+ --color-neutral-700: #404040;
773
+ --color-neutral-800: #262626;
774
+ --color-neutral-900: #171717;
775
+
776
+ --color-red-100: #fee2e2;
777
+ --color-red-200: #fecaca;
778
+ --color-red-300: #fca5a5;
779
+ --color-red-400: #f87171;
780
+ --color-red-500: #ef4444;
781
+ --color-red-600: #dc2626;
782
+ --color-red-700: #b91c1c;
783
+ --color-red-800: #991b1b;
784
+ --color-red-900: #7f1d1d;
785
+
786
+ /* Shadows */
787
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
788
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
789
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
790
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
791
+
792
+ /* Transitions */
793
+ --transition-all: all 0.2s ease;
794
+ }
795
+
796
+ /* ========================================
797
+ LAYOUT UTILITIES
798
+ ======================================== */
799
+
800
+ /* Flexbox utilities */
801
+
802
+ .flex {
297
803
  display: flex;
804
+ }
805
+
806
+ .flex-col {
298
807
  flex-direction: column;
299
- gap: 12px;
300
- -webkit-user-select: none;
301
- -moz-user-select: none;
302
- user-select: none;
303
- max-height: 200px;
304
808
  }
305
809
 
306
- .player-controls-top {
810
+ .flex-row {
811
+ flex-direction: row;
812
+ }
813
+
814
+ .flex-container {
307
815
  display: flex;
308
816
  align-items: center;
817
+ gap: 0.5rem;
818
+ }
819
+
820
+ .items-center {
821
+ align-items: center;
822
+ }
823
+
824
+ .justify-center {
825
+ justify-content: center;
826
+ }
827
+
828
+ .justify-between {
309
829
  justify-content: space-between;
310
- gap: 16px;
311
- height: 40px;
312
830
  }
313
831
 
314
- /* Edit Controls (Left Section) */
315
- .edit-controls {
316
- display: flex;
832
+ /* Gap utilities */
833
+
834
+ .gap-1 {
835
+ gap: 0.25rem;
836
+ }
837
+
838
+ .gap-2 {
839
+ gap: 0.5rem;
840
+ }
841
+
842
+ .gap-3 {
843
+ gap: 0.75rem;
844
+ }
845
+
846
+ .gap-4 {
847
+ gap: 1rem;
848
+ }
849
+
850
+ /* Width/Height utilities */
851
+
852
+ .w-full {
853
+ width: 100%;
854
+ }
855
+
856
+ .h-full {
857
+ height: 100%;
858
+ }
859
+
860
+ /* ========================================
861
+ ICON UTILITIES
862
+ ======================================== */
863
+
864
+ .icon-xs {
865
+ width: 0.75rem;
866
+ height: 0.75rem;
867
+ }
868
+
869
+ .icon-sm {
870
+ width: 1rem;
871
+ height: 1rem;
872
+ }
873
+
874
+ .icon-md {
875
+ width: 1.5rem;
876
+ height: 1.5rem;
877
+ }
878
+
879
+ .icon-lg {
880
+ width: 2rem;
881
+ height: 2rem;
882
+ }
883
+
884
+ .icon-margin {
885
+ margin-right: 0.5rem;
886
+ }
887
+
888
+ /* ========================================
889
+ TEXT UTILITIES
890
+ ======================================== */
891
+
892
+ .text-sm {
893
+ font-size: 0.875rem;
894
+ }
895
+
896
+ .text-base {
897
+ font-size: 1rem;
898
+ }
899
+
900
+ .text-lg {
901
+ font-size: 1.125rem;
902
+ }
903
+
904
+ .font-bold {
905
+ font-weight: 700;
906
+ }
907
+
908
+ .text-gradient {
909
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
910
+ -webkit-background-clip: text;
911
+ background-clip: text;
912
+ font-size: 1.5rem;
913
+ font-weight: 700;
914
+ color: transparent;
915
+ }
916
+
917
+ .text-gradient-purple,
918
+ .text-gradient-blue {
919
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
920
+ -webkit-background-clip: text;
921
+ -webkit-text-fill-color: transparent;
922
+ background-clip: text;
923
+ }
924
+
925
+ /* ========================================
926
+ GRID UTILITIES
927
+ ======================================== */
928
+
929
+ .grid-auto-fit {
930
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
931
+ }
932
+
933
+ .grid-auto-fill {
934
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
935
+ }
936
+
937
+ /* ========================================
938
+ BACKDROP UTILITIES
939
+ ======================================== */
940
+
941
+ .backdrop-blur-sm {
942
+ backdrop-filter: blur(4px);
943
+ }
944
+
945
+ .backdrop-blur-md {
946
+ backdrop-filter: blur(8px);
947
+ }
948
+
949
+ .backdrop-blur-lg {
950
+ backdrop-filter: blur(12px);
951
+ }
952
+
953
+ /* ========================================
954
+ SCROLLBAR UTILITIES
955
+ ======================================== */
956
+
957
+ .custom-scrollbar {
958
+ scrollbar-width: thin;
959
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
960
+ }
961
+
962
+ .custom-scrollbar::-webkit-scrollbar {
963
+ width: 6px;
964
+ height: 6px;
965
+ }
966
+
967
+ .custom-scrollbar::-webkit-scrollbar-track {
968
+ background: var(--color-neutral-800);
969
+ border-radius: 3px;
970
+ }
971
+
972
+ .custom-scrollbar::-webkit-scrollbar-thumb {
973
+ background: var(--color-neutral-600);
974
+ border-radius: 3px;
975
+ }
976
+
977
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
978
+ background: var(--color-neutral-500);
979
+ }
980
+
981
+ /* ========================================
982
+ GLASS EFFECT UTILITIES
983
+ ======================================== */
984
+
985
+ .glass {
986
+ background: rgba(255, 255, 255, 0.05);
987
+ backdrop-filter: blur(12px);
988
+ border: 1px solid rgba(75, 85, 99, 0.5);
989
+ box-shadow: var(--shadow-lg);
990
+ }
991
+
992
+ /* ========================================
993
+ GLOW EFFECTS
994
+ ======================================== */
995
+
996
+ .glow-purple {
997
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
998
+ }
999
+
1000
+ .glow-blue {
1001
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
1002
+ }
1003
+
1004
+ /* ========================================
1005
+ BUTTON BASE UTILITIES
1006
+ ======================================== */
1007
+
1008
+ .btn {
1009
+ display: inline-flex;
317
1010
  align-items: center;
318
- gap: 8px;
1011
+ justify-content: center;
1012
+ border-radius: 0.5rem;
1013
+ padding: 0.5rem;
1014
+ gap: 0.35rem;
1015
+ font-size: 0.875rem;
1016
+ font-weight: 600;
1017
+ border: none;
1018
+ cursor: pointer;
1019
+ position: relative;
1020
+ overflow: hidden;
1021
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1022
+ text-transform: uppercase;
1023
+ letter-spacing: 0.025em;
1024
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
319
1025
  }
320
1026
 
321
- /* Playback Controls (Center Section) */
322
- .playback-controls {
323
- display: flex;
1027
+ .btn::before {
1028
+ content: '';
1029
+ position: absolute;
1030
+ top: 0;
1031
+ left: 0;
1032
+ right: 0;
1033
+ height: 50%;
1034
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
1035
+ border-radius: 0.75rem 0.75rem 0 0;
1036
+ pointer-events: none;
1037
+ }
1038
+
1039
+ .btn:focus {
1040
+ outline: none;
1041
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1042
+ }
1043
+
1044
+ .btn:active {
1045
+ transform: translateY(1px);
1046
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1047
+ }
1048
+
1049
+ .btn:disabled {
1050
+ opacity: 0.6;
1051
+ cursor: not-allowed;
1052
+ transform: none;
1053
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
1054
+ }
1055
+
1056
+ /* Button variants */
1057
+
1058
+ .btn-primary {
1059
+ display: inline-flex;
324
1060
  align-items: center;
325
- gap: 24px;
326
- flex: 1;
327
- justify-content: space-around;
1061
+ justify-content: center;
1062
+ border-radius: 0.5rem;
1063
+ padding: 0.5rem;
1064
+ gap: 0.35rem;
1065
+ font-size: 0.875rem;
1066
+ font-weight: 600;
1067
+ border: none;
1068
+ cursor: pointer;
1069
+ position: relative;
1070
+ overflow: hidden;
1071
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1072
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1073
+ color: white;
1074
+ border: 1px solid var(--color-purple-500);
1075
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
328
1076
  }
329
1077
 
330
- /* Time Display (Right Section) */
331
- .time-display {
332
- display: flex;
1078
+ .btn-primary:hover {
1079
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1080
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1081
+ transform: translateY(-2px);
1082
+ }
1083
+
1084
+ .btn-primary:active {
1085
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1086
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1087
+ }
1088
+
1089
+ .btn-secondary {
1090
+ display: inline-flex;
333
1091
  align-items: center;
334
- gap: 6px;
335
- font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
336
- font-size: 14px;
337
- color: #fff;
338
- min-width: 80px;
339
- justify-content: flex-end;
1092
+ justify-content: center;
1093
+ border-radius: 0.5rem;
1094
+ padding: 0.5rem;
1095
+ gap: 0.35rem;
1096
+ font-size: 0.875rem;
1097
+ font-weight: 600;
1098
+ border: none;
1099
+ cursor: pointer;
1100
+ position: relative;
1101
+ overflow: hidden;
1102
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1103
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
1104
+ color: var(--color-neutral-700);
1105
+ border: 1px solid var(--color-purple-300);
1106
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
340
1107
  }
341
1108
 
342
- .current-time {
343
- color: #fff;
344
- font-weight: 500;
1109
+ .btn-secondary:hover {
1110
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
1111
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
1112
+ transform: translateY(-2px);
345
1113
  }
346
1114
 
347
- .time-separator {
348
- color: #666;
349
- margin: 0 2px;
1115
+ .btn-ghost {
1116
+ display: inline-flex;
1117
+ align-items: center;
1118
+ justify-content: center;
1119
+ border-radius: 0.5rem;
1120
+ padding: 0.5rem;
1121
+ gap: 0.35rem;
1122
+ font-size: 0.875rem;
1123
+ font-weight: 600;
1124
+ border: none;
1125
+ cursor: pointer;
1126
+ position: relative;
1127
+ overflow: hidden;
1128
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1129
+ background: rgba(64, 64, 64, 0.3);
1130
+ color: var(--color-neutral-300);
1131
+ border: 1px solid rgba(255, 255, 255, 0.1);
1132
+ backdrop-filter: blur(10px);
1133
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
350
1134
  }
351
1135
 
352
- .total-time {
353
- color: #999;
1136
+ .btn-ghost:hover {
1137
+ background: rgba(255, 255, 255, 0.1);
1138
+ color: white;
1139
+ border-color: rgba(255, 255, 255, 0.2);
1140
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1141
+ transform: translateY(-2px);
1142
+ }
1143
+
1144
+ .btn-outline {
1145
+ display: inline-flex;
1146
+ align-items: center;
1147
+ justify-content: center;
1148
+ border-radius: 0.5rem;
1149
+ padding: 0.5rem;
1150
+ gap: 0.35rem;
1151
+ font-size: 0.875rem;
1152
+ font-weight: 600;
1153
+ border: none;
1154
+ cursor: pointer;
1155
+ position: relative;
1156
+ overflow: hidden;
1157
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1158
+ background: transparent;
1159
+ border: 2px solid var(--color-purple-500);
1160
+ color: var(--color-purple-400);
1161
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1162
+ }
1163
+
1164
+ .btn-outline:hover {
1165
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1166
+ color: white;
1167
+ border-color: var(--color-purple-400);
1168
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1169
+ transform: translateY(-2px);
1170
+ }
1171
+
1172
+ .btn-danger {
1173
+ display: inline-flex;
1174
+ align-items: center;
1175
+ justify-content: center;
1176
+ border-radius: 0.5rem;
1177
+ padding: 0.5rem;
1178
+ gap: 0.35rem;
1179
+ font-size: 0.875rem;
1180
+ font-weight: 600;
1181
+ border: none;
1182
+ cursor: pointer;
1183
+ position: relative;
1184
+ overflow: hidden;
1185
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1186
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
1187
+ color: white;
1188
+ border: 1px solid var(--color-red-500);
1189
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1190
+ }
1191
+
1192
+ .btn-danger:hover {
1193
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
1194
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1195
+ transform: translateY(-2px);
1196
+ }
1197
+
1198
+ .btn-danger:active {
1199
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
1200
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1201
+ }
1202
+
1203
+ .btn-primary {
1204
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
1205
+ color: white;
1206
+ border: 1px solid var(--color-purple-500);
1207
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
1208
+ }
1209
+
1210
+ .btn-primary:hover {
1211
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1212
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
1213
+ }
1214
+
1215
+ /* ========================================
1216
+ INPUT UTILITIES
1217
+ ======================================== */
1218
+
1219
+ .input {
1220
+ width: 100%;
1221
+ border-radius: 0.5rem;
1222
+ padding: 0.5rem 0.75rem;
1223
+ font-size: 0.875rem;
1224
+ border: 1px solid var(--color-neutral-600);
1225
+ background-color: var(--color-neutral-800);
1226
+ color: var(--color-neutral-100);
1227
+ transition: var(--transition-all);
1228
+ }
1229
+
1230
+ .input::placeholder {
1231
+ color: var(--color-neutral-400);
1232
+ }
1233
+
1234
+ .input:focus {
1235
+ outline: none;
1236
+ border-color: var(--color-purple-500);
1237
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1238
+ }
1239
+
1240
+ .input-dark {
1241
+ width: 100%;
1242
+ padding: 0.75rem;
1243
+ background-color: var(--color-neutral-700);
1244
+ border: 1px solid var(--color-neutral-600);
1245
+ border-radius: 0.5rem;
1246
+ color: var(--color-neutral-100);
1247
+ font-size: 0.875rem;
1248
+ transition: var(--transition-all);
1249
+ }
1250
+
1251
+ .input-dark:focus {
1252
+ outline: none;
1253
+ border-color: var(--color-purple-500);
1254
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1255
+ }
1256
+
1257
+ /* ========================================
1258
+ CARD UTILITIES
1259
+ ======================================== */
1260
+
1261
+ .card {
1262
+ background: var(--color-neutral-800);
1263
+ border: 1px solid var(--color-neutral-700);
1264
+ border-radius: 0.5rem;
1265
+ padding: 1rem;
1266
+ box-shadow: var(--shadow-md);
1267
+ }
1268
+
1269
+ /* Player Controls */
1270
+
1271
+ .player-controls {
1272
+ height: 3rem;
1273
+ background-color: var(--color-neutral-800);
1274
+ border-top: 1px solid var(--color-neutral-600);
1275
+ padding: 0 0.5rem;
1276
+ display: flex;
1277
+ align-items: center;
1278
+ justify-content: space-between;
1279
+ }
1280
+
1281
+ /* Edit Controls */
1282
+
1283
+ .edit-controls {
1284
+ display: flex;
1285
+ align-items: center;
1286
+ gap: 0.5rem;
1287
+ }
1288
+
1289
+ .playback-controls {
1290
+ display: flex;
1291
+ align-items: center;
1292
+ gap: 0.5rem;
354
1293
  }
355
1294
 
356
1295
  /* Control Buttons */
1296
+
357
1297
  .control-btn {
358
1298
  display: flex;
359
1299
  align-items: center;
360
- gap: 6px;
361
- padding: 8px 12px;
362
- background: #2a2a2a;
363
- border: 1px solid #444;
364
- border-radius: 6px;
365
- color: #fff;
366
- font-size: 13px;
367
- font-weight: 500;
1300
+ justify-content: center;
1301
+ padding: 0.25rem 0.5rem;
1302
+ border-radius: 0.375rem;
1303
+ background: transparent;
1304
+ border: none;
1305
+ color: var(--color-neutral-400);
1306
+ transition: var(--transition-all);
368
1307
  cursor: pointer;
369
- transition: all 0.15s ease;
370
- white-space: nowrap;
371
- min-height: 36px;
372
1308
  }
373
1309
 
374
1310
  .control-btn:hover {
375
- background: #3a3a3a;
376
- border-color: #555;
1311
+ color: var(--color-neutral-100);
1312
+ background-color: var(--color-neutral-700);
377
1313
  }
378
1314
 
379
1315
  .control-btn:active {
380
- transform: translateY(1px);
381
- background: #1a1a1a;
1316
+ transform: scale(0.95);
1317
+ background-color: var(--color-neutral-600);
382
1318
  }
383
1319
 
384
- .control-btn:disabled {
1320
+ .control-btn.btn-disabled {
385
1321
  opacity: 0.5;
386
1322
  cursor: not-allowed;
387
1323
  pointer-events: none;
388
- }
389
-
390
- .control-btn svg {
391
- flex-shrink: 0;
1324
+ color: var(--color-neutral-600);
392
1325
  }
393
1326
 
394
1327
  /* Specific Button Styles */
395
- .play-pause-btn {
396
- background: #0066cc;
397
- border-color: #0066cc;
398
- padding: 8px;
399
- min-width: 44px;
400
- justify-content: center;
1328
+
1329
+ .delete-btn {
1330
+ color: var(--color-red-400);
401
1331
  }
402
1332
 
403
- .play-pause-btn:hover {
404
- background: #0077dd;
405
- border-color: #0077dd;
1333
+ .delete-btn:hover {
1334
+ color: var(--color-red-300);
406
1335
  }
407
1336
 
408
- .delete-btn {
409
- color: #ff4444;
410
- border-color: #ff444440;
1337
+ .split-btn {
1338
+ color: var(--color-purple-400);
411
1339
  }
412
1340
 
413
- .delete-btn:hover {
414
- background: #ff444420;
415
- border-color: #ff4444;
1341
+ .split-btn:hover {
1342
+ color: var(--color-purple-300);
416
1343
  }
417
1344
 
418
- .split-btn svg {
419
- color: #ffa500;
1345
+ .play-pause-btn {
1346
+ padding: 0.75rem;
1347
+ color: white;
420
1348
  }
421
1349
 
422
- .clone-btn svg {
423
- color: #00cc66;
1350
+ /* Time Display */
1351
+
1352
+ .time-display {
1353
+ display: flex;
1354
+ align-items: center;
1355
+ gap: 0.5rem;
1356
+ color: var(--color-neutral-400);
1357
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
424
1358
  }
425
1359
 
426
- .btn-disabled {
427
- opacity: 0.5;
428
- cursor: not-allowed;
429
- pointer-events: none;
1360
+ .current-time {
1361
+ font-size: 0.875rem;
1362
+ font-weight: 500;
1363
+ color: var(--color-neutral-200);
430
1364
  }
431
1365
 
432
- .prev-btn,
433
- .next-btn {
434
- padding: 8px;
435
- min-width: 36px;
436
- justify-content: center;
1366
+ .time-separator {
1367
+ color: var(--color-neutral-600);
437
1368
  }
438
1369
 
439
- /* Timeline Controls */
440
- .timeline-controls {
441
- position: relative;
442
- background: #2a2a2a;
443
- border-radius: 6px;
444
- padding: 8px;
445
- border: 1px solid #444;
1370
+ .total-time {
1371
+ font-size: 0.875rem;
1372
+ color: var(--color-neutral-500);
446
1373
  }
447
1374
 
1375
+ /* Zoom Controls */
448
1376
 
449
1377
  .twick-track-zoom-container {
450
1378
  display: flex;
451
1379
  align-items: center;
452
- justify-content: space-between;
453
- gap: 8px;
454
- width: 100%;
455
- background-color: #171717;
456
- border: 4px;
457
- padding: 0 4px;
1380
+ gap: 0.75rem;
458
1381
  }
459
1382
 
460
- .twick-zoom-slider {
461
- position: relative;
462
- width: 100%;
463
- height: 2px;
464
- cursor: pointer;
465
- background-color: #ffffff55;
466
- border-radius: 50%;
1383
+ .zoom-level {
1384
+ font-size: 0.875rem;
1385
+ color: var(--color-neutral-400);
1386
+ font-weight: 500;
1387
+ min-width: 3rem;
1388
+ text-align: center;
467
1389
  }
468
1390
 
469
- .twick-zoom-slider-track {
470
- position: absolute;
471
- top: 0;
472
- left: 0;
473
- height: 100%;
474
- background-color: #4949d5;
475
- border-radius: 50%;
476
- transition: all 0.2s ease-in-out;
1391
+ /* Icon sizes */
1392
+
1393
+ .icon-md {
1394
+ width: 1.25rem;
1395
+ height: 1.25rem;
477
1396
  }
478
1397
 
479
- .twick-zoom-slider-thumb {
480
- position: absolute;
481
- top: 50%;
482
- width: 16px;
483
- height: 16px;
484
- background-color: #ffffff;
485
- border: 2px solid #4949d5;
486
- border-radius: 50%;
487
- cursor: grab;
488
- transform: translate(-50%, -50%);
489
- transition: all 0.2s ease-in-out;
490
- }
1398
+ .icon-lg {
1399
+ width: 1.5rem;
1400
+ height: 1.5rem;
1401
+ }
1402
+
1403
+ /* Animation */
1404
+
1405
+ .animate-spin {
1406
+ animation: spin 1s linear infinite;
1407
+ }
1408
+
1409
+ @keyframes spin {
1410
+ from {
1411
+ transform: rotate(0deg);
1412
+ }
1413
+ to {
1414
+ transform: rotate(360deg);
1415
+ }
1416
+ }
1417
+
1418
+ /* Undo/Redo Controls */
491
1419
 
492
1420
  .undo-redo-controls {
493
1421
  display: flex;
494
1422
  align-items: center;
495
- gap: 8px;
1423
+ gap: 0.5rem;
496
1424
  }