@videts/vide 0.7.4 → 0.9.2

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