@m4l/gclick 0.16.0 → 0.17.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.
Files changed (58) hide show
  1. package/components/CameraStream/defaults/DefaultPhaseStreaming.d.ts +2 -2
  2. package/components/CameraStream/defaults/DefaultPhaseStreaming.d.ts.map +1 -1
  3. package/components/CameraStream/defaults/DefaultPhaseStreaming.js +23 -21
  4. package/components/CameraStream/types.d.ts +9 -0
  5. package/components/CameraStream/types.d.ts.map +1 -1
  6. package/components/VideoPlayer/VideoPlayer.d.ts +4 -1
  7. package/components/VideoPlayer/VideoPlayer.d.ts.map +1 -1
  8. package/components/VideoPlayer/VideoPlayer.js +28 -25
  9. package/components/VideoPlayer/VideoPlayer.styles.d.ts +7 -1
  10. package/components/VideoPlayer/VideoPlayer.styles.d.ts.map +1 -1
  11. package/components/VideoPlayer/VideoPlayer.styles.js +72 -10
  12. package/components/VideoPlayer/VideojsDefaultSkin.styles.d.ts +8 -0
  13. package/components/VideoPlayer/VideojsDefaultSkin.styles.d.ts.map +1 -0
  14. package/components/VideoPlayer/{VideojsSkin.styles.js → VideojsDefaultSkin.styles.js} +478 -248
  15. package/components/VideoPlayer/VideojsMinimalSkin.styles.d.ts +8 -0
  16. package/components/VideoPlayer/VideojsMinimalSkin.styles.d.ts.map +1 -0
  17. package/components/VideoPlayer/VideojsMinimalSkin.styles.js +1561 -0
  18. package/components/VideoPlayer/constants.d.ts +33 -0
  19. package/components/VideoPlayer/constants.d.ts.map +1 -1
  20. package/components/VideoPlayer/constants.js +20 -4
  21. package/components/VideoPlayer/hlsConfig.d.ts +21 -11
  22. package/components/VideoPlayer/hlsConfig.d.ts.map +1 -1
  23. package/components/VideoPlayer/hlsConfig.js +28 -21
  24. package/components/VideoPlayer/index.d.ts +2 -2
  25. package/components/VideoPlayer/index.d.ts.map +1 -1
  26. package/components/VideoPlayer/player.factory.d.ts +3 -3
  27. package/components/VideoPlayer/player.factory.d.ts.map +1 -1
  28. package/components/VideoPlayer/slots/VideoPlayerSlots.d.ts +1 -1
  29. package/components/VideoPlayer/subcomponents/GclickVideoSkin.d.ts +5 -2
  30. package/components/VideoPlayer/subcomponents/GclickVideoSkin.d.ts.map +1 -1
  31. package/components/VideoPlayer/subcomponents/GclickVideoSkin.js +34 -178
  32. package/components/VideoPlayer/subcomponents/VideoPlayerStage.d.ts +4 -3
  33. package/components/VideoPlayer/subcomponents/VideoPlayerStage.d.ts.map +1 -1
  34. package/components/VideoPlayer/subcomponents/VideoPlayerStage.js +43 -42
  35. package/components/VideoPlayer/subcomponents/skin/VideoControlBar.d.ts +6 -0
  36. package/components/VideoPlayer/subcomponents/skin/VideoControlBar.d.ts.map +1 -0
  37. package/components/VideoPlayer/subcomponents/skin/VideoControlBar.js +87 -0
  38. package/components/VideoPlayer/subcomponents/skin/VideoErrorDialog.d.ts +9 -0
  39. package/components/VideoPlayer/subcomponents/skin/VideoErrorDialog.d.ts.map +1 -0
  40. package/components/VideoPlayer/subcomponents/skin/VideoErrorDialog.js +17 -0
  41. package/components/VideoPlayer/subcomponents/skin/VideoInputBindings.d.ts +11 -0
  42. package/components/VideoPlayer/subcomponents/skin/VideoInputBindings.d.ts.map +1 -0
  43. package/components/VideoPlayer/subcomponents/skin/VideoInputBindings.js +19 -0
  44. package/components/VideoPlayer/subcomponents/skin/VideoSettingsMenu.d.ts +9 -0
  45. package/components/VideoPlayer/subcomponents/skin/VideoSettingsMenu.d.ts.map +1 -0
  46. package/components/VideoPlayer/subcomponents/skin/VideoSettingsMenu.js +48 -0
  47. package/components/VideoPlayer/subcomponents/skin/primitives.d.ts +81 -0
  48. package/components/VideoPlayer/subcomponents/skin/primitives.d.ts.map +1 -0
  49. package/components/VideoPlayer/subcomponents/skin/primitives.js +142 -0
  50. package/components/VideoPlayer/subcomponents/skin/skinVariant.d.ts +19 -0
  51. package/components/VideoPlayer/subcomponents/skin/skinVariant.d.ts.map +1 -0
  52. package/components/VideoPlayer/subcomponents/skin/skinVariant.js +23 -0
  53. package/components/VideoPlayer/types.d.ts +25 -6
  54. package/components/VideoPlayer/types.d.ts.map +1 -1
  55. package/index.js +123 -122
  56. package/package.json +4 -4
  57. package/components/VideoPlayer/VideojsSkin.styles.d.ts +0 -9
  58. package/components/VideoPlayer/VideojsSkin.styles.d.ts.map +0 -1
@@ -0,0 +1,1561 @@
1
+ const t = (i) => ({
2
+ /*
3
+ * ==========================================================================
4
+ * Reset
5
+ * ==========================================================================
6
+ */
7
+ ".media-minimal-skin *, .media-minimal-skin *::before, .media-minimal-skin *::after": {
8
+ boxSizing: "border-box"
9
+ },
10
+ ".media-minimal-skin img, .media-minimal-skin video, .media-minimal-skin svg": {
11
+ display: "block",
12
+ maxWidth: "100%"
13
+ },
14
+ ".media-minimal-skin button": {
15
+ font: "inherit"
16
+ },
17
+ ".media-minimal-skin [hidden][hidden]": {
18
+ /* Keep authored templates hidden even when component classes set display. */
19
+ display: "none"
20
+ },
21
+ "@media (prefers-reduced-motion: no-preference)": {
22
+ ".media-minimal-skin": {
23
+ interpolateSize: "allow-keywords"
24
+ }
25
+ },
26
+ /*
27
+ * ==========================================================================
28
+ * Root Container
29
+ * ==========================================================================
30
+ */
31
+ ".media-minimal-skin": {
32
+ "--media-current-shadow-color": "oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.15))",
33
+ "--media-current-shadow-color-subtle": "oklch(from var(--media-current-shadow-color) l c h / calc(alpha * 0.4))",
34
+ "--media-icon-size": "18px",
35
+ "--media-color-scrollbar-thumb": "oklch(from currentColor l c h / 0.3)",
36
+ position: "relative",
37
+ display: "block",
38
+ width: "100%",
39
+ height: "100%",
40
+ container: "media-root / inline-size",
41
+ // Themed deviation (vendor value: `Inter Variable, Inter, ui-sans-serif, system-ui, sans-serif`) —
42
+ // the chrome follows the platform font instead of the vendor stack.
43
+ fontFamily: i.typography.fontFamily,
44
+ fontSize: "0.8125rem",
45
+ /* 13px at 100% font size */
46
+ WebkitFontSmoothing: "auto",
47
+ MozOsxFontSmoothing: "auto",
48
+ lineHeight: "1.5",
49
+ letterSpacing: "normal",
50
+ outline: "2px solid transparent",
51
+ outlineOffset: "-4px",
52
+ scrollbarColor: "var(--media-color-scrollbar-thumb) transparent",
53
+ scrollbarWidth: "thin",
54
+ borderRadius: "var(--media-border-radius, 0.75rem)",
55
+ isolation: "isolate",
56
+ transitionTimingFunction: "ease-out",
57
+ transitionDuration: "100ms",
58
+ transitionProperty: "outline-offset, outline-color",
59
+ "&:focus-visible": {
60
+ outlineColor: "currentColor",
61
+ outlineOffset: "2px"
62
+ },
63
+ "&::-webkit-scrollbar-thumb": {
64
+ background: "var(--media-color-scrollbar-thumb)",
65
+ borderRadius: "9999px"
66
+ },
67
+ "@media (prefers-reduced-transparency: reduce) or (prefers-contrast: more)": {
68
+ "--media-color-scrollbar-thumb": "oklch(from currentColor l c h / 0.8)",
69
+ scrollbarWidth: "auto"
70
+ }
71
+ },
72
+ /*
73
+ * ==========================================================================
74
+ * Media Element
75
+ * ==========================================================================
76
+ */
77
+ ".media-minimal-skin ::slotted(video), .media-minimal-skin video": {
78
+ display: "block",
79
+ width: "100%",
80
+ height: "100%",
81
+ // Double cast: csstype narrows this property to keywords and rejects the
82
+ // vendor's `var()` expression. Serializes identically.
83
+ objectFit: "var(--media-object-fit, contain)",
84
+ objectPosition: "var(--media-object-position, center)"
85
+ },
86
+ ".media-minimal-skin ::slotted(video)": {
87
+ borderRadius: "var(--media-video-border-radius)"
88
+ },
89
+ ".media-minimal-skin video": {
90
+ borderRadius: "inherit"
91
+ },
92
+ ".media-minimal-skin:fullscreen ::slotted(video), .media-minimal-skin:fullscreen video": {
93
+ objectFit: "contain"
94
+ },
95
+ /*
96
+ * ==========================================================================
97
+ * Overlay / Scrim
98
+ * ==========================================================================
99
+ */
100
+ ".media-minimal-skin .media-overlay": {
101
+ position: "absolute",
102
+ inset: "0",
103
+ pointerEvents: "none",
104
+ backgroundImage: "linear-gradient(to top, oklch(0 0 0 / 0.7), oklch(0 0 0 / 0.5) 7.5rem, oklch(0 0 0 / 0))",
105
+ borderRadius: "inherit",
106
+ opacity: "0",
107
+ backdropFilter: "blur(0) saturate(1)",
108
+ transitionTimingFunction: "ease-out",
109
+ transitionDuration: "var(--media-controls-transition-duration)",
110
+ transitionProperty: "opacity, backdrop-filter"
111
+ },
112
+ ".media-minimal-skin .media-error ~ .media-overlay": {
113
+ transitionDelay: "var(--media-error-dialog-transition-delay)",
114
+ transitionDuration: "var(--media-error-dialog-transition-duration)"
115
+ },
116
+ ".media-minimal-skin .media-controls[data-visible] ~ .media-overlay, .media-minimal-skin .media-error[data-open] ~ .media-overlay": {
117
+ opacity: "1"
118
+ },
119
+ ".media-minimal-skin .media-buffering-indicator[data-visible] ~ .media-overlay": {
120
+ background: "oklch(0 0 0 / 0.35)",
121
+ opacity: "1",
122
+ backdropFilter: "blur(8px)"
123
+ },
124
+ ".media-minimal-skin .media-error[data-open] ~ .media-overlay": {
125
+ backdropFilter: "blur(16px) saturate(1.2)"
126
+ },
127
+ /*
128
+ * ==========================================================================
129
+ * Buffering Indicator
130
+ * ==========================================================================
131
+ */
132
+ ".media-minimal-skin .media-buffering-indicator": {
133
+ position: "absolute",
134
+ inset: "0",
135
+ zIndex: "10",
136
+ display: "none",
137
+ placeContent: "center",
138
+ color: "oklch(1 0 0)",
139
+ pointerEvents: "none",
140
+ "&:not([data-visible])": {
141
+ "--media-spinner-animation": "none"
142
+ },
143
+ "&[data-visible]": {
144
+ display: "grid"
145
+ }
146
+ },
147
+ /*
148
+ * ==========================================================================
149
+ * Error Dialog
150
+ * ==========================================================================
151
+ */
152
+ ".media-minimal-skin .media-error:not([data-open])": {
153
+ display: "none"
154
+ },
155
+ ".media-minimal-skin .media-error__title": {
156
+ fontWeight: "600",
157
+ lineHeight: "1.25"
158
+ },
159
+ ".media-minimal-skin .media-error__description": {
160
+ overflowWrap: "anywhere",
161
+ opacity: "0.7"
162
+ },
163
+ ".media-minimal-skin .media-error__actions": {
164
+ display: "flex",
165
+ gap: "0.5rem",
166
+ "& > *": {
167
+ flex: "1"
168
+ }
169
+ },
170
+ ".media-minimal-skin .media-error[data-open] ~ .media-controls *": {
171
+ visibility: "hidden"
172
+ },
173
+ /*
174
+ * ==========================================================================
175
+ * Controls
176
+ * ==========================================================================
177
+ */
178
+ ".media-minimal-skin .media-controls": {
179
+ display: "flex",
180
+ alignItems: "center",
181
+ container: "media-controls / inline-size",
182
+ textShadow: "0 1px 0 var(--media-current-shadow-color)",
183
+ backgroundColor: "var(--media-controls-background-color)",
184
+ backdropFilter: "var(--media-controls-backdrop-filter)"
185
+ },
186
+ /*
187
+ * ==========================================================================
188
+ * Time Controls & Display
189
+ * ==========================================================================
190
+ */
191
+ ".media-minimal-skin .media-time-controls": {
192
+ display: "flex",
193
+ flex: "1",
194
+ flexDirection: "row-reverse",
195
+ gap: "0.75rem",
196
+ alignItems: "center",
197
+ container: "media-time-controls / inline-size"
198
+ },
199
+ ".media-minimal-skin .media-time-group": {
200
+ display: "flex",
201
+ gap: "0.25rem",
202
+ alignItems: "center"
203
+ },
204
+ ".media-minimal-skin .media-time": {
205
+ fontVariantNumeric: "tabular-nums"
206
+ },
207
+ '.media-minimal-skin .media-time[role="button"]': {
208
+ cursor: "pointer",
209
+ outline: "2px solid transparent",
210
+ outlineOffset: "-2px",
211
+ borderRadius: "0.25rem",
212
+ transitionTimingFunction: "ease-out",
213
+ transitionDuration: "100ms",
214
+ transitionProperty: "outline-color, outline-offset",
215
+ "@supports (corner-shape: squircle)": {
216
+ borderRadius: "1rem",
217
+ cornerShape: "squircle"
218
+ },
219
+ "&:focus-visible": {
220
+ outlineColor: "currentColor",
221
+ outlineOffset: "2px"
222
+ }
223
+ },
224
+ ".media-minimal-skin .media-time--current, .media-minimal-skin .media-time-separator": {
225
+ display: "none"
226
+ },
227
+ "@container media-root (width > 42rem)": {
228
+ ".media-minimal-skin .media-time-controls": {
229
+ flexDirection: "row"
230
+ },
231
+ ".media-minimal-skin .media-time--duration, .media-minimal-skin .media-time-separator": {
232
+ color: "oklch(from currentColor l c h / 0.6)"
233
+ },
234
+ ".media-minimal-skin .media-time--current, .media-minimal-skin .media-time-separator": {
235
+ display: "inline"
236
+ }
237
+ },
238
+ /*
239
+ * ==========================================================================
240
+ * Buttons
241
+ * ==========================================================================
242
+ */
243
+ /* Base button */
244
+ ".media-minimal-skin .media-button": {
245
+ display: "flex",
246
+ flexShrink: "0",
247
+ alignItems: "center",
248
+ justifyContent: "center",
249
+ minHeight: "0",
250
+ padding: "0.5rem 1rem",
251
+ textAlign: "center",
252
+ touchAction: "manipulation",
253
+ cursor: "pointer",
254
+ userSelect: "none",
255
+ outline: "2px solid transparent",
256
+ outlineOffset: "-2px",
257
+ border: "none",
258
+ borderRadius: "0.5rem",
259
+ transitionTimingFunction: "ease-out",
260
+ transitionDuration: "150ms",
261
+ transitionProperty: "background-color, outline-offset, scale",
262
+ /* Fix weird jumping when clicking on the buttons in Safari. */
263
+ willChange: "scale",
264
+ "&:focus-visible": {
265
+ outlineColor: "currentColor",
266
+ outlineOffset: "2px"
267
+ },
268
+ "&:active": {
269
+ scale: "0.98"
270
+ },
271
+ "&[disabled]": {
272
+ cursor: "not-allowed",
273
+ opacity: "0.5",
274
+ filter: "grayscale(1)"
275
+ },
276
+ '&[data-availability="unavailable"], &[data-availability="unsupported"]': {
277
+ display: "none"
278
+ }
279
+ },
280
+ "@supports (corner-shape: squircle)": {
281
+ ".media-minimal-skin .media-button": {
282
+ borderRadius: "1rem",
283
+ cornerShape: "squircle"
284
+ }
285
+ },
286
+ /* Primary button variant */
287
+ ".media-minimal-skin .media-button--primary": {
288
+ fontWeight: "500",
289
+ color: "oklch(0 0 0)",
290
+ textShadow: "none",
291
+ background: "oklch(1 0 0)"
292
+ },
293
+ /* Subtle button variant */
294
+ ".media-minimal-skin .media-button--subtle": {
295
+ color: "inherit",
296
+ textShadow: "inherit",
297
+ background: "transparent",
298
+ '&:hover, &:focus-visible, &[aria-expanded="true"]': {
299
+ background: "oklch(from currentColor l c h / 0.1)"
300
+ }
301
+ },
302
+ /* Icon button variant */
303
+ ".media-minimal-skin .media-button--icon": {
304
+ display: "grid",
305
+ width: "2.375rem",
306
+ aspectRatio: "1",
307
+ padding: "0",
308
+ "&:active": {
309
+ scale: "0.9"
310
+ },
311
+ "& .media-icon__container": {
312
+ display: "grid"
313
+ },
314
+ "& .media-icon": {
315
+ gridArea: "1 / 1",
316
+ transitionBehavior: "allow-discrete",
317
+ transitionProperty: "display, opacity",
318
+ transitionDuration: "150ms",
319
+ transitionTimingFunction: "ease-out",
320
+ filter: "drop-shadow(0 1px 0 var(--media-current-shadow-color))"
321
+ }
322
+ },
323
+ /* Seek button */
324
+ ".media-minimal-skin .media-button--seek": {
325
+ "& .media-icon__label": {
326
+ position: "absolute",
327
+ right: "-1px",
328
+ bottom: "-3px",
329
+ fontSize: "10px",
330
+ /* Hard coded due to size limitations. */
331
+ fontWeight: "500",
332
+ fontVariantNumeric: "tabular-nums",
333
+ letterSpacing: "-0.05em"
334
+ },
335
+ "&:has(.media-icon--flipped) .media-icon__label": {
336
+ right: "unset",
337
+ left: "-1px"
338
+ }
339
+ },
340
+ /* Playback rate button */
341
+ ".media-minimal-skin .media-button--playback-rate": {
342
+ padding: "0",
343
+ fontVariantNumeric: "tabular-nums",
344
+ "&::after": {
345
+ width: "4ch",
346
+ content: 'attr(data-rate) "\\00D7"'
347
+ },
348
+ "&[data-inline-rate-label]::after": {
349
+ content: "none"
350
+ }
351
+ },
352
+ /* Settings button */
353
+ ".media-minimal-skin .media-button--settings": {
354
+ display: "none",
355
+ "& .media-icon--settings": {
356
+ transition: "transform 150ms ease-in-out",
357
+ "@media (prefers-reduced-motion: reduce)": {
358
+ transitionDuration: "0ms"
359
+ }
360
+ },
361
+ '&[aria-expanded="true"] .media-icon--settings': {
362
+ transform: "rotate(90deg)"
363
+ }
364
+ },
365
+ '.media-minimal-skin .media-button-group:has([data-availability="available"]) .media-button--settings': {
366
+ display: "grid"
367
+ },
368
+ /*
369
+ * Live button — wide pill button with a status dot (gray → red at the live
370
+ * edge) rendered via ::before, and "LIVE" text rendered as the button's own
371
+ * text content.
372
+ */
373
+ ".media-minimal-skin .media-button--live": {
374
+ display: "inline-flex",
375
+ gap: "0.4rem",
376
+ alignItems: "center",
377
+ width: "auto",
378
+ aspectRatio: "auto",
379
+ padding: "0.5rem 0.75rem",
380
+ fontSize: "0.75rem",
381
+ fontWeight: "600",
382
+ lineHeight: "1",
383
+ textTransform: "uppercase",
384
+ letterSpacing: "0.05em",
385
+ "&::before": {
386
+ display: "inline-block",
387
+ flexShrink: "0",
388
+ width: "0.5rem",
389
+ height: "0.5rem",
390
+ content: '""',
391
+ backgroundColor: "oklch(from currentColor l c h / 0.4)",
392
+ borderRadius: "50%",
393
+ transition: "background-color 150ms ease-out"
394
+ },
395
+ "&[data-live-edge]::before": {
396
+ backgroundColor: "oklch(0.65 0.22 27)"
397
+ }
398
+ },
399
+ /*
400
+ * ==========================================================================
401
+ * Button Groups
402
+ * ==========================================================================
403
+ */
404
+ ".media-minimal-skin .media-button-group": {
405
+ display: "flex",
406
+ gap: "0.075rem",
407
+ alignItems: "center",
408
+ "@container media-root (width > 42rem)": {
409
+ gap: "0.125rem"
410
+ }
411
+ },
412
+ /*
413
+ * ==========================================================================
414
+ * Badge
415
+ * ==========================================================================
416
+ */
417
+ ".media-minimal-skin .media-badge": {
418
+ padding: "0.25rem 0.375rem",
419
+ fontSize: "0.6875rem",
420
+ fontWeight: "500",
421
+ lineHeight: "1",
422
+ color: "oklch(from currentColor l c h / 0.85)",
423
+ whiteSpace: "nowrap",
424
+ backgroundColor: "oklch(from currentColor l c h / 0.1)",
425
+ borderRadius: "0.25rem"
426
+ },
427
+ /*
428
+ * ==========================================================================
429
+ * Icons
430
+ * ==========================================================================
431
+ */
432
+ ".media-minimal-skin .media-icon__container": {
433
+ position: "relative"
434
+ },
435
+ ".media-minimal-skin .media-icon": {
436
+ flexShrink: "0",
437
+ width: "var(--media-icon-size)",
438
+ height: "var(--media-icon-size)"
439
+ },
440
+ ".media-minimal-skin .media-icon--flipped": {
441
+ scale: "-1 1"
442
+ },
443
+ /*
444
+ * ==========================================================================
445
+ * Poster Image
446
+ * ==========================================================================
447
+ */
448
+ ".media-minimal-skin media-poster, .media-minimal-skin > img": {
449
+ position: "absolute",
450
+ inset: "0",
451
+ width: "100%",
452
+ height: "100%",
453
+ pointerEvents: "none",
454
+ transition: "opacity 0.25s"
455
+ },
456
+ ".media-minimal-skin media-poster:not([data-visible]), .media-minimal-skin > img:not([data-visible]), .media-minimal-skin > img[data-visible]:not([data-loaded])": {
457
+ opacity: "0"
458
+ },
459
+ ".media-minimal-skin media-poster ::slotted(img), .media-minimal-skin media-poster img": {
460
+ position: "absolute",
461
+ inset: "0",
462
+ width: "100%",
463
+ height: "100%",
464
+ // Double cast: csstype narrows this property to keywords and rejects the
465
+ // vendor's `var()` expression. Serializes identically.
466
+ objectFit: "var(--media-object-fit, contain)",
467
+ objectPosition: "var(--media-object-position, center)",
468
+ borderRadius: "var(--media-video-border-radius)"
469
+ },
470
+ ".media-minimal-skin > img": {
471
+ // Double cast: csstype narrows this property to keywords and rejects the
472
+ // vendor's `var()` expression. Serializes identically.
473
+ objectFit: "var(--media-object-fit, contain)",
474
+ objectPosition: "var(--media-object-position, center)",
475
+ borderRadius: "inherit"
476
+ },
477
+ /* Blurred placeholder: HTML path targets media-poster::before, React path targets the skin container::before */
478
+ ".media-minimal-skin media-poster::before, .media-minimal-skin::before": {
479
+ position: "absolute",
480
+ inset: "0",
481
+ pointerEvents: "none",
482
+ content: '""',
483
+ backgroundImage: "var(--media-poster-placeholder, none)",
484
+ backgroundRepeat: "no-repeat",
485
+ backgroundPosition: "var(--media-object-position, center)",
486
+ backgroundSize: "var(--media-object-fit, contain)",
487
+ filter: "blur(var(--media-poster-placeholder-blur, 20px))"
488
+ },
489
+ /* React path: hidden by default, transitions in while poster loads */
490
+ ".media-minimal-skin::before": {
491
+ opacity: "0",
492
+ transition: "opacity 0.25s"
493
+ },
494
+ /* Show placeholder while the poster is visible but not yet loaded */
495
+ ".media-minimal-skin:has(img[data-visible]:not([data-loaded]))::before": {
496
+ opacity: "1"
497
+ },
498
+ ".media-minimal-skin:fullscreen media-poster ::slotted(img), .media-minimal-skin:fullscreen media-poster img, .media-minimal-skin:fullscreen > img": {
499
+ objectFit: "contain"
500
+ },
501
+ /*
502
+ * ==========================================================================
503
+ * Media thumbnail
504
+ * ==========================================================================
505
+ */
506
+ ".media-minimal-skin .media-thumbnail": {
507
+ pointerEvents: "none",
508
+ "& .media-thumbnail__image-wrapper": {
509
+ position: "relative",
510
+ backgroundColor: "oklch(0 0 0 / 0.9)",
511
+ borderRadius: "0.5rem"
512
+ },
513
+ "& .media-thumbnail__image": {
514
+ display: "block",
515
+ borderRadius: "inherit"
516
+ },
517
+ "& .media-thumbnail__time": {
518
+ display: "block",
519
+ marginTop: "0.5rem",
520
+ textAlign: "center"
521
+ },
522
+ "& .media-overlay": {
523
+ opacity: "1"
524
+ },
525
+ "& .media-thumbnail__spinner": {
526
+ position: "absolute",
527
+ top: "50%",
528
+ left: "50%",
529
+ opacity: "0",
530
+ translate: "-50% -50%"
531
+ },
532
+ "& .media-thumbnail__image, & .media-thumbnail__spinner": {
533
+ transition: "opacity 150ms ease-out"
534
+ },
535
+ "&:not(:has(.media-thumbnail__image[data-loading]))": {
536
+ "& .media-thumbnail__spinner": {
537
+ "--media-spinner-animation": "none"
538
+ }
539
+ },
540
+ "&:has(.media-thumbnail__image[data-loading])": {
541
+ "& .media-thumbnail__image": {
542
+ opacity: "0"
543
+ },
544
+ "& .media-thumbnail__spinner": {
545
+ opacity: "1"
546
+ }
547
+ }
548
+ },
549
+ /*
550
+ * ==========================================================================
551
+ * Slider
552
+ * ==========================================================================
553
+ */
554
+ ".media-minimal-skin .media-slider": {
555
+ position: "relative",
556
+ display: "flex",
557
+ flex: "1",
558
+ alignItems: "center",
559
+ justifyContent: "center",
560
+ cursor: "pointer",
561
+ outline: "none",
562
+ borderRadius: "calc(infinity * 1px)",
563
+ '&[data-orientation="horizontal"]': {
564
+ width: "100%",
565
+ minWidth: "5rem",
566
+ height: "2rem"
567
+ },
568
+ '&[data-orientation="vertical"]': {
569
+ width: "2rem",
570
+ height: "4.5rem"
571
+ }
572
+ },
573
+ /* Track */
574
+ ".media-minimal-skin .media-slider__track": {
575
+ position: "relative",
576
+ overflow: "hidden",
577
+ userSelect: "none",
578
+ backgroundColor: "oklch(from currentColor l c h / 0.2)",
579
+ borderRadius: "inherit",
580
+ isolation: "isolate",
581
+ '&[data-orientation="horizontal"]': {
582
+ width: "100%",
583
+ height: "0.1875rem"
584
+ },
585
+ '&[data-orientation="vertical"]': {
586
+ width: "0.1875rem",
587
+ height: "100%"
588
+ }
589
+ },
590
+ /* Thumb */
591
+ ".media-minimal-skin .media-slider__thumb": {
592
+ position: "absolute",
593
+ zIndex: "10",
594
+ width: "0.75rem",
595
+ height: "0.75rem",
596
+ userSelect: "none",
597
+ outline: "2px solid transparent",
598
+ outlineOffset: "-2px",
599
+ backgroundColor: "currentColor",
600
+ borderRadius: "calc(infinity * 1px)",
601
+ boxShadow: "0 0 0 1px var(--media-current-shadow-color, oklch(0 0 0 / 0.15)), 0 1px 3px 0 oklch(0 0 0 / 0.15), 0 1px 2px -1px oklch(0 0 0 / 0.15)",
602
+ opacity: "0",
603
+ transformOrigin: "center",
604
+ scale: "0.7",
605
+ translate: "-50% -50%",
606
+ transitionTimingFunction: "ease-out",
607
+ transitionDuration: "150ms",
608
+ transitionProperty: "opacity, scale, outline-offset",
609
+ '&[data-orientation="horizontal"]': {
610
+ top: "50%",
611
+ left: "var(--media-slider-fill)"
612
+ },
613
+ '&[data-orientation="vertical"]': {
614
+ top: "calc(100% - var(--media-slider-fill))",
615
+ left: "50%"
616
+ },
617
+ "&:focus-visible": {
618
+ outlineColor: "currentColor",
619
+ outlineOffset: "2px"
620
+ }
621
+ },
622
+ ".media-minimal-skin .media-slider:hover .media-slider__thumb, .media-minimal-skin .media-slider:focus-within .media-slider__thumb, .media-minimal-skin .media-slider__thumb--persistent": {
623
+ opacity: "1",
624
+ scale: "1"
625
+ },
626
+ /* Preview */
627
+ ".media-minimal-skin .media-slider__preview": {
628
+ "& .media-slider__value, &::before": {
629
+ opacity: "0",
630
+ scale: "0.5",
631
+ transitionTimingFunction: "ease-out",
632
+ transitionDuration: "200ms",
633
+ transitionProperty: "opacity, scale"
634
+ },
635
+ "& .media-slider__value": {
636
+ position: "absolute",
637
+ bottom: "1.5rem",
638
+ textShadow: "0 1px 0 var(--media-current-shadow-color)",
639
+ filter: "blur(8px)",
640
+ translate: "-50% 0.5rem",
641
+ transitionProperty: "filter, opacity, scale, translate"
642
+ },
643
+ "&::before": {
644
+ display: "block",
645
+ content: '""',
646
+ backgroundColor: "oklch(from currentColor l c h / 0.35)"
647
+ },
648
+ "&[data-pointing] .media-slider__value, &[data-pointing]:not([data-dragging])::before": {
649
+ opacity: "1",
650
+ scale: "1"
651
+ },
652
+ "&[data-pointing] .media-slider__value": {
653
+ filter: "blur(0)",
654
+ translate: "-50% 0"
655
+ },
656
+ '&[data-orientation="horizontal"]::before': {
657
+ minWidth: "1px",
658
+ height: "1.25rem"
659
+ },
660
+ '&[data-orientation="vertical"]::before': {
661
+ width: "1.25rem",
662
+ minHeight: "1px"
663
+ }
664
+ },
665
+ /* Shared track fills */
666
+ ".media-minimal-skin .media-slider__buffer, .media-minimal-skin .media-slider__fill": {
667
+ position: "absolute",
668
+ pointerEvents: "none",
669
+ borderRadius: "inherit"
670
+ },
671
+ '.media-minimal-skin .media-slider__buffer[data-orientation="horizontal"], .media-minimal-skin .media-slider__fill[data-orientation="horizontal"]': {
672
+ insetBlock: "0",
673
+ left: "0"
674
+ },
675
+ '.media-minimal-skin .media-slider__buffer[data-orientation="vertical"], .media-minimal-skin .media-slider__fill[data-orientation="vertical"]': {
676
+ insetInline: "0",
677
+ bottom: "0"
678
+ },
679
+ /* Buffer */
680
+ ".media-minimal-skin .media-slider__buffer": {
681
+ backgroundColor: "oklch(from currentColor l c h / 0.2)",
682
+ transitionTimingFunction: "ease-out",
683
+ transitionDuration: "0.25s",
684
+ '&[data-orientation="horizontal"]': {
685
+ width: "var(--media-slider-buffer)",
686
+ transitionProperty: "width"
687
+ },
688
+ '&[data-orientation="vertical"]': {
689
+ height: "var(--media-slider-buffer)",
690
+ transitionProperty: "height"
691
+ }
692
+ },
693
+ /* Fill */
694
+ ".media-minimal-skin .media-slider__fill": {
695
+ backgroundColor: "currentColor",
696
+ '&[data-orientation="horizontal"]': {
697
+ width: "var(--media-slider-fill)"
698
+ },
699
+ '&[data-orientation="vertical"]': {
700
+ height: "var(--media-slider-fill)"
701
+ }
702
+ },
703
+ /* Dragging — thumb and fill follow the pointer position */
704
+ '.media-minimal-skin .media-slider[data-dragging] .media-slider__thumb[data-orientation="horizontal"]': {
705
+ left: "var(--media-slider-pointer)"
706
+ },
707
+ '.media-minimal-skin .media-slider[data-dragging] .media-slider__thumb[data-orientation="vertical"]': {
708
+ top: "calc(100% - var(--media-slider-pointer))"
709
+ },
710
+ '.media-minimal-skin .media-slider[data-dragging] .media-slider__fill[data-orientation="horizontal"]': {
711
+ width: "var(--media-slider-pointer)"
712
+ },
713
+ '.media-minimal-skin .media-slider[data-dragging] .media-slider__fill[data-orientation="vertical"]': {
714
+ height: "var(--media-slider-pointer)"
715
+ },
716
+ /*
717
+ * ==========================================================================
718
+ * Popups & Animations
719
+ * ==========================================================================
720
+ */
721
+ ".media-minimal-skin ": {
722
+ "--media-popup-transition": "opacity var(--media-popup-transition-timing-function) var(--media-popup-transition-duration), filter var(--media-popup-transition-timing-function) var(--media-popup-transition-duration), transform var(--media-popup-transition-timing-function) var(--media-popup-transition-duration), scale var(--media-popup-transition-timing-function) var(--media-popup-transition-duration)"
723
+ },
724
+ ".media-minimal-skin .media-popover, .media-minimal-skin .media-tooltip": {
725
+ "--popup-translate-distance": "0.5rem",
726
+ margin: "0",
727
+ overflow: "visible",
728
+ color: "inherit",
729
+ border: "0",
730
+ transition: "var(--media-popup-transition)",
731
+ "&[data-starting-style], &[data-ending-style]": {
732
+ opacity: "0",
733
+ filter: "blur(4px)",
734
+ /* We have to use transform here for translate as the translate property is used for positioning by core. */
735
+ transform: "translate(var(--popup-translate-x-distance, 0), var(--popup-translate-y-distance, 0))",
736
+ scale: "0.95"
737
+ },
738
+ "&[data-ending-style]": {
739
+ transform: "none",
740
+ /* Speed up the exit transition. */
741
+ transitionDuration: "max(0ms, calc(var(--media-popup-transition-duration) - 50ms))"
742
+ },
743
+ '&[data-side="top"]': {
744
+ "--popup-translate-y-distance": "var(--popup-translate-distance)",
745
+ transformOrigin: "bottom"
746
+ },
747
+ '&[data-side="bottom"]': {
748
+ "--popup-translate-y-distance": "calc(var(--popup-translate-distance) * -1)",
749
+ transformOrigin: "top"
750
+ },
751
+ '&[data-side="left"]': {
752
+ "--popup-translate-x-distance": "var(--popup-translate-distance)",
753
+ transformOrigin: "right"
754
+ },
755
+ '&[data-side="right"]': {
756
+ "--popup-translate-x-distance": "calc(var(--popup-translate-distance) * -1)",
757
+ transformOrigin: "left"
758
+ },
759
+ /* Safe area between trigger and popup */
760
+ "&::before": {
761
+ position: "absolute",
762
+ pointerEvents: "inherit",
763
+ content: '""'
764
+ },
765
+ '&[data-side="top"]::before, &[data-side="bottom"]::before': {
766
+ insetInline: "0",
767
+ width: "100%"
768
+ },
769
+ '&[data-side="top"]::before': {
770
+ top: "100%"
771
+ },
772
+ '&[data-side="bottom"]::before': {
773
+ bottom: "100%"
774
+ },
775
+ '&[data-side="left"]::before, &[data-side="right"]::before': {
776
+ insetBlock: "0",
777
+ height: "100%"
778
+ },
779
+ '&[data-side="left"]::before': {
780
+ left: "100%"
781
+ },
782
+ '&[data-side="right"]::before': {
783
+ right: "100%"
784
+ }
785
+ },
786
+ ".media-minimal-skin .media-popover": {
787
+ '&[data-side="top"]::before, &[data-side="bottom"]::before': {
788
+ height: "var(--media-popover-side-offset)"
789
+ },
790
+ '&[data-side="left"]::before, &[data-side="right"]::before': {
791
+ width: "var(--media-popover-side-offset)"
792
+ }
793
+ },
794
+ ".media-minimal-skin .media-tooltip": {
795
+ padding: "0.25rem 0.5rem",
796
+ fontSize: "0.75rem",
797
+ /* 12px at 100% font size */
798
+ color: "var(--media-tooltip-text-color)",
799
+ whiteSpace: "nowrap",
800
+ backgroundColor: "var(--media-tooltip-background-color)",
801
+ borderRadius: "0.5rem",
802
+ boxShadow: "0 0 0 1px var(--media-tooltip-border-color), 0 4px 6px -1px oklch(0 0 0 / 0.2), 0 2px 4px -2px oklch(0 0 0 / 0.2)",
803
+ backdropFilter: "var(--media-tooltip-backdrop-filter)",
804
+ /* `display: flex` must not apply while closed — it overrides UA `[popover]` hiding. */
805
+ "&[data-open]": {
806
+ display: "flex",
807
+ columnGap: "0.25rem",
808
+ alignItems: "center"
809
+ },
810
+ '&[data-side="top"]::before, &[data-side="bottom"]::before': {
811
+ height: "var(--media-tooltip-side-offset)"
812
+ },
813
+ '&[data-side="left"]::before, &[data-side="right"]::before': {
814
+ width: "var(--media-tooltip-side-offset)"
815
+ },
816
+ "& .media-tooltip__kbd": {
817
+ minWidth: "1.5em",
818
+ padding: "0.1em",
819
+ marginRight: "-0.25rem",
820
+ fontFamily: "inherit",
821
+ fontSize: "90%",
822
+ fontWeight: "600",
823
+ lineHeight: "1.25",
824
+ textAlign: "center",
825
+ backgroundColor: "oklch(from currentColor l c h / 0.15)",
826
+ borderRadius: "0.25rem"
827
+ }
828
+ },
829
+ '.media-minimal-skin .media-popover--volume:has(media-volume-slider[data-availability="unsupported"])': {
830
+ display: "none"
831
+ },
832
+ /*
833
+ * ==========================================================================
834
+ * Menus
835
+ * Note: Menus use `.media-popover` styles for positioning and transitions.
836
+ * ==========================================================================
837
+ */
838
+ ".media-minimal-skin .media-menu": {
839
+ "--menu-transition-duration": "250ms",
840
+ "--menu-max-height": "14rem",
841
+ "--menu-padding": "0.5rem",
842
+ "--menu-border-radius": "1rem",
843
+ "--menu-item-border-radius": "calc(var(--menu-border-radius) - var(--menu-padding))",
844
+ boxSizing: "border-box",
845
+ maxWidth: "var(--media-popover-available-width, none)",
846
+ maxHeight: "min(var(--media-popover-available-height, var(--menu-max-height)), var(--menu-max-height))",
847
+ padding: "var(--menu-padding)",
848
+ overflow: "auto",
849
+ overscrollBehavior: "none",
850
+ backgroundColor: "var(--media-popover-background-color)",
851
+ borderRadius: "var(--menu-border-radius)",
852
+ boxShadow: "0 0 0 1px var(--media-popover-border-color), 0 4px 6px -1px oklch(0 0 0 / 0.1), 0 2px 4px -2px oklch(0 0 0 / 0.1)",
853
+ backdropFilter: "var(--media-popover-backdrop-filter)",
854
+ "@media (prefers-reduced-motion: reduce)": {
855
+ "--menu-transition-duration": "0ms"
856
+ },
857
+ "& .media-menu__panel": {
858
+ position: "absolute",
859
+ inset: "0",
860
+ padding: "var(--menu-padding)",
861
+ overflow: "auto",
862
+ overscrollBehavior: "none",
863
+ outline: "none",
864
+ translate: "0 0",
865
+ transitionTimingFunction: "ease-in-out",
866
+ transitionDuration: "var(--menu-transition-duration)",
867
+ transitionProperty: "translate, filter",
868
+ willChange: "translate, filter",
869
+ "&[data-starting-style], &[data-ending-style]": {
870
+ overflow: "hidden"
871
+ },
872
+ /* Root settings view — slides out when a submenu is active */
873
+ '&[data-menu-root-view][data-menu-view-state="inactive"]': {
874
+ filter: "blur(8px)",
875
+ translate: "-100% 0",
876
+ /* Hide the indicator while transitioning */
877
+ "& .media-menu__group::before": {
878
+ display: "none"
879
+ }
880
+ },
881
+ /* Submenu panels — slide in/out alongside the root view */
882
+ "&[data-submenu]": {
883
+ zIndex: "10",
884
+ "&:not([data-open], [data-ending-style])": {
885
+ translate: "-100% 0",
886
+ transitionProperty: "none"
887
+ },
888
+ "&[data-starting-style], &[data-ending-style]": {
889
+ pointerEvents: "none",
890
+ filter: "blur(8px)"
891
+ },
892
+ '&[data-starting-style][data-direction="forward"], &[data-ending-style][data-direction="back"]': {
893
+ translate: "100% 0"
894
+ },
895
+ '&[data-ending-style][data-direction="forward"], &[data-starting-style][data-direction="back"]': {
896
+ translate: "-100% 0"
897
+ }
898
+ }
899
+ },
900
+ "& .media-menu__separator": {
901
+ margin: "0.25rem 0",
902
+ borderBottom: "1px solid oklch(1 0 0 / 0.1)"
903
+ },
904
+ "& .media-menu__group": {
905
+ display: "flex",
906
+ flexDirection: "column",
907
+ gap: "0.125rem",
908
+ "@supports (top: anchor(top))": {
909
+ "&::before": {
910
+ position: "absolute",
911
+ positionAnchor: "--media-menu-item-highlight-anchor",
912
+ inset: "anchor(inside)",
913
+ pointerEvents: "none",
914
+ content: '""',
915
+ backgroundColor: "oklch(from currentColor l c h / 0.1)",
916
+ borderRadius: "var(--menu-item-border-radius)",
917
+ transition: "inset ease-in-out 100ms"
918
+ }
919
+ }
920
+ },
921
+ "& .media-menu__item, & .media-menu__back": {
922
+ display: "flex",
923
+ gap: "0.375rem",
924
+ alignItems: "center",
925
+ padding: "0.375rem 0.5rem",
926
+ textAlign: "left",
927
+ textShadow: "0 1px 0 var(--media-current-shadow-color)",
928
+ cursor: "pointer",
929
+ userSelect: "none",
930
+ outline: "2px solid transparent",
931
+ outlineOffset: "-2px",
932
+ borderRadius: "var(--menu-item-border-radius)",
933
+ transition: "background-color, color",
934
+ transitionTimingFunction: "ease-out",
935
+ transitionDuration: "100ms",
936
+ "&:focus-visible": {
937
+ outlineColor: "currentColor",
938
+ outlineOffset: "2px"
939
+ },
940
+ "&:hover, &[data-highlighted]": {
941
+ backgroundColor: "oklch(from currentColor l c h / 0.1)",
942
+ "@supports (top: anchor(top))": {
943
+ anchorName: "--media-menu-item-highlight-anchor",
944
+ backgroundColor: "transparent"
945
+ }
946
+ },
947
+ "& .media-icon": {
948
+ flexShrink: "0",
949
+ color: "oklch(from currentColor l c h / 0.5)",
950
+ filter: "drop-shadow(0 1px 0 var(--media-current-shadow-color))"
951
+ }
952
+ },
953
+ "& .media-menu__indicator": {
954
+ flexShrink: "0",
955
+ marginRight: "-0.25rem",
956
+ marginLeft: "auto",
957
+ opacity: "0"
958
+ },
959
+ "& .media-menu__item": {
960
+ justifyContent: "space-between",
961
+ fontVariantNumeric: "tabular-nums",
962
+ color: "inherit",
963
+ '&[aria-disabled="true"]': {
964
+ pointerEvents: "none",
965
+ cursor: "not-allowed",
966
+ opacity: "0.5"
967
+ },
968
+ '&[aria-checked="true"] .media-menu__indicator': {
969
+ opacity: "1"
970
+ },
971
+ '&[data-availability="unavailable"], &[data-availability="unsupported"]': {
972
+ display: "none"
973
+ }
974
+ },
975
+ "& .media-menu__tier": {
976
+ paddingTop: "1px",
977
+ paddingLeft: "0.125rem",
978
+ fontSize: "0.5625rem",
979
+ fontWeight: "600",
980
+ lineHeight: "1",
981
+ color: "oklch(from currentColor l c h / 0.7)"
982
+ },
983
+ "& .media-menu__back": {
984
+ width: "100%",
985
+ marginBottom: "0.125rem"
986
+ },
987
+ "& .media-menu__hint": {
988
+ display: "inline-flex",
989
+ gap: "0.25rem",
990
+ alignItems: "center",
991
+ minWidth: "0",
992
+ paddingLeft: "0.5rem",
993
+ marginLeft: "auto",
994
+ fontSize: "0.75rem",
995
+ color: "oklch(from currentColor l c h / 0.65)"
996
+ },
997
+ "& .media-menu__hint-label": {
998
+ maxWidth: "6rem",
999
+ overflow: "hidden",
1000
+ textOverflow: "ellipsis",
1001
+ whiteSpace: "nowrap"
1002
+ },
1003
+ "& .media-menu__chevron": {
1004
+ width: "0.875rem",
1005
+ height: "0.875rem"
1006
+ },
1007
+ /* Settings menu */
1008
+ "&.media-menu--settings": {
1009
+ width: "var(--media-menu-width)",
1010
+ minWidth: "12rem",
1011
+ height: "var(--media-menu-height)",
1012
+ overflow: "hidden",
1013
+ /* Add height and width transitions. */
1014
+ transition: "var(--media-popup-transition), height var(--media-popup-transition-timing-function) var(--menu-transition-duration), width var(--media-popup-transition-timing-function) var(--menu-transition-duration)",
1015
+ /* Don't transition width and height on open/close. */
1016
+ "&[data-starting-style], &[data-ending-style]": {
1017
+ transition: "var(--media-popup-transition)"
1018
+ }
1019
+ }
1020
+ },
1021
+ /*
1022
+ * ==========================================================================
1023
+ * Native Caption Track
1024
+ * ==========================================================================
1025
+ */
1026
+ ".media-minimal-skin ": {
1027
+ "--media-caption-track-duration": "var(--media-controls-transition-duration)",
1028
+ "--media-caption-track-delay": "25ms",
1029
+ "--media-caption-track-y": "-0.5rem",
1030
+ "&:has(.media-controls[data-visible])": {
1031
+ "--media-caption-track-y": "-5rem"
1032
+ },
1033
+ "@container media-root (width > 42rem)": {
1034
+ "&:has(.media-controls[data-visible]) > *": {
1035
+ "--media-caption-track-y": "-3rem"
1036
+ }
1037
+ }
1038
+ },
1039
+ ".media-minimal-skin video::-webkit-media-text-track-container": {
1040
+ zIndex: "1",
1041
+ fontFamily: "inherit",
1042
+ scale: "0.98",
1043
+ translate: "0 var(--media-caption-track-y)",
1044
+ transition: "translate var(--media-caption-track-duration) ease-out",
1045
+ transitionDelay: "var(--media-caption-track-delay)"
1046
+ },
1047
+ /*
1048
+ * ==========================================================================
1049
+ * Input Feedback
1050
+ * ==========================================================================
1051
+ */
1052
+ ".media-minimal-skin .media-input-feedback": {
1053
+ position: "absolute",
1054
+ insetInline: "0",
1055
+ top: "0",
1056
+ bottom: "3.5rem",
1057
+ /* Shift up a little in smaller containers */
1058
+ display: "grid",
1059
+ gridTemplateColumns: "1fr 1fr 1fr",
1060
+ alignItems: "center",
1061
+ justifyItems: "center",
1062
+ overflow: "hidden",
1063
+ color: "var(--media-color-primary, oklch(1 0 0))",
1064
+ pointerEvents: "none",
1065
+ borderRadius: "inherit",
1066
+ "@container media-root (width > 24rem)": {
1067
+ bottom: "0"
1068
+ }
1069
+ },
1070
+ /* --- Feedback islands ------------------------------------------------------- */
1071
+ ".media-minimal-skin .media-input-feedback-island": {
1072
+ position: "absolute",
1073
+ insetInline: "0",
1074
+ top: "0",
1075
+ display: "flex",
1076
+ justifyContent: "center",
1077
+ paddingTop: "0.75rem",
1078
+ paddingBottom: "8rem",
1079
+ color: "inherit",
1080
+ textShadow: "0 1px 0 var(--media-current-shadow-color)",
1081
+ pointerEvents: "none",
1082
+ backgroundImage: "linear-gradient(to bottom, oklch(0 0 0 / 0.35), oklch(0 0 0 / 0.2) 3rem, oklch(0 0 0 / 0))",
1083
+ transformOrigin: "top center",
1084
+ transitionTimingFunction: "ease-out",
1085
+ transitionDuration: "100ms",
1086
+ ".media-input-feedback-island__content": {
1087
+ display: "flex",
1088
+ gap: "0.5rem",
1089
+ alignItems: "center",
1090
+ justifyContent: "space-between",
1091
+ padding: "0.25rem 0.625rem"
1092
+ },
1093
+ ".media-icon": {
1094
+ display: "none",
1095
+ flexShrink: "0",
1096
+ filter: "drop-shadow(0 1px 0 var(--media-current-shadow-color))"
1097
+ },
1098
+ ".media-input-feedback-island__value": {
1099
+ marginLeft: "auto"
1100
+ },
1101
+ "@media (pointer: fine)": {
1102
+ transitionProperty: "translate, filter, opacity",
1103
+ willChange: "translate, filter, opacity"
1104
+ },
1105
+ "@media (pointer: coarse)": {
1106
+ transitionProperty: "translate, opacity",
1107
+ willChange: "translate, opacity"
1108
+ },
1109
+ "@media (pointer: fine) and (prefers-reduced-motion: no-preference)": {
1110
+ transitionProperty: "translate, filter, opacity"
1111
+ },
1112
+ "@media (prefers-reduced-transparency: reduce) or (prefers-contrast: more)": {
1113
+ ".media-input-feedback-island__content": {
1114
+ background: "var(--media-controls-background-color)",
1115
+ borderRadius: "0.5rem"
1116
+ }
1117
+ },
1118
+ /* Default hidden state */
1119
+ "&[data-starting-style], &[data-ending-style]": {
1120
+ opacity: "0",
1121
+ transitionTimingFunction: "ease-in",
1122
+ transitionDuration: "400ms",
1123
+ "@media (pointer: fine) and (prefers-reduced-motion: no-preference)": {
1124
+ filter: "blur(8px)"
1125
+ },
1126
+ "@media (prefers-reduced-motion: no-preference)": {
1127
+ "&[data-ending-style]": {
1128
+ translate: "0 -100%"
1129
+ }
1130
+ }
1131
+ }
1132
+ },
1133
+ ".media-minimal-skin .media-input-feedback-island--volume": {
1134
+ ".media-input-feedback-island__content": {
1135
+ width: "min(80%, 14rem)"
1136
+ },
1137
+ ".media-input-feedback-island__progress": {
1138
+ "--media-progress-fill": "var(--media-volume-fill)",
1139
+ width: "100%",
1140
+ height: "0.1875rem",
1141
+ backgroundImage: "linear-gradient( to right, currentColor 0%, currentColor var(--media-progress-fill), oklch(from currentColor l c h / 0.2) var(--media-progress-fill), oklch(from currentColor l c h / 0.2) 100% )",
1142
+ borderRadius: "calc(Infinity * 1px)",
1143
+ boxShadow: "0 1px 0 var(--media-current-shadow-color-subtle)"
1144
+ },
1145
+ '&[data-level="high"] .media-icon--volume-high, &[data-level="low"] .media-icon--volume-low, &[data-level="off"] .media-icon--volume-off': {
1146
+ display: "block"
1147
+ },
1148
+ "@media (prefers-reduced-motion: no-preference)": {
1149
+ "&[data-min] .media-input-feedback-island__content, &[data-max] .media-input-feedback-island__content": {
1150
+ animation: "media-shake 300ms ease-in-out"
1151
+ }
1152
+ }
1153
+ },
1154
+ ".media-minimal-skin .media-input-feedback-island--status": {
1155
+ '&[data-status="captions-on"] .media-icon--captions-on, &[data-status="captions-off"] .media-icon--captions-off, &[data-status="fullscreen"] .media-icon--fullscreen-enter, &[data-status="exit-fullscreen"] .media-icon--fullscreen-exit, &[data-status="pip"] .media-icon--pip-enter, &[data-status="exit-pip"] .media-icon--pip-exit': {
1156
+ display: "block"
1157
+ }
1158
+ },
1159
+ /* --- Bubble ---------------------------------------------------------------- */
1160
+ ".media-minimal-skin .media-input-feedback-bubble": {
1161
+ display: "grid",
1162
+ gridRow: "1",
1163
+ gridColumn: "2",
1164
+ placeContent: "center",
1165
+ padding: "1rem",
1166
+ textAlign: "center",
1167
+ /* Central bubble (play, pause) */
1168
+ "&:not([data-direction])": {
1169
+ transitionTimingFunction: "ease-out",
1170
+ transitionDuration: "200ms",
1171
+ transitionProperty: "opacity, scale",
1172
+ "&[data-starting-style], &[data-ending-style]": {
1173
+ opacity: "0",
1174
+ scale: "0.85"
1175
+ },
1176
+ "&[data-ending-style]": {
1177
+ transitionTimingFunction: "ease-in",
1178
+ transitionDuration: "100ms"
1179
+ },
1180
+ "@media (prefers-reduced-motion: reduce)": {
1181
+ transitionDuration: "50ms",
1182
+ transitionProperty: "opacity"
1183
+ }
1184
+ },
1185
+ /* Directional bubbles (seek) */
1186
+ "&[data-direction]": {
1187
+ gap: "0.25rem",
1188
+ "@container media-root (width > 24rem)": {
1189
+ padding: "1.5rem"
1190
+ }
1191
+ },
1192
+ '&[data-direction="backward"]': {
1193
+ gridColumn: "1",
1194
+ justifySelf: "left"
1195
+ },
1196
+ '&[data-direction="forward"]': {
1197
+ gridColumn: "3",
1198
+ justifySelf: "right"
1199
+ },
1200
+ /* Icons */
1201
+ ".media-icon": {
1202
+ display: "none",
1203
+ width: "calc(var(--media-icon-size) * 2)",
1204
+ height: "calc(var(--media-icon-size) * 2)"
1205
+ },
1206
+ ".media-icon--seek": {
1207
+ width: "calc(var(--media-icon-size) * 1.5)",
1208
+ height: "calc(var(--media-icon-size) * 1.5)"
1209
+ },
1210
+ '&[data-direction] .media-icon--seek, &[data-status="pause"] .media-icon--pause, &[data-status="play"] .media-icon--play': {
1211
+ display: "block"
1212
+ },
1213
+ '&[data-direction="backward"] .media-icon--seek': {
1214
+ scale: "-1 1"
1215
+ },
1216
+ "@media (prefers-reduced-motion: no-preference)": {
1217
+ ".media-icon--seek": {
1218
+ transitionTimingFunction: "ease-in-out",
1219
+ transitionDuration: "200ms",
1220
+ transitionProperty: "translate, opacity"
1221
+ },
1222
+ "&[data-starting-style] .media-icon--seek, &[data-ending-style] .media-icon--seek": {
1223
+ opacity: "0"
1224
+ },
1225
+ '&[data-direction="forward"][data-starting-style] .media-icon--seek': {
1226
+ translate: "-60% 0"
1227
+ },
1228
+ '&[data-direction="backward"][data-starting-style] .media-icon--seek': {
1229
+ translate: "60% 0"
1230
+ }
1231
+ }
1232
+ },
1233
+ /*
1234
+ * ==========================================================================
1235
+ * Icon State Visibility for Video Skins
1236
+ *
1237
+ * Data-attribute-driven visibility rules for multi-state icon buttons.
1238
+ * Uses :is() with both element selectors (for HTML custom element wrappers)
1239
+ * and class selectors (for React rendered SVG elements).
1240
+ * ==========================================================================
1241
+ */
1242
+ /* --- All icons hidden by default --- */
1243
+ ".media-button--play .media-icon--restart, .media-button--play .media-icon--play, .media-button--play .media-icon--pause, .media-button--mute .media-icon--volume-off, .media-button--mute .media-icon--volume-low, .media-button--mute .media-icon--volume-high, .media-button--fullscreen .media-icon--fullscreen-enter, .media-button--fullscreen .media-icon--fullscreen-exit, .media-button--pip .media-icon--pip-enter, .media-button--pip .media-icon--pip-exit, .media-button--cast .media-icon--cast-enter, .media-button--cast .media-icon--cast-exit, .media-button--airplay .media-icon--airplay-enter, .media-button--airplay .media-icon--airplay-exit, .media-button--captions .media-icon--captions-off, .media-button--captions .media-icon--captions-on": {
1244
+ display: "none",
1245
+ opacity: "0"
1246
+ },
1247
+ /* --- Active icon per state --- */
1248
+ /* Play: ended → restart */
1249
+ '.media-button--play[data-ended] .media-icon--restart, .media-button--play:not([data-ended])[data-paused] .media-icon--play, .media-button--play:not([data-ended]):not([data-started]) .media-icon--play, .media-button--play[data-started]:not([data-paused]):not([data-ended]) .media-icon--pause, .media-button--mute[data-muted] .media-icon--volume-off, .media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low, .media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high, .media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter, .media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit, .media-button--pip:not([data-pip]) .media-icon--pip-enter, .media-button--pip[data-pip] .media-icon--pip-exit, .media-button--cast:not([data-cast-state="connected"]) .media-icon--cast-enter, .media-button--cast[data-cast-state="connected"] .media-icon--cast-exit, .media-button--airplay:not([data-airplay-state="connected"]) .media-icon--airplay-enter, .media-button--airplay[data-airplay-state="connected"] .media-icon--airplay-exit, .media-button--captions:not([data-active]) .media-icon--captions-off, .media-button--captions[data-active] .media-icon--captions-on': {
1250
+ display: "block",
1251
+ opacity: "1"
1252
+ },
1253
+ /* --- Pause keyframe animations on inactive icons --- */
1254
+ /*
1255
+ * The airplay-exit SVG defines its keyframes against CSS variables (mirroring
1256
+ * the spinner pattern). When the AirPlay session isn't active the SVG is
1257
+ * still in the DOM — just `display: none` — so its animations would keep
1258
+ * running. Set the variables to `none` to short-circuit the keyframes.
1259
+ */
1260
+ '.media-button--airplay:not([data-airplay-state="connected"])': {
1261
+ "--media-icon--airplay__fill-animation": "none",
1262
+ "--media-icon--airplay__triangle-animation": "none"
1263
+ },
1264
+ /* -------------------------------------------------------------------------- */
1265
+ /* Global @keyframes for all video skins (CSS & Tailwind) */
1266
+ /* -------------------------------------------------------------------------- */
1267
+ "@keyframes media-shake": {
1268
+ "0%, 100%": {
1269
+ translate: "0 0"
1270
+ },
1271
+ "20%": {
1272
+ translate: "-6px 0"
1273
+ },
1274
+ "40%": {
1275
+ translate: "4px 0"
1276
+ },
1277
+ "60%": {
1278
+ translate: "-2px 0"
1279
+ },
1280
+ "80%": {
1281
+ translate: "1px 0"
1282
+ }
1283
+ },
1284
+ /* -------------------------------------------------------------------------- */
1285
+ /* Global @properties for all video skins (CSS & Tailwind) */
1286
+ /* -------------------------------------------------------------------------- */
1287
+ "@property --media-progress-fill": {
1288
+ syntax: '"<percentage>"',
1289
+ inherits: "true",
1290
+ initialValue: "0%"
1291
+ },
1292
+ /*
1293
+ * ==========================================================================
1294
+ * Root
1295
+ * ==========================================================================
1296
+ */
1297
+ ".media-minimal-skin--video": {
1298
+ "--media-border-color": "oklch(0 0 0 / 0.15)",
1299
+ "--media-video-border-radius": "var(--media-border-radius, 0.75rem)",
1300
+ "--media-controls-background-color": "transparent",
1301
+ "--media-controls-transition-duration": "100ms",
1302
+ "--media-controls-transition-timing-function": "ease-out",
1303
+ "--media-error-dialog-transition-duration": "150ms",
1304
+ "--media-error-dialog-transition-delay": "100ms",
1305
+ "--media-error-dialog-transition-timing-function": "ease-out",
1306
+ "--media-popup-transition-duration": "100ms",
1307
+ "--media-popup-transition-timing-function": "ease-out",
1308
+ "--media-tooltip-background-color": "oklch(0 0 0 / 0.5)",
1309
+ "--media-tooltip-border-color": "oklch(1 0 0 / 0.1)",
1310
+ "--media-tooltip-backdrop-filter": "blur(16px) saturate(1.5)",
1311
+ "--media-tooltip-text-color": "currentColor",
1312
+ "--media-tooltip-side-offset": "0.5rem",
1313
+ "--media-tooltip-boundary-offset": "0.5rem",
1314
+ "--media-popover-background-color": "var(--media-tooltip-background-color)",
1315
+ "--media-popover-border-color": "var(--media-tooltip-border-color)",
1316
+ "--media-popover-backdrop-filter": "var(--media-tooltip-backdrop-filter)",
1317
+ "--media-popover-side-offset": "1.5rem",
1318
+ "--media-popover-boundary-offset": "var(--media-tooltip-boundary-offset)",
1319
+ overflow: "clip",
1320
+ background: "oklch(0 0 0)",
1321
+ "@media (prefers-reduced-motion: reduce)": {
1322
+ "--media-error-dialog-transition-duration": "50ms",
1323
+ "--media-error-dialog-transition-delay": "0ms",
1324
+ "--media-popup-transition-duration": "0ms"
1325
+ },
1326
+ "@media (prefers-color-scheme: dark)": {
1327
+ "--media-border-color": "oklch(1 0 0 / 0.15)"
1328
+ },
1329
+ "@media (prefers-reduced-transparency: reduce) or (prefers-contrast: more)": {
1330
+ "--media-controls-background-color": "oklch(0 0 0)",
1331
+ "--media-tooltip-background-color": "oklch(0 0 0)"
1332
+ },
1333
+ "@container media-root (width > 42rem)": {
1334
+ "& > *": {
1335
+ "--media-popover-side-offset": "0.5rem"
1336
+ }
1337
+ },
1338
+ "&:has(.media-controls:not([data-visible]))": {
1339
+ /* Slight delay to hide controls on non-touch devices after interaction */
1340
+ "@media (pointer: fine)": {
1341
+ "--media-controls-transition-duration": "300ms"
1342
+ },
1343
+ "@media (pointer: coarse)": {
1344
+ "--media-controls-transition-duration": "150ms"
1345
+ },
1346
+ "@media (prefers-reduced-motion: reduce)": {
1347
+ "--media-controls-transition-duration": "50ms"
1348
+ }
1349
+ },
1350
+ /* Inner border ring */
1351
+ "&::after": {
1352
+ position: "absolute",
1353
+ inset: "0",
1354
+ zIndex: "10",
1355
+ pointerEvents: "none",
1356
+ content: '""',
1357
+ borderRadius: "inherit",
1358
+ boxShadow: "inset 0 0 0 1px var(--media-border-color)"
1359
+ },
1360
+ /* Fullscreen */
1361
+ "&:fullscreen": {
1362
+ "--media-border-radius": "0"
1363
+ }
1364
+ },
1365
+ /*
1366
+ * ==========================================================================
1367
+ * Error Dialog
1368
+ * ==========================================================================
1369
+ */
1370
+ ".media-minimal-skin--video .media-error": {
1371
+ position: "absolute",
1372
+ inset: "0",
1373
+ zIndex: "20",
1374
+ display: "flex",
1375
+ alignItems: "center",
1376
+ justifyContent: "center",
1377
+ pointerEvents: "none",
1378
+ outline: "none"
1379
+ },
1380
+ ".media-minimal-skin--video .media-error__dialog": {
1381
+ display: "flex",
1382
+ flexDirection: "column",
1383
+ gap: "0.75rem",
1384
+ maxWidth: "16rem",
1385
+ padding: "1rem",
1386
+ color: "oklch(1 0 0)",
1387
+ textShadow: "0 1px 0 oklch(0 0 0 / 0.5)",
1388
+ pointerEvents: "auto",
1389
+ transitionDelay: "var(--media-error-dialog-transition-delay)",
1390
+ transitionTimingFunction: "var(--media-error-dialog-transition-timing-function)",
1391
+ transitionDuration: "var(--media-error-dialog-transition-duration)",
1392
+ transitionProperty: "opacity, scale"
1393
+ },
1394
+ ".media-minimal-skin--video .media-error[data-starting-style] .media-error__dialog, .media-minimal-skin--video .media-error[data-ending-style] .media-error__dialog": {
1395
+ opacity: "0",
1396
+ scale: "0.5"
1397
+ },
1398
+ ".media-minimal-skin--video .media-error[data-ending-style] .media-error__dialog": {
1399
+ transitionDelay: "0ms"
1400
+ },
1401
+ ".media-minimal-skin--video .media-error__content": {
1402
+ display: "flex",
1403
+ flexDirection: "column",
1404
+ gap: "0.5rem",
1405
+ padding: "0.375rem 0"
1406
+ },
1407
+ ".media-minimal-skin--video .media-error__title": {
1408
+ fontSize: "1.125rem"
1409
+ },
1410
+ ".media-minimal-skin--video .media-error[data-open] ~ .media-controls": {
1411
+ display: "none"
1412
+ },
1413
+ /*
1414
+ * ==========================================================================
1415
+ * Controls (hide/show behavior)
1416
+ * ==========================================================================
1417
+ */
1418
+ ".media-minimal-skin--video .media-controls": {
1419
+ position: "absolute",
1420
+ insetInline: "0.25rem",
1421
+ bottom: "0.25rem",
1422
+ zIndex: "10",
1423
+ flexWrap: "wrap",
1424
+ columnGap: "0.5rem",
1425
+ padding: "0.25rem",
1426
+ color: "oklch(1 0 0)",
1427
+ borderRadius: "0.75rem",
1428
+ transitionTimingFunction: "var(--media-controls-transition-timing-function)",
1429
+ transitionDuration: "var(--media-controls-transition-duration)",
1430
+ "@media (pointer: fine)": {
1431
+ transitionProperty: "translate, filter, opacity",
1432
+ willChange: "translate, filter, opacity"
1433
+ },
1434
+ "@media (pointer: coarse)": {
1435
+ transitionProperty: "translate, opacity",
1436
+ willChange: "translate, opacity"
1437
+ },
1438
+ "&:not([data-visible])": {
1439
+ pointerEvents: "none",
1440
+ opacity: "0",
1441
+ "@media (pointer: fine) and (prefers-reduced-motion: no-preference)": {
1442
+ filter: "blur(8px)"
1443
+ },
1444
+ "@media (prefers-reduced-motion: no-preference)": {
1445
+ translate: "0 100%"
1446
+ }
1447
+ },
1448
+ "& .media-time-controls": {
1449
+ flex: "0 0 100%",
1450
+ order: "-1",
1451
+ paddingInline: "0.625rem"
1452
+ },
1453
+ "& .media-button-group:first-of-type": {
1454
+ flex: "1",
1455
+ textAlign: "left"
1456
+ },
1457
+ "& .media-button-group:last-child": {
1458
+ flex: "1",
1459
+ justifyContent: "end"
1460
+ },
1461
+ "@container media-root (width > 42rem)": {
1462
+ insetInline: "0.5rem",
1463
+ bottom: "0.5rem",
1464
+ flexWrap: "nowrap",
1465
+ "& .media-time-controls": {
1466
+ flex: "1",
1467
+ order: "unset"
1468
+ },
1469
+ "& .media-button-group:first-of-type, & .media-button-group:last-child": {
1470
+ flex: "0 0 auto"
1471
+ }
1472
+ }
1473
+ },
1474
+ /* Hide cursor when controls are hidden */
1475
+ ".media-minimal-skin--video:has(.media-controls:not([data-visible]))": {
1476
+ cursor: "none"
1477
+ },
1478
+ /*
1479
+ * ==========================================================================
1480
+ * Sliders
1481
+ * ==========================================================================
1482
+ */
1483
+ ".media-minimal-skin--video .media-slider__track": {
1484
+ boxShadow: "0 0 0 1px oklch(0 0 0 / 0.05)"
1485
+ },
1486
+ /*
1487
+ * ==========================================================================
1488
+ * Popups & Animations
1489
+ * ==========================================================================
1490
+ */
1491
+ ".media-minimal-skin--video .media-popover--volume": {
1492
+ paddingBlock: "0.75rem",
1493
+ background: "transparent",
1494
+ borderRadius: "0.75rem",
1495
+ "@media (prefers-reduced-transparency: reduce) or (prefers-contrast: more)": {
1496
+ background: "var(--media-controls-background-color)"
1497
+ },
1498
+ "@container media-root (width > 42rem)": {
1499
+ "& > *": {
1500
+ "--media-popover-side-offset": "0rem"
1501
+ }
1502
+ }
1503
+ },
1504
+ /*
1505
+ * ==========================================================================
1506
+ * Slider preview
1507
+ * ==========================================================================
1508
+ */
1509
+ ".media-minimal-skin--video .media-slider__thumbnail": {
1510
+ "--media-slider-thumbnail-max-width": "11rem",
1511
+ "--media-slider-thumbnail-max-height": "8rem",
1512
+ "--media-slider-thumbnail-padding": "-0.5rem",
1513
+ /*
1514
+ * Inset is the difference between the container width and the slider (100%) width.
1515
+ * We only add to the end as we render the time there.
1516
+ */
1517
+ "--media-slider-thumbnail-inset": "calc(100cqi - 100%)",
1518
+ position: "absolute",
1519
+ bottom: "100%",
1520
+ left: "clamp( calc(var(--media-slider-thumbnail-max-width) / 2 + var(--media-slider-thumbnail-padding)), var(--media-slider-pointer), calc( 100% - var(--media-slider-thumbnail-max-width) / 2 - var(--media-slider-thumbnail-padding) + var(--media-slider-thumbnail-inset) ) )",
1521
+ opacity: "0",
1522
+ filter: "blur(8px)",
1523
+ transformOrigin: "bottom",
1524
+ scale: "0.8",
1525
+ translate: "-50%",
1526
+ transitionTimingFunction: "ease-out",
1527
+ transitionDuration: "150ms",
1528
+ transitionProperty: "scale, opacity, filter",
1529
+ "@container media-root (width > 42rem)": {
1530
+ left: "var(--media-slider-pointer)"
1531
+ },
1532
+ "& .media-thumbnail__image-wrapper": {
1533
+ position: "relative",
1534
+ "&::after": {
1535
+ position: "absolute",
1536
+ inset: "0",
1537
+ content: '""',
1538
+ borderRadius: "inherit",
1539
+ boxShadow: "0 0 0 1px oklch(0 0 0 / 0.05), 0 1px 3px 0 oklch(0 0 0 / 0.2), 0 1px 2px -1px oklch(0 0 0 / 0.2)"
1540
+ }
1541
+ },
1542
+ "& .media-thumbnail__image": {
1543
+ maxWidth: "var(--media-slider-thumbnail-max-width)",
1544
+ maxHeight: "var(--media-slider-thumbnail-max-height)"
1545
+ }
1546
+ },
1547
+ '.media-minimal-skin--video .media-slider[data-pointing] .media-slider__thumbnail:has([role="img"]:not([data-hidden]))': {
1548
+ opacity: "1",
1549
+ filter: "blur(0)",
1550
+ scale: "1"
1551
+ },
1552
+ '.media-minimal-skin--video .media-slider__thumbnail:has([role="img"]:not([data-hidden])) + .media-slider__preview .media-slider__value': {
1553
+ display: "none"
1554
+ }
1555
+ }), a = /* @__PURE__ */ new WeakMap(), n = (i) => {
1556
+ let e = a.get(i);
1557
+ return e || (e = t(i), a.set(i, e)), e;
1558
+ };
1559
+ export {
1560
+ n as videojsMinimalSkinAllStyles
1561
+ };