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