@hexdn/react 0.1.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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +160 -0
  3. package/dist/player/bounded-surface-position.d.ts +8 -0
  4. package/dist/player/bounded-surface-position.js +8 -0
  5. package/dist/player/hexdn-player-control-popover.module.css +113 -0
  6. package/dist/player/index.d.ts +25 -0
  7. package/dist/player/index.js +32 -0
  8. package/dist/player/media-video-player-control-hold.d.ts +2 -0
  9. package/dist/player/media-video-player-control-hold.js +9 -0
  10. package/dist/player/media-video-player-debug-hud-loader-contract.d.ts +5 -0
  11. package/dist/player/media-video-player-debug-hud-loader-contract.js +1 -0
  12. package/dist/player/media-video-player-keyboard.d.ts +5 -0
  13. package/dist/player/media-video-player-keyboard.js +52 -0
  14. package/dist/player/media-video-player-layout.d.ts +64 -0
  15. package/dist/player/media-video-player-layout.js +110 -0
  16. package/dist/player/media-video-player-scrubber.d.ts +16 -0
  17. package/dist/player/media-video-player-scrubber.js +333 -0
  18. package/dist/player/media-video-player-surface-click.d.ts +8 -0
  19. package/dist/player/media-video-player-surface-click.js +14 -0
  20. package/dist/player/media-video-player-view-state.d.ts +21 -0
  21. package/dist/player/media-video-player-view-state.js +31 -0
  22. package/dist/player/media-video-player.module.css +1254 -0
  23. package/dist/player/playback-landscape-presentation.d.ts +16 -0
  24. package/dist/player/playback-landscape-presentation.js +39 -0
  25. package/dist/player/playback-loading-indicator.d.ts +7 -0
  26. package/dist/player/playback-loading-indicator.js +35 -0
  27. package/dist/player/player-control-popover.d.ts +16 -0
  28. package/dist/player/player-control-popover.js +130 -0
  29. package/dist/player/player-host.d.ts +31 -0
  30. package/dist/player/player-host.js +29 -0
  31. package/dist/player/player-icon.d.ts +19 -0
  32. package/dist/player/player-icon.js +59 -0
  33. package/dist/player/player-labels.d.ts +27 -0
  34. package/dist/player/player-labels.js +35 -0
  35. package/dist/player/player-slots.d.ts +18 -0
  36. package/dist/player/player-slots.js +1 -0
  37. package/dist/player/ready-player.d.ts +34 -0
  38. package/dist/player/ready-player.js +293 -0
  39. package/dist/player/tooltip-surface.d.ts +2 -0
  40. package/dist/player/tooltip-surface.js +8 -0
  41. package/dist/player/ui-primitives.d.ts +17 -0
  42. package/dist/player/ui-primitives.js +15 -0
  43. package/dist/player/ui.module.css +113 -0
  44. package/dist/player/use-media-video-player-controls.d.ts +17 -0
  45. package/dist/player/use-media-video-player-controls.js +87 -0
  46. package/dist/player/use-media-video-player-fullscreen.d.ts +24 -0
  47. package/dist/player/use-media-video-player-fullscreen.js +38 -0
  48. package/dist/player/use-media-video-player-interactions.d.ts +25 -0
  49. package/dist/player/use-media-video-player-interactions.js +163 -0
  50. package/dist/player/use-media-video-player-presentation.d.ts +50 -0
  51. package/dist/player/use-media-video-player-presentation.js +125 -0
  52. package/dist/player/use-media-video-player.d.ts +81 -0
  53. package/dist/player/use-media-video-player.js +263 -0
  54. package/dist/player/use-player-analytics.d.ts +13 -0
  55. package/dist/player/use-player-analytics.js +79 -0
  56. package/dist/player/use-slider-pointer.d.ts +20 -0
  57. package/dist/player/use-slider-pointer.js +85 -0
  58. package/dist/player/utils.d.ts +1 -0
  59. package/dist/player/utils.js +3 -0
  60. package/dist/upload/index.d.ts +37 -0
  61. package/dist/upload/index.js +60 -0
  62. package/dist/upload/upload.module.css +41 -0
  63. package/dist/upload/use-uploader.d.ts +42 -0
  64. package/dist/upload/use-uploader.js +179 -0
  65. package/package.json +51 -0
@@ -0,0 +1,1254 @@
1
+ .player,
2
+ .player * {
3
+ box-sizing: border-box;
4
+ }
5
+
6
+ .player :where(button, input) {
7
+ font: inherit;
8
+ }
9
+
10
+ .player {
11
+ aspect-ratio: 16 / 9;
12
+ font-family: var(
13
+ --hexdn-player-font-family,
14
+ ui-sans-serif,
15
+ system-ui,
16
+ sans-serif
17
+ );
18
+ --hexdn-player-control-hover-scale: 1.14;
19
+ --hexdn-player-control-press-scale: 0.97;
20
+ --hexdn-player-icon-size: calc(
21
+ var(--hexdn-s-6, 32px) + var(--hexdn-s-3, 12px)
22
+ );
23
+ --hexdn-player-control-hit-size: var(--hexdn-player-icon-size);
24
+ --hexdn-player-primary-icon-size: calc(
25
+ var(--hexdn-s-7, 48px) + var(--hexdn-s-2, 8px)
26
+ );
27
+ --hexdn-player-primary-control-hit-size: var(
28
+ --hexdn-player-primary-icon-size
29
+ );
30
+ --hexdn-player-back-hit-size: calc(
31
+ var(--hexdn-s-6, 32px) + var(--hexdn-s-1, 4px)
32
+ );
33
+ --hexdn-player-back-icon-size: calc(
34
+ var(--hexdn-s-7, 48px) + var(--hexdn-s-1, 4px)
35
+ );
36
+ --hexdn-player-big-icon-size: calc(
37
+ var(--hexdn-s-7, 48px) + var(--hexdn-s-3, 12px)
38
+ );
39
+ --hexdn-player-ease-pop: cubic-bezier(0.16, 1, 0.3, 1);
40
+ --hexdn-player-preview-lift-duration: 250ms;
41
+ --hexdn-player-preview-reveal-duration: 180ms;
42
+ --hexdn-player-preview-lift-ease: ease;
43
+ --hexdn-player-caption-font-size: calc(
44
+ var(--hexdn-type-heading-size, 22px) + var(--hexdn-s-1, 4px)
45
+ );
46
+ --hexdn-player-caption-hidden-lift: var(--hexdn-s-4, 16px);
47
+ --hexdn-player-caption-line-height: 1.18;
48
+ --hexdn-player-caption-padding-inline: var(--hexdn-s-2, 8px);
49
+ --hexdn-player-feedback-duration: calc(
50
+ var(--hexdn-slow, 420ms) + var(--hexdn-medium, 220ms)
51
+ );
52
+ --hexdn-player-feedback-size: var(--hexdn-s-9, 96px);
53
+ --hexdn-player-vignette-top-height: min(
54
+ 28%,
55
+ calc(var(--hexdn-s-10, 128px) + var(--hexdn-s-8, 64px))
56
+ );
57
+ --hexdn-player-vignette-bottom-height: min(
58
+ 46%,
59
+ calc((var(--hexdn-s-10, 128px) * 2) + var(--hexdn-s-6, 32px))
60
+ );
61
+ --hexdn-player-bottom-gap: var(--hexdn-s-2, 8px);
62
+ --hexdn-player-shell-padding-x: clamp(
63
+ var(--hexdn-s-4, 16px),
64
+ 3.2vw,
65
+ calc(var(--hexdn-s-6, 32px) + var(--hexdn-s-2, 8px))
66
+ );
67
+ --hexdn-player-shell-padding-y: clamp(
68
+ var(--hexdn-s-4, 16px),
69
+ 2.4vw,
70
+ calc(var(--hexdn-s-6, 32px) + calc(var(--hexdn-s-1, 4px) / 2))
71
+ );
72
+ --hexdn-player-bottom-padding-x: var(--hexdn-player-shell-padding-x);
73
+ --hexdn-player-bottom-padding-y: var(--hexdn-player-shell-padding-y);
74
+ --hexdn-player-top-title-gap: calc(
75
+ var(--hexdn-s-5, 24px) + calc(var(--hexdn-s-1, 4px) / 2)
76
+ );
77
+ --hexdn-player-control-cluster-gap: clamp(
78
+ var(--hexdn-s-3, 12px),
79
+ 1.6vw,
80
+ var(--hexdn-s-5, 24px)
81
+ );
82
+ --hexdn-player-control-center-gap: calc(
83
+ var(--hexdn-s-6, 32px) + calc(var(--hexdn-s-1, 4px) / 2)
84
+ );
85
+ --hexdn-player-control-output-gap: calc(
86
+ var(--hexdn-s-5, 24px) - calc(var(--hexdn-s-1, 4px) / 2)
87
+ );
88
+ --hexdn-player-meta-row-height: var(--hexdn-s-5, 24px);
89
+ --hexdn-player-controls-row-height: var(
90
+ --hexdn-player-primary-control-hit-size
91
+ );
92
+ --hexdn-player-floating-surface-bg: var(
93
+ --hexdn-glass,
94
+ rgba(20, 17, 15, 0.62)
95
+ );
96
+ --hexdn-player-scrubber-hit-height: calc(
97
+ var(--hexdn-s-5, 24px) + var(--hexdn-s-1, 4px)
98
+ );
99
+ --hexdn-player-scrubber-head-hover-scale: 1.24;
100
+ --hexdn-player-volume-track-height: calc(
101
+ var(--hexdn-s-10, 128px) - var(--hexdn-s-2, 8px)
102
+ );
103
+ --hexdn-player-volume-surface-padding: var(--hexdn-s-4, 16px);
104
+ --hexdn-player-volume-rail-height: calc(
105
+ var(--hexdn-player-volume-track-height) +
106
+ (var(--hexdn-player-volume-surface-padding) * 2)
107
+ );
108
+ --hexdn-player-volume-track-inset-bottom: var(
109
+ --hexdn-player-volume-surface-padding
110
+ );
111
+ --hexdn-player-volume-track-inset-top: var(
112
+ --hexdn-player-volume-surface-padding
113
+ );
114
+ --hexdn-player-volume-track-color: rgb(
115
+ var(--hexdn-player-foreground-rgb, 255 255 255) / 0.36
116
+ );
117
+ --hexdn-player-volume-track-width: calc(
118
+ var(--hexdn-s-1, 4px) + calc(var(--hexdn-s-1, 4px) / 2)
119
+ );
120
+ --hexdn-player-volume-knob-size: var(--hexdn-dot-lg, 14px);
121
+ --hexdn-player-volume-rail-width: calc(
122
+ var(--hexdn-player-volume-track-width) +
123
+ (var(--hexdn-player-volume-surface-padding) * 2)
124
+ );
125
+ --hexdn-player-volume-knob-radius: calc(
126
+ var(--hexdn-player-volume-knob-size) * 0.5
127
+ );
128
+ position: relative;
129
+ width: 100%;
130
+ height: 100%;
131
+ overflow: hidden;
132
+ isolation: isolate;
133
+ background: var(--hexdn-player-canvas, #000000);
134
+ color: var(--hexdn-paper, #f4ede4);
135
+ outline: none;
136
+ touch-action: manipulation;
137
+ }
138
+
139
+ .player:fullscreen {
140
+ width: 100vw;
141
+ height: 100vh;
142
+ border-radius: 0;
143
+ background: var(--hexdn-player-canvas, #000000);
144
+ }
145
+
146
+ .video {
147
+ position: relative;
148
+ z-index: 0;
149
+ display: block;
150
+ width: 100%;
151
+ height: 100%;
152
+ border: 0;
153
+ background: var(--hexdn-player-canvas, #000000);
154
+ object-fit: contain;
155
+ }
156
+
157
+ .player[data-hexdn-presentation-ready="false"] .video {
158
+ pointer-events: none;
159
+ }
160
+
161
+ .presentationCurtain {
162
+ position: absolute;
163
+ inset: 0;
164
+ z-index: 1;
165
+ background: var(--hexdn-player-canvas, #000000);
166
+ opacity: 1;
167
+ pointer-events: none;
168
+ transition: opacity var(--hexdn-fast, 120ms)
169
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
170
+ }
171
+
172
+ .player[data-hexdn-presentation-ready="true"][data-hexdn-chrome-entered="true"]
173
+ .presentationCurtain {
174
+ opacity: 0;
175
+ }
176
+
177
+ .captions {
178
+ --hexdn-player-caption-video-bottom: calc(
179
+ var(--hexdn-player-video-bottom, 0px) + var(--hexdn-s-3, 12px)
180
+ );
181
+ --hexdn-player-caption-rest-bottom: calc(
182
+ var(--hexdn-player-bottom-padding-y) +
183
+ var(--hexdn-player-caption-hidden-lift)
184
+ );
185
+ --hexdn-player-caption-controls-bottom: calc(
186
+ var(--hexdn-player-bottom-padding-y) +
187
+ var(--hexdn-player-controls-row-height) + var(--hexdn-player-bottom-gap) +
188
+ var(--hexdn-player-scrubber-hit-height) + var(--hexdn-player-bottom-gap) +
189
+ var(--hexdn-s-3, 12px)
190
+ );
191
+
192
+ position: absolute;
193
+ right: calc(
194
+ var(--hexdn-player-video-right, 0px) + var(--hexdn-player-shell-padding-x)
195
+ );
196
+ bottom: max(
197
+ var(--hexdn-player-caption-rest-bottom),
198
+ var(--hexdn-player-caption-video-bottom)
199
+ );
200
+ left: calc(
201
+ var(--hexdn-player-video-left, 0px) + var(--hexdn-player-shell-padding-x)
202
+ );
203
+ z-index: 2;
204
+ display: flex;
205
+ flex-direction: column;
206
+ align-items: center;
207
+ gap: calc(var(--hexdn-s-1, 4px) / 2);
208
+ color: var(--hexdn-paper, #f4ede4);
209
+ filter: none;
210
+ mix-blend-mode: normal;
211
+ opacity: 1;
212
+ pointer-events: none;
213
+ text-align: center;
214
+ transform: translate3d(0, 0, 0);
215
+ transition:
216
+ bottom var(--hexdn-slow, 420ms)
217
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
218
+ transform var(--hexdn-slow, 420ms)
219
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
220
+ }
221
+
222
+ .player[data-hexdn-controls-visible="true"] .captions {
223
+ bottom: max(
224
+ var(--hexdn-player-caption-controls-bottom),
225
+ var(--hexdn-player-caption-video-bottom)
226
+ );
227
+ }
228
+
229
+ .captionLine {
230
+ display: block;
231
+ max-width: min(100%, var(--hexdn-frame-content, 980px));
232
+ padding: 0 var(--hexdn-player-caption-padding-inline);
233
+ color: var(--hexdn-paper, #f4ede4);
234
+ filter: none;
235
+ font-family: var(
236
+ --hexdn-player-font-family,
237
+ var(--hexdn-type-body-family, ui-sans-serif, system-ui, sans-serif)
238
+ );
239
+ font-size: var(--hexdn-player-caption-font-size);
240
+ font-weight: var(--hexdn-type-heading-weight, 600);
241
+ letter-spacing: 0;
242
+ line-height: var(--hexdn-player-caption-line-height);
243
+ mix-blend-mode: normal;
244
+ opacity: 1;
245
+ text-shadow:
246
+ 0 1px 1px rgb(var(--hexdn-player-canvas-rgb, 0 0 0)),
247
+ 0 2px 3px rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.96),
248
+ 0 0 6px rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.9),
249
+ 0 0 12px rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.74);
250
+ white-space: pre-wrap;
251
+ }
252
+
253
+ .chrome {
254
+ position: absolute;
255
+ inset: 0;
256
+ z-index: 6;
257
+ display: flex;
258
+ flex-direction: column;
259
+ justify-content: space-between;
260
+ pointer-events: none;
261
+ }
262
+
263
+ .chrome::before,
264
+ .chrome::after {
265
+ position: absolute;
266
+ right: 0;
267
+ left: 0;
268
+ z-index: 0;
269
+ opacity: 0;
270
+ pointer-events: none;
271
+ content: "";
272
+ transition: opacity var(--hexdn-slow, 420ms)
273
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
274
+ }
275
+
276
+ .chrome::before {
277
+ top: 0;
278
+ height: var(--hexdn-player-vignette-top-height);
279
+ background: var(
280
+ --hexdn-player-scrim-top,
281
+ linear-gradient(
282
+ 180deg,
283
+ rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.94) 0%,
284
+ rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.6) 44%,
285
+ transparent 100%
286
+ )
287
+ );
288
+ }
289
+
290
+ .chrome::after {
291
+ bottom: 0;
292
+ height: var(--hexdn-player-vignette-bottom-height);
293
+ background: var(
294
+ --hexdn-player-scrim-bottom,
295
+ linear-gradient(
296
+ 0deg,
297
+ rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.96) 0%,
298
+ rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.84) 30%,
299
+ rgb(var(--hexdn-player-canvas-rgb, 0 0 0) / 0.4) 70%,
300
+ transparent 100%
301
+ )
302
+ );
303
+ }
304
+
305
+ .player[data-hexdn-controls-visible="true"][data-hexdn-chrome-entered="true"]
306
+ .chrome::before,
307
+ .player[data-hexdn-controls-visible="true"][data-hexdn-chrome-entered="true"]
308
+ .chrome::after {
309
+ opacity: 1;
310
+ }
311
+
312
+ .player[data-hexdn-controls-visible="false"],
313
+ .player[data-hexdn-controls-visible="false"] .video {
314
+ cursor: none;
315
+ }
316
+
317
+ .top,
318
+ .center,
319
+ .bottom {
320
+ position: relative;
321
+ z-index: 1;
322
+ }
323
+
324
+ .top {
325
+ display: flex;
326
+ min-width: 0;
327
+ align-items: center;
328
+ gap: 0;
329
+ justify-content: flex-start;
330
+ padding: var(--hexdn-player-shell-padding-y)
331
+ var(--hexdn-player-shell-padding-x);
332
+ pointer-events: none;
333
+ opacity: 0;
334
+ transform: translate3d(0, calc(0px - var(--hexdn-s-3, 12px)), 0);
335
+ transition:
336
+ opacity var(--hexdn-medium, 220ms)
337
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
338
+ transform var(--hexdn-slow, 420ms)
339
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
340
+ }
341
+
342
+ .backButton + .titleBlock {
343
+ margin-inline-start: var(--hexdn-player-top-title-gap);
344
+ }
345
+
346
+ .backButton {
347
+ display: inline-flex;
348
+ width: var(--hexdn-player-back-hit-size);
349
+ height: var(--hexdn-player-back-hit-size);
350
+ flex: 0 0 auto;
351
+ align-items: center;
352
+ justify-content: center;
353
+ padding: 0;
354
+ border: 0;
355
+ border-radius: 0;
356
+ background: transparent;
357
+ color: var(--hexdn-player-foreground, #ffffff);
358
+ cursor: pointer;
359
+ opacity: 1;
360
+ pointer-events: auto;
361
+ transition:
362
+ opacity var(--hexdn-fast, 120ms)
363
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
364
+ transform var(--hexdn-fast, 120ms)
365
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
366
+ }
367
+
368
+ .backButton:hover,
369
+ .top:has(.titleBackTarget:hover) .backButton,
370
+ .top:has(.titleBackTarget:focus-visible) .backButton {
371
+ opacity: 1;
372
+ transform: scale(var(--hexdn-player-control-hover-scale));
373
+ }
374
+
375
+ .backButton:active,
376
+ .top:has(.titleBackTarget:active) .backButton {
377
+ opacity: 1;
378
+ transform: scale(var(--hexdn-player-control-press-scale));
379
+ }
380
+
381
+ .backButton :global(.hexdn-icon) {
382
+ width: var(--hexdn-player-back-icon-size);
383
+ height: var(--hexdn-player-back-icon-size);
384
+ pointer-events: none;
385
+ }
386
+
387
+ .titleBlock {
388
+ max-width: min(var(--hexdn-copy-measure-sm, 34rem), 54vw);
389
+ flex: 0 1 auto;
390
+ min-width: 0;
391
+ }
392
+
393
+ .titleBackTarget {
394
+ display: block;
395
+ padding: 0;
396
+ border: 0;
397
+ background: transparent;
398
+ color: inherit;
399
+ cursor: pointer;
400
+ pointer-events: auto;
401
+ text-align: left;
402
+ }
403
+
404
+ .titleBackTarget:focus-visible {
405
+ outline: none;
406
+ }
407
+
408
+ .title {
409
+ display: block;
410
+ max-width: 100%;
411
+ margin: 0;
412
+ overflow: hidden;
413
+ color: var(--hexdn-paper, #f4ede4);
414
+ font-family: var(
415
+ --hexdn-player-font-family,
416
+ var(--hexdn-type-display-family, ui-sans-serif, system-ui, sans-serif)
417
+ );
418
+ font-size: clamp(
419
+ var(--hexdn-type-heading-compact-size, 1rem),
420
+ 1.9vw,
421
+ calc(var(--hexdn-type-heading-size, 22px) + var(--hexdn-s-1, 4px))
422
+ );
423
+ font-weight: var(--hexdn-type-display-weight, 800);
424
+ letter-spacing: var(--hexdn-type-content-letter-spacing, 0);
425
+ line-height: 1.1;
426
+ text-overflow: ellipsis;
427
+ white-space: nowrap;
428
+ }
429
+
430
+ .subtitle {
431
+ display: block;
432
+ margin: calc(var(--hexdn-s-1, 4px) + calc(var(--hexdn-s-1, 4px) / 4)) 0 0;
433
+ color: var(--hexdn-paper, #f4ede4);
434
+ font-family: var(
435
+ --hexdn-player-font-family,
436
+ var(--hexdn-type-label-family, ui-sans-serif, system-ui, sans-serif)
437
+ );
438
+ font-size: var(--hexdn-type-label-size, 13px);
439
+ font-weight: 400;
440
+ letter-spacing: 0.12em;
441
+ line-height: 1;
442
+ }
443
+
444
+ .topActions {
445
+ display: inline-flex;
446
+ flex: 0 0 auto;
447
+ margin-left: auto;
448
+ pointer-events: auto;
449
+ }
450
+
451
+ .center {
452
+ position: absolute;
453
+ inset: 0;
454
+ display: flex;
455
+ align-items: center;
456
+ justify-content: center;
457
+ pointer-events: none;
458
+ }
459
+
460
+ .playbackFeedback {
461
+ position: absolute;
462
+ inset: 0;
463
+ z-index: 5;
464
+ display: flex;
465
+ align-items: center;
466
+ justify-content: center;
467
+ pointer-events: none;
468
+ }
469
+
470
+ .playbackFeedbackIcon {
471
+ display: inline-flex;
472
+ width: var(--hexdn-player-feedback-size);
473
+ height: var(--hexdn-player-feedback-size);
474
+ align-items: center;
475
+ justify-content: center;
476
+ border-radius: var(--hexdn-r-pill, 999px);
477
+ color: var(--hexdn-player-foreground, #ffffff);
478
+ opacity: 0;
479
+ transform: scale(0.88);
480
+ animation: playbackFeedback var(--hexdn-player-feedback-duration)
481
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)) both;
482
+ }
483
+
484
+ .playbackFeedbackIcon :global(.hexdn-icon) {
485
+ width: var(--hexdn-player-big-icon-size);
486
+ height: var(--hexdn-player-big-icon-size);
487
+ }
488
+
489
+ .backButton:focus-visible,
490
+ .controlButton:focus-visible {
491
+ outline: none;
492
+ box-shadow: var(
493
+ --hexdn-focus-ring,
494
+ 0 0 0 3px var(--hexdn-bg, #12100e),
495
+ 0 0 0 5px var(--hexdn-paper, #f4ede4)
496
+ );
497
+ }
498
+
499
+ .bottom {
500
+ display: grid;
501
+ z-index: 3;
502
+ gap: 0;
503
+ padding: 0 0 var(--hexdn-player-bottom-padding-y);
504
+ pointer-events: auto;
505
+ opacity: 0;
506
+ transform: translate3d(0, var(--hexdn-s-3, 12px), 0);
507
+ transition:
508
+ opacity var(--hexdn-medium, 220ms)
509
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
510
+ transform var(--hexdn-slow, 420ms)
511
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
512
+ }
513
+
514
+ .player[data-hexdn-controls-visible="true"][data-hexdn-chrome-entered="true"][data-hexdn-presentation-ready="true"]
515
+ .top,
516
+ .player[data-hexdn-controls-visible="true"][data-hexdn-chrome-entered="true"][data-hexdn-presentation-ready="true"]
517
+ .bottom {
518
+ opacity: 1;
519
+ transform: translate3d(0, 0, 0);
520
+ }
521
+
522
+ .player[data-hexdn-controls-visible="false"] .bottom {
523
+ pointer-events: none;
524
+ }
525
+
526
+ .meta {
527
+ display: flex;
528
+ min-height: var(--hexdn-player-meta-row-height);
529
+ align-items: flex-end;
530
+ justify-content: flex-end;
531
+ margin: 0 var(--hexdn-player-bottom-padding-x) var(--hexdn-s-4, 16px);
532
+ pointer-events: none;
533
+ }
534
+
535
+ .scrubber {
536
+ --hexdn-video-scrubber-track-height: var(--hexdn-s-2, 8px);
537
+ --hexdn-video-scrubber-track-offset: var(--hexdn-s-1, 4px);
538
+ --hexdn-video-scrubber-track-bg: var(
539
+ --hexdn-progress-bg,
540
+ rgb(var(--hexdn-paper-rgb, 244 237 228) / 0.12)
541
+ );
542
+ --hexdn-video-scrubber-fill: var(
543
+ --hexdn-progress-fill,
544
+ linear-gradient(90deg, #bf4420, #ee5a32 62%, #f97250)
545
+ );
546
+
547
+ position: relative;
548
+ width: 100%;
549
+ height: var(--hexdn-player-scrubber-hit-height);
550
+ margin: 0 0 calc(var(--hexdn-s-4, 16px) - calc(var(--hexdn-s-1, 4px) / 2));
551
+ border-radius: 0;
552
+ background: transparent;
553
+ cursor: pointer;
554
+ touch-action: none;
555
+ transition:
556
+ opacity var(--hexdn-fast, 120ms)
557
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
558
+ transform var(--hexdn-fast, 120ms)
559
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
560
+ }
561
+
562
+ .bottom:has(.volume[data-hexdn-open="true"]) .scrubber {
563
+ opacity: 0;
564
+ pointer-events: none;
565
+ transform: translateY(var(--hexdn-s-1, 4px));
566
+ }
567
+
568
+ @media (pointer: coarse) {
569
+ .scrubber::after {
570
+ position: absolute;
571
+ top: 50%;
572
+ right: 0;
573
+ left: 0;
574
+ height: var(--hexdn-hit-target, 44px);
575
+ content: "";
576
+ transform: translateY(-50%);
577
+ }
578
+ }
579
+
580
+ .scrubber:hover::before,
581
+ .scrubber:has(.scrubberInput:focus-visible)::before,
582
+ .scrubber:hover .scrubberBuffer,
583
+ .scrubber:hover .scrubberFill,
584
+ .scrubber:has(.scrubberInput:focus-visible) .scrubberBuffer,
585
+ .scrubber:has(.scrubberInput:focus-visible) .scrubberFill {
586
+ transform: scaleY(1);
587
+ }
588
+
589
+ .scrubber:hover .scrubberPreview,
590
+ .scrubber:has(.scrubberInput:focus-visible) .scrubberPreview {
591
+ transform: scaleY(1);
592
+ }
593
+
594
+ .scrubber::before {
595
+ position: absolute;
596
+ top: calc(50% - var(--hexdn-video-scrubber-track-offset));
597
+ right: 0;
598
+ left: 0;
599
+ height: var(--hexdn-video-scrubber-track-height);
600
+ border-radius: 0;
601
+ background: var(--hexdn-video-scrubber-track-bg);
602
+ content: "";
603
+ transform: scaleY(0.5);
604
+ transform-origin: center;
605
+ transition:
606
+ transform var(--hexdn-slow, 420ms)
607
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
608
+ background-color var(--hexdn-fast, 120ms)
609
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
610
+ }
611
+
612
+ .scrubberBuffer,
613
+ .scrubberFill {
614
+ position: absolute;
615
+ top: calc(50% - var(--hexdn-video-scrubber-track-offset));
616
+ height: var(--hexdn-video-scrubber-track-height);
617
+ left: 0;
618
+ border-radius: 0;
619
+ pointer-events: none;
620
+ transform: scaleY(0.5);
621
+ transform-origin: center;
622
+ transition: transform var(--hexdn-slow, 420ms)
623
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
624
+ }
625
+
626
+ .scrubberBuffer {
627
+ width: var(--hexdn-video-buffer, 0%);
628
+ background: rgb(var(--hexdn-paper-rgb, 244 237 228) / 0.44);
629
+ }
630
+
631
+ .scrubberFill {
632
+ width: var(--hexdn-video-progress, 0%);
633
+ background: var(--hexdn-video-scrubber-fill);
634
+ }
635
+
636
+ .scrubberHead {
637
+ position: absolute;
638
+ top: 50%;
639
+ left: var(--hexdn-video-progress, 0%);
640
+ width: var(--hexdn-player-volume-knob-size);
641
+ height: var(--hexdn-player-volume-knob-size);
642
+ border-radius: var(--hexdn-r-pill, 999px);
643
+ background: var(--hexdn-progress-leading-edge, #f97250);
644
+ box-shadow: var(
645
+ --hexdn-player-scrubber-head-shadow,
646
+ 0 1px 4px rgba(0, 0, 0, 0.7)
647
+ );
648
+ pointer-events: none;
649
+ transform: translate(-50%, -50%);
650
+ transition:
651
+ opacity var(--hexdn-fast, 120ms)
652
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
653
+ transform var(--hexdn-slow, 420ms)
654
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
655
+ }
656
+
657
+ .scrubber[data-hexdn-disabled="false"]:hover .scrubberHead,
658
+ .scrubber[data-hexdn-disabled="false"]:has(.scrubberInput:focus-visible)
659
+ .scrubberHead {
660
+ transform: translate(-50%, -50%)
661
+ scale(var(--hexdn-player-scrubber-head-hover-scale));
662
+ }
663
+
664
+ .scrubberPreviewAnchor {
665
+ position: absolute;
666
+ top: 50%;
667
+ left: var(--hexdn-video-preview, 0%);
668
+ height: var(--hexdn-s-3, 12px);
669
+ opacity: 0;
670
+ pointer-events: none;
671
+ transform: translate(-50%, -50%);
672
+ transition: opacity var(--hexdn-fast, 120ms)
673
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
674
+ }
675
+
676
+ .scrubberPreview {
677
+ display: block;
678
+ width: calc(var(--hexdn-s-1, 4px) / 2);
679
+ min-width: 2px;
680
+ height: 100%;
681
+ border-radius: var(--hexdn-r-pill, 999px);
682
+ background: var(--hexdn-player-foreground, #ffffff);
683
+ transform: scaleY(0.5);
684
+ transform-origin: center;
685
+ transition: transform var(--hexdn-slow, 420ms)
686
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
687
+ }
688
+
689
+ .scrubberPreviewPositioner {
690
+ position: absolute;
691
+ top: 50%;
692
+ left: 0;
693
+ z-index: var(--hexdn-z-tooltip, 100);
694
+ width: 0;
695
+ height: var(--hexdn-s-3, 12px);
696
+ pointer-events: none;
697
+ transform: translate3d(var(--hexdn-video-preview-surface-left, 0), -50%, 0);
698
+ }
699
+
700
+ .scrubberPreviewSurface {
701
+ --hexdn-tooltip-surface-bg: var(--hexdn-player-floating-surface-bg);
702
+
703
+ position: absolute;
704
+ bottom: calc(100% + ((var(--hexdn-s-4, 16px) + var(--hexdn-s-5, 24px)) / 2));
705
+ left: 0;
706
+ display: flex;
707
+ box-sizing: border-box;
708
+ width: max-content;
709
+ min-width: calc(
710
+ var(--hexdn-s-10, 128px) + var(--hexdn-s-7, 48px) - var(--hexdn-s-1, 4px)
711
+ );
712
+ max-width: min(
713
+ calc(100vw - var(--hexdn-s-8, 64px)),
714
+ var(
715
+ --hexdn-video-preview-surface-max-width,
716
+ calc(100vw - var(--hexdn-s-8, 64px))
717
+ )
718
+ );
719
+ overflow: hidden;
720
+ flex-direction: column;
721
+ align-items: center;
722
+ gap: 0;
723
+ padding: calc(var(--hexdn-s-2, 8px) - calc(var(--hexdn-s-1, 4px) / 4));
724
+ opacity: 0;
725
+ transform: translateY(var(--hexdn-s-2, 8px)) scale(0.98);
726
+ transform-origin: var(--hexdn-video-preview-surface-origin, 50%) 100%;
727
+ transition:
728
+ opacity var(--hexdn-fast, 120ms)
729
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
730
+ transform var(--hexdn-fast, 120ms)
731
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
732
+ }
733
+
734
+ .scrubberPreviewFrame {
735
+ display: block;
736
+ width: var(--hexdn-video-preview-width);
737
+ height: var(--hexdn-video-preview-height);
738
+ overflow: hidden;
739
+ border-radius: calc(var(--hexdn-r-md, 8px) - calc(var(--hexdn-s-1, 4px) / 2));
740
+ background-color: var(--hexdn-surface-3, #2c2721);
741
+ background-image: var(--hexdn-video-preview-image);
742
+ background-position: calc(var(--hexdn-video-preview-x) * -1)
743
+ calc(var(--hexdn-video-preview-y) * -1);
744
+ background-repeat: no-repeat;
745
+ background-size: auto;
746
+ }
747
+
748
+ .scrubberPreviewTime {
749
+ display: block;
750
+ align-self: center;
751
+ padding: var(--hexdn-s-2, 8px)
752
+ calc(var(--hexdn-s-1, 4px) - calc(var(--hexdn-s-1, 4px) / 4))
753
+ calc(var(--hexdn-s-1, 4px) / 2);
754
+ color: var(--hexdn-player-foreground, #ffffff);
755
+ font-family: var(
756
+ --hexdn-player-font-family,
757
+ var(--hexdn-type-timecode-family, ui-monospace, monospace)
758
+ );
759
+ font-size: var(--hexdn-type-body-size, 15px);
760
+ font-weight: var(--hexdn-type-ui-weight, 500);
761
+ font-variant-numeric: var(
762
+ --hexdn-type-data-hexdn-font-variant-numeric,
763
+ tabular-nums
764
+ );
765
+ letter-spacing: 0;
766
+ line-height: 1;
767
+ text-align: center;
768
+ }
769
+
770
+ .scrubber[data-hexdn-preview-visible="true"] .scrubberPreviewAnchor {
771
+ opacity: 1;
772
+ }
773
+
774
+ .scrubber[data-hexdn-preview-visible="true"] .scrubberPreviewSurface {
775
+ opacity: 1;
776
+ transform: translateY(0) scale(1);
777
+ }
778
+
779
+ .scrubberInput {
780
+ position: absolute;
781
+ inset: 0;
782
+ width: 100%;
783
+ height: var(--hexdn-player-scrubber-hit-height);
784
+ margin: 0;
785
+ border: 0;
786
+ appearance: none;
787
+ background: transparent;
788
+ cursor: pointer;
789
+ opacity: 0;
790
+ pointer-events: none;
791
+ }
792
+
793
+ .scrubber[data-hexdn-disabled="true"] {
794
+ cursor: default;
795
+ opacity: 0.48;
796
+ }
797
+
798
+ .scrubber[data-hexdn-disabled="true"] .scrubberHead {
799
+ opacity: 0;
800
+ }
801
+
802
+ .scrubber[data-hexdn-disabled="true"] .scrubberPreviewAnchor,
803
+ .scrubber[data-hexdn-disabled="true"] .scrubberPreviewSurface {
804
+ opacity: 0;
805
+ }
806
+
807
+ .controls {
808
+ position: relative;
809
+ display: grid;
810
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
811
+ min-width: 0;
812
+ align-items: center;
813
+ gap: var(--hexdn-player-control-cluster-gap);
814
+ margin-inline: var(--hexdn-player-bottom-padding-x);
815
+ }
816
+
817
+ .controlsLeft,
818
+ .controlsCenter,
819
+ .controlsRight {
820
+ display: flex;
821
+ min-width: 0;
822
+ align-items: center;
823
+ }
824
+
825
+ .controlsLeft {
826
+ justify-self: start;
827
+ gap: var(--hexdn-s-2, 8px);
828
+ }
829
+
830
+ .controlsCenter {
831
+ justify-self: center;
832
+ gap: var(--hexdn-player-control-center-gap);
833
+ }
834
+
835
+ .controlsRight {
836
+ justify-self: end;
837
+ justify-content: flex-end;
838
+ gap: var(--hexdn-player-control-output-gap);
839
+ }
840
+
841
+ .controlButton {
842
+ position: relative;
843
+ display: inline-flex;
844
+ width: var(--hexdn-player-control-hit-size);
845
+ height: var(--hexdn-player-control-hit-size);
846
+ flex: 0 0 auto;
847
+ align-items: center;
848
+ justify-content: center;
849
+ padding: 0;
850
+ border: 0;
851
+ border-radius: 0;
852
+ background: transparent;
853
+ color: var(--hexdn-player-foreground, #ffffff);
854
+ cursor: pointer;
855
+ opacity: 1;
856
+ transition:
857
+ opacity var(--hexdn-fast, 120ms)
858
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
859
+ transform var(--hexdn-fast, 120ms)
860
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1));
861
+ }
862
+
863
+ .controlButton:hover {
864
+ color: var(--hexdn-player-foreground, #ffffff);
865
+ opacity: 1;
866
+ transform: scale(var(--hexdn-player-control-hover-scale));
867
+ }
868
+
869
+ .controlButton:active {
870
+ opacity: 1;
871
+ transform: scale(var(--hexdn-player-control-press-scale));
872
+ }
873
+
874
+ .controlButton[data-hexdn-active="true"] {
875
+ color: var(--hexdn-player-foreground, #ffffff);
876
+ opacity: 1;
877
+ }
878
+
879
+ .controlButton[data-hexdn-active="true"]::after {
880
+ position: absolute;
881
+ bottom: 0;
882
+ left: 50%;
883
+ width: var(--hexdn-s-3, 12px);
884
+ height: calc(var(--hexdn-s-1, 4px) / 2);
885
+ border-radius: var(--hexdn-r-pill, 999px);
886
+ background: rgb(var(--hexdn-player-foreground-rgb, 255 255 255) / 0.76);
887
+ content: "";
888
+ transform: translateX(-50%);
889
+ }
890
+
891
+ .controlButton:disabled,
892
+ .controlButton:disabled:hover {
893
+ color: rgb(var(--hexdn-player-foreground-rgb, 255 255 255) / 0.42);
894
+ cursor: default;
895
+ opacity: 0.42;
896
+ transform: none;
897
+ }
898
+
899
+ .primaryControlButton {
900
+ width: var(--hexdn-player-primary-control-hit-size);
901
+ height: var(--hexdn-player-primary-control-hit-size);
902
+ }
903
+
904
+ .controlButton :global(.hexdn-icon) {
905
+ width: var(--hexdn-player-icon-size);
906
+ height: var(--hexdn-player-icon-size);
907
+ pointer-events: none;
908
+ }
909
+
910
+ .primaryControlButton :global(.hexdn-icon) {
911
+ width: var(--hexdn-player-primary-icon-size);
912
+ height: var(--hexdn-player-primary-icon-size);
913
+ }
914
+
915
+ .playPauseGlyph {
916
+ position: relative;
917
+ display: inline-grid;
918
+ width: var(--hexdn-player-primary-icon-size);
919
+ height: var(--hexdn-player-primary-icon-size);
920
+ place-items: center;
921
+ pointer-events: none;
922
+ }
923
+
924
+ .playPauseGlyph * {
925
+ pointer-events: none;
926
+ }
927
+
928
+ .playPauseGlyphIcon {
929
+ position: absolute;
930
+ inset: 0;
931
+ display: inline-flex;
932
+ align-items: center;
933
+ justify-content: center;
934
+ transform-origin: center;
935
+ transition:
936
+ opacity var(--hexdn-medium, 220ms)
937
+ var(--hexdn-ease, cubic-bezier(0.2, 0.8, 0.2, 1)),
938
+ transform var(--hexdn-medium, 220ms) var(--hexdn-player-ease-pop);
939
+ will-change: opacity, transform;
940
+ }
941
+
942
+ .playPauseGlyphPlay {
943
+ opacity: 1;
944
+ transform: translate3d(calc(var(--hexdn-s-1, 4px) / 2), 0, 0) scale(1);
945
+ }
946
+
947
+ .playPauseGlyphPause {
948
+ opacity: 0;
949
+ transform: translate3d(var(--hexdn-s-2, 8px), 0, 0) scale(0.72);
950
+ }
951
+
952
+ .playPauseGlyph[data-hexdn-state="playing"] .playPauseGlyphPlay {
953
+ opacity: 0;
954
+ transform: translate3d(calc(0px - var(--hexdn-s-2, 8px)), 0, 0) scale(0.72);
955
+ }
956
+
957
+ .playPauseGlyph[data-hexdn-state="playing"] .playPauseGlyphPause {
958
+ opacity: 1;
959
+ transform: translate3d(0, 0, 0) scale(1);
960
+ }
961
+
962
+ .time {
963
+ display: inline-flex;
964
+ flex: 0 0 auto;
965
+ align-items: center;
966
+ gap: calc(var(--hexdn-s-3, 12px) + calc(var(--hexdn-s-1, 4px) / 2));
967
+ min-width: auto;
968
+ margin: 0;
969
+ color: var(--hexdn-paper, #f4ede4);
970
+ font-family: var(
971
+ --hexdn-player-font-family,
972
+ var(--hexdn-type-timecode-family, ui-monospace, monospace)
973
+ );
974
+ font-size: calc(var(--hexdn-type-body-size, 15px) + var(--hexdn-s-1, 4px));
975
+ font-weight: 400;
976
+ font-variant-numeric: var(
977
+ --hexdn-type-data-hexdn-font-variant-numeric,
978
+ tabular-nums
979
+ );
980
+ letter-spacing: 0.02em;
981
+ line-height: 1;
982
+ }
983
+
984
+ .timeMuted {
985
+ color: var(--hexdn-people, rgba(244, 237, 228, 0.4));
986
+ }
987
+
988
+ .timeSeparator {
989
+ color: rgb(var(--hexdn-paper-rgb, 244 237 228) / 0.32);
990
+ }
991
+
992
+ .volume {
993
+ --hexdn-player-control-popover-duration: var(--hexdn-medium, 220ms);
994
+ --hexdn-player-control-popover-enter-offset: var(--hexdn-s-1, 4px);
995
+ --hexdn-player-control-popover-scale-y: 0.94;
996
+
997
+ position: relative;
998
+ display: inline-flex;
999
+ min-width: 0;
1000
+ flex: 0 0 auto;
1001
+ align-items: center;
1002
+ justify-content: center;
1003
+ gap: 0;
1004
+ }
1005
+
1006
+ .volume.volume[data-hexdn-side="top"] .volumePopover {
1007
+ margin-bottom: var(--hexdn-s-2, 8px);
1008
+ }
1009
+
1010
+ .volume.volume[data-hexdn-side="top"] .volumePopover::before {
1011
+ bottom: calc(var(--hexdn-s-2, 8px) * -1);
1012
+ height: var(--hexdn-s-2, 8px);
1013
+ }
1014
+
1015
+ .volumePopover {
1016
+ --hexdn-player-control-popover-width: var(--hexdn-player-volume-rail-width);
1017
+ --hexdn-player-control-popover-min-width: var(
1018
+ --hexdn-player-volume-rail-width
1019
+ );
1020
+ --hexdn-player-control-popover-max-width: var(
1021
+ --hexdn-player-volume-rail-width
1022
+ );
1023
+ --hexdn-player-control-popover-radius: var(--hexdn-r-pill, 999px);
1024
+
1025
+ display: flex;
1026
+ width: var(--hexdn-player-volume-rail-width);
1027
+ height: var(--hexdn-player-volume-rail-height);
1028
+ box-sizing: border-box;
1029
+ align-items: flex-end;
1030
+ justify-content: center;
1031
+ padding-block: var(--hexdn-player-volume-track-inset-top)
1032
+ var(--hexdn-player-volume-track-inset-bottom);
1033
+ }
1034
+
1035
+ .volumeTrack {
1036
+ position: relative;
1037
+ display: block;
1038
+ width: 100%;
1039
+ height: 100%;
1040
+ overflow: visible;
1041
+ border-radius: var(--hexdn-r-pill, 999px);
1042
+ cursor: pointer;
1043
+ touch-action: none;
1044
+ }
1045
+
1046
+ .volumeTrack::before {
1047
+ position: absolute;
1048
+ top: 0;
1049
+ bottom: 0;
1050
+ left: 50%;
1051
+ width: var(--hexdn-player-volume-track-width);
1052
+ border-radius: var(--hexdn-r-pill, 999px);
1053
+ background: var(--hexdn-player-volume-track-color);
1054
+ content: "";
1055
+ transform: translateX(-50%);
1056
+ }
1057
+
1058
+ .volumeFill {
1059
+ position: absolute;
1060
+ inset: 0;
1061
+ z-index: 1;
1062
+ border-radius: inherit;
1063
+ pointer-events: none;
1064
+ }
1065
+
1066
+ .volumeFill::before {
1067
+ position: absolute;
1068
+ bottom: 0;
1069
+ left: 50%;
1070
+ width: var(--hexdn-player-volume-track-width);
1071
+ height: 100%;
1072
+ border-radius: var(--hexdn-r-pill, 999px);
1073
+ background: var(--hexdn-player-foreground, #ffffff);
1074
+ content: "";
1075
+ transform: translateX(-50%) scaleY(var(--hexdn-video-volume-ratio, 0));
1076
+ transform-origin: bottom;
1077
+ }
1078
+
1079
+ .volumeFill::after {
1080
+ content: "";
1081
+ position: absolute;
1082
+ bottom: clamp(
1083
+ var(--hexdn-player-volume-knob-radius),
1084
+ var(--hexdn-video-volume, 0%),
1085
+ calc(100% - var(--hexdn-player-volume-knob-radius))
1086
+ );
1087
+ left: 50%;
1088
+ width: var(--hexdn-player-volume-knob-size);
1089
+ height: var(--hexdn-player-volume-knob-size);
1090
+ border-radius: var(--hexdn-r-pill, 999px);
1091
+ background: var(--hexdn-player-foreground, #ffffff);
1092
+ transform: translate(-50%, 50%);
1093
+ }
1094
+
1095
+ .volumeSlider {
1096
+ position: absolute;
1097
+ top: 50%;
1098
+ left: 50%;
1099
+ width: calc(
1100
+ var(--hexdn-player-volume-rail-height) -
1101
+ var(--hexdn-player-volume-track-inset-top) -
1102
+ var(--hexdn-player-volume-track-inset-bottom)
1103
+ );
1104
+ height: var(--hexdn-player-volume-rail-width);
1105
+ margin: 0;
1106
+ border: 0;
1107
+ appearance: none;
1108
+ background: transparent;
1109
+ cursor: pointer;
1110
+ opacity: 0;
1111
+ pointer-events: none;
1112
+ touch-action: none;
1113
+ transform: translate(-50%, -50%) rotate(-90deg);
1114
+ transform-origin: center;
1115
+ }
1116
+
1117
+ .player[data-hexdn-terminal-error="true"] .chrome {
1118
+ visibility: hidden;
1119
+ }
1120
+
1121
+ .terminalError {
1122
+ position: absolute;
1123
+ inset: 0;
1124
+ z-index: 8;
1125
+ background: var(--hexdn-player-canvas, #000000);
1126
+ }
1127
+
1128
+ .controlError {
1129
+ position: absolute;
1130
+ right: var(--hexdn-s-3, 12px);
1131
+ bottom: var(--hexdn-s-3, 12px);
1132
+ left: var(--hexdn-s-3, 12px);
1133
+ z-index: 8;
1134
+ }
1135
+
1136
+ @media (max-width: 960px), (max-height: 640px) {
1137
+ .player {
1138
+ --hexdn-player-icon-size: calc(
1139
+ var(--hexdn-s-6, 32px) + var(--hexdn-s-2, 8px)
1140
+ );
1141
+ --hexdn-player-control-hit-size: var(--hexdn-player-icon-size);
1142
+ --hexdn-player-primary-icon-size: calc(
1143
+ var(--hexdn-s-7, 48px) + var(--hexdn-s-1, 4px)
1144
+ );
1145
+ --hexdn-player-primary-control-hit-size: var(
1146
+ --hexdn-player-primary-icon-size
1147
+ );
1148
+ --hexdn-player-back-icon-size: var(--hexdn-s-7, 48px);
1149
+ --hexdn-player-big-icon-size: calc(
1150
+ var(--hexdn-s-7, 48px) + var(--hexdn-s-2, 8px)
1151
+ );
1152
+ --hexdn-player-caption-font-size: var(--hexdn-type-heading-size, 22px);
1153
+ --hexdn-player-caption-line-height: 1.2;
1154
+ }
1155
+ }
1156
+
1157
+ @media (max-width: 640px) {
1158
+ .player {
1159
+ --hexdn-player-icon-size: calc(
1160
+ var(--hexdn-s-6, 32px) + var(--hexdn-s-1, 4px)
1161
+ );
1162
+ --hexdn-player-control-hit-size: var(--hexdn-player-icon-size);
1163
+ --hexdn-player-primary-icon-size: var(--hexdn-s-7, 48px);
1164
+ --hexdn-player-primary-control-hit-size: var(--hexdn-s-7, 48px);
1165
+ --hexdn-player-back-icon-size: calc(
1166
+ var(--hexdn-s-6, 32px) + var(--hexdn-s-2, 8px)
1167
+ );
1168
+ --hexdn-player-big-icon-size: calc(
1169
+ var(--hexdn-s-7, 48px) + var(--hexdn-s-1, 4px)
1170
+ );
1171
+ --hexdn-player-caption-font-size: var(
1172
+ --hexdn-type-heading-compact-size,
1173
+ 1rem
1174
+ );
1175
+ --hexdn-player-caption-hidden-lift: var(--hexdn-s-2, 8px);
1176
+ --hexdn-player-caption-line-height: 1.22;
1177
+ --hexdn-player-caption-padding-inline: var(--hexdn-s-1, 4px);
1178
+ --hexdn-player-shell-padding-x: var(--hexdn-s-3, 12px);
1179
+ --hexdn-player-shell-padding-y: var(--hexdn-s-3, 12px);
1180
+ --hexdn-player-top-title-gap: var(--hexdn-s-2, 8px);
1181
+ --hexdn-player-control-cluster-gap: var(--hexdn-s-2, 8px);
1182
+ --hexdn-player-control-center-gap: var(--hexdn-s-2, 8px);
1183
+ --hexdn-player-control-output-gap: var(--hexdn-s-2, 8px);
1184
+ --hexdn-player-meta-row-height: var(--hexdn-s-3, 12px);
1185
+ --hexdn-player-volume-track-height: var(--hexdn-s-8, 64px);
1186
+ --hexdn-player-volume-surface-padding: var(--hexdn-s-3, 12px);
1187
+ --hexdn-player-volume-knob-size: var(--hexdn-dot-md, 10px);
1188
+ }
1189
+
1190
+ .chrome {
1191
+ font-size: var(--hexdn-type-label-sm-size, 0.625rem);
1192
+ }
1193
+
1194
+ .backButton {
1195
+ width: var(--hexdn-player-back-hit-size);
1196
+ height: var(--hexdn-player-back-hit-size);
1197
+ }
1198
+
1199
+ .titleBlock {
1200
+ max-width: 52vw;
1201
+ }
1202
+
1203
+ .title {
1204
+ max-width: 100%;
1205
+ font-size: var(--hexdn-type-body-size, 15px);
1206
+ }
1207
+
1208
+ .subtitle {
1209
+ font-size: var(--hexdn-type-label-sm-size, 0.625rem);
1210
+ }
1211
+
1212
+ .bottom {
1213
+ gap: 0;
1214
+ padding: 0 0 var(--hexdn-player-bottom-padding-y);
1215
+ }
1216
+
1217
+ .controls {
1218
+ gap: var(--hexdn-s-2, 8px);
1219
+ }
1220
+
1221
+ .controlsLeft,
1222
+ .controlsRight {
1223
+ gap: var(--hexdn-player-control-cluster-gap);
1224
+ }
1225
+
1226
+ .time {
1227
+ font-size: var(--hexdn-type-label-sm-size, 0.625rem);
1228
+ }
1229
+ }
1230
+
1231
+ .glassSurface {
1232
+ background: var(--hexdn-glass, rgb(20 20 20 / 70%));
1233
+ backdrop-filter: blur(16px);
1234
+ border-radius: 999px;
1235
+ }
1236
+
1237
+ @keyframes playbackFeedback {
1238
+ 0% {
1239
+ opacity: 0;
1240
+ transform: scale(0.88);
1241
+ }
1242
+ 16% {
1243
+ opacity: 0.86;
1244
+ transform: scale(0.98);
1245
+ }
1246
+ 44% {
1247
+ opacity: 0.86;
1248
+ transform: scale(1);
1249
+ }
1250
+ 100% {
1251
+ opacity: 0;
1252
+ transform: scale(1.08);
1253
+ }
1254
+ }