@twick/video-editor 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.
@@ -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;
@@ -103,6 +551,21 @@
103
551
  width: 100%;
104
552
  }
105
553
 
554
+ .twick-seek-track-container-no-scrollbar {
555
+ display: flex;
556
+ position: relative;
557
+ min-width: 100%;
558
+ height: 2rem;
559
+ width: 100%;
560
+ /* Hide scrollbar for all browsers */
561
+ scrollbar-width: none; /* Firefox */
562
+ -ms-overflow-style: none; /* IE and Edge */
563
+ }
564
+
565
+ .twick-seek-track-container-no-scrollbar::-webkit-scrollbar {
566
+ display: none; /* Chrome, Safari, Opera */
567
+ }
568
+
106
569
  .twick-seek-track-empty-space {
107
570
  position: sticky;
108
571
  left: 0;
@@ -183,6 +646,8 @@
183
646
  }
184
647
 
185
648
  .twick-track-element-content {
649
+ display: flex;
650
+ align-items: center;
186
651
  width: 100%;
187
652
  height: 100%;
188
653
  cursor: grab;
@@ -291,206 +756,684 @@
291
756
  margin-top: 2px;
292
757
  background-color: #474747;
293
758
  }
294
- .player-controls {
295
- background: #474747;
296
- padding: 12px 16px;
759
+ :root {
760
+ /* Colors */
761
+ --color-purple-100: #f3e8ff;
762
+ --color-purple-200: #e9d5ff;
763
+ --color-purple-300: #d8b4fe;
764
+ --color-purple-400: #c084fc;
765
+ --color-purple-500: #a855f7;
766
+ --color-purple-600: #9333ea;
767
+ --color-purple-700: #7e22ce;
768
+ --color-purple-800: #6b21a8;
769
+ --color-purple-900: #581c87;
770
+
771
+ --color-gray-100: #f3f4f6;
772
+ --color-gray-200: #e5e7eb;
773
+ --color-gray-300: #d1d5db;
774
+ --color-gray-400: #9ca3af;
775
+ --color-gray-500: #6b7280;
776
+ --color-gray-600: #4b5563;
777
+ --color-gray-700: #374151;
778
+ --color-gray-800: #1f2937;
779
+ --color-gray-900: #111827;
780
+
781
+ --color-neutral-100: #f5f5f5;
782
+ --color-neutral-200: #e5e5e5;
783
+ --color-neutral-300: #d4d4d4;
784
+ --color-neutral-400: #a3a3a3;
785
+ --color-neutral-500: #737373;
786
+ --color-neutral-600: #525252;
787
+ --color-neutral-700: #404040;
788
+ --color-neutral-800: #262626;
789
+ --color-neutral-900: #171717;
790
+
791
+ --color-red-100: #fee2e2;
792
+ --color-red-200: #fecaca;
793
+ --color-red-300: #fca5a5;
794
+ --color-red-400: #f87171;
795
+ --color-red-500: #ef4444;
796
+ --color-red-600: #dc2626;
797
+ --color-red-700: #b91c1c;
798
+ --color-red-800: #991b1b;
799
+ --color-red-900: #7f1d1d;
800
+
801
+ /* Shadows */
802
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
803
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
804
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
805
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
806
+
807
+ /* Transitions */
808
+ --transition-all: all 0.2s ease;
809
+ }
810
+
811
+ /* ========================================
812
+ LAYOUT UTILITIES
813
+ ======================================== */
814
+
815
+ /* Flexbox utilities */
816
+
817
+ .flex {
297
818
  display: flex;
819
+ }
820
+
821
+ .flex-col {
298
822
  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
823
  }
305
824
 
306
- .player-controls-top {
825
+ .flex-row {
826
+ flex-direction: row;
827
+ }
828
+
829
+ .flex-container {
307
830
  display: flex;
308
831
  align-items: center;
832
+ gap: 0.5rem;
833
+ }
834
+
835
+ .items-center {
836
+ align-items: center;
837
+ }
838
+
839
+ .justify-center {
840
+ justify-content: center;
841
+ }
842
+
843
+ .justify-between {
309
844
  justify-content: space-between;
310
- gap: 16px;
311
- height: 40px;
312
845
  }
313
846
 
314
- /* Edit Controls (Left Section) */
315
- .edit-controls {
316
- display: flex;
847
+ /* Gap utilities */
848
+
849
+ .gap-1 {
850
+ gap: 0.25rem;
851
+ }
852
+
853
+ .gap-2 {
854
+ gap: 0.5rem;
855
+ }
856
+
857
+ .gap-3 {
858
+ gap: 0.75rem;
859
+ }
860
+
861
+ .gap-4 {
862
+ gap: 1rem;
863
+ }
864
+
865
+ /* Width/Height utilities */
866
+
867
+ .w-full {
868
+ width: 100%;
869
+ }
870
+
871
+ .h-full {
872
+ height: 100%;
873
+ }
874
+
875
+ /* ========================================
876
+ ICON UTILITIES
877
+ ======================================== */
878
+
879
+ .icon-xs {
880
+ width: 0.75rem;
881
+ height: 0.75rem;
882
+ }
883
+
884
+ .icon-sm {
885
+ width: 1rem;
886
+ height: 1rem;
887
+ }
888
+
889
+ .icon-md {
890
+ width: 1.5rem;
891
+ height: 1.5rem;
892
+ }
893
+
894
+ .icon-lg {
895
+ width: 2rem;
896
+ height: 2rem;
897
+ }
898
+
899
+ .icon-margin {
900
+ margin-right: 0.5rem;
901
+ }
902
+
903
+ /* ========================================
904
+ TEXT UTILITIES
905
+ ======================================== */
906
+
907
+ .text-sm {
908
+ font-size: 0.875rem;
909
+ }
910
+
911
+ .text-base {
912
+ font-size: 1rem;
913
+ }
914
+
915
+ .text-lg {
916
+ font-size: 1.125rem;
917
+ }
918
+
919
+ .font-bold {
920
+ font-weight: 700;
921
+ }
922
+
923
+ .text-gradient {
924
+ background: linear-gradient(to right, var(--color-purple-500), var(--color-purple-300));
925
+ -webkit-background-clip: text;
926
+ background-clip: text;
927
+ font-size: 1.5rem;
928
+ font-weight: 700;
929
+ color: transparent;
930
+ }
931
+
932
+ .text-gradient-purple,
933
+ .text-gradient-blue {
934
+ background: linear-gradient(135deg, var(--color-purple-400), var(--color-purple-600));
935
+ -webkit-background-clip: text;
936
+ -webkit-text-fill-color: transparent;
937
+ background-clip: text;
938
+ }
939
+
940
+ /* ========================================
941
+ GRID UTILITIES
942
+ ======================================== */
943
+
944
+ .grid-auto-fit {
945
+ grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
946
+ }
947
+
948
+ .grid-auto-fill {
949
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
950
+ }
951
+
952
+ /* ========================================
953
+ BACKDROP UTILITIES
954
+ ======================================== */
955
+
956
+ .backdrop-blur-sm {
957
+ backdrop-filter: blur(4px);
958
+ }
959
+
960
+ .backdrop-blur-md {
961
+ backdrop-filter: blur(8px);
962
+ }
963
+
964
+ .backdrop-blur-lg {
965
+ backdrop-filter: blur(12px);
966
+ }
967
+
968
+ /* ========================================
969
+ SCROLLBAR UTILITIES
970
+ ======================================== */
971
+
972
+ .custom-scrollbar {
973
+ scrollbar-width: thin;
974
+ scrollbar-color: var(--color-neutral-600) var(--color-neutral-800);
975
+ }
976
+
977
+ .custom-scrollbar::-webkit-scrollbar {
978
+ width: 6px;
979
+ height: 6px;
980
+ }
981
+
982
+ .custom-scrollbar::-webkit-scrollbar-track {
983
+ background: var(--color-neutral-800);
984
+ border-radius: 3px;
985
+ }
986
+
987
+ .custom-scrollbar::-webkit-scrollbar-thumb {
988
+ background: var(--color-neutral-600);
989
+ border-radius: 3px;
990
+ }
991
+
992
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
993
+ background: var(--color-neutral-500);
994
+ }
995
+
996
+ /* ========================================
997
+ GLASS EFFECT UTILITIES
998
+ ======================================== */
999
+
1000
+ .glass {
1001
+ background: rgba(255, 255, 255, 0.05);
1002
+ backdrop-filter: blur(12px);
1003
+ border: 1px solid rgba(75, 85, 99, 0.5);
1004
+ box-shadow: var(--shadow-lg);
1005
+ }
1006
+
1007
+ /* ========================================
1008
+ GLOW EFFECTS
1009
+ ======================================== */
1010
+
1011
+ .glow-purple {
1012
+ box-shadow: 0 0 20px rgba(147, 51, 234, 0.3);
1013
+ }
1014
+
1015
+ .glow-blue {
1016
+ box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
1017
+ }
1018
+
1019
+ /* ========================================
1020
+ BUTTON BASE UTILITIES
1021
+ ======================================== */
1022
+
1023
+ .btn {
1024
+ display: inline-flex;
317
1025
  align-items: center;
318
- gap: 8px;
1026
+ justify-content: center;
1027
+ border-radius: 0.5rem;
1028
+ padding: 0.5rem;
1029
+ gap: 0.35rem;
1030
+ font-size: 0.875rem;
1031
+ font-weight: 600;
1032
+ border: none;
1033
+ cursor: pointer;
1034
+ position: relative;
1035
+ overflow: hidden;
1036
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1037
+ text-transform: uppercase;
1038
+ letter-spacing: 0.025em;
1039
+ box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
319
1040
  }
320
1041
 
321
- /* Playback Controls (Center Section) */
322
- .playback-controls {
323
- display: flex;
1042
+ .btn::before {
1043
+ content: '';
1044
+ position: absolute;
1045
+ top: 0;
1046
+ left: 0;
1047
+ right: 0;
1048
+ height: 50%;
1049
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.05));
1050
+ border-radius: 0.75rem 0.75rem 0 0;
1051
+ pointer-events: none;
1052
+ }
1053
+
1054
+ .btn:focus {
1055
+ outline: none;
1056
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1057
+ }
1058
+
1059
+ .btn:active {
1060
+ transform: translateY(1px);
1061
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1062
+ }
1063
+
1064
+ .btn:disabled {
1065
+ opacity: 0.6;
1066
+ cursor: not-allowed;
1067
+ transform: none;
1068
+ box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
1069
+ }
1070
+
1071
+ /* Button variants */
1072
+
1073
+ .btn-primary {
1074
+ display: inline-flex;
324
1075
  align-items: center;
325
- gap: 24px;
326
- flex: 1;
327
- justify-content: space-around;
1076
+ justify-content: center;
1077
+ border-radius: 0.5rem;
1078
+ padding: 0.5rem;
1079
+ gap: 0.35rem;
1080
+ font-size: 0.875rem;
1081
+ font-weight: 600;
1082
+ border: none;
1083
+ cursor: pointer;
1084
+ position: relative;
1085
+ overflow: hidden;
1086
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1087
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1088
+ color: white;
1089
+ border: 1px solid var(--color-purple-500);
1090
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
328
1091
  }
329
1092
 
330
- /* Time Display (Right Section) */
331
- .time-display {
332
- display: flex;
1093
+ .btn-primary:hover {
1094
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1095
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1096
+ transform: translateY(-2px);
1097
+ }
1098
+
1099
+ .btn-primary:active {
1100
+ background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1101
+ box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1102
+ }
1103
+
1104
+ .btn-secondary {
1105
+ display: inline-flex;
333
1106
  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;
1107
+ justify-content: center;
1108
+ border-radius: 0.5rem;
1109
+ padding: 0.5rem;
1110
+ gap: 0.35rem;
1111
+ font-size: 0.875rem;
1112
+ font-weight: 600;
1113
+ border: none;
1114
+ cursor: pointer;
1115
+ position: relative;
1116
+ overflow: hidden;
1117
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1118
+ background: linear-gradient(135deg, var(--color-purple-200), var(--color-purple-300), var(--color-purple-400));
1119
+ color: var(--color-neutral-700);
1120
+ border: 1px solid var(--color-purple-300);
1121
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.3);
340
1122
  }
341
1123
 
342
- .current-time {
343
- color: #fff;
344
- font-weight: 500;
1124
+ .btn-secondary:hover {
1125
+ background: linear-gradient(135deg, var(--color-purple-100), var(--color-purple-200), var(--color-purple-300));
1126
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.4);
1127
+ transform: translateY(-2px);
345
1128
  }
346
1129
 
347
- .time-separator {
348
- color: #666;
349
- margin: 0 2px;
1130
+ .btn-ghost {
1131
+ display: inline-flex;
1132
+ align-items: center;
1133
+ justify-content: center;
1134
+ border-radius: 0.5rem;
1135
+ padding: 0.5rem;
1136
+ gap: 0.35rem;
1137
+ font-size: 0.875rem;
1138
+ font-weight: 600;
1139
+ border: none;
1140
+ cursor: pointer;
1141
+ position: relative;
1142
+ overflow: hidden;
1143
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1144
+ background: rgba(64, 64, 64, 0.3);
1145
+ color: var(--color-neutral-300);
1146
+ border: 1px solid rgba(255, 255, 255, 0.1);
1147
+ backdrop-filter: blur(10px);
1148
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
350
1149
  }
351
1150
 
352
- .total-time {
353
- color: #999;
1151
+ .btn-ghost:hover {
1152
+ background: rgba(255, 255, 255, 0.1);
1153
+ color: white;
1154
+ border-color: rgba(255, 255, 255, 0.2);
1155
+ box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1156
+ transform: translateY(-2px);
1157
+ }
1158
+
1159
+ .btn-outline {
1160
+ display: inline-flex;
1161
+ align-items: center;
1162
+ justify-content: center;
1163
+ border-radius: 0.5rem;
1164
+ padding: 0.5rem;
1165
+ gap: 0.35rem;
1166
+ font-size: 0.875rem;
1167
+ font-weight: 600;
1168
+ border: none;
1169
+ cursor: pointer;
1170
+ position: relative;
1171
+ overflow: hidden;
1172
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1173
+ background: transparent;
1174
+ border: 2px solid var(--color-purple-500);
1175
+ color: var(--color-purple-400);
1176
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.05);
1177
+ }
1178
+
1179
+ .btn-outline:hover {
1180
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1181
+ color: white;
1182
+ border-color: var(--color-purple-400);
1183
+ box-shadow: 0 12px 35px rgba(147, 51, 234, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1184
+ transform: translateY(-2px);
1185
+ }
1186
+
1187
+ .btn-danger {
1188
+ display: inline-flex;
1189
+ align-items: center;
1190
+ justify-content: center;
1191
+ border-radius: 0.5rem;
1192
+ padding: 0.5rem;
1193
+ gap: 0.35rem;
1194
+ font-size: 0.875rem;
1195
+ font-weight: 600;
1196
+ border: none;
1197
+ cursor: pointer;
1198
+ position: relative;
1199
+ overflow: hidden;
1200
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1201
+ background: linear-gradient(135deg, var(--color-red-600), var(--color-red-700), var(--color-red-800));
1202
+ color: white;
1203
+ border: 1px solid var(--color-red-500);
1204
+ box-shadow: 0 8px 25px rgba(239, 68, 68, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1205
+ }
1206
+
1207
+ .btn-danger:hover {
1208
+ background: linear-gradient(135deg, var(--color-red-500), var(--color-red-600), var(--color-red-700));
1209
+ box-shadow: 0 12px 35px rgba(239, 68, 68, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1210
+ transform: translateY(-2px);
1211
+ }
1212
+
1213
+ .btn-danger:active {
1214
+ background: linear-gradient(135deg, var(--color-red-700), var(--color-red-800), var(--color-red-900));
1215
+ box-shadow: 0 6px 20px rgba(239, 68, 68, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1216
+ }
1217
+
1218
+ .btn-primary {
1219
+ background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700));
1220
+ color: white;
1221
+ border: 1px solid var(--color-purple-500);
1222
+ box-shadow: 0 4px 14px rgba(147, 51, 234, 0.25);
1223
+ }
1224
+
1225
+ .btn-primary:hover {
1226
+ background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600));
1227
+ box-shadow: 0 8px 25px rgba(147, 51, 234, 0.35);
1228
+ }
1229
+
1230
+ /* ========================================
1231
+ INPUT UTILITIES
1232
+ ======================================== */
1233
+
1234
+ .input {
1235
+ width: 100%;
1236
+ border-radius: 0.5rem;
1237
+ padding: 0.5rem 0.75rem;
1238
+ font-size: 0.875rem;
1239
+ border: 1px solid var(--color-neutral-600);
1240
+ background-color: var(--color-neutral-800);
1241
+ color: var(--color-neutral-100);
1242
+ transition: var(--transition-all);
1243
+ }
1244
+
1245
+ .input::placeholder {
1246
+ color: var(--color-neutral-400);
1247
+ }
1248
+
1249
+ .input:focus {
1250
+ outline: none;
1251
+ border-color: var(--color-purple-500);
1252
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1253
+ }
1254
+
1255
+ .input-dark {
1256
+ width: 100%;
1257
+ padding: 0.75rem;
1258
+ background-color: var(--color-neutral-700);
1259
+ border: 1px solid var(--color-neutral-600);
1260
+ border-radius: 0.5rem;
1261
+ color: var(--color-neutral-100);
1262
+ font-size: 0.875rem;
1263
+ transition: var(--transition-all);
1264
+ }
1265
+
1266
+ .input-dark:focus {
1267
+ outline: none;
1268
+ border-color: var(--color-purple-500);
1269
+ box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1270
+ }
1271
+
1272
+ /* ========================================
1273
+ CARD UTILITIES
1274
+ ======================================== */
1275
+
1276
+ .card {
1277
+ background: var(--color-neutral-800);
1278
+ border: 1px solid var(--color-neutral-700);
1279
+ border-radius: 0.5rem;
1280
+ padding: 1rem;
1281
+ box-shadow: var(--shadow-md);
1282
+ }
1283
+
1284
+ /* Player Controls */
1285
+
1286
+ .player-controls {
1287
+ height: 3rem;
1288
+ background-color: var(--color-neutral-800);
1289
+ border-top: 1px solid var(--color-neutral-600);
1290
+ padding: 0 0.5rem;
1291
+ display: flex;
1292
+ align-items: center;
1293
+ justify-content: space-between;
1294
+ }
1295
+
1296
+ /* Edit Controls */
1297
+
1298
+ .edit-controls {
1299
+ display: flex;
1300
+ align-items: center;
1301
+ gap: 0.5rem;
1302
+ }
1303
+
1304
+ .playback-controls {
1305
+ display: flex;
1306
+ align-items: center;
1307
+ gap: 0.5rem;
354
1308
  }
355
1309
 
356
1310
  /* Control Buttons */
1311
+
357
1312
  .control-btn {
358
1313
  display: flex;
359
1314
  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;
1315
+ justify-content: center;
1316
+ padding: 0.25rem 0.5rem;
1317
+ border-radius: 0.375rem;
1318
+ background: transparent;
1319
+ border: none;
1320
+ color: var(--color-neutral-400);
1321
+ transition: var(--transition-all);
368
1322
  cursor: pointer;
369
- transition: all 0.15s ease;
370
- white-space: nowrap;
371
- min-height: 36px;
372
1323
  }
373
1324
 
374
1325
  .control-btn:hover {
375
- background: #3a3a3a;
376
- border-color: #555;
1326
+ color: var(--color-neutral-100);
1327
+ background-color: var(--color-neutral-700);
377
1328
  }
378
1329
 
379
1330
  .control-btn:active {
380
- transform: translateY(1px);
381
- background: #1a1a1a;
1331
+ transform: scale(0.95);
1332
+ background-color: var(--color-neutral-600);
382
1333
  }
383
1334
 
384
- .control-btn:disabled {
1335
+ .control-btn.btn-disabled {
385
1336
  opacity: 0.5;
386
1337
  cursor: not-allowed;
387
1338
  pointer-events: none;
388
- }
389
-
390
- .control-btn svg {
391
- flex-shrink: 0;
1339
+ color: var(--color-neutral-600);
392
1340
  }
393
1341
 
394
1342
  /* 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;
1343
+
1344
+ .delete-btn {
1345
+ color: var(--color-red-400);
401
1346
  }
402
1347
 
403
- .play-pause-btn:hover {
404
- background: #0077dd;
405
- border-color: #0077dd;
1348
+ .delete-btn:hover {
1349
+ color: var(--color-red-300);
406
1350
  }
407
1351
 
408
- .delete-btn {
409
- color: #ff4444;
410
- border-color: #ff444440;
1352
+ .split-btn {
1353
+ color: var(--color-purple-400);
411
1354
  }
412
1355
 
413
- .delete-btn:hover {
414
- background: #ff444420;
415
- border-color: #ff4444;
1356
+ .split-btn:hover {
1357
+ color: var(--color-purple-300);
416
1358
  }
417
1359
 
418
- .split-btn svg {
419
- color: #ffa500;
1360
+ .play-pause-btn {
1361
+ padding: 0.75rem;
1362
+ color: white;
420
1363
  }
421
1364
 
422
- .clone-btn svg {
423
- color: #00cc66;
1365
+ /* Time Display */
1366
+
1367
+ .time-display {
1368
+ display: flex;
1369
+ align-items: center;
1370
+ gap: 0.5rem;
1371
+ color: var(--color-neutral-400);
1372
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Roboto Mono', monospace;
424
1373
  }
425
1374
 
426
- .btn-disabled {
427
- opacity: 0.5;
428
- cursor: not-allowed;
429
- pointer-events: none;
1375
+ .current-time {
1376
+ font-size: 0.875rem;
1377
+ font-weight: 500;
1378
+ color: var(--color-neutral-200);
430
1379
  }
431
1380
 
432
- .prev-btn,
433
- .next-btn {
434
- padding: 8px;
435
- min-width: 36px;
436
- justify-content: center;
1381
+ .time-separator {
1382
+ color: var(--color-neutral-600);
437
1383
  }
438
1384
 
439
- /* Timeline Controls */
440
- .timeline-controls {
441
- position: relative;
442
- background: #2a2a2a;
443
- border-radius: 6px;
444
- padding: 8px;
445
- border: 1px solid #444;
1385
+ .total-time {
1386
+ font-size: 0.875rem;
1387
+ color: var(--color-neutral-500);
446
1388
  }
447
1389
 
1390
+ /* Zoom Controls */
448
1391
 
449
1392
  .twick-track-zoom-container {
450
1393
  display: flex;
451
1394
  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;
1395
+ gap: 0.75rem;
458
1396
  }
459
1397
 
460
- .twick-zoom-slider {
461
- position: relative;
462
- width: 100%;
463
- height: 2px;
464
- cursor: pointer;
465
- background-color: #ffffff55;
466
- border-radius: 50%;
1398
+ .zoom-level {
1399
+ font-size: 0.875rem;
1400
+ color: var(--color-neutral-400);
1401
+ font-weight: 500;
1402
+ min-width: 3rem;
1403
+ text-align: center;
467
1404
  }
468
1405
 
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;
1406
+ /* Icon sizes */
1407
+
1408
+ .icon-md {
1409
+ width: 1.25rem;
1410
+ height: 1.25rem;
477
1411
  }
478
1412
 
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
- }
1413
+ .icon-lg {
1414
+ width: 1.5rem;
1415
+ height: 1.5rem;
1416
+ }
1417
+
1418
+ /* Animation */
1419
+
1420
+ .animate-spin {
1421
+ animation: spin 1s linear infinite;
1422
+ }
1423
+
1424
+ @keyframes spin {
1425
+ from {
1426
+ transform: rotate(0deg);
1427
+ }
1428
+ to {
1429
+ transform: rotate(360deg);
1430
+ }
1431
+ }
1432
+
1433
+ /* Undo/Redo Controls */
491
1434
 
492
1435
  .undo-redo-controls {
493
1436
  display: flex;
494
1437
  align-items: center;
495
- gap: 8px;
1438
+ gap: 0.5rem;
496
1439
  }