@videts/vide 0.7.0 → 0.8.0

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.
@@ -0,0 +1,864 @@
1
+ /* ═══════════════════════════════════════════════════════════
2
+ vide UI — Theme
3
+ ═══════════════════════════════════════════════════════════
4
+ Every box-model property is explicit. Nothing relies on
5
+ browser defaults for sizing, spacing, or line-height.
6
+ ═══════════════════════════════════════════════════════════ */
7
+
8
+ :root {
9
+ /* ── Palette ── */
10
+ --vide-accent: #e03e52;
11
+ --vide-accent-hover: #ee4f62;
12
+ --vide-text: #fff;
13
+ --vide-text-mid: rgba(255, 255, 255, 0.72);
14
+ --vide-text-dim: rgba(255, 255, 255, 0.44);
15
+
16
+ /* ── Surfaces ── */
17
+ --vide-bg: rgba(0, 0, 0, 0.75);
18
+ --vide-chip: rgba(0, 0, 0, 0.88);
19
+ --vide-chip-light: rgba(0, 0, 0, 0.72);
20
+ --vide-hover: rgba(255, 255, 255, 0.08);
21
+
22
+ /* ── Layout ── */
23
+ --vide-controls-height: 48px;
24
+ --vide-controls-padding-x: 12px;
25
+ --vide-controls-padding-bottom: 6px;
26
+ --vide-controls-gap: 4px;
27
+
28
+ /* ── Typography ── */
29
+ --vide-font: -apple-system, "Helvetica Neue", "Segoe UI", sans-serif;
30
+ --vide-font-mono: ui-monospace, "SF Mono", "Cascadia Mono", monospace;
31
+ --vide-font-size: 13px;
32
+ --vide-font-size-sm: 11px;
33
+ --vide-font-size-xs: 10px;
34
+ --vide-line-height: 1;
35
+
36
+ /* ── Icons ── */
37
+ --vide-icon-size: 22px;
38
+ --vide-btn-size: 40px;
39
+ --vide-btn-padding: 8px;
40
+
41
+ /* ── Radius ── */
42
+ --vide-radius: 4px;
43
+ --vide-radius-sm: 3px;
44
+ --vide-radius-round: 50%;
45
+
46
+ /* ── Progress ── */
47
+ --vide-progress-height: 3px;
48
+ --vide-progress-height-hover: 5px;
49
+ --vide-progress-hit-area: 16px;
50
+ --vide-handle-size: 13px;
51
+
52
+ /* ── Easing ── */
53
+ --vide-ease: cubic-bezier(0.4, 0, 0.2, 1);
54
+ --vide-duration: 0.2s;
55
+ --vide-duration-fast: 0.12s;
56
+
57
+ /* ── Ad ── */
58
+ --vide-accent-ad: #f2c94c;
59
+ --vide-ad-label-stripe: 3px;
60
+ --vide-ad-label-pad-y: 6px;
61
+ --vide-ad-label-pad-x: 10px;
62
+ --vide-ad-overlay-gap: 12px;
63
+
64
+ /* ── Skip ── */
65
+ --vide-skip-bg: rgba(24, 24, 28, 0.85);
66
+ --vide-skip-border: rgba(255, 255, 255, 0.22);
67
+ --vide-skip-color: #fff;
68
+ --vide-skip-padding-y: 10px;
69
+ --vide-skip-padding-x: 16px;
70
+ --vide-skip-font-size: 14px;
71
+ --vide-skip-gap: 6px;
72
+ --vide-skip-icon-size: 18px;
73
+ }
74
+
75
+ /* ═══════════════════════════════════════════
76
+ ROOT
77
+ ═══════════════════════════════════════════ */
78
+
79
+ .vide-ui {
80
+ position: relative;
81
+ width: 100%;
82
+ height: 100%;
83
+ margin: 0;
84
+ padding: 0;
85
+ font-family: var(--vide-font);
86
+ font-size: var(--vide-font-size);
87
+ line-height: var(--vide-line-height);
88
+ color: var(--vide-text);
89
+ user-select: none;
90
+ -webkit-user-select: none;
91
+ outline: none;
92
+ overflow: hidden;
93
+ box-sizing: border-box;
94
+ }
95
+
96
+ .vide-ui *,
97
+ .vide-ui *::before,
98
+ .vide-ui *::after {
99
+ box-sizing: border-box;
100
+ }
101
+
102
+ /* ═══════════════════════════════════════════
103
+ AUTOHIDE (mouse-idle during playback)
104
+ ═══════════════════════════════════════════ */
105
+
106
+ .vide-ui--autohide {
107
+ cursor: none;
108
+ }
109
+
110
+ .vide-ui--autohide .vide-controls {
111
+ opacity: 0;
112
+ pointer-events: none;
113
+ }
114
+
115
+ .vide-ui--autohide .vide-bigplay {
116
+ display: none;
117
+ }
118
+
119
+ /* ═══════════════════════════════════════════
120
+ CONTROLS BAR
121
+ ═══════════════════════════════════════════ */
122
+
123
+ .vide-controls {
124
+ position: absolute;
125
+ bottom: 0;
126
+ left: 0;
127
+ right: 0;
128
+ display: flex;
129
+ align-items: center;
130
+ flex-wrap: wrap;
131
+ gap: var(--vide-controls-gap);
132
+ min-height: var(--vide-controls-height);
133
+ margin: 0;
134
+ padding: 0 var(--vide-controls-padding-x) var(--vide-controls-padding-bottom);
135
+ background: linear-gradient(
136
+ to top,
137
+ rgba(0, 0, 0, 0.78) 0%,
138
+ rgba(0, 0, 0, 0.32) 60%,
139
+ transparent 100%
140
+ );
141
+ opacity: 0;
142
+ transition: opacity 0.25s var(--vide-ease);
143
+ z-index: 2;
144
+ }
145
+
146
+ .vide-ui:hover .vide-controls,
147
+ .vide-ui--paused .vide-controls,
148
+ .vide-ui--ready .vide-controls,
149
+ .vide-ui--ended .vide-controls {
150
+ opacity: 1;
151
+ pointer-events: auto;
152
+ }
153
+
154
+ /* ═══════════════════════════════════════════
155
+ ICON BASE
156
+ ═══════════════════════════════════════════ */
157
+
158
+ .vide-controls button svg,
159
+ .vide-bigplay svg,
160
+ .vide-skip svg {
161
+ display: block;
162
+ width: var(--vide-icon-size);
163
+ height: var(--vide-icon-size);
164
+ margin: 0;
165
+ padding: 0;
166
+ fill: var(--vide-text);
167
+ pointer-events: none;
168
+ }
169
+
170
+ /* ═══════════════════════════════════════════
171
+ PLAY BUTTON
172
+ ═══════════════════════════════════════════ */
173
+
174
+ .vide-play {
175
+ appearance: none;
176
+ border: none;
177
+ background: none;
178
+ color: var(--vide-text);
179
+ cursor: pointer;
180
+ width: var(--vide-btn-size);
181
+ height: var(--vide-btn-size);
182
+ min-width: var(--vide-btn-size);
183
+ min-height: var(--vide-btn-size);
184
+ padding: var(--vide-btn-padding);
185
+ margin: 0;
186
+ flex-shrink: 0;
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: center;
190
+ border-radius: var(--vide-radius-round);
191
+ transition: background var(--vide-duration-fast);
192
+ }
193
+
194
+ .vide-play:hover {
195
+ background: var(--vide-hover);
196
+ }
197
+
198
+ .vide-play:active {
199
+ opacity: 0.7;
200
+ }
201
+
202
+ /* ═══════════════════════════════════════════
203
+ PROGRESS BAR
204
+ ═══════════════════════════════════════════ */
205
+
206
+ .vide-progress {
207
+ flex: 1;
208
+ order: -1;
209
+ width: 100%;
210
+ height: var(--vide-progress-hit-area);
211
+ min-height: var(--vide-progress-hit-area);
212
+ margin: 0;
213
+ padding: 0;
214
+ display: flex;
215
+ align-items: center;
216
+ cursor: pointer;
217
+ position: relative;
218
+ }
219
+
220
+ .vide-progress__buffered,
221
+ .vide-progress__bar {
222
+ position: absolute;
223
+ left: 0;
224
+ right: 0;
225
+ height: var(--vide-progress-height);
226
+ border-radius: 2px;
227
+ margin: 0;
228
+ padding: 0;
229
+ pointer-events: none;
230
+ transition: height 0.15s var(--vide-ease);
231
+ }
232
+
233
+ .vide-progress:hover .vide-progress__buffered,
234
+ .vide-progress:hover .vide-progress__bar,
235
+ .vide-progress--dragging .vide-progress__buffered,
236
+ .vide-progress--dragging .vide-progress__bar {
237
+ height: var(--vide-progress-height-hover);
238
+ }
239
+
240
+ .vide-progress__buffered {
241
+ background: rgba(255, 255, 255, 0.18);
242
+ transform: scaleX(var(--vide-progress-buffered, 0));
243
+ transform-origin: left;
244
+ }
245
+
246
+ .vide-progress__bar {
247
+ background: var(--vide-accent);
248
+ transform: scaleX(var(--vide-progress, 0));
249
+ transform-origin: left;
250
+ }
251
+
252
+ .vide-progress__handle {
253
+ position: absolute;
254
+ width: var(--vide-handle-size);
255
+ height: var(--vide-handle-size);
256
+ min-width: var(--vide-handle-size);
257
+ min-height: var(--vide-handle-size);
258
+ margin: 0;
259
+ padding: 0;
260
+ border: none;
261
+ border-radius: var(--vide-radius-round);
262
+ background: var(--vide-accent);
263
+ left: calc(var(--vide-progress, 0) * 100%);
264
+ transform: translateX(-50%) scale(0);
265
+ opacity: 0;
266
+ transition: opacity var(--vide-duration-fast), transform
267
+ var(--vide-duration-fast) var(--vide-ease);
268
+ pointer-events: none;
269
+ }
270
+
271
+ .vide-progress:hover .vide-progress__handle,
272
+ .vide-progress--dragging .vide-progress__handle {
273
+ opacity: 1;
274
+ transform: translateX(-50%) scale(1);
275
+ }
276
+
277
+ .vide-progress--disabled {
278
+ pointer-events: none;
279
+ opacity: 0.35;
280
+ }
281
+
282
+ /* ═══════════════════════════════════════════
283
+ TIME
284
+ ═══════════════════════════════════════════ */
285
+
286
+ .vide-time {
287
+ display: inline-flex;
288
+ align-items: center;
289
+ margin: 0;
290
+ padding: 0 2px;
291
+ font-family: var(--vide-font-mono);
292
+ font-variant-numeric: tabular-nums;
293
+ font-size: 12px;
294
+ line-height: 1;
295
+ white-space: nowrap;
296
+ flex-shrink: 0;
297
+ color: var(--vide-text-mid);
298
+ }
299
+
300
+ .vide-time__separator {
301
+ display: inline;
302
+ margin: 0 2px;
303
+ opacity: 0.35;
304
+ }
305
+
306
+ /* ═══════════════════════════════════════════
307
+ VOLUME
308
+ ═══════════════════════════════════════════ */
309
+
310
+ .vide-volume {
311
+ display: flex;
312
+ align-items: center;
313
+ gap: 0;
314
+ margin: 0;
315
+ padding: 0;
316
+ flex-shrink: 0;
317
+ }
318
+
319
+ .vide-volume__button {
320
+ appearance: none;
321
+ border: none;
322
+ background: none;
323
+ color: var(--vide-text);
324
+ cursor: pointer;
325
+ width: var(--vide-btn-size);
326
+ height: var(--vide-btn-size);
327
+ min-width: var(--vide-btn-size);
328
+ min-height: var(--vide-btn-size);
329
+ padding: var(--vide-btn-padding);
330
+ margin: 0;
331
+ display: flex;
332
+ align-items: center;
333
+ justify-content: center;
334
+ border-radius: var(--vide-radius-round);
335
+ transition: background var(--vide-duration-fast);
336
+ }
337
+
338
+ .vide-volume__button:hover {
339
+ background: var(--vide-hover);
340
+ }
341
+
342
+ .vide-volume__slider {
343
+ width: 0;
344
+ height: 20px;
345
+ margin: 0;
346
+ padding: 0;
347
+ display: flex;
348
+ align-items: center;
349
+ cursor: pointer;
350
+ position: relative;
351
+ overflow: hidden;
352
+ transition: width var(--vide-duration) var(--vide-ease);
353
+ }
354
+
355
+ .vide-volume:hover .vide-volume__slider {
356
+ width: 60px;
357
+ }
358
+
359
+ .vide-volume__track {
360
+ position: absolute;
361
+ left: 0;
362
+ right: 0;
363
+ height: 3px;
364
+ margin: 0;
365
+ padding: 0;
366
+ border-radius: 2px;
367
+ background: rgba(255, 255, 255, 0.18);
368
+ }
369
+
370
+ .vide-volume__filled {
371
+ position: absolute;
372
+ left: 0;
373
+ right: 0;
374
+ height: 3px;
375
+ margin: 0;
376
+ padding: 0;
377
+ border-radius: 2px;
378
+ background: var(--vide-text);
379
+ transform: scaleX(var(--vide-volume, 1));
380
+ transform-origin: left;
381
+ }
382
+
383
+ /* ═══════════════════════════════════════════
384
+ FULLSCREEN
385
+ ═══════════════════════════════════════════ */
386
+
387
+ .vide-fullscreen {
388
+ appearance: none;
389
+ border: none;
390
+ background: none;
391
+ color: var(--vide-text);
392
+ cursor: pointer;
393
+ width: var(--vide-btn-size);
394
+ height: var(--vide-btn-size);
395
+ min-width: var(--vide-btn-size);
396
+ min-height: var(--vide-btn-size);
397
+ padding: var(--vide-btn-padding);
398
+ margin: 0;
399
+ flex-shrink: 0;
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: center;
403
+ border-radius: var(--vide-radius-round);
404
+ margin-left: auto;
405
+ transition: background var(--vide-duration-fast);
406
+ }
407
+
408
+ .vide-fullscreen:hover {
409
+ background: var(--vide-hover);
410
+ }
411
+
412
+ /* ═══════════════════════════════════════════
413
+ BIG PLAY
414
+ ═══════════════════════════════════════════ */
415
+
416
+ .vide-bigplay {
417
+ display: none;
418
+ position: absolute;
419
+ top: 50%;
420
+ left: 50%;
421
+ transform: translate(-50%, -50%);
422
+ appearance: none;
423
+ border: none;
424
+ width: 64px;
425
+ height: 64px;
426
+ min-width: 64px;
427
+ min-height: 64px;
428
+ margin: 0;
429
+ padding: 0;
430
+ border-radius: var(--vide-radius-round);
431
+ background: rgba(0, 0, 0, 0.5);
432
+ color: var(--vide-text);
433
+ cursor: pointer;
434
+ align-items: center;
435
+ justify-content: center;
436
+ z-index: 2;
437
+ transition: background var(--vide-duration-fast), transform
438
+ var(--vide-duration) var(--vide-ease);
439
+ }
440
+
441
+ .vide-bigplay:hover {
442
+ background: rgba(0, 0, 0, 0.65);
443
+ transform: translate(-50%, -50%) scale(1.06);
444
+ }
445
+
446
+ .vide-bigplay svg {
447
+ width: 28px;
448
+ height: 28px;
449
+ margin: 0 0 0 2px;
450
+ padding: 0;
451
+ }
452
+
453
+ .vide-ui--idle .vide-bigplay,
454
+ .vide-ui--ready .vide-bigplay,
455
+ .vide-ui--paused .vide-bigplay,
456
+ .vide-ui--ended .vide-bigplay {
457
+ display: flex;
458
+ }
459
+
460
+ /* ═══════════════════════════════════════════
461
+ CLICK-TO-PLAY
462
+ ═══════════════════════════════════════════ */
463
+
464
+ .vide-clickplay {
465
+ position: absolute;
466
+ top: 0;
467
+ left: 0;
468
+ right: 0;
469
+ bottom: 0;
470
+ margin: 0;
471
+ padding: 0;
472
+ z-index: 1;
473
+ cursor: pointer;
474
+ }
475
+
476
+ .vide-ui--ad-loading .vide-clickplay,
477
+ .vide-ui--ad-playing .vide-clickplay,
478
+ .vide-ui--ad-paused .vide-clickplay {
479
+ display: none;
480
+ }
481
+
482
+ /* ═══════════════════════════════════════════
483
+ LOADER
484
+ ═══════════════════════════════════════════ */
485
+
486
+ .vide-loader {
487
+ display: none;
488
+ position: absolute;
489
+ top: 50%;
490
+ left: 50%;
491
+ transform: translate(-50%, -50%);
492
+ margin: 0;
493
+ padding: 0;
494
+ z-index: 1;
495
+ }
496
+
497
+ .vide-loader__spinner {
498
+ width: 36px;
499
+ height: 36px;
500
+ margin: 0;
501
+ padding: 0;
502
+ border: 2px solid transparent;
503
+ border-top-color: var(--vide-text);
504
+ border-radius: var(--vide-radius-round);
505
+ animation: vide-spin 0.7s linear infinite;
506
+ }
507
+
508
+ @keyframes vide-spin {
509
+ to {
510
+ transform: rotate(360deg);
511
+ }
512
+ }
513
+
514
+ .vide-ui--loading .vide-loader,
515
+ .vide-ui--buffering .vide-loader,
516
+ .vide-ui--ad-loading .vide-loader {
517
+ display: flex;
518
+ }
519
+
520
+ /* ═══════════════════════════════════════════
521
+ ERROR
522
+ ═══════════════════════════════════════════ */
523
+
524
+ .vide-error {
525
+ display: none;
526
+ position: absolute;
527
+ top: 50%;
528
+ left: 50%;
529
+ transform: translate(-50%, -50%);
530
+ margin: 0;
531
+ padding: 16px 24px;
532
+ background: rgba(0, 0, 0, 0.85);
533
+ border-radius: var(--vide-radius);
534
+ text-align: center;
535
+ max-width: 80%;
536
+ font-size: 13px;
537
+ line-height: 1.5;
538
+ z-index: 3;
539
+ }
540
+
541
+ .vide-ui--error .vide-error {
542
+ display: flex;
543
+ }
544
+
545
+ /* ═══════════════════════════════════════════
546
+ POSTER
547
+ ═══════════════════════════════════════════ */
548
+
549
+ .vide-poster {
550
+ display: none;
551
+ position: absolute;
552
+ top: 0;
553
+ left: 0;
554
+ right: 0;
555
+ bottom: 0;
556
+ margin: 0;
557
+ padding: 0;
558
+ }
559
+
560
+ .vide-poster__image {
561
+ display: block;
562
+ width: 100%;
563
+ height: 100%;
564
+ margin: 0;
565
+ padding: 0;
566
+ object-fit: cover;
567
+ }
568
+
569
+ .vide-ui--idle .vide-poster,
570
+ .vide-ui--ready .vide-poster {
571
+ display: block;
572
+ }
573
+
574
+ /* ═══════════════════════════════════════════════════════════
575
+
576
+ A D S T A T E
577
+
578
+ Design: opaque chips, yellow left-stripe on label,
579
+ semi-transparent dark skip with clear border.
580
+ All sizes explicit.
581
+
582
+ ═══════════════════════════════════════════════════════════ */
583
+
584
+ .vide-ad {
585
+ display: none;
586
+ }
587
+
588
+ .vide-ui--ad-loading .vide-ad,
589
+ .vide-ui--ad-playing .vide-ad,
590
+ .vide-ui--ad-paused .vide-ad {
591
+ display: block;
592
+ }
593
+
594
+ /* ── Ad overlay (click-through) ── */
595
+
596
+ .vide-ad-overlay {
597
+ position: absolute;
598
+ top: 0;
599
+ left: 0;
600
+ right: 0;
601
+ bottom: var(--vide-controls-height);
602
+ margin: 0;
603
+ padding: 0;
604
+ cursor: pointer;
605
+ z-index: 3;
606
+ }
607
+
608
+ /* ─────────────────────────────────────────
609
+ Ad Label
610
+ Solid black chip + yellow left stripe.
611
+ ───────────────────────────────────────── */
612
+
613
+ .vide-ad-label {
614
+ position: absolute;
615
+ top: var(--vide-ad-overlay-gap);
616
+ left: var(--vide-ad-overlay-gap);
617
+ z-index: 4;
618
+
619
+ display: inline-flex;
620
+ align-items: stretch;
621
+ overflow: hidden;
622
+ margin: 0;
623
+
624
+ background: var(--vide-chip);
625
+ border-radius: var(--vide-radius-sm);
626
+ padding: var(--vide-ad-label-pad-y) var(--vide-ad-label-pad-x)
627
+ var(--vide-ad-label-pad-y) 0;
628
+
629
+ font-family: var(--vide-font);
630
+ font-size: var(--vide-font-size-sm);
631
+ font-weight: 600;
632
+ letter-spacing: 0.03em;
633
+ line-height: var(--vide-line-height);
634
+ color: var(--vide-text);
635
+ gap: 7px;
636
+ }
637
+
638
+ /* Yellow left stripe */
639
+ .vide-ad-label::before {
640
+ content: "";
641
+ display: block;
642
+ width: var(--vide-ad-label-stripe);
643
+ min-height: 100%;
644
+ margin: 0;
645
+ padding: 0;
646
+ background: var(--vide-accent-ad);
647
+ flex-shrink: 0;
648
+ }
649
+
650
+ /* ─────────────────────────────────────────
651
+ Ad Countdown
652
+ Stacked below label. Same chip language.
653
+ ───────────────────────────────────────── */
654
+
655
+ .vide-ad-countdown {
656
+ position: absolute;
657
+ top: calc(var(--vide-ad-overlay-gap) + 30px);
658
+ left: var(--vide-ad-overlay-gap);
659
+ z-index: 4;
660
+
661
+ display: inline-flex;
662
+ align-items: center;
663
+ gap: 4px;
664
+ margin: 0;
665
+
666
+ background: var(--vide-chip-light);
667
+ border-radius: var(--vide-radius-sm);
668
+ padding: 5px 9px;
669
+
670
+ font-family: var(--vide-font-mono);
671
+ font-size: var(--vide-font-size-sm);
672
+ font-weight: 400;
673
+ line-height: var(--vide-line-height);
674
+ color: var(--vide-text-dim);
675
+ font-variant-numeric: tabular-nums;
676
+ white-space: nowrap;
677
+ }
678
+
679
+ .vide-ad-countdown strong {
680
+ color: var(--vide-text);
681
+ font-weight: 600;
682
+ }
683
+
684
+ /* ─────────────────────────────────────────
685
+ Skip Button
686
+ Dark semi-transparent + visible border.
687
+ NOT white. Clearly tappable via border
688
+ contrast and text weight.
689
+ ───────────────────────────────────────── */
690
+
691
+ .vide-skip {
692
+ position: absolute;
693
+ bottom: calc(var(--vide-controls-height) + var(--vide-ad-overlay-gap));
694
+ right: var(--vide-ad-overlay-gap);
695
+ z-index: 4;
696
+
697
+ appearance: none;
698
+ margin: 0;
699
+ border: 1px solid var(--vide-skip-border);
700
+ background: var(--vide-skip-bg);
701
+ color: var(--vide-skip-color);
702
+ border-radius: var(--vide-radius-sm);
703
+
704
+ padding: var(--vide-skip-padding-y) var(--vide-skip-padding-x);
705
+ min-height: 40px;
706
+ min-width: 0;
707
+
708
+ font-family: var(--vide-font);
709
+ font-size: var(--vide-skip-font-size);
710
+ font-weight: 500;
711
+ line-height: var(--vide-line-height);
712
+ letter-spacing: 0;
713
+ white-space: nowrap;
714
+
715
+ cursor: pointer;
716
+ display: inline-flex;
717
+ align-items: center;
718
+ gap: var(--vide-skip-gap);
719
+
720
+ transition: background var(--vide-duration-fast), border-color
721
+ var(--vide-duration-fast);
722
+ }
723
+
724
+ .vide-skip svg {
725
+ width: var(--vide-skip-icon-size);
726
+ height: var(--vide-skip-icon-size);
727
+ min-width: var(--vide-skip-icon-size);
728
+ min-height: var(--vide-skip-icon-size);
729
+ margin: 0;
730
+ padding: 0;
731
+ fill: var(--vide-skip-color);
732
+ flex-shrink: 0;
733
+ }
734
+
735
+ .vide-skip:hover {
736
+ background: rgba(60, 60, 68, 0.95);
737
+ border-color: rgba(255, 255, 255, 0.48);
738
+ }
739
+
740
+ .vide-skip:active {
741
+ background: rgba(18, 18, 22, 0.85);
742
+ }
743
+
744
+ /* Disabled (countdown still running) */
745
+ .vide-skip--disabled {
746
+ cursor: default;
747
+ pointer-events: none;
748
+ border-color: rgba(255, 255, 255, 0.1);
749
+ background: rgba(0, 0, 0, 0.5);
750
+ color: var(--vide-text-dim);
751
+ }
752
+
753
+ .vide-skip--disabled svg {
754
+ fill: var(--vide-text-dim);
755
+ }
756
+
757
+ /* ─────────────────────────────────────────
758
+ Ad CTA (companion card)
759
+ ───────────────────────────────────────── */
760
+
761
+ .vide-ad-cta {
762
+ position: absolute;
763
+ bottom: calc(var(--vide-controls-height) + var(--vide-ad-overlay-gap));
764
+ left: var(--vide-ad-overlay-gap);
765
+ z-index: 4;
766
+
767
+ display: inline-flex;
768
+ align-items: center;
769
+ gap: 8px;
770
+ margin: 0;
771
+
772
+ background: var(--vide-chip);
773
+ border: 1px solid rgba(255, 255, 255, 0.06);
774
+ border-radius: var(--vide-radius);
775
+ padding: 8px 12px;
776
+ min-height: 44px;
777
+
778
+ cursor: pointer;
779
+ text-decoration: none;
780
+ color: var(--vide-text);
781
+
782
+ transition: border-color var(--vide-duration-fast);
783
+ }
784
+
785
+ .vide-ad-cta:hover {
786
+ border-color: rgba(255, 255, 255, 0.14);
787
+ }
788
+
789
+ .vide-ad-cta__icon {
790
+ width: 30px;
791
+ height: 30px;
792
+ min-width: 30px;
793
+ min-height: 30px;
794
+ margin: 0;
795
+ padding: 0;
796
+ border-radius: var(--vide-radius-sm);
797
+ background: var(--vide-accent-ad);
798
+ display: flex;
799
+ align-items: center;
800
+ justify-content: center;
801
+ flex-shrink: 0;
802
+ }
803
+
804
+ .vide-ad-cta__icon svg {
805
+ width: 14px;
806
+ height: 14px;
807
+ margin: 0;
808
+ padding: 0;
809
+ fill: #000;
810
+ }
811
+
812
+ .vide-ad-cta__body {
813
+ display: flex;
814
+ flex-direction: column;
815
+ gap: 2px;
816
+ margin: 0;
817
+ padding: 0;
818
+ }
819
+
820
+ .vide-ad-cta__title {
821
+ display: block;
822
+ margin: 0;
823
+ padding: 0;
824
+ font-size: 12px;
825
+ font-weight: 500;
826
+ line-height: 1.3;
827
+ color: var(--vide-text);
828
+ }
829
+
830
+ .vide-ad-cta__url {
831
+ display: block;
832
+ margin: 0;
833
+ padding: 0;
834
+ font-size: var(--vide-font-size-xs);
835
+ font-weight: 400;
836
+ line-height: 1.2;
837
+ color: var(--vide-text-dim);
838
+ }
839
+
840
+ /* ── Ad progress accent ── */
841
+
842
+ .vide-ui--ad-loading .vide-progress__bar,
843
+ .vide-ui--ad-playing .vide-progress__bar,
844
+ .vide-ui--ad-paused .vide-progress__bar {
845
+ background: var(--vide-accent-ad);
846
+ }
847
+
848
+ .vide-ui--ad-loading .vide-progress__handle,
849
+ .vide-ui--ad-playing .vide-progress__handle,
850
+ .vide-ui--ad-paused .vide-progress__handle {
851
+ display: none;
852
+ }
853
+
854
+ .vide-ui--ad-loading .vide-progress,
855
+ .vide-ui--ad-playing .vide-progress,
856
+ .vide-ui--ad-paused .vide-progress {
857
+ pointer-events: none;
858
+ }
859
+
860
+ .vide-ui--ad-loading .vide-progress__buffered,
861
+ .vide-ui--ad-playing .vide-progress__buffered,
862
+ .vide-ui--ad-paused .vide-progress__buffered {
863
+ opacity: 0.25;
864
+ }