@vanduo-oss/framework 1.4.1 → 1.4.3

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.
@@ -1,798 +0,0 @@
1
- /**
2
- * Vanduo Framework - Music Player
3
- * Audio playback component with transport controls, volume, and optional
4
- * shuffle, progress bar, and playlist features.
5
- */
6
-
7
- :root {
8
- /* Sizing (Fibonacci pairs) */
9
- --vd-music-player-padding-x: 1.3125rem; /* 21px */
10
- --vd-music-player-padding-y: 0.8125rem; /* 13px */
11
- --vd-music-player-padding-x-sm: 0.8125rem; /* 13px */
12
- --vd-music-player-padding-y-sm: 0.5rem; /* 8px */
13
- --vd-music-player-padding-x-lg: 2.125rem; /* 34px */
14
- --vd-music-player-padding-y-lg: 1.3125rem; /* 21px */
15
- --vd-music-player-gap: 0.8125rem; /* 13px */
16
- --vd-music-player-btn-size: 2.125rem; /* 34px */
17
- --vd-music-player-btn-size-sm: 1.625rem; /* 26px */
18
- --vd-music-player-btn-size-lg: 2.625rem; /* 42px */
19
- --vd-music-player-icon-size: 1.125rem;
20
- --vd-music-player-volume-width: clamp(3.25rem, 16vw, 4.5rem);
21
- --vd-music-player-volume-width-sm: 3rem;
22
- --vd-music-player-volume-width-lg: 5.5rem;
23
- --vd-music-player-border-radius: var(--vd-border-radius, 0.5rem);
24
- --vd-music-player-border-width: 1px;
25
-
26
- /* Colors */
27
- --vd-music-player-bg: var(--vd-bg-primary);
28
- --vd-music-player-bg-secondary: var(--vd-bg-secondary);
29
- --vd-music-player-border: var(--vd-border-color);
30
- --vd-music-player-text: var(--vd-text-primary);
31
- --vd-music-player-text-muted: var(--vd-text-muted);
32
- --vd-music-player-accent: var(--vd-color-primary);
33
- --vd-music-player-btn-hover-bg: var(--vd-bg-secondary);
34
- --vd-music-player-btn-active-bg: var(--vd-color-primary-alpha-10, rgba(var(--vd-color-primary-rgb, 59,130,246), 0.1));
35
- --vd-music-player-track-bg: var(--vd-border-color);
36
- --vd-music-player-track-fill: var(--vd-color-primary);
37
- --vd-music-player-playlist-hover: var(--vd-bg-secondary);
38
- --vd-music-player-playlist-active-bg: var(--vd-color-primary-alpha-10, rgba(var(--vd-color-primary-rgb, 59,130,246), 0.1));
39
- --vd-music-player-playlist-active-text: var(--vd-color-primary);
40
-
41
- /* Transitions */
42
- --vd-music-player-transition: 0.15s ease;
43
-
44
- /* Glass (uses framework glass tokens; music-player-glass can override) */
45
- --vd-music-player-glass-bg: var(--vd-glass-bg-light, rgba(255, 255, 255, 0.72));
46
- --vd-music-player-glass-border: var(--vd-glass-border-light, rgba(255, 255, 255, 0.5));
47
- --vd-music-player-glass-shadow: var(--vd-glass-shadow, 0 4px 24px rgba(0, 0, 0, 0.12));
48
- --vd-music-player-floating-shadow: 0 12px 40px rgba(0, 0, 0, 0.18);
49
- --vd-music-player-floating-z: 10050;
50
- --vd-music-player-floating-offset: 1rem;
51
- --vd-music-player-toolbar-gap: 0.375rem;
52
- --vd-music-player-handle-size: 1.5rem;
53
- }
54
-
55
- /* Dark Theme */
56
- [data-theme="dark"] {
57
- --vd-music-player-bg: var(--vd-bg-primary);
58
- --vd-music-player-bg-secondary: var(--vd-color-gray-800);
59
- --vd-music-player-btn-hover-bg: var(--vd-color-gray-700);
60
- --vd-music-player-playlist-hover: var(--vd-color-gray-700);
61
- --vd-music-player-glass-bg: var(--vd-glass-bg-dark, rgba(30, 30, 40, 0.72));
62
- --vd-music-player-glass-border: var(--vd-glass-border-dark, rgba(255, 255, 255, 0.14));
63
- }
64
-
65
- @media (prefers-color-scheme: dark) {
66
- :root:not([data-theme]) {
67
- --vd-music-player-bg: var(--vd-bg-primary);
68
- --vd-music-player-bg-secondary: var(--vd-color-gray-800);
69
- --vd-music-player-btn-hover-bg: var(--vd-color-gray-700);
70
- --vd-music-player-playlist-hover: var(--vd-color-gray-700);
71
- --vd-music-player-glass-bg: var(--vd-glass-bg-dark, rgba(30, 30, 40, 0.72));
72
- --vd-music-player-glass-border: var(--vd-glass-border-dark, rgba(255, 255, 255, 0.14));
73
- }
74
- }
75
-
76
- /* ============================================================
77
- Base Container
78
- ============================================================ */
79
-
80
- .vd-music-player {
81
- display: flex;
82
- flex-direction: column;
83
- gap: 0;
84
- background-color: var(--vd-music-player-bg);
85
- border: var(--vd-music-player-border-width) solid var(--vd-music-player-border);
86
- border-radius: var(--vd-music-player-border-radius);
87
- padding: var(--vd-music-player-padding-y) var(--vd-music-player-padding-x);
88
- min-width: 16rem;
89
- max-width: 28rem;
90
- width: 100%;
91
- box-sizing: border-box;
92
- }
93
-
94
- /* ============================================================
95
- Now Playing — track info bar
96
- ============================================================ */
97
-
98
- .vd-music-player-info {
99
- display: flex;
100
- align-items: center;
101
- gap: 0.625rem;
102
- min-height: 1.5rem;
103
- margin-bottom: 0.625rem;
104
- }
105
-
106
- .vd-music-player-icon {
107
- flex-shrink: 0;
108
- color: var(--vd-music-player-accent);
109
- display: flex;
110
- align-items: center;
111
- justify-content: center;
112
- width: 1rem;
113
- height: 1rem;
114
- }
115
-
116
- .vd-music-player-track-name {
117
- font-size: var(--vd-font-size-sm, 0.875rem);
118
- color: var(--vd-music-player-text);
119
- flex: 1;
120
- overflow: hidden;
121
- white-space: nowrap;
122
- text-overflow: ellipsis;
123
- min-width: 0;
124
- }
125
-
126
- .vd-music-player-track-name.is-idle {
127
- color: var(--vd-music-player-text-muted);
128
- font-style: italic;
129
- }
130
-
131
- /* ============================================================
132
- Controls Row
133
- ============================================================ */
134
-
135
- .vd-music-player-controls {
136
- display: flex;
137
- align-items: center;
138
- flex-wrap: wrap;
139
- gap: 0.375rem;
140
- }
141
-
142
- .vd-music-player-btn {
143
- display: inline-flex;
144
- align-items: center;
145
- justify-content: center;
146
- width: var(--vd-music-player-btn-size);
147
- height: var(--vd-music-player-btn-size);
148
- padding: 0;
149
- background: transparent;
150
- border: none;
151
- border-radius: var(--vd-music-player-border-radius);
152
- color: var(--vd-music-player-text);
153
- cursor: pointer;
154
- transition:
155
- background-color var(--vd-music-player-transition),
156
- color var(--vd-music-player-transition);
157
- flex-shrink: 0;
158
- }
159
-
160
- .vd-music-player-btn:hover:not(:disabled) {
161
- background-color: var(--vd-music-player-btn-hover-bg);
162
- color: var(--vd-music-player-accent);
163
- }
164
-
165
- .vd-music-player-btn:focus-visible {
166
- outline: 2px solid var(--vd-music-player-accent);
167
- outline-offset: 1px;
168
- }
169
-
170
- .vd-music-player-btn:disabled {
171
- opacity: 0.38;
172
- cursor: not-allowed;
173
- }
174
-
175
- .vd-music-player-btn.is-active {
176
- color: var(--vd-music-player-accent);
177
- background-color: var(--vd-music-player-btn-active-bg);
178
- }
179
-
180
- /* Play/Pause is slightly larger */
181
- .vd-music-player-btn-play {
182
- width: calc(var(--vd-music-player-btn-size) + 0.25rem);
183
- height: calc(var(--vd-music-player-btn-size) + 0.25rem);
184
- }
185
-
186
- .vd-music-player-btn svg,
187
- .vd-music-player-btn i {
188
- width: var(--vd-music-player-icon-size);
189
- height: var(--vd-music-player-icon-size);
190
- font-size: var(--vd-music-player-icon-size);
191
- pointer-events: none;
192
- }
193
-
194
- /* Spacer to push volume to the right */
195
- .vd-music-player-spacer {
196
- flex: 1 1 1.5rem;
197
- min-width: 0;
198
- }
199
-
200
- /* ============================================================
201
- Volume
202
- ============================================================ */
203
-
204
- .vd-music-player-volume {
205
- display: flex;
206
- align-items: center;
207
- gap: 0.3125rem;
208
- flex: 0 1 auto;
209
- min-width: 0;
210
- max-width: 100%;
211
- }
212
-
213
- .vd-music-player-volume-icon {
214
- flex-shrink: 0;
215
- color: var(--vd-music-player-text-muted);
216
- display: flex;
217
- align-items: center;
218
- width: 1rem;
219
- height: 1rem;
220
- font-size: 1rem;
221
- }
222
-
223
- .vd-music-player-volume-slider {
224
- -webkit-appearance: none;
225
- appearance: none;
226
- width: var(--vd-music-player-volume-width);
227
- height: 4px;
228
- border-radius: 9999px;
229
- background: var(--vd-music-player-track-bg);
230
- cursor: pointer;
231
- outline: none;
232
- min-width: 3.25rem;
233
- max-width: 100%;
234
- flex: 0 1 var(--vd-music-player-volume-width);
235
- }
236
-
237
- .vd-music-player-volume-slider:focus-visible {
238
- outline: 2px solid var(--vd-music-player-accent);
239
- outline-offset: 2px;
240
- }
241
-
242
- /* WebKit thumb */
243
- .vd-music-player-volume-slider::-webkit-slider-thumb {
244
- -webkit-appearance: none;
245
- appearance: none;
246
- width: 0.75rem;
247
- height: 0.75rem;
248
- border-radius: 50%;
249
- background: var(--vd-music-player-accent);
250
- cursor: pointer;
251
- transition: transform var(--vd-music-player-transition);
252
- }
253
-
254
- .vd-music-player-volume-slider::-webkit-slider-thumb:hover {
255
- transform: scale(1.2);
256
- }
257
-
258
- /* Firefox thumb */
259
- .vd-music-player-volume-slider::-moz-range-thumb {
260
- width: 0.75rem;
261
- height: 0.75rem;
262
- border-radius: 50%;
263
- background: var(--vd-music-player-accent);
264
- cursor: pointer;
265
- border: none;
266
- transition: transform var(--vd-music-player-transition);
267
- }
268
-
269
- .vd-music-player-volume-slider::-moz-range-thumb:hover {
270
- transform: scale(1.2);
271
- }
272
-
273
- /* Firefox track fill */
274
- .vd-music-player-volume-slider::-moz-range-progress {
275
- background: var(--vd-music-player-track-fill);
276
- border-radius: 9999px;
277
- }
278
-
279
- /* ============================================================
280
- Progress Bar
281
- ============================================================ */
282
-
283
- .vd-music-player-progress {
284
- display: none;
285
- align-items: center;
286
- gap: 0.5rem;
287
- margin-top: 0.625rem;
288
- }
289
-
290
- .vd-music-player.has-progress .vd-music-player-progress {
291
- display: flex;
292
- }
293
-
294
- .vd-music-player-progress-bar {
295
- -webkit-appearance: none;
296
- appearance: none;
297
- flex: 1;
298
- height: 4px;
299
- border-radius: 9999px;
300
- background: var(--vd-music-player-track-bg);
301
- cursor: pointer;
302
- outline: none;
303
- }
304
-
305
- .vd-music-player-progress-bar:focus-visible {
306
- outline: 2px solid var(--vd-music-player-accent);
307
- outline-offset: 2px;
308
- }
309
-
310
- .vd-music-player-progress-bar::-webkit-slider-thumb {
311
- -webkit-appearance: none;
312
- appearance: none;
313
- width: 0.75rem;
314
- height: 0.75rem;
315
- border-radius: 50%;
316
- background: var(--vd-music-player-accent);
317
- cursor: pointer;
318
- transition: transform var(--vd-music-player-transition);
319
- }
320
-
321
- .vd-music-player-progress-bar::-webkit-slider-thumb:hover {
322
- transform: scale(1.2);
323
- }
324
-
325
- .vd-music-player-progress-bar::-moz-range-thumb {
326
- width: 0.75rem;
327
- height: 0.75rem;
328
- border-radius: 50%;
329
- background: var(--vd-music-player-accent);
330
- border: none;
331
- cursor: pointer;
332
- transition: transform var(--vd-music-player-transition);
333
- }
334
-
335
- .vd-music-player-progress-bar::-moz-range-progress {
336
- background: var(--vd-music-player-track-fill);
337
- border-radius: 9999px;
338
- }
339
-
340
- .vd-music-player-time {
341
- font-size: 0.6875rem;
342
- color: var(--vd-music-player-text-muted);
343
- white-space: nowrap;
344
- flex-shrink: 0;
345
- font-variant-numeric: tabular-nums;
346
- min-width: 2.5rem;
347
- text-align: right;
348
- }
349
-
350
- .vd-music-player-time:first-child {
351
- text-align: left;
352
- }
353
-
354
- /* ============================================================
355
- Playlist
356
- ============================================================ */
357
-
358
- .vd-music-player-playlist {
359
- display: none;
360
- flex-direction: column;
361
- margin-top: 0.625rem;
362
- border-top: var(--vd-music-player-border-width) solid var(--vd-music-player-border);
363
- padding-top: 0.5rem;
364
- max-height: 12rem;
365
- overflow-y: auto;
366
- scrollbar-width: thin;
367
- }
368
-
369
- .vd-music-player.has-playlist .vd-music-player-playlist.is-open {
370
- display: flex;
371
- }
372
-
373
- .vd-music-player-playlist-item {
374
- display: flex;
375
- align-items: center;
376
- gap: 0.5rem;
377
- padding: 0.375rem 0.5rem;
378
- border-radius: calc(var(--vd-music-player-border-radius) * 0.5);
379
- cursor: pointer;
380
- font-size: var(--vd-font-size-sm, 0.875rem);
381
- color: var(--vd-music-player-text);
382
- background: transparent;
383
- border: none;
384
- text-align: left;
385
- width: 100%;
386
- transition:
387
- background-color var(--vd-music-player-transition),
388
- color var(--vd-music-player-transition);
389
- }
390
-
391
- .vd-music-player-playlist-item:hover {
392
- background-color: var(--vd-music-player-playlist-hover);
393
- }
394
-
395
- .vd-music-player-playlist-item:focus-visible {
396
- outline: 2px solid var(--vd-music-player-accent);
397
- outline-offset: 1px;
398
- }
399
-
400
- .vd-music-player-playlist-item.is-active {
401
- background-color: var(--vd-music-player-playlist-active-bg);
402
- color: var(--vd-music-player-playlist-active-text);
403
- font-weight: var(--vd-font-weight-medium, 500);
404
- }
405
-
406
- .vd-music-player-playlist-num {
407
- flex-shrink: 0;
408
- width: 1.25rem;
409
- font-size: 0.6875rem;
410
- color: var(--vd-music-player-text-muted);
411
- text-align: right;
412
- font-variant-numeric: tabular-nums;
413
- }
414
-
415
- .vd-music-player-playlist-item.is-active .vd-music-player-playlist-num {
416
- color: var(--vd-music-player-accent);
417
- }
418
-
419
- .vd-music-player-playlist-name {
420
- flex: 1;
421
- overflow: hidden;
422
- white-space: nowrap;
423
- text-overflow: ellipsis;
424
- min-width: 0;
425
- }
426
-
427
- /* ============================================================
428
- Variants — Compact (floating minimal bar)
429
- ============================================================ */
430
-
431
- .vd-music-player-compact {
432
- flex-direction: row;
433
- align-items: center;
434
- padding: 0.5rem 0.8125rem;
435
- min-width: auto;
436
- max-width: none;
437
- width: auto;
438
- gap: 0.5rem;
439
- }
440
-
441
- .vd-music-player-compact .vd-music-player-info {
442
- display: none;
443
- }
444
-
445
- .vd-music-player-compact .vd-music-player-controls {
446
- gap: 0.125rem;
447
- }
448
-
449
- /* ============================================================
450
- Variants — Inline (full-width bar)
451
- ============================================================ */
452
-
453
- .vd-music-player-inline {
454
- flex-direction: row;
455
- align-items: center;
456
- flex-wrap: wrap;
457
- padding: 0.625rem var(--vd-music-player-padding-x);
458
- min-width: 0;
459
- max-width: none;
460
- gap: 0.625rem;
461
- }
462
-
463
- .vd-music-player-inline .vd-music-player-info {
464
- flex: 1;
465
- min-width: 8rem;
466
- margin-bottom: 0;
467
- }
468
-
469
- .vd-music-player-inline .vd-music-player-controls {
470
- flex: 1 1 auto;
471
- justify-content: flex-end;
472
- min-width: 0;
473
- }
474
-
475
- .vd-music-player-inline .vd-music-player-volume {
476
- flex: 0 1 auto;
477
- }
478
-
479
- .vd-music-player-inline .vd-music-player-volume-slider {
480
- width: clamp(4rem, 18vw, 5.5rem);
481
- flex-basis: clamp(4rem, 18vw, 5.5rem);
482
- }
483
-
484
- .vd-music-player-inline .vd-music-player-progress {
485
- flex-basis: 100%;
486
- margin-top: 0.375rem;
487
- }
488
-
489
- /* ============================================================
490
- Sizes
491
- ============================================================ */
492
-
493
- .vd-music-player-sm {
494
- padding: var(--vd-music-player-padding-y-sm) var(--vd-music-player-padding-x-sm);
495
- font-size: var(--vd-font-size-sm, 0.875rem);
496
- }
497
-
498
- .vd-music-player-sm .vd-music-player-btn {
499
- width: var(--vd-music-player-btn-size-sm);
500
- height: var(--vd-music-player-btn-size-sm);
501
- }
502
-
503
- .vd-music-player-sm .vd-music-player-btn-play {
504
- width: calc(var(--vd-music-player-btn-size-sm) + 0.125rem);
505
- height: calc(var(--vd-music-player-btn-size-sm) + 0.125rem);
506
- }
507
-
508
- .vd-music-player-sm .vd-music-player-btn svg,
509
- .vd-music-player-sm .vd-music-player-btn i {
510
- font-size: 0.9375rem;
511
- width: 0.9375rem;
512
- height: 0.9375rem;
513
- }
514
-
515
- .vd-music-player-sm .vd-music-player-volume-slider {
516
- width: var(--vd-music-player-volume-width-sm);
517
- min-width: var(--vd-music-player-volume-width-sm);
518
- flex-basis: var(--vd-music-player-volume-width-sm);
519
- }
520
-
521
- .vd-music-player-lg {
522
- padding: var(--vd-music-player-padding-y-lg) var(--vd-music-player-padding-x-lg);
523
- }
524
-
525
- .vd-music-player-lg .vd-music-player-btn {
526
- width: var(--vd-music-player-btn-size-lg);
527
- height: var(--vd-music-player-btn-size-lg);
528
- }
529
-
530
- .vd-music-player-lg .vd-music-player-btn-play {
531
- width: calc(var(--vd-music-player-btn-size-lg) + 0.25rem);
532
- height: calc(var(--vd-music-player-btn-size-lg) + 0.25rem);
533
- }
534
-
535
- .vd-music-player-lg .vd-music-player-btn svg,
536
- .vd-music-player-lg .vd-music-player-btn i {
537
- font-size: 1.25rem;
538
- width: 1.25rem;
539
- height: 1.25rem;
540
- }
541
-
542
- .vd-music-player-lg .vd-music-player-volume-slider {
543
- width: var(--vd-music-player-volume-width-lg);
544
- min-width: 4rem;
545
- flex-basis: var(--vd-music-player-volume-width-lg);
546
- }
547
-
548
- /* ============================================================
549
- Neutral color variant — use gray instead of primary
550
- ============================================================ */
551
-
552
- .vd-music-player-neutral {
553
- --vd-music-player-accent: var(--vd-text-primary);
554
- --vd-music-player-track-fill: var(--vd-text-primary);
555
- --vd-music-player-playlist-active-text: var(--vd-text-primary);
556
- --vd-music-player-playlist-active-bg: var(--vd-bg-secondary);
557
- --vd-music-player-btn-active-bg: var(--vd-bg-secondary);
558
- }
559
-
560
- /* ============================================================
561
- Glass variant — frosted surface (aligns with effects/glass.css)
562
- ============================================================ */
563
-
564
- .vd-music-player-glass {
565
- position: relative;
566
- overflow: hidden;
567
- background: var(--vd-music-player-glass-bg);
568
- border-color: var(--vd-music-player-glass-border);
569
- box-shadow: var(--vd-music-player-glass-shadow);
570
- backdrop-filter: blur(var(--vd-glass-blur, 12px)) saturate(var(--vd-glass-saturate, 1.8));
571
- -webkit-backdrop-filter: blur(var(--vd-glass-blur, 12px)) saturate(var(--vd-glass-saturate, 1.8));
572
- isolation: isolate;
573
- }
574
-
575
- .vd-music-player-glass::before {
576
- content: "";
577
- position: absolute;
578
- inset: 0;
579
- background: linear-gradient(
580
- to bottom,
581
- rgba(255, 255, 255, var(--vd-glass-highlight-alpha, 0.12)) 0%,
582
- rgba(255, 255, 255, 0) 45%
583
- );
584
- pointer-events: none;
585
- z-index: 0;
586
- border-radius: inherit;
587
- }
588
-
589
- .vd-music-player-glass::after {
590
- content: "";
591
- position: absolute;
592
- inset: 0;
593
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140' viewBox='0 0 140 140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.15' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='0.25'/%3E%3C/svg%3E");
594
- opacity: var(--vd-glass-noise-opacity, 0.12);
595
- pointer-events: none;
596
- z-index: 0;
597
- border-radius: inherit;
598
- }
599
-
600
- .vd-music-player-glass > * {
601
- position: relative;
602
- z-index: 1;
603
- }
604
-
605
- @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
606
- .vd-music-player-glass {
607
- background: var(--vd-music-player-bg);
608
- }
609
-
610
- .vd-music-player-glass::before,
611
- .vd-music-player-glass::after {
612
- display: none;
613
- }
614
- }
615
-
616
- /* ============================================================
617
- Floating / detached — fixed overlay above page content
618
- ============================================================ */
619
-
620
- .vd-music-player.vd-music-player-floating {
621
- position: fixed;
622
- z-index: var(--vd-music-player-floating-z);
623
- max-width: min(28rem, calc(100vw - 2 * var(--vd-music-player-floating-offset)));
624
- width: min(28rem, calc(100vw - 2 * var(--vd-music-player-floating-offset)));
625
- margin: 0;
626
- box-shadow: var(--vd-music-player-floating-shadow);
627
- transition:
628
- box-shadow var(--vd-music-player-transition),
629
- transform var(--vd-music-player-transition);
630
- }
631
-
632
- .vd-music-player-floating.vd-music-player-floating-bottom-left,
633
- .vd-music-player-floating.vd-music-player-floating-bottom-right {
634
- bottom: var(--vd-music-player-floating-offset);
635
- top: auto;
636
- }
637
-
638
- .vd-music-player-floating.vd-music-player-floating-bottom-left {
639
- left: var(--vd-music-player-floating-offset);
640
- right: auto;
641
- }
642
-
643
- .vd-music-player-floating.vd-music-player-floating-bottom-right {
644
- right: var(--vd-music-player-floating-offset);
645
- left: auto;
646
- }
647
-
648
- .vd-music-player-floating:hover {
649
- box-shadow: var(--vd-glass-float-shadow, 0 14px 42px rgba(0, 0, 0, 0.2));
650
- }
651
-
652
- /* Custom coordinates (set via JS) override corner presets */
653
- .vd-music-player-floating.is-position-custom {
654
- top: var(--vd-music-player-floating-top, 1rem) !important;
655
- left: var(--vd-music-player-floating-left, 1rem) !important;
656
- right: auto !important;
657
- bottom: auto !important;
658
- }
659
-
660
- /* ============================================================
661
- Toolbar — drag handle, detach, minimize
662
- ============================================================ */
663
-
664
- .vd-music-player-toolbar {
665
- display: flex;
666
- align-items: center;
667
- gap: var(--vd-music-player-toolbar-gap);
668
- margin: calc(-0.25rem) calc(-0.25rem) 0.5rem calc(-0.25rem);
669
- min-height: var(--vd-music-player-handle-size);
670
- position: relative;
671
- z-index: 2;
672
- }
673
-
674
- .vd-music-player-drag-handle {
675
- display: none;
676
- flex-shrink: 0;
677
- align-items: center;
678
- justify-content: center;
679
- width: 2.25rem;
680
- height: var(--vd-music-player-handle-size);
681
- padding: 0;
682
- border: none;
683
- border-radius: var(--vd-music-player-border-radius);
684
- background: transparent;
685
- color: var(--vd-music-player-text-muted);
686
- cursor: grab;
687
- touch-action: none;
688
- }
689
-
690
- .vd-music-player-drag-handle:active {
691
- cursor: grabbing;
692
- }
693
-
694
- .vd-music-player-drag-handle .ph {
695
- font-size: 1.125rem;
696
- pointer-events: none;
697
- }
698
-
699
- .vd-music-player-detached.vd-music-player-draggable .vd-music-player-drag-handle {
700
- display: inline-flex;
701
- }
702
-
703
- .vd-music-player-toolbar-spacer {
704
- flex: 1 1 auto;
705
- min-width: 0.5rem;
706
- }
707
-
708
- .vd-music-player-btn-attach,
709
- .vd-music-player-btn-detach,
710
- .vd-music-player-btn-minimize {
711
- flex-shrink: 0;
712
- }
713
-
714
- /* Detach: show detach when inline; after detach show attach + optional drag */
715
- .vd-music-player.vd-music-player-detached .vd-music-player-btn-detach {
716
- display: none;
717
- }
718
-
719
- .vd-music-player .vd-music-player-btn-attach {
720
- display: none;
721
- }
722
-
723
- .vd-music-player.vd-music-player-detached .vd-music-player-btn-attach {
724
- display: inline-flex;
725
- }
726
-
727
- /* ============================================================
728
- Minimized — compact transport + volume only
729
- ============================================================ */
730
-
731
- .vd-music-player-minimized .vd-music-player-info,
732
- .vd-music-player-minimized .vd-music-player-progress,
733
- .vd-music-player-minimized .vd-music-player-playlist {
734
- display: none !important;
735
- }
736
-
737
- .vd-music-player-minimized .vd-music-player-btn-shuffle,
738
- .vd-music-player-minimized .vd-music-player-btn-playlist {
739
- display: none;
740
- }
741
-
742
- .vd-music-player-minimized {
743
- min-width: auto;
744
- max-width: min(22rem, 100vw);
745
- }
746
-
747
- /* ============================================================
748
- Reduced Motion
749
- ============================================================ */
750
-
751
- @media (prefers-reduced-transparency: reduce) {
752
- .vd-music-player-glass {
753
- backdrop-filter: none;
754
- -webkit-backdrop-filter: none;
755
- background: var(--vd-music-player-bg);
756
- border-color: var(--vd-music-player-border);
757
- }
758
-
759
- .vd-music-player-glass::before,
760
- .vd-music-player-glass::after {
761
- display: none;
762
- }
763
- }
764
-
765
- @media (prefers-reduced-motion: reduce) {
766
- .vd-music-player-btn,
767
- .vd-music-player-volume-slider::-webkit-slider-thumb,
768
- .vd-music-player-volume-slider::-moz-range-thumb,
769
- .vd-music-player-progress-bar::-webkit-slider-thumb,
770
- .vd-music-player-progress-bar::-moz-range-thumb,
771
- .vd-music-player-playlist-item,
772
- .vd-music-player-floating {
773
- transition: none;
774
- }
775
-
776
- .vd-music-player-floating:hover {
777
- box-shadow: var(--vd-music-player-floating-shadow);
778
- }
779
- }
780
-
781
- @media (max-width: 640px) {
782
- .vd-music-player {
783
- min-width: 0;
784
- max-width: none;
785
- }
786
-
787
- .vd-music-player-controls {
788
- row-gap: 0.5rem;
789
- }
790
-
791
- .vd-music-player-spacer {
792
- display: none;
793
- }
794
-
795
- .vd-music-player-volume {
796
- margin-left: auto;
797
- }
798
- }