@twick/studio 0.15.13 → 0.15.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +2 -2
  2. package/dist/components/container/captions-panel-container.d.ts +1 -0
  3. package/dist/components/container/element-panel-container.d.ts +1 -1
  4. package/dist/components/container/properties-panel-container.d.ts +7 -7
  5. package/dist/components/panel/captions-panel.d.ts +46 -0
  6. package/dist/components/panel/circle-panel.d.ts +1 -1
  7. package/dist/components/panel/rect-panel.d.ts +1 -1
  8. package/dist/components/panel/text-panel.d.ts +1 -1
  9. package/dist/components/properties/{subtitlte-prop.d.ts → caption-prop.d.ts} +4 -4
  10. package/dist/components/properties/generate-captions.d.ts +13 -0
  11. package/dist/components/properties/property-row.d.ts +10 -0
  12. package/dist/components/properties/text-props.d.ts +3 -0
  13. package/dist/helpers/generate-captions.service.d.ts +21 -0
  14. package/dist/helpers/volume-db.d.ts +22 -0
  15. package/dist/hooks/use-captions-panel.d.ts +13 -0
  16. package/dist/hooks/use-generate-captions.d.ts +9 -0
  17. package/dist/hooks/use-studio-operation.d.ts +4 -4
  18. package/dist/hooks/use-text-panel.d.ts +6 -0
  19. package/dist/index.d.ts +10 -13
  20. package/dist/index.js +1209 -1046
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +1194 -1034
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/studio.css +521 -162
  25. package/dist/types/index.d.ts +18 -16
  26. package/package.json +14 -12
  27. package/dist/components/container/icon-panel-container.d.ts +0 -3
  28. package/dist/components/container/subtitles-panel-container.d.ts +0 -1
  29. package/dist/components/panel/icon-panel.d.ts +0 -4
  30. package/dist/components/panel/subtitles-panel.d.ts +0 -46
  31. package/dist/components/properties/generate-subtitles.d.ts +0 -13
  32. package/dist/helpers/generate-subtitles.service.d.ts +0 -21
  33. package/dist/hooks/use-generate-subtitles.d.ts +0 -9
  34. package/dist/hooks/use-icon-panel.d.ts +0 -24
  35. package/dist/hooks/use-subtitles-panel.d.ts +0 -13
package/dist/studio.css CHANGED
@@ -18,7 +18,9 @@
18
18
  }
19
19
 
20
20
  body {
21
- background-color: var(--color-neutral-900);
21
+ background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.02), transparent 60%),
22
+ radial-gradient(circle at bottom right, rgba(255, 255, 255, 0.015), transparent 60%),
23
+ var(--color-neutral-900);
22
24
  color: var(--color-gray-100);
23
25
  font-family: 'Inter', sans-serif;
24
26
  font-feature-settings: "rlig" 1, "calt" 1;
@@ -30,6 +32,13 @@ html {
30
32
 
31
33
  /* Components */
32
34
 
35
+ .header-separator {
36
+ width: 1px;
37
+ height: 2.5rem;
38
+ background-color: var(--color-gray-600);
39
+ margin: 0 1rem;
40
+ }
41
+
33
42
  /* ========================================
34
43
  SEARCH UTILITIES
35
44
  ======================================== */
@@ -50,7 +59,7 @@ html {
50
59
  left: 0.75rem;
51
60
  top: 50%;
52
61
  transform: translateY(-50%);
53
- color: var(--color-gray-400);
62
+ color: rgba(148, 163, 184, 0.8);
54
63
  transition: var(--transition-all);
55
64
  pointer-events: none;
56
65
  }
@@ -91,29 +100,33 @@ html {
91
100
  /* Panel styles */
92
101
 
93
102
  .panel-container {
94
- height: 100%;
95
- width: 18rem;
96
- min-width: 18rem;
97
- max-width: 18rem;
103
+ height: auto;
104
+ max-height: 100%;
105
+ width: 100%;
106
+ min-width: 0;
98
107
  display: flex;
99
108
  flex-direction: column;
100
- background-color: var(--color-neutral-900);
101
- padding: 0.5rem;
109
+ background: rgba(23, 23, 28, 0.96);
110
+ padding: 0.75rem;
111
+ border: 1px solid rgba(255, 255, 255, 0.06);
112
+ border-radius: 0.25rem;
113
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
102
114
  overflow-x: hidden;
103
115
  overflow-y: auto;
104
116
  }
105
117
 
106
118
  .panel-title {
107
- font-size: 1.125rem;
108
- font-weight: 600;
109
- color: var(--color-gray-100);
110
- margin-bottom: 1rem;
119
+ font-size: var(--typography-h1);
120
+ font-weight: var(--typography-h1-weight);
121
+ letter-spacing: var(--typography-h1-spacing);
122
+ color: rgba(226, 232, 240, 0.96);
123
+ margin: var(--typography-h1-margin);
111
124
  }
112
125
 
113
126
  .panel-section {
114
127
  display: flex;
115
128
  flex-direction: column;
116
- gap: 8;
129
+ gap: 0.5rem;
117
130
  margin-bottom: 0.75rem;
118
131
  }
119
132
 
@@ -125,26 +138,31 @@ html {
125
138
  /* Properties Panel */
126
139
 
127
140
  .properties-panel {
128
- width: 18rem;
129
141
  height: 100%;
130
- background: linear-gradient(to bottom, rgba(38, 38, 38, 0.9), rgba(23, 23, 23, 0.8));
131
- border-left: 1px solid rgba(75, 85, 99, 0.4);
142
+ display: flex;
143
+ flex-direction: column;
144
+ width: 100%;
145
+ background: rgba(23, 23, 28, 0.98);
146
+ border-left: 1px solid rgba(255, 255, 255, 0.06);
132
147
  overflow-y: hidden;
133
148
  overflow-x: hidden;
134
149
  backdrop-filter: blur(24px);
135
- box-shadow: var(--shadow-xl);
150
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
136
151
  }
137
152
 
138
153
  .properties-header {
139
- padding: 0.75rem;
140
- border-bottom: 1px solid rgba(75, 85, 99, 0.3);
141
- background: linear-gradient(to right, rgba(147, 51, 234, 0.1), transparent);
154
+ padding: 0.25rem 1rem;
155
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
156
+ background: rgba(18, 18, 23, 0.98);
142
157
  }
143
158
 
144
159
  .properties-title {
145
- font-size: 1.125rem;
146
- font-weight: 700;
147
- color: white;
160
+ font-size: var(--typography-h1);
161
+ font-weight: var(--typography-h1-weight);
162
+ letter-spacing: var(--typography-h1-spacing);
163
+ text-transform: uppercase;
164
+ color: var(--color-gray-100);
165
+ margin: 0.5rem 0rem;
148
166
  }
149
167
 
150
168
  /* Property Groups */
@@ -156,19 +174,28 @@ html {
156
174
  }
157
175
 
158
176
  .property-section {
159
- background-color: rgba(38, 38, 38, 0.4);
177
+ background-color: rgba(18, 18, 23, 0.8);
160
178
  border-radius: 0.5rem;
161
- padding: 0.625rem;
162
- border: 1px solid rgba(75, 85, 99, 0.2);
179
+ padding: 0.75rem;
180
+ border: 1px solid rgba(255, 255, 255, 0.06);
181
+ margin-bottom: 0.5rem;
182
+ }
183
+
184
+ .property-section:last-child {
185
+ margin-bottom: 0;
163
186
  }
164
187
 
165
188
  .property-title {
166
- font-size: 0.75rem;
167
- font-weight: 600;
168
- color: var(--color-gray-200);
169
- margin-bottom: 0.5rem;
189
+ font-size: var(--typography-h1);
190
+ font-weight: var(--typography-h1-weight);
191
+ letter-spacing: var(--typography-h1-spacing);
192
+ color: rgba(226, 232, 240, 0.9);
193
+ margin: var(--typography-h1-margin);
170
194
  display: flex;
171
195
  align-items: center;
196
+ text-overflow: ellipsis;
197
+ overflow: hidden;
198
+ white-space: nowrap;
172
199
  gap: 0.375rem;
173
200
  }
174
201
 
@@ -185,35 +212,85 @@ html {
185
212
  gap: 0.5rem;
186
213
  }
187
214
 
215
+ /* Property row layout: label left, control right */
216
+
217
+ .property-row {
218
+ display: grid;
219
+ grid-template-columns: minmax(0, 1.25fr) minmax(0, 2fr) auto;
220
+ align-items: center;
221
+ column-gap: 0.75rem;
222
+ row-gap: 0.25rem;
223
+ margin-bottom: 1rem;
224
+ }
225
+
226
+ .property-row:last-child {
227
+ margin-bottom: 0;
228
+ }
229
+
230
+ .property-row-label {
231
+ display: flex;
232
+ align-items: flex-start;
233
+ justify-content: flex-start;
234
+ min-width: 0;
235
+ padding-top: 0.125rem;
236
+ }
237
+
238
+ .property-row-control {
239
+ display: flex;
240
+ align-items: center;
241
+ gap: 0.5rem;
242
+ min-width: 0;
243
+ flex-wrap: wrap;
244
+ }
245
+
246
+ .property-row-control .color-picker {
247
+ flex-shrink: 0;
248
+ }
249
+
250
+ .property-row-secondary {
251
+ display: flex;
252
+ align-items: center;
253
+ justify-content: flex-end;
254
+ font-size: var(--typography-value);
255
+ font-weight: var(--typography-value-weight);
256
+ color: var(--color-gray-300);
257
+ min-width: 2.5rem;
258
+ flex-shrink: 0;
259
+ }
260
+
188
261
  .property-label {
189
262
  display: block;
190
- font-size: 0.75rem;
191
- color: var(--color-gray-400);
192
- margin-bottom: 0.25rem;
263
+ font-size: var(--typography-label);
264
+ text-transform: uppercase;
265
+ letter-spacing: 0.08em;
266
+ opacity: var(--typography-label-opacity);
267
+ color: rgba(148, 163, 184, 0.9);
268
+ margin-bottom: 0.15rem;
193
269
  }
194
270
 
195
271
  .property-input {
196
272
  width: 100%;
197
- background-color: rgba(64, 64, 64, 0.6);
198
- border: 1px solid rgba(75, 85, 99, 0.4);
273
+ background-color: rgba(15, 23, 42, 0.9);
274
+ border: 1px solid rgba(51, 65, 85, 0.9);
199
275
  border-radius: 0.375rem;
200
276
  color: white;
201
- font-size: 0.75rem;
277
+ font-size: var(--typography-value);
278
+ font-weight: var(--typography-value-weight);
202
279
  padding: 0.375rem 0.5rem;
203
280
  transition: var(--transition-all);
204
281
  }
205
282
 
206
283
  .property-input:focus {
207
- border-color: var(--color-purple-500);
284
+ border-color: rgba(255, 255, 255, 0.3);
208
285
  outline: none;
209
- box-shadow: 0 0 0 1px rgba(147, 51, 234, 0.3);
286
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
210
287
  }
211
288
 
212
289
  .property-range-labels {
213
290
  display: flex;
214
291
  justify-content: space-between;
215
292
  font-size: 0.75rem;
216
- color: var(--color-gray-400);
293
+ color: rgba(148, 163, 184, 0.85);
217
294
  margin-top: 0.25rem;
218
295
  }
219
296
 
@@ -221,6 +298,7 @@ html {
221
298
  flex: 1;
222
299
  overflow-y: auto;
223
300
  min-height: 300px;
301
+ min-width: 0;
224
302
  }
225
303
 
226
304
  /* Media List */
@@ -375,7 +453,7 @@ html {
375
453
 
376
454
  .media-count {
377
455
  padding: 0.5rem 0.75rem;
378
- color: var(--color-gray-400);
456
+ color: rgba(148, 163, 184, 0.85);
379
457
  font-size: 0.875rem;
380
458
  }
381
459
 
@@ -383,10 +461,19 @@ html {
383
461
 
384
462
  .media-grid {
385
463
  display: grid;
386
- grid-template-columns: repeat(2, minmax(125px, 1fr));
464
+ grid-template-columns: repeat(2, minmax(0, 1fr));
387
465
  gap: 0.75rem;
388
466
  padding: 0.25rem;
389
467
  overflow: hidden;
468
+ min-width: 0;
469
+ }
470
+
471
+ .media-item-draggable {
472
+ cursor: grab;
473
+ }
474
+
475
+ .media-item-draggable:active {
476
+ cursor: grabbing;
390
477
  }
391
478
 
392
479
  .media-item {
@@ -396,6 +483,7 @@ html {
396
483
  border-radius: 0.5rem;
397
484
  background-color: var(--color-neutral-800);
398
485
  aspect-ratio: 9/16;
486
+ min-width: 0;
399
487
  }
400
488
 
401
489
  .media-item:hover {
@@ -406,6 +494,7 @@ html {
406
494
  width: 100%;
407
495
  height: 100%;
408
496
  object-fit: cover;
497
+ display: block;
409
498
  }
410
499
 
411
500
  .media-duration {
@@ -539,24 +628,26 @@ html {
539
628
  /* Sidebar styles */
540
629
 
541
630
  .sidebar {
542
- min-width: 3.5rem;
543
- max-width: 3.5rem;
631
+ position: relative;
632
+ z-index: 2;
633
+ min-width: 3.8rem;
634
+ max-width: 3.8rem;
544
635
  padding-top: 0.75rem;
545
- background-color: rgba(38, 38, 38, 0.8);
546
- border-right: 1px solid rgba(75, 85, 99, 0.5);
636
+ background: rgba(23, 23, 28, 0.98);
637
+ border-right: 1px solid rgba(255, 255, 255, 0.06);
547
638
  display: flex;
548
639
  flex-direction: column;
549
640
  align-items: center;
550
641
  gap: 1rem;
551
642
  padding: 0.35rem;
552
643
  backdrop-filter: blur(12px);
553
- box-shadow: var(--shadow-lg);
644
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);
554
645
  }
555
646
 
556
647
  .toolbar-label {
557
648
  text-align: center;
558
- font-size: smaller;
559
- color: var(--color-gray-300);
649
+ font-size: 0.75rem;
650
+ color: rgba(203, 213, 225, 0.9);
560
651
  }
561
652
 
562
653
  /* Timeline track styles */
@@ -564,8 +655,12 @@ html {
564
655
  .timeline-track {
565
656
  position: relative;
566
657
  height: 3rem;
567
- background-color: rgba(64, 64, 64, 0.5);
568
- border: 1px solid rgba(75, 85, 99, 0.5);
658
+ background: linear-gradient(
659
+ to right,
660
+ rgba(30, 64, 175, 0.55),
661
+ rgba(8, 47, 73, 0.85)
662
+ );
663
+ border: 1px solid rgba(56, 189, 248, 0.45);
569
664
  border-radius: 0.5rem;
570
665
  overflow: hidden;
571
666
  backdrop-filter: blur(4px);
@@ -577,15 +672,15 @@ html {
577
672
  top: 0.25rem;
578
673
  bottom: 0.25rem;
579
674
  border-radius: 0.375rem;
580
- border: 1px solid rgba(147, 51, 234, 0.5);
581
- background: linear-gradient(to right, rgba(147, 51, 234, 0.3), rgba(147, 51, 234, 0.3));
675
+ border: 1px solid rgba(56, 189, 248, 0.7);
676
+ background: linear-gradient(to right, rgba(37, 99, 235, 0.75), rgba(56, 189, 248, 0.75));
582
677
  transition: var(--transition-all);
583
678
  cursor: pointer;
584
679
  box-shadow: var(--shadow-lg);
585
680
  }
586
681
 
587
682
  .timeline-element:hover {
588
- background: linear-gradient(to right, rgba(147, 51, 234, 0.5), rgba(147, 51, 234, 0.5));
683
+ background: linear-gradient(to right, rgba(59, 130, 246, 0.9), rgba(56, 189, 248, 0.9));
589
684
  }
590
685
 
591
686
  /* Canvas styles */
@@ -593,7 +688,11 @@ html {
593
688
  .canvas-container {
594
689
  position: relative;
595
690
  overflow: hidden;
596
- box-shadow: var(--shadow-xl);
691
+ border-radius: 0.75rem;
692
+ box-shadow:
693
+ 0 0 0 1px rgba(255, 255, 255, 0.04),
694
+ 0 8px 32px rgba(0, 0, 0, 0.4),
695
+ inset 0 0 40px rgba(0, 0, 0, 0.6);
597
696
  }
598
697
 
599
698
  /* Props Toolbar styles */
@@ -601,7 +700,7 @@ html {
601
700
  .props-toolbar-label {
602
701
  text-align: center;
603
702
  font-size: xx-small;
604
- color: var(--color-gray-300);
703
+ color: rgba(203, 213, 225, 0.9);
605
704
  margin-top: 0.25rem;
606
705
  transition: var(--transition-all);
607
706
  word-wrap: break-word;
@@ -618,24 +717,25 @@ html {
618
717
  align-items: center;
619
718
  gap: 0.5rem;
620
719
  padding: 0.75rem;
621
- background-color: rgba(38, 38, 38, 0.8);
720
+ background: rgba(23, 23, 28, 0.98);
622
721
  backdrop-filter: blur(12px);
623
- border-bottom: 1px solid rgba(75, 85, 99, 0.5);
624
- box-shadow: var(--shadow-md);
722
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
723
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
625
724
  }
626
725
 
627
- /* Header styles */
726
+ /* Header styles – glassmorphism */
628
727
 
629
728
  .header {
630
729
  height: 3.5rem;
631
- background-color: rgba(38, 38, 38, 0.9);
632
- border-bottom: 1px solid rgba(75, 85, 99, 0.5);
730
+ background: rgba(23, 23, 28, 0.75);
731
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
633
732
  display: flex;
634
733
  align-items: center;
635
734
  justify-content: space-between;
636
735
  padding: 0 1rem;
637
- backdrop-filter: blur(12px);
638
- box-shadow: var(--shadow-lg);
736
+ backdrop-filter: blur(20px);
737
+ -webkit-backdrop-filter: blur(20px);
738
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
639
739
  }
640
740
 
641
741
  /* Media library styles */
@@ -658,10 +758,10 @@ html {
658
758
 
659
759
  /* Button hover effects - using twick-utilities.css */
660
760
 
661
- /* Accent colors */
761
+ /* Accent colors - neutral to avoid color overuse */
662
762
 
663
763
  .accent-purple {
664
- color: var(--color-purple-400);
764
+ color: var(--color-gray-400);
665
765
  }
666
766
 
667
767
  /* Gradient text - using twick-utilities.css */
@@ -672,23 +772,22 @@ html {
672
772
 
673
773
  .aspect-ratio-btn {
674
774
  padding: 0.375rem 0.75rem;
675
- border-radius: 0.5rem;
676
- border: 1px solid var(--color-gray-600);
775
+ border-radius: 0.375rem;
776
+ border: 1px solid rgba(255, 255, 255, 0.15);
677
777
  color: var(--color-gray-300);
678
778
  transition: var(--transition-all);
679
779
  font-size: 0.875rem;
680
780
  }
681
781
 
682
782
  .aspect-ratio-btn:hover {
683
- border-color: var(--color-purple-500);
783
+ border-color: rgba(255, 255, 255, 0.25);
684
784
  color: var(--color-purple-400);
685
785
  }
686
786
 
687
787
  .aspect-ratio-btn.active {
688
- border-color: var(--color-purple-500);
689
- background-color: rgba(147, 51, 234, 0.2);
690
- color: var(--color-purple-400);
691
- box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.25);
788
+ border-color: rgba(255, 255, 255, 0.3);
789
+ background-color: var(--color-neutral-700);
790
+ color: white;
692
791
  }
693
792
 
694
793
  /* Slider styles */
@@ -728,14 +827,14 @@ html {
728
827
  .slider-thumb::-webkit-slider-track {
729
828
  width: 100%;
730
829
  height: 0.375rem;
731
- background-color: rgba(64, 64, 64, 0.5);
830
+ background: linear-gradient(to right, rgba(15, 23, 42, 0.9), rgba(30, 64, 175, 0.9));
732
831
  border-radius: 9999px;
733
832
  }
734
833
 
735
834
  .slider-thumb::-moz-range-track {
736
835
  width: 100%;
737
836
  height: 0.375rem;
738
- background-color: rgba(64, 64, 64, 0.5);
837
+ background: linear-gradient(to right, rgba(15, 23, 42, 0.9), rgba(30, 64, 175, 0.9));
739
838
  border-radius: 9999px;
740
839
  border: 0;
741
840
  }
@@ -745,26 +844,26 @@ html {
745
844
  .form-btn {
746
845
  width: 2rem;
747
846
  height: 2rem;
748
- background: linear-gradient(to bottom right, var(--color-gray-700), var(--color-gray-800));
749
- border-radius: 0.5rem;
847
+ background: var(--color-neutral-800);
848
+ border: 1px solid rgba(255, 255, 255, 0.1);
849
+ border-radius: 0.375rem;
750
850
  display: flex;
751
851
  align-items: center;
752
852
  justify-content: center;
753
853
  color: var(--color-gray-300);
754
854
  transition: var(--transition-all);
755
- box-shadow: var(--shadow-sm);
756
855
  }
757
856
 
758
857
  .form-btn:hover {
759
- background: linear-gradient(to bottom right, var(--color-gray-600), var(--color-gray-700));
858
+ background: var(--color-neutral-700);
760
859
  color: white;
761
- box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.2);
860
+ border-color: rgba(255, 255, 255, 0.15);
762
861
  }
763
862
 
764
863
  .form-btn.active {
765
- background: linear-gradient(to bottom right, var(--color-purple-500), var(--color-purple-600));
864
+ background: var(--color-neutral-600);
766
865
  color: white;
767
- box-shadow: 0 4px 6px -1px rgba(147, 51, 234, 0.25);
866
+ border-color: rgba(255, 255, 255, 0.2);
768
867
  }
769
868
 
770
869
  /* Toolbar buttons */
@@ -778,23 +877,61 @@ html {
778
877
  flex-direction: column;
779
878
  align-items: center;
780
879
  justify-content: center;
781
- transition: var(--transition-all);
880
+ transition: transform var(--duration-fast) ease,
881
+ background-color var(--duration-fast) ease,
882
+ color var(--duration-fast) ease,
883
+ box-shadow var(--duration-fast) ease;
782
884
  box-shadow: var(--shadow-sm);
783
885
  }
784
886
 
785
887
  .toolbar-btn.active {
786
888
  background: linear-gradient(to bottom right, var(--color-purple-500), var(--color-purple-600));
787
889
  color: white;
788
- box-shadow: 0 10px 15px -3px rgba(147, 51, 234, 0.25);
890
+ transform: scale(1.08);
891
+ box-shadow: 0 0 12px rgba(147, 51, 234, 0.25);
789
892
  }
790
893
 
791
894
  .toolbar-btn:not(.active) {
792
- color: var(--color-gray-400);
895
+ color: rgba(148, 163, 184, 0.9);
793
896
  }
794
897
 
795
898
  .toolbar-btn:not(.active):hover {
796
899
  color: white;
797
- background-color: rgba(64, 64, 64, 0.5);
900
+ background-color: var(--color-purple-muted);
901
+ }
902
+
903
+ /* Toolbar tooltip - smooth fade-in, 150ms delay, elevation shadow */
904
+
905
+ .toolbar-btn[data-tooltip] {
906
+ position: relative;
907
+ }
908
+
909
+ .toolbar-btn[data-tooltip]::after {
910
+ content: attr(data-tooltip);
911
+ position: absolute;
912
+ left: 100%;
913
+ top: 50%;
914
+ transform: translateY(-50%) translateX(8px);
915
+ padding: 0.375rem 0.5rem;
916
+ font-size: 0.75rem;
917
+ font-weight: 500;
918
+ color: var(--color-gray-100);
919
+ background: rgba(30, 30, 35, 0.95);
920
+ border: 1px solid rgba(255, 255, 255, 0.08);
921
+ border-radius: 0.375rem;
922
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
923
+ white-space: nowrap;
924
+ pointer-events: none;
925
+ opacity: 0;
926
+ transition: opacity var(--duration-normal) ease var(--duration-normal),
927
+ transform var(--duration-normal) ease var(--duration-normal);
928
+ z-index: 100;
929
+ }
930
+
931
+ .toolbar-btn[data-tooltip]:hover::after {
932
+ opacity: 1;
933
+ transform: translateY(-50%) translateX(12px);
934
+ transition-delay: 150ms;
798
935
  }
799
936
 
800
937
  /* Props Toolbar buttons */
@@ -836,20 +973,23 @@ html {
836
973
  padding: 0.625rem 0.75rem;
837
974
  text-align: left;
838
975
  color: var(--color-gray-200);
839
- transition: var(--transition-all);
840
- border-left: 2px solid transparent;
976
+ transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1),
977
+ color 180ms ease,
978
+ border-color 180ms ease;
979
+ border-left: 1px solid transparent;
841
980
  }
842
981
 
843
982
  .prop-header:hover {
844
983
  color: white;
845
- background: linear-gradient(to right, rgba(147, 51, 234, 0.2), rgba(147, 51, 234, 0.1));
846
- border-left-color: rgba(147, 51, 234, 0.5);
984
+ background: var(--color-purple-muted);
985
+ border-left-color: rgba(147, 51, 234, 0.4);
847
986
  }
848
987
 
849
988
  .prop-content {
850
989
  overflow-x: hidden;
851
990
  overflow-y: auto;
852
- padding: 0.25rem;
991
+ padding: 0.5rem 0.75rem;
992
+ padding-right: 1rem;
853
993
  transition: var(--transition-all);
854
994
  }
855
995
 
@@ -870,17 +1010,19 @@ html {
870
1010
  display: flex;
871
1011
  align-items: center;
872
1012
  justify-content: space-between;
873
- padding: 0.625rem 0.75rem;
1013
+ padding: 0.25rem 0.75rem;
874
1014
  text-align: left;
875
1015
  color: var(--color-gray-200);
876
- transition: var(--transition-all);
877
- border-left: 2px solid transparent;
1016
+ transition: background 180ms cubic-bezier(0.4, 0, 0.2, 1),
1017
+ color 180ms ease,
1018
+ border-color 180ms ease;
1019
+ border-left: 1px solid transparent;
878
1020
  }
879
1021
 
880
1022
  .accordion-header:hover {
881
1023
  color: white;
882
- background: linear-gradient(to right, rgba(147, 51, 234, 0.2), rgba(147, 51, 234, 0.1));
883
- border-left-color: rgba(147, 51, 234, 0.5);
1024
+ background: var(--color-purple-muted);
1025
+ border-left-color: rgba(147, 51, 234, 0.4);
884
1026
  }
885
1027
 
886
1028
  .accordion-content {
@@ -888,19 +1030,33 @@ html {
888
1030
  overflow-y: auto;
889
1031
  max-height: 0;
890
1032
  opacity: 0;
891
- transition: all 300ms ease-in-out;
1033
+ transition: max-height 180ms cubic-bezier(0.4, 0, 0.2, 1),
1034
+ opacity 180ms cubic-bezier(0.4, 0, 0.2, 1);
892
1035
  }
893
1036
 
894
1037
  .accordion-content.expanded {
895
- max-height: 24rem;
1038
+ max-height: 20rem;
896
1039
  opacity: 1;
897
1040
  }
898
1041
 
1042
+ .properties-size-readonly {
1043
+ display: inline-flex;
1044
+ align-items: center;
1045
+ justify-content: flex-start;
1046
+ padding: 0.35rem 0.6rem;
1047
+ margin-top: 0.25rem;
1048
+ border-radius: 999px;
1049
+ font-size: 0.8rem;
1050
+ letter-spacing: 0.04em;
1051
+ background: rgba(15, 23, 42, 0.95);
1052
+ border: 1px solid rgba(51, 65, 85, 0.9);
1053
+ color: var(--color-gray-100);
1054
+ }
1055
+
899
1056
  .accordion-panel {
900
- padding: 0.5rem 0.75rem;
1057
+ padding: 0.25rem;
901
1058
  background-color: rgba(23, 23, 23, 0.3);
902
- border-left: 2px solid rgba(147, 51, 234, 0.3);
903
- margin-left: 0.5rem;
1059
+ margin-left: 0.25rem;
904
1060
  }
905
1061
 
906
1062
  /* Studio-specific utilities */
@@ -929,6 +1085,7 @@ html {
929
1085
 
930
1086
  .slider-purple {
931
1087
  flex: 1;
1088
+ min-width: 0;
932
1089
  height: 0.25rem;
933
1090
  background: var(--color-neutral-700);
934
1091
  border-radius: 9999px;
@@ -938,17 +1095,26 @@ html {
938
1095
 
939
1096
  .slider-purple::-webkit-slider-thumb {
940
1097
  appearance: none;
941
- width: 1rem;
942
- height: 1rem;
943
- background: var(--color-purple-500);
1098
+ width: 0.875rem;
1099
+ height: 0.875rem;
1100
+ background: var(--color-neutral-300);
944
1101
  border-radius: 50%;
945
1102
  cursor: pointer;
946
- border: 2px solid var(--color-neutral-900);
1103
+ border: 1px solid var(--color-neutral-600);
1104
+ }
1105
+
1106
+ .slider-purple::-moz-range-thumb {
1107
+ width: 0.875rem;
1108
+ height: 0.875rem;
1109
+ background: var(--color-neutral-300);
1110
+ border-radius: 50%;
1111
+ cursor: pointer;
1112
+ border: 1px solid var(--color-neutral-600);
947
1113
  }
948
1114
 
949
1115
  .slider-value {
950
1116
  min-width: 3rem;
951
- color: var(--color-gray-300);
1117
+ color: rgba(203, 213, 225, 0.95);
952
1118
  font-size: 0.875rem;
953
1119
  }
954
1120
 
@@ -959,31 +1125,38 @@ html {
959
1125
 
960
1126
  .select-dark {
961
1127
  flex: 1;
1128
+ min-width: 0;
962
1129
  background-color: var(--color-neutral-800);
963
- border: 1px solid var(--color-gray-600);
964
- border-radius: 0.5rem;
1130
+ border: 1px solid rgba(255, 255, 255, 0.1);
1131
+ border-radius: 0.375rem;
965
1132
  color: var(--color-gray-100);
966
1133
  padding: 0.5rem;
967
1134
  font-size: 0.875rem;
968
1135
  }
969
1136
 
970
1137
  .btn-icon {
971
- width: 2.5rem;
972
- height: 2.5rem;
1138
+ width: 2.25rem;
1139
+ height: 2.25rem;
1140
+ flex-shrink: 0;
973
1141
  display: flex;
974
1142
  align-items: center;
975
1143
  justify-content: center;
976
1144
  background-color: var(--color-neutral-800);
977
- border: 1px solid var(--color-gray-600);
978
- border-radius: 0.5rem;
1145
+ border: 1px solid rgba(255, 255, 255, 0.1);
1146
+ border-radius: 0.375rem;
979
1147
  color: var(--color-gray-300);
980
- font-size: 0.875rem;
1148
+ font-size: 0.75rem;
981
1149
  cursor: pointer;
982
1150
  }
983
1151
 
1152
+ .btn-icon:hover {
1153
+ background-color: var(--color-neutral-700);
1154
+ color: white;
1155
+ }
1156
+
984
1157
  .btn-icon-active {
985
- background-color: var(--color-purple-500);
986
- border-color: var(--color-purple-600);
1158
+ background-color: var(--color-neutral-600);
1159
+ border-color: rgba(255, 255, 255, 0.2);
987
1160
  color: white;
988
1161
  }
989
1162
 
@@ -1005,10 +1178,10 @@ html {
1005
1178
  }
1006
1179
 
1007
1180
  .color-picker {
1008
- width: 2.5rem;
1009
- height: 2.5rem;
1181
+ width: 2.25rem;
1182
+ height: 2.25rem;
1010
1183
  padding: 0;
1011
- border: none;
1184
+ border: 1px solid rgba(255, 255, 255, 0.1);
1012
1185
  border-radius: 0.375rem;
1013
1186
  cursor: pointer;
1014
1187
  background: none;
@@ -1016,9 +1189,10 @@ html {
1016
1189
 
1017
1190
  .color-text {
1018
1191
  flex: 1;
1192
+ min-width: 0;
1019
1193
  background-color: var(--color-neutral-800);
1020
- border: 1px solid var(--color-gray-600);
1021
- border-radius: 0.5rem;
1194
+ border: 1px solid rgba(255, 255, 255, 0.1);
1195
+ border-radius: 0.375rem;
1022
1196
  color: var(--color-gray-100);
1023
1197
  padding: 0.5rem;
1024
1198
  font-size: 0.875rem;
@@ -1034,7 +1208,7 @@ html {
1034
1208
  display: flex;
1035
1209
  align-items: center;
1036
1210
  gap: 0.5rem;
1037
- color: var(--color-gray-300);
1211
+ color: rgba(203, 213, 225, 0.95);
1038
1212
  font-size: 0.875rem;
1039
1213
  cursor: pointer;
1040
1214
  }
@@ -1043,14 +1217,14 @@ html {
1043
1217
  width: 1rem;
1044
1218
  height: 1rem;
1045
1219
  border-radius: 0.25rem;
1046
- border: 2px solid var(--color-gray-600);
1220
+ border: 1px solid rgba(255, 255, 255, 0.2);
1047
1221
  appearance: none;
1048
1222
  cursor: pointer;
1049
1223
  }
1050
1224
 
1051
1225
  .checkbox-purple:checked {
1052
- background-color: var(--color-purple-500);
1053
- border-color: var(--color-purple-600);
1226
+ background-color: var(--color-neutral-500);
1227
+ border-color: var(--color-neutral-400);
1054
1228
  }
1055
1229
 
1056
1230
  /* btn-primary - using twick-utilities.css */
@@ -1063,28 +1237,81 @@ html {
1063
1237
  height: 100dvh;
1064
1238
  width: 100dvw;
1065
1239
  overflow: hidden;
1066
- background-color: var(--color-neutral-900);
1240
+ background: var(--color-neutral-900);
1067
1241
  color: var(--color-gray-100);
1242
+ position: relative;
1243
+ }
1244
+
1245
+ /* Subtle background noise texture */
1246
+
1247
+ .studio-container::before {
1248
+ content: "";
1249
+ position: absolute;
1250
+ inset: 0;
1251
+ pointer-events: none;
1252
+ opacity: 0.03;
1253
+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
1254
+ z-index: 0;
1255
+ }
1256
+
1257
+ .studio-container > * {
1258
+ position: relative;
1259
+ z-index: 1;
1068
1260
  }
1069
1261
 
1070
1262
  .studio-content {
1071
1263
  display: flex;
1072
1264
  width: 100%;
1265
+ min-width: 0; /* allow flex row to shrink below content size */
1266
+ max-width: 100%;
1073
1267
  height: calc(100vh - 56px);
1268
+ background: var(--color-neutral-900);
1074
1269
  }
1075
1270
 
1076
1271
  .main-container {
1077
1272
  flex: 1;
1273
+ min-width: 0; /* allow shrinking below canvas/video intrinsic size in landscape */
1078
1274
  display: flex;
1079
1275
  flex-direction: column;
1080
- background-color: var(--color-neutral-700);
1081
- max-width: calc(100% - 43rem);
1276
+ background-color: #0a0a0f;
1277
+ overflow: hidden;
1082
1278
  }
1083
1279
 
1084
1280
  .canvas-wrapper {
1085
1281
  flex: 1;
1086
- overflow-y: auto;
1087
- padding: 0.25rem;
1282
+ min-width: 0;
1283
+ overflow: auto;
1284
+ padding: 0.75rem;
1285
+ background: radial-gradient(
1286
+ circle at center,
1287
+ rgba(255, 255, 255, 0.03),
1288
+ rgba(0, 0, 0, 0.6)
1289
+ );
1290
+ }
1291
+
1292
+ /* Side panels */
1293
+
1294
+ .studio-left-panel {
1295
+ position: relative;
1296
+ z-index: 1;
1297
+ width: 288px;
1298
+ flex-shrink: 0;
1299
+ height: 100%;
1300
+ display: flex;
1301
+ flex-direction: column;
1302
+ background-color: rgba(23, 23, 28, 0.98);
1303
+ border-right: 1px solid rgba(255, 255, 255, 0.06);
1304
+ box-shadow: var(--elevation-panel);
1305
+ }
1306
+
1307
+ .studio-right-panel {
1308
+ width: 360px;
1309
+ flex-shrink: 0;
1310
+ display: flex;
1311
+ flex-direction: row;
1312
+ background-color: rgba(23, 23, 28, 0.98);
1313
+ border-left: 1px solid rgba(255, 255, 255, 0.06);
1314
+ box-shadow: var(--elevation-panel);
1088
1315
  }
1089
1316
 
1090
1317
  /* Color Input */
@@ -1122,16 +1349,16 @@ video::-webkit-media-controls-panel {
1122
1349
  }
1123
1350
 
1124
1351
  ::-webkit-scrollbar-track {
1125
- background: var(--color-gray-700);
1352
+ background: var(--color-neutral-800);
1126
1353
  }
1127
1354
 
1128
1355
  ::-webkit-scrollbar-thumb {
1129
- background: var(--color-purple-600);
1356
+ background: var(--color-neutral-600);
1130
1357
  border-radius: 3px;
1131
1358
  }
1132
1359
 
1133
1360
  ::-webkit-scrollbar-thumb:hover {
1134
- background: var(--color-purple-500);
1361
+ background: var(--color-neutral-500);
1135
1362
  }:root {
1136
1363
  /* Colors */
1137
1364
  --color-purple-100: #f3e8ff;
@@ -1182,6 +1409,34 @@ video::-webkit-media-controls-panel {
1182
1409
 
1183
1410
  /* Transitions */
1184
1411
  --transition-all: all 0.2s ease;
1412
+
1413
+ /* Elevation system */
1414
+ --elevation-panel: 0 0 0 1px rgba(255,255,255,0.04), 0 8px 32px rgba(0,0,0,0.4);
1415
+ --elevation-canvas: 0 0 0 1px rgba(255,255,255,0.04), 0 8px 32px rgba(0,0,0,0.4);
1416
+ --elevation-scrubber: 0 0 8px rgba(139,92,246,0.8);
1417
+
1418
+ /* Motion */
1419
+ --duration-fast: 120ms;
1420
+ --duration-normal: 150ms;
1421
+ --duration-medium: 180ms;
1422
+ --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
1423
+
1424
+ /* Muted purple for hover (reduce primary purple overuse) */
1425
+ --color-purple-muted: rgba(139, 92, 246, 0.15);
1426
+
1427
+ /* Typography – Level 1 Section Headers */
1428
+ --typography-h1: 16px;
1429
+ --typography-h1-weight: 600;
1430
+ --typography-h1-spacing: 0.3px;
1431
+ --typography-h1-margin: 8px 0 12px 0;
1432
+
1433
+ /* Typography – Level 2 Sub Labels */
1434
+ --typography-label: 13px;
1435
+ --typography-label-opacity: 0.8;
1436
+
1437
+ /* Typography – Level 3 Values */
1438
+ --typography-value: 13px;
1439
+ --typography-value-weight: 500;
1185
1440
  }/* ========================================
1186
1441
  LAYOUT UTILITIES
1187
1442
  ======================================== *//* Flexbox utilities */.flex {
@@ -1309,7 +1564,11 @@ video::-webkit-media-controls-panel {
1309
1564
  cursor: pointer;
1310
1565
  position: relative;
1311
1566
  overflow: hidden;
1312
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1567
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
1568
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
1569
+ background-color 150ms ease,
1570
+ color 150ms ease,
1571
+ border-color 150ms ease;
1313
1572
  text-transform: uppercase;
1314
1573
  letter-spacing: 0.025em;
1315
1574
  box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
@@ -1327,7 +1586,7 @@ video::-webkit-media-controls-panel {
1327
1586
  outline: none;
1328
1587
  box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1329
1588
  }.btn:active {
1330
- transform: translateY(1px);
1589
+ transform: scale(0.98);
1331
1590
  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1332
1591
  }.btn:disabled {
1333
1592
  opacity: 0.6;
@@ -1347,7 +1606,9 @@ video::-webkit-media-controls-panel {
1347
1606
  cursor: pointer;
1348
1607
  position: relative;
1349
1608
  overflow: hidden;
1350
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1609
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
1610
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
1611
+ background 150ms ease;
1351
1612
  background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1352
1613
  color: white;
1353
1614
  border: 1px solid var(--color-purple-500);
@@ -1355,10 +1616,11 @@ video::-webkit-media-controls-panel {
1355
1616
  }.btn-primary:hover {
1356
1617
  background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1357
1618
  box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1358
- transform: translateY(-2px);
1619
+ transform: translateY(-1px);
1359
1620
  }.btn-primary:active {
1360
1621
  background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1361
1622
  box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1623
+ transform: scale(0.98);
1362
1624
  }.btn-primary:disabled {
1363
1625
  opacity: 0.6;
1364
1626
  cursor: not-allowed;
@@ -1404,7 +1666,11 @@ video::-webkit-media-controls-panel {
1404
1666
  cursor: pointer;
1405
1667
  position: relative;
1406
1668
  overflow: hidden;
1407
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
1669
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
1670
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
1671
+ background 150ms ease,
1672
+ color 150ms ease,
1673
+ border-color 150ms ease;
1408
1674
  background: rgba(64, 64, 64, 0.3);
1409
1675
  color: var(--color-neutral-300);
1410
1676
  border: 1px solid rgba(255, 255, 255, 0.1);
@@ -1415,7 +1681,9 @@ video::-webkit-media-controls-panel {
1415
1681
  color: white;
1416
1682
  border-color: rgba(255, 255, 255, 0.2);
1417
1683
  box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
1418
- transform: translateY(-2px);
1684
+ transform: translateY(-1px);
1685
+ }.btn-ghost:active {
1686
+ transform: scale(0.98);
1419
1687
  }.btn-ghost:disabled {
1420
1688
  opacity: 0.6;
1421
1689
  cursor: not-allowed;
@@ -1508,8 +1776,8 @@ video::-webkit-media-controls-panel {
1508
1776
  color: var(--color-neutral-400);
1509
1777
  }.input:focus {
1510
1778
  outline: none;
1511
- border-color: var(--color-purple-500);
1512
- box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1779
+ border-color: rgba(255, 255, 255, 0.3);
1780
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
1513
1781
  }.input-dark {
1514
1782
  width: 100%;
1515
1783
  padding: 0.75rem;
@@ -1521,8 +1789,8 @@ video::-webkit-media-controls-panel {
1521
1789
  transition: var(--transition-all);
1522
1790
  }.input-dark:focus {
1523
1791
  outline: none;
1524
- border-color: var(--color-purple-500);
1525
- box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
1792
+ border-color: rgba(255, 255, 255, 0.3);
1793
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
1526
1794
  }/* ========================================
1527
1795
  CARD UTILITIES
1528
1796
  ======================================== */.card {
@@ -1536,6 +1804,7 @@ video::-webkit-media-controls-panel {
1536
1804
  flex-direction: column;
1537
1805
  width: 100%;
1538
1806
  height: 100%;
1807
+ background-color: var(--color-neutral-900);
1539
1808
  gap: 6px;
1540
1809
  }.twick-editor-view-section {
1541
1810
  display: flex;
@@ -1549,8 +1818,8 @@ video::-webkit-media-controls-panel {
1549
1818
  flex-direction: column;
1550
1819
  width: 100%;
1551
1820
  height: 100%;
1552
- background-color: #252525;
1553
- border-radius: 10px;
1821
+ background-color: #141419;
1822
+ border-radius: 0.75rem;
1554
1823
  overflow-x: hidden;
1555
1824
  }.twick-editor-container {
1556
1825
  position: relative;
@@ -1592,6 +1861,38 @@ video::-webkit-media-controls-panel {
1592
1861
  }@keyframes twick-editor-spin {
1593
1862
  0% { transform: rotate(0deg); }
1594
1863
  100% { transform: rotate(360deg); }
1864
+ }/* Canvas context menu (z-order: Bring to Front / Send to Back) */.twick-canvas-context-menu {
1865
+ position: fixed;
1866
+ z-index: 1000;
1867
+ min-width: 160px;
1868
+ padding: 4px 0;
1869
+ background: #2a2a2a;
1870
+ border: 1px solid #444;
1871
+ border-radius: 8px;
1872
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
1873
+ display: flex;
1874
+ flex-direction: column;
1875
+ }.twick-canvas-context-menu-item {
1876
+ display: block;
1877
+ width: 100%;
1878
+ padding: 8px 14px;
1879
+ border: none;
1880
+ background: transparent;
1881
+ color: #e5e5e5;
1882
+ font-size: 13px;
1883
+ text-align: left;
1884
+ cursor: pointer;
1885
+ font-family: inherit;
1886
+ }.twick-canvas-context-menu-item:hover {
1887
+ background: #3a3a3a;
1888
+ }.twick-canvas-context-menu-separator {
1889
+ height: 1px;
1890
+ margin: 4px 8px;
1891
+ background: #444;
1892
+ }.twick-canvas-context-menu-item-danger:hover {
1893
+ background: #7f1d1d;
1894
+ }.twick-canvas-context-menu-item.twick-canvas-context-menu-item-danger {
1895
+ color: #fca5a5;
1595
1896
  }.twick-timeline-scroll-container {
1596
1897
  display: flex;
1597
1898
  flex-direction: column;
@@ -1637,9 +1938,9 @@ video::-webkit-media-controls-panel {
1637
1938
  }.twick-seek-track {
1638
1939
  position: relative;
1639
1940
  width: 100%;
1640
- border-top: 1px solid #262626;
1641
- border-bottom: 1px solid #262626;
1642
- background-color: #171717;
1941
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
1942
+ border-bottom: 1px solid rgba(255, 255, 255, 0.06);
1943
+ background-color: #0f0f14;
1643
1944
  }.twick-seek-track-canvas {
1644
1945
  min-width: 100%;
1645
1946
  height: 2rem;
@@ -1654,8 +1955,9 @@ video::-webkit-media-controls-panel {
1654
1955
  top: 0;
1655
1956
  left: 0;
1656
1957
  z-index: 30;
1657
- width: 1.5px;
1658
- background-color: #FFFFFF;
1958
+ width: 2px;
1959
+ background-color: var(--color-purple-400);
1960
+ box-shadow: 0 0 8px rgba(139, 92, 246, 0.8);
1659
1961
  }.twick-seek-track-handle {
1660
1962
  position: absolute;
1661
1963
  top: 0;
@@ -1665,6 +1967,7 @@ video::-webkit-media-controls-panel {
1665
1967
  transform: translate(-50%, -50%);
1666
1968
  background-color: #FFFFFF;
1667
1969
  border-radius: 25%;
1970
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
1668
1971
  }.twick-track-element {
1669
1972
  position: absolute;
1670
1973
  height: 100%;
@@ -1765,6 +2068,14 @@ video::-webkit-media-controls-panel {
1765
2068
  height: 2.5rem;
1766
2069
  margin-top: 2px;
1767
2070
  background-color: #474747;
2071
+ }/* Drop preview - ghost placeholder when dragging files over timeline */.twick-drop-preview {
2072
+ position: absolute;
2073
+ z-index: 20;
2074
+ pointer-events: none;
2075
+ background: rgba(96, 165, 250, 0.35);
2076
+ border: 2px dashed rgba(96, 165, 250, 0.8);
2077
+ border-radius: 6px;
2078
+ transition: left 0.05s ease-out, top 0.05s ease-out;
1768
2079
  }:root {
1769
2080
  /* Colors */
1770
2081
  --color-purple-100: #f3e8ff;
@@ -1815,6 +2126,34 @@ video::-webkit-media-controls-panel {
1815
2126
 
1816
2127
  /* Transitions */
1817
2128
  --transition-all: all 0.2s ease;
2129
+
2130
+ /* Elevation system */
2131
+ --elevation-panel: 0 0 0 1px rgba(255,255,255,0.04), 0 8px 32px rgba(0,0,0,0.4);
2132
+ --elevation-canvas: 0 0 0 1px rgba(255,255,255,0.04), 0 8px 32px rgba(0,0,0,0.4);
2133
+ --elevation-scrubber: 0 0 8px rgba(139,92,246,0.8);
2134
+
2135
+ /* Motion */
2136
+ --duration-fast: 120ms;
2137
+ --duration-normal: 150ms;
2138
+ --duration-medium: 180ms;
2139
+ --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
2140
+
2141
+ /* Muted purple for hover (reduce primary purple overuse) */
2142
+ --color-purple-muted: rgba(139, 92, 246, 0.15);
2143
+
2144
+ /* Typography – Level 1 Section Headers */
2145
+ --typography-h1: 16px;
2146
+ --typography-h1-weight: 600;
2147
+ --typography-h1-spacing: 0.3px;
2148
+ --typography-h1-margin: 8px 0 12px 0;
2149
+
2150
+ /* Typography – Level 2 Sub Labels */
2151
+ --typography-label: 13px;
2152
+ --typography-label-opacity: 0.8;
2153
+
2154
+ /* Typography – Level 3 Values */
2155
+ --typography-value: 13px;
2156
+ --typography-value-weight: 500;
1818
2157
  }/* ========================================
1819
2158
  LAYOUT UTILITIES
1820
2159
  ======================================== *//* Flexbox utilities */.flex {
@@ -1942,7 +2281,11 @@ video::-webkit-media-controls-panel {
1942
2281
  cursor: pointer;
1943
2282
  position: relative;
1944
2283
  overflow: hidden;
1945
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2284
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
2285
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
2286
+ background-color 150ms ease,
2287
+ color 150ms ease,
2288
+ border-color 150ms ease;
1946
2289
  text-transform: uppercase;
1947
2290
  letter-spacing: 0.025em;
1948
2291
  box-shadow: 0 4px 14px 0 rgba(0, 0, 0, 0.15);
@@ -1960,7 +2303,7 @@ video::-webkit-media-controls-panel {
1960
2303
  outline: none;
1961
2304
  box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.3), 0 4px 14px 0 rgba(0, 0, 0, 0.15);
1962
2305
  }.btn:active {
1963
- transform: translateY(1px);
2306
+ transform: scale(0.98);
1964
2307
  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.2);
1965
2308
  }.btn:disabled {
1966
2309
  opacity: 0.6;
@@ -1980,7 +2323,9 @@ video::-webkit-media-controls-panel {
1980
2323
  cursor: pointer;
1981
2324
  position: relative;
1982
2325
  overflow: hidden;
1983
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2326
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
2327
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
2328
+ background 150ms ease;
1984
2329
  background: linear-gradient(135deg, var(--color-purple-600), var(--color-purple-700), var(--color-purple-800));
1985
2330
  color: white;
1986
2331
  border: 1px solid var(--color-purple-500);
@@ -1988,10 +2333,11 @@ video::-webkit-media-controls-panel {
1988
2333
  }.btn-primary:hover {
1989
2334
  background: linear-gradient(135deg, var(--color-purple-500), var(--color-purple-600), var(--color-purple-700));
1990
2335
  box-shadow: 0 12px 35px rgba(147, 51, 234, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15);
1991
- transform: translateY(-2px);
2336
+ transform: translateY(-1px);
1992
2337
  }.btn-primary:active {
1993
2338
  background: linear-gradient(135deg, var(--color-purple-700), var(--color-purple-800), var(--color-purple-900));
1994
2339
  box-shadow: 0 6px 20px rgba(147, 51, 234, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2340
+ transform: scale(0.98);
1995
2341
  }.btn-primary:disabled {
1996
2342
  opacity: 0.6;
1997
2343
  cursor: not-allowed;
@@ -2037,7 +2383,11 @@ video::-webkit-media-controls-panel {
2037
2383
  cursor: pointer;
2038
2384
  position: relative;
2039
2385
  overflow: hidden;
2040
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
2386
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
2387
+ box-shadow 150ms cubic-bezier(0.4, 0, 0.2, 1),
2388
+ background 150ms ease,
2389
+ color 150ms ease,
2390
+ border-color 150ms ease;
2041
2391
  background: rgba(64, 64, 64, 0.3);
2042
2392
  color: var(--color-neutral-300);
2043
2393
  border: 1px solid rgba(255, 255, 255, 0.1);
@@ -2048,7 +2398,9 @@ video::-webkit-media-controls-panel {
2048
2398
  color: white;
2049
2399
  border-color: rgba(255, 255, 255, 0.2);
2050
2400
  box-shadow: 0 12px 35px rgba(0, 0, 0, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.1);
2051
- transform: translateY(-2px);
2401
+ transform: translateY(-1px);
2402
+ }.btn-ghost:active {
2403
+ transform: scale(0.98);
2052
2404
  }.btn-ghost:disabled {
2053
2405
  opacity: 0.6;
2054
2406
  cursor: not-allowed;
@@ -2141,8 +2493,8 @@ video::-webkit-media-controls-panel {
2141
2493
  color: var(--color-neutral-400);
2142
2494
  }.input:focus {
2143
2495
  outline: none;
2144
- border-color: var(--color-purple-500);
2145
- box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
2496
+ border-color: rgba(255, 255, 255, 0.3);
2497
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
2146
2498
  }.input-dark {
2147
2499
  width: 100%;
2148
2500
  padding: 0.75rem;
@@ -2154,8 +2506,8 @@ video::-webkit-media-controls-panel {
2154
2506
  transition: var(--transition-all);
2155
2507
  }.input-dark:focus {
2156
2508
  outline: none;
2157
- border-color: var(--color-purple-500);
2158
- box-shadow: 0 0 0 3px rgba(147, 51, 234, 0.1);
2509
+ border-color: rgba(255, 255, 255, 0.3);
2510
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.1);
2159
2511
  }/* ========================================
2160
2512
  CARD UTILITIES
2161
2513
  ======================================== */.card {
@@ -2166,8 +2518,8 @@ video::-webkit-media-controls-panel {
2166
2518
  box-shadow: var(--shadow-md);
2167
2519
  }/* Player Controls */.player-controls {
2168
2520
  height: 3rem;
2169
- background-color: var(--color-neutral-800);
2170
- border-top: 1px solid var(--color-neutral-600);
2521
+ background-color: #141419;
2522
+ border-top: 1px solid rgba(255, 255, 255, 0.06);
2171
2523
  padding: 0 0.5rem;
2172
2524
  display: flex;
2173
2525
  align-items: center;
@@ -2189,13 +2541,16 @@ video::-webkit-media-controls-panel {
2189
2541
  background: transparent;
2190
2542
  border: none;
2191
2543
  color: var(--color-neutral-400);
2192
- transition: var(--transition-all);
2544
+ transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1),
2545
+ color 150ms ease,
2546
+ background-color 150ms ease;
2193
2547
  cursor: pointer;
2194
2548
  }.control-btn:hover {
2195
2549
  color: var(--color-neutral-100);
2196
2550
  background-color: var(--color-neutral-700);
2551
+ transform: translateY(-1px);
2197
2552
  }.control-btn:active {
2198
- transform: scale(0.95);
2553
+ transform: scale(0.98);
2199
2554
  background-color: var(--color-neutral-600);
2200
2555
  }.control-btn.btn-disabled {
2201
2556
  opacity: 0.5;
@@ -2210,6 +2565,10 @@ video::-webkit-media-controls-panel {
2210
2565
  color: var(--color-purple-400);
2211
2566
  }.split-btn:hover {
2212
2567
  color: var(--color-purple-300);
2568
+ }.follow-btn-active {
2569
+ color: var(--color-purple-400);
2570
+ }.follow-btn-active:hover {
2571
+ color: var(--color-purple-300);
2213
2572
  }.play-pause-btn {
2214
2573
  padding: 0.75rem;
2215
2574
  color: white;