smooth-player 1.0.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.
@@ -0,0 +1,7 @@
1
+ export declare class TypedEventEmitter<TEvents extends object> {
2
+ private listeners;
3
+ on<TKey extends keyof TEvents>(event: TKey, listener: (payload: TEvents[TKey]) => void): () => void;
4
+ off<TKey extends keyof TEvents>(event: TKey, listener: (payload: TEvents[TKey]) => void): void;
5
+ emit<TKey extends keyof TEvents>(event: TKey, payload: TEvents[TKey]): void;
6
+ removeAllListeners(): void;
7
+ }
package/dist/events.js ADDED
@@ -0,0 +1,20 @@
1
+ export class TypedEventEmitter {
2
+ constructor() {
3
+ this.listeners = new Map();
4
+ }
5
+ on(event, listener) {
6
+ const eventListeners = this.listeners.get(event) ?? new Set();
7
+ eventListeners.add(listener);
8
+ this.listeners.set(event, eventListeners);
9
+ return () => this.off(event, listener);
10
+ }
11
+ off(event, listener) {
12
+ this.listeners.get(event)?.delete(listener);
13
+ }
14
+ emit(event, payload) {
15
+ this.listeners.get(event)?.forEach((listener) => listener(payload));
16
+ }
17
+ removeAllListeners() {
18
+ this.listeners.clear();
19
+ }
20
+ }
@@ -0,0 +1,4 @@
1
+ export { SmoothPlayer } from "./SmoothPlayer.js";
2
+ export { mountStandardPlayerUI } from "./ui.js";
3
+ export { CanvasRadialVisualizer, CanvasSpectrumVisualizer, CanvasWaveformVisualizer, type RadialVisualizerOptions, type SpectrumVisualizerOptions, type WaveformVisualizerOptions, } from "./visualizers.js";
4
+ export type { AnalyzerOptions, AudioPlaylist, AudioTrack, PlaybackState, PlaylistPanelController, PlaylistPanelMountOptions, PlaylistEntry, PlaylistMountOptions, PlaylistSwitcherMountOptions, PlaylistTitleMountOptions, PlayButtonMountOptions, ProgressMountOptions, PlayerEvents, SmoothPlayerOptions, ShuffleToggleMountOptions, DebugPanelMountOptions, TransportControlsMountOptions, StandardPlayerUIController, StandardPlayerUIMountOptions, TrackInfoMountOptions, TrackMetadata, VisualizerMode, } from "./types.js";
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { SmoothPlayer } from "./SmoothPlayer.js";
2
+ export { mountStandardPlayerUI } from "./ui.js";
3
+ export { CanvasRadialVisualizer, CanvasSpectrumVisualizer, CanvasWaveformVisualizer, } from "./visualizers.js";
@@ -0,0 +1,675 @@
1
+ .smooth-player {
2
+ --smooth-player-background: #0b1220;
3
+ --smooth-player-foreground: rgba(243, 245, 249, 0.8);
4
+ --smooth-player-accent: #2db6c8;
5
+ --smooth-player-waveform: #f3f5f9;
6
+ --smooth-player-radius: 18px;
7
+ --smooth-player-font-family: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
8
+ --smooth-player-surface: linear-gradient(145deg, #182743, #111a2d 56%, #0e1628);
9
+ --smooth-player-panel: linear-gradient(190deg, #1a2945 0%, #111a2e 58%, #0c1321 100%);
10
+ --smooth-player-muted: #92a4c1;
11
+ --smooth-player-progress: 0%;
12
+ position: relative;
13
+ width: min(960px, 92vw);
14
+ min-height: 500px;
15
+ border-radius: var(--smooth-player-radius);
16
+ border: 1px solid rgba(255, 255, 255, 0.12);
17
+ background: var(--smooth-player-surface);
18
+ color: var(--smooth-player-foreground);
19
+ font-family: var(--smooth-player-font-family);
20
+ overflow: hidden;
21
+ }
22
+ .smooth-player::before {
23
+ content: "";
24
+ position: absolute;
25
+ inset: 0;
26
+ background: linear-gradient(90deg, rgba(7, 12, 22, 0) 0%, rgba(7, 12, 22, 0.5) 100%);
27
+ pointer-events: none;
28
+ opacity: 0;
29
+ transition: opacity 420ms cubic-bezier(0.2, 0.7, 0.2, 1);
30
+ }
31
+
32
+ .smooth-player__main {
33
+ position: relative;
34
+ z-index: 1;
35
+ height: 100%;
36
+ padding: 20px;
37
+ transition: transform 500ms cubic-bezier(0.2, 0.7, 0.2, 1), filter 420ms ease;
38
+ }
39
+
40
+ .smooth-player__row {
41
+ display: flex;
42
+ flex-wrap: wrap;
43
+ gap: 12px;
44
+ align-items: center;
45
+ justify-content: space-between;
46
+ }
47
+
48
+ .smooth-player__title {
49
+ margin: 0;
50
+ font-size: 22px;
51
+ }
52
+
53
+ .smooth-player__controls {
54
+ display: flex;
55
+ gap: 8px;
56
+ }
57
+
58
+ .smooth-player button {
59
+ border: 0;
60
+ background: var(--smooth-player-accent);
61
+ color: #041016;
62
+ width: 46px;
63
+ height: 46px;
64
+ display: inline-flex;
65
+ align-items: center;
66
+ justify-content: center;
67
+ cursor: pointer;
68
+ -webkit-tap-highlight-color: transparent;
69
+ transition: transform 180ms ease, filter 180ms ease, background 180ms ease;
70
+ border-radius: 50rem;
71
+ }
72
+ .smooth-player button:focus {
73
+ outline: none;
74
+ }
75
+ .smooth-player button:hover {
76
+ transform: translateY(-1px);
77
+ filter: brightness(1.1);
78
+ }
79
+ .smooth-player button:focus-visible {
80
+ outline: 2px solid #7fe9f5;
81
+ outline-offset: 2px;
82
+ }
83
+ .smooth-player button.secondary {
84
+ background: #27344f;
85
+ color: #eaf0fa;
86
+ }
87
+
88
+ .smooth-player__icon {
89
+ width: 22px;
90
+ height: 22px;
91
+ display: block;
92
+ }
93
+
94
+ .smooth-player__sr-only {
95
+ position: absolute;
96
+ width: 1px;
97
+ height: 1px;
98
+ padding: 0;
99
+ margin: -1px;
100
+ overflow: hidden;
101
+ clip: rect(0, 0, 0, 0);
102
+ border: 0;
103
+ }
104
+
105
+ .smooth-player__meta {
106
+ margin-top: 14px;
107
+ opacity: 0.95;
108
+ }
109
+
110
+ .smooth-player__hero {
111
+ display: grid;
112
+ place-items: center;
113
+ position: relative;
114
+ margin-top: 5rem;
115
+ margin-bottom: 5rem;
116
+ }
117
+
118
+ .smooth-player__ring {
119
+ --smooth-player-progress-angle: 0deg;
120
+ position: relative;
121
+ width: 230px;
122
+ aspect-ratio: 1/1;
123
+ border-radius: 50%;
124
+ padding: 2px;
125
+ background: conic-gradient(var(--smooth-player-accent) var(--smooth-player-progress), rgba(255, 255, 255, 0.16) 0%);
126
+ cursor: grab;
127
+ box-shadow: 0 0 20px color-mix(in srgb, var(--smooth-player-accent) 45%, transparent);
128
+ }
129
+
130
+ .smooth-player__ring:active {
131
+ cursor: grabbing;
132
+ }
133
+
134
+ .smooth-player__ring-inner {
135
+ width: 100%;
136
+ height: 100%;
137
+ border-radius: 50%;
138
+ display: grid;
139
+ place-items: center;
140
+ }
141
+
142
+ .smooth-player__cover {
143
+ position: relative;
144
+ width: 95%;
145
+ aspect-ratio: 1/1;
146
+ border-radius: 50%;
147
+ overflow: hidden;
148
+ background: var(--smooth-player-background);
149
+ box-shadow: 0 16px 28px rgba(0, 0, 0, 0.36), inset 0 1px 1px rgba(255, 255, 255, 0.25);
150
+ }
151
+
152
+ .smooth-player__cover-canvas {
153
+ position: absolute;
154
+ inset: 0;
155
+ width: 100%;
156
+ height: 100%;
157
+ display: block;
158
+ }
159
+
160
+ .smooth-player__hero-play {
161
+ margin-top: 0;
162
+ }
163
+
164
+ .smooth-player__artist {
165
+ margin-top: 2px;
166
+ color: var(--smooth-player-muted);
167
+ }
168
+
169
+ .smooth-player__time {
170
+ margin-top: 8px;
171
+ font-size: 14px;
172
+ color: var(--smooth-player-muted);
173
+ }
174
+
175
+ .smooth-player__progress-wrap {
176
+ margin-top: 10px;
177
+ display: grid;
178
+ gap: 6px;
179
+ }
180
+
181
+ .smooth-player__progress-row {
182
+ display: flex;
183
+ justify-content: space-between;
184
+ align-items: center;
185
+ font-size: 12px;
186
+ color: var(--smooth-player-muted);
187
+ }
188
+
189
+ .smooth-player__progress {
190
+ --smooth-player-progress: 0%;
191
+ appearance: none;
192
+ width: 100%;
193
+ height: 7px;
194
+ border-radius: 999px;
195
+ background: linear-gradient(to right, var(--smooth-player-accent) 0%, var(--smooth-player-accent) var(--smooth-player-progress), rgba(255, 255, 255, 0.2) var(--smooth-player-progress), rgba(255, 255, 255, 0.2) 100%);
196
+ cursor: pointer;
197
+ }
198
+ .smooth-player__progress::-webkit-slider-thumb {
199
+ appearance: none;
200
+ width: 14px;
201
+ height: 14px;
202
+ border-radius: 50%;
203
+ border: 0;
204
+ background: #f4fbff;
205
+ box-shadow: 0 0 0 2px rgba(44, 182, 200, 0.35);
206
+ }
207
+ .smooth-player__progress::-moz-range-thumb {
208
+ width: 14px;
209
+ height: 14px;
210
+ border-radius: 50%;
211
+ border: 0;
212
+ background: #f4fbff;
213
+ box-shadow: 0 0 0 2px rgba(44, 182, 200, 0.35);
214
+ }
215
+
216
+ .smooth-player__canvas {
217
+ margin-top: 14px;
218
+ width: 100%;
219
+ border-radius: 10px;
220
+ border: 1px solid rgba(255, 255, 255, 0.1);
221
+ background: var(--smooth-player-background);
222
+ }
223
+
224
+ .smooth-player__playlist {
225
+ position: absolute;
226
+ inset: 0 0 0 auto;
227
+ width: min(350px, 90vw);
228
+ height: 100%;
229
+ padding: 20px;
230
+ background: var(--smooth-player-panel);
231
+ border-left: 1px solid rgba(255, 255, 255, 0.12);
232
+ transform: translateX(105%);
233
+ opacity: 0;
234
+ visibility: hidden;
235
+ pointer-events: none;
236
+ transition: transform 520ms cubic-bezier(0.2, 0.7, 0.2, 1), opacity 380ms ease, visibility 380ms ease;
237
+ z-index: 3;
238
+ }
239
+
240
+ .smooth-player__playlist-head {
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: space-between;
244
+ gap: 12px;
245
+ }
246
+ .smooth-player__playlist-head h2 {
247
+ margin: 0;
248
+ font-size: 20px;
249
+ }
250
+
251
+ .smooth-player__playlist-close {
252
+ width: 36px;
253
+ height: 36px;
254
+ font-size: 22px;
255
+ line-height: 1;
256
+ }
257
+
258
+ .smooth-player__playlist-switcher {
259
+ margin-top: 10px;
260
+ position: relative;
261
+ }
262
+
263
+ .smooth-player__playlist-switcher-trigger {
264
+ width: 100%;
265
+ height: auto;
266
+ min-width: 0;
267
+ min-height: 36px;
268
+ padding: 8px 12px;
269
+ border: 1px solid rgba(255, 255, 255, 0.18);
270
+ background: rgba(255, 255, 255, 0.06);
271
+ color: #e7eef9;
272
+ font-size: 13px;
273
+ line-height: 1.2;
274
+ text-align: left;
275
+ white-space: nowrap;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ position: relative;
279
+ padding-right: 32px;
280
+ }
281
+
282
+ .smooth-player__playlist-switcher-trigger::after {
283
+ content: "";
284
+ position: absolute;
285
+ right: 12px;
286
+ top: 50%;
287
+ width: 8px;
288
+ height: 8px;
289
+ border-right: 2px solid currentColor;
290
+ border-bottom: 2px solid currentColor;
291
+ transform: translateY(-65%) rotate(45deg);
292
+ opacity: 0.8;
293
+ }
294
+
295
+ .smooth-player__playlist-switcher.is-open .smooth-player__playlist-switcher-trigger::after {
296
+ transform: translateY(-35%) rotate(-135deg);
297
+ }
298
+
299
+ .smooth-player__playlist-switcher-menu {
300
+ position: absolute;
301
+ top: calc(100% + 6px);
302
+ left: 0;
303
+ right: 0;
304
+ display: grid;
305
+ gap: 6px;
306
+ padding: 12px;
307
+ background: rgba(10, 18, 35, 0.96);
308
+ backdrop-filter: blur(10px);
309
+ border-radius: 8px;
310
+ z-index: 8;
311
+ }
312
+
313
+ .smooth-player__playlist-switcher-menu[hidden] {
314
+ display: none !important;
315
+ }
316
+
317
+ .smooth-player__playlist-switcher-item {
318
+ width: 100%;
319
+ height: auto;
320
+ min-width: 0;
321
+ min-height: 34px;
322
+ padding: 8px 10px;
323
+ border-radius: 10px;
324
+ border: 1px solid rgba(255, 255, 255, 0.14);
325
+ background: rgba(255, 255, 255, 0.04);
326
+ color: #e7eef9;
327
+ font-size: 12px;
328
+ line-height: 1.2;
329
+ text-align: left;
330
+ white-space: nowrap;
331
+ overflow: hidden;
332
+ text-overflow: ellipsis;
333
+ }
334
+
335
+ .smooth-player__playlist-switcher-item.is-active {
336
+ background: color-mix(in srgb, var(--smooth-player-accent) 24%, transparent);
337
+ border-color: color-mix(in srgb, var(--smooth-player-accent) 52%, #fff 48%);
338
+ color: #fff;
339
+ }
340
+
341
+ .smooth-player__playlist-list {
342
+ list-style: none;
343
+ margin: 12px 0 0;
344
+ padding: 0;
345
+ display: grid;
346
+ gap: 8px;
347
+ max-height: calc(100% - 108px);
348
+ overflow: auto;
349
+ }
350
+
351
+ .smooth-player__playlist-item {
352
+ width: 100%;
353
+ height: auto;
354
+ min-width: 0;
355
+ min-height: 48px;
356
+ border-radius: 8px;
357
+ border: 0;
358
+ background: transparent;
359
+ color: #f1f5fd;
360
+ padding: 8px 0;
361
+ text-align: left;
362
+ display: grid;
363
+ grid-template-columns: 18px minmax(0, 1fr);
364
+ align-items: center;
365
+ justify-content: initial;
366
+ gap: 10px;
367
+ cursor: pointer;
368
+ }
369
+
370
+ .smooth-player .smooth-player__playlist-switcher-trigger {
371
+ width: 100%;
372
+ height: auto;
373
+ min-width: 0;
374
+ min-height: 36px;
375
+ border-radius: 6px;
376
+ }
377
+
378
+ .smooth-player .smooth-player__playlist-switcher-item {
379
+ width: 100%;
380
+ height: auto;
381
+ min-width: 0;
382
+ min-height: 34px;
383
+ border-radius: 4px;
384
+ }
385
+
386
+ .smooth-player .smooth-player__playlist-item {
387
+ width: 100%;
388
+ height: auto;
389
+ min-width: 0;
390
+ min-height: 48px;
391
+ border-bottom: rgba(255, 255, 255, 0.1) 1px solid;
392
+ border-radius: 0;
393
+ }
394
+
395
+ .smooth-player__playlist-note {
396
+ width: 18px;
397
+ height: 18px;
398
+ color: rgba(243, 245, 249, 0.52);
399
+ background: currentColor;
400
+ display: block;
401
+ -webkit-mask: url("/assets/icons/note.svg") center/15px 15px no-repeat;
402
+ mask: url("/assets/icons/note.svg") center/15px 15px no-repeat;
403
+ }
404
+
405
+ .smooth-player__playlist-content {
406
+ min-width: 0;
407
+ display: grid;
408
+ gap: 2px;
409
+ }
410
+
411
+ .smooth-player__playlist-title {
412
+ min-width: 0;
413
+ white-space: nowrap;
414
+ overflow: hidden;
415
+ text-overflow: ellipsis;
416
+ font-weight: 600;
417
+ }
418
+
419
+ .smooth-player__playlist-artist {
420
+ min-width: 0;
421
+ white-space: nowrap;
422
+ overflow: hidden;
423
+ text-overflow: ellipsis;
424
+ font-size: 0.8rem;
425
+ color: rgba(197, 210, 231, 0.78);
426
+ }
427
+
428
+ .smooth-player__playlist-item[aria-current=true] .smooth-player__playlist-note {
429
+ color: var(--smooth-player-accent);
430
+ }
431
+
432
+ .smooth-player__playlist-item:focus-visible {
433
+ outline: 2px solid color-mix(in srgb, var(--smooth-player-accent) 55%, #fff 45%);
434
+ outline-offset: 3px;
435
+ border-radius: 8px;
436
+ }
437
+
438
+ .smooth-player--playlist-open::before {
439
+ opacity: 1;
440
+ }
441
+ .smooth-player--playlist-open .smooth-player__main {
442
+ transform: translateX(-18px) scale(0.992);
443
+ filter: saturate(0.9);
444
+ }
445
+ .smooth-player--playlist-open .smooth-player__playlist {
446
+ transform: translateX(0);
447
+ opacity: 1;
448
+ visibility: visible;
449
+ pointer-events: auto;
450
+ }
451
+
452
+ @media (max-width: 700px) {
453
+ .smooth-player {
454
+ min-height: 540px;
455
+ }
456
+ .smooth-player__main {
457
+ padding: 14px;
458
+ }
459
+ .smooth-player__playlist {
460
+ width: 100%;
461
+ border-left: 0;
462
+ }
463
+ }
464
+ .smooth-player {
465
+ --smooth-player-muted: #9ca7b6;
466
+ --smooth-player-radius: 32px;
467
+ border-color: rgba(255, 255, 255, 0.08);
468
+ box-shadow: 0 30px 60px rgba(0, 0, 0, 0.35), inset 0 1px 1px rgba(255, 255, 255, 0.06);
469
+ }
470
+ .smooth-player .smooth-player__meta {
471
+ margin-top: 1.5rem;
472
+ text-align: center;
473
+ }
474
+ .smooth-player .smooth-player__meta strong {
475
+ font-size: clamp(24px, 5vw, 42px);
476
+ font-weight: 500;
477
+ letter-spacing: -0.02em;
478
+ line-height: 1.08;
479
+ display: block;
480
+ color: color-mix(in srgb, var(--smooth-player-accent) 80%, transparent);
481
+ }
482
+ .smooth-player .smooth-player__artist {
483
+ margin-top: 0.375rem;
484
+ font-size: clamp(14px, 2.4vw, 18px);
485
+ }
486
+ .smooth-player .smooth-player__top {
487
+ position: relative;
488
+ min-height: 2.125rem;
489
+ display: flex;
490
+ align-items: center;
491
+ justify-content: center;
492
+ }
493
+ .smooth-player .smooth-player__top-title {
494
+ font-size: 0.875rem;
495
+ color: rgba(242, 244, 248, 0.8);
496
+ letter-spacing: 0.01em;
497
+ }
498
+ .smooth-player .smooth-player__nav-btn {
499
+ position: absolute;
500
+ top: 0;
501
+ left: 0.875rem;
502
+ width: 1.875rem;
503
+ height: 1.875rem;
504
+ min-width: 1.875rem;
505
+ min-height: 1.875rem;
506
+ border-radius: 50%;
507
+ background: transparent;
508
+ border: 0;
509
+ color: rgba(242, 244, 248, 0.7);
510
+ font-size: 1.25rem;
511
+ box-shadow: none;
512
+ }
513
+ .smooth-player .smooth-player__nav-btn[aria-expanded=true] {
514
+ color: var(--smooth-player-accent);
515
+ }
516
+ .smooth-player #shuffle-toggle {
517
+ position: absolute;
518
+ top: 0;
519
+ right: 0.875rem;
520
+ width: 1.875rem;
521
+ height: 1.875rem;
522
+ min-width: 1.875rem;
523
+ min-height: 1.875rem;
524
+ background: transparent;
525
+ color: rgba(242, 244, 248, 0.55);
526
+ box-shadow: none;
527
+ z-index: 4;
528
+ }
529
+ .smooth-player #shuffle-toggle:hover {
530
+ filter: none;
531
+ }
532
+ .smooth-player #shuffle-toggle .smooth-player__icon-shuffle {
533
+ width: 1rem;
534
+ height: 1rem;
535
+ display: block;
536
+ background-color: currentColor;
537
+ -webkit-mask: url("/assets/icons/shuffle.svg") center/contain no-repeat;
538
+ mask: url("/assets/icons/shuffle.svg") center/contain no-repeat;
539
+ }
540
+ .smooth-player #shuffle-toggle.smooth-player__toggle-on {
541
+ color: var(--smooth-player-accent);
542
+ background: transparent;
543
+ box-shadow: none;
544
+ }
545
+ .smooth-player .smooth-player__transport {
546
+ margin-top: 1.75rem;
547
+ margin-bottom: 2.25rem;
548
+ display: flex;
549
+ justify-content: center;
550
+ align-items: center;
551
+ gap: 1.625rem;
552
+ }
553
+ .smooth-player .smooth-player__transport button {
554
+ width: 3.125rem;
555
+ height: 3.125rem;
556
+ }
557
+ .smooth-player .smooth-player__transport .smooth-player__transport-playlist {
558
+ width: 3.75rem;
559
+ height: 3.75rem;
560
+ min-width: 3.75rem;
561
+ min-height: 3.75rem;
562
+ }
563
+ .smooth-player .smooth-player__transport .smooth-player__transport-playlist .smooth-player__icon {
564
+ width: 1.5rem;
565
+ height: 1.5rem;
566
+ }
567
+ .smooth-player .smooth-player__transport .smooth-player__transport-play {
568
+ width: 4.375rem;
569
+ height: 4.375rem;
570
+ }
571
+ .smooth-player .smooth-player__progress-wrap {
572
+ display: none;
573
+ }
574
+ .smooth-player .smooth-player__hero {
575
+ display: grid;
576
+ place-items: center;
577
+ margin-top: 5rem;
578
+ margin-bottom: 5rem;
579
+ position: relative;
580
+ }
581
+ .smooth-player .smooth-player__ring {
582
+ width: clamp(15.75rem, 74vw, 19.125rem);
583
+ padding: 0.09375rem;
584
+ box-shadow: 0 0 1.375rem color-mix(in srgb, var(--smooth-player-accent) 48%, transparent), 0 0 2.5rem color-mix(in srgb, var(--smooth-player-accent) 24%, transparent);
585
+ }
586
+ .smooth-player .smooth-player__hero-play {
587
+ position: absolute;
588
+ top: 50%;
589
+ left: 50%;
590
+ transform: translate(-50%, -50%);
591
+ width: 4.625rem;
592
+ height: 4.625rem;
593
+ background: transparent;
594
+ border: 0;
595
+ color: rgba(242, 244, 248, 0.78);
596
+ }
597
+ .smooth-player .smooth-player__hero-play .smooth-player__icon-play {
598
+ width: 2.75rem;
599
+ height: 2.75rem;
600
+ display: block;
601
+ background-color: currentColor;
602
+ -webkit-mask: url("/assets/icons/play.svg") center/contain no-repeat;
603
+ mask: url("/assets/icons/play.svg") center/contain no-repeat;
604
+ }
605
+ .smooth-player .smooth-player__hero-play[aria-pressed=true] {
606
+ color: var(--smooth-player-accent);
607
+ }
608
+ .smooth-player .smooth-player__hero-play[aria-pressed=true] .smooth-player__icon-play {
609
+ -webkit-mask: url("/assets/icons/pause.svg") center/contain no-repeat;
610
+ mask: url("/assets/icons/pause.svg") center/contain no-repeat;
611
+ }
612
+ .smooth-player .smooth-player__hero-play:hover {
613
+ transform: translate(-50%, -50%) scale(1.02);
614
+ filter: brightness(1.08);
615
+ }
616
+ .smooth-player .smooth-player__hero-play:focus-visible {
617
+ transform: translate(-50%, -50%);
618
+ }
619
+ .smooth-player .smooth-player__progress {
620
+ height: 3px;
621
+ background: linear-gradient(to right, color-mix(in srgb, var(--smooth-player-accent) 95%, #fff 5%) 0%, color-mix(in srgb, var(--smooth-player-accent) 95%, #fff 5%) var(--smooth-player-progress), rgba(255, 255, 255, 0.2) var(--smooth-player-progress), rgba(255, 255, 255, 0.2) 100%);
622
+ box-shadow: 0 0 14px rgba(14, 210, 164, 0.24);
623
+ }
624
+ .smooth-player .smooth-player__progress::-webkit-slider-thumb {
625
+ width: 12px;
626
+ height: 12px;
627
+ box-shadow: 0 0 0 2px rgba(14, 210, 164, 0.35), 0 0 12px rgba(14, 210, 164, 0.48);
628
+ }
629
+ .smooth-player .smooth-player__progress::-moz-range-thumb {
630
+ width: 12px;
631
+ height: 12px;
632
+ box-shadow: 0 0 0 2px rgba(14, 210, 164, 0.35), 0 0 12px rgba(14, 210, 164, 0.48);
633
+ }
634
+ .smooth-player .smooth-player__progress-row {
635
+ font-size: 11px;
636
+ opacity: 0.9;
637
+ }
638
+ .smooth-player .smooth-player__playlist {
639
+ background: var(--smooth-player-panel);
640
+ }
641
+ .smooth-player .smooth-player__playlist-item {
642
+ text-align: left;
643
+ align-items: center;
644
+ background: transparent;
645
+ }
646
+ .smooth-player .smooth-player__playlist-switcher {
647
+ padding-bottom: 0.375rem;
648
+ margin-bottom: 0.25rem;
649
+ }
650
+ .smooth-player .smooth-player__playlist-switcher-trigger {
651
+ border-color: rgba(255, 255, 255, 0.24);
652
+ background: rgba(255, 255, 255, 0.08);
653
+ color: rgba(241, 246, 255, 0.94);
654
+ font-weight: 600;
655
+ }
656
+ .smooth-player .smooth-player__playlist-switcher-menu {
657
+ border-color: rgba(255, 255, 255, 0.18);
658
+ background: rgba(16, 30, 58, 0.96);
659
+ }
660
+ .smooth-player .smooth-player__playlist-switcher-item {
661
+ border-color: rgba(255, 255, 255, 0.24);
662
+ background: rgba(255, 255, 255, 0.08);
663
+ color: rgba(241, 246, 255, 0.9);
664
+ font-weight: 600;
665
+ }
666
+ .smooth-player .smooth-player__playlist-switcher-item.is-active {
667
+ border-color: color-mix(in srgb, var(--smooth-player-accent) 48%, #fff 52%);
668
+ background: color-mix(in srgb, var(--smooth-player-accent) 22%, rgba(255, 255, 255, 0.04));
669
+ color: #fff;
670
+ }
671
+ .smooth-player .smooth-player__canvas {
672
+ margin-top: 16px;
673
+ border-radius: 12px;
674
+ min-height: 82px;
675
+ }