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