@xsynaptic/sonic-ui 0.23.0 → 0.24.1

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 (44) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/default/elements/readout.js +3 -2
  3. package/dist/default/elements/sonic-element.js +23 -4
  4. package/dist/default/elements/value-element.js +2 -2
  5. package/dist/default/lib/spoken-duration.js +3 -0
  6. package/dist/default/lib/waveform-bands.js +37 -24
  7. package/dist/default/lib/waveform-scene.js +12 -1
  8. package/dist/dev/elements/readout.js +3 -2
  9. package/dist/dev/elements/readout.js.map +1 -1
  10. package/dist/dev/elements/sonic-element.js +23 -4
  11. package/dist/dev/elements/sonic-element.js.map +1 -1
  12. package/dist/dev/elements/value-element.js +2 -2
  13. package/dist/dev/elements/value-element.js.map +1 -1
  14. package/dist/dev/elements/waveform.d.ts +3 -0
  15. package/dist/dev/lib/spoken-duration.js +3 -0
  16. package/dist/dev/lib/spoken-duration.js.map +1 -1
  17. package/dist/dev/lib/waveform-bands.js +37 -24
  18. package/dist/dev/lib/waveform-bands.js.map +1 -1
  19. package/dist/dev/lib/waveform-scene.d.ts +3 -0
  20. package/dist/dev/lib/waveform-scene.js +12 -1
  21. package/dist/dev/lib/waveform-scene.js.map +1 -1
  22. package/dist/styles/button.css +30 -11
  23. package/dist/styles/dial.css +13 -15
  24. package/dist/styles/envelope.css +2 -2
  25. package/dist/styles/led.css +28 -13
  26. package/dist/styles/material/cap.css +6 -6
  27. package/dist/styles/material/core.css +53 -1
  28. package/dist/styles/material/glass.css +11 -1
  29. package/dist/styles/material/keycap.css +3 -3
  30. package/dist/styles/material/pane.css +8 -6
  31. package/dist/styles/material/readout.css +19 -7
  32. package/dist/styles/material/scale.css +4 -4
  33. package/dist/styles/material/value.css +12 -3
  34. package/dist/styles/meter.css +6 -6
  35. package/dist/styles/panel.css +2 -3
  36. package/dist/styles/ring.css +3 -3
  37. package/dist/styles/segmented.css +6 -6
  38. package/dist/styles/slider.css +28 -29
  39. package/dist/styles/switch.css +49 -51
  40. package/dist/styles/toggle.css +31 -37
  41. package/dist/styles/waveform.css +23 -2
  42. package/dist/styles/wavestrip.css +4 -4
  43. package/dist/styles/xy.css +10 -11
  44. package/package.json +2 -2
@@ -49,15 +49,67 @@
49
49
  --_sonic-cast-x: calc(sin(var(--_sonic-light-tilt)) * var(--_sonic-unit));
50
50
  --_sonic-cast-y: calc(cos(var(--_sonic-light-tilt)) * var(--_sonic-unit));
51
51
  --_sonic-snap: 1px;
52
+ }
52
53
 
53
54
  @media (resolution >= 2dppx) {
55
+ :is(
56
+ .sonic-dial,
57
+ .sonic-dial-readout,
58
+ .sonic-envelope,
59
+ .sonic-envelope-readout,
60
+ .sonic-button,
61
+ .sonic-led,
62
+ .sonic-switch,
63
+ .sonic-toggle,
64
+ .sonic-meter,
65
+ .sonic-number,
66
+ .sonic-panel,
67
+ .sonic-ring,
68
+ .sonic-screen,
69
+ .sonic-segmented,
70
+ .sonic-slider,
71
+ .sonic-slider-readout,
72
+ .sonic-spectrum,
73
+ .sonic-waveform,
74
+ .sonic-waveform-readout,
75
+ .sonic-wavestrip,
76
+ .sonic-wavestrip-readout,
77
+ .sonic-xy,
78
+ .sonic-xy-readout
79
+ ) {
54
80
  --_sonic-snap: 0.5px;
81
+ }
55
82
  }
56
83
 
57
84
  @media (resolution >= 3dppx) {
85
+ :is(
86
+ .sonic-dial,
87
+ .sonic-dial-readout,
88
+ .sonic-envelope,
89
+ .sonic-envelope-readout,
90
+ .sonic-button,
91
+ .sonic-led,
92
+ .sonic-switch,
93
+ .sonic-toggle,
94
+ .sonic-meter,
95
+ .sonic-number,
96
+ .sonic-panel,
97
+ .sonic-ring,
98
+ .sonic-screen,
99
+ .sonic-segmented,
100
+ .sonic-slider,
101
+ .sonic-slider-readout,
102
+ .sonic-spectrum,
103
+ .sonic-waveform,
104
+ .sonic-waveform-readout,
105
+ .sonic-wavestrip,
106
+ .sonic-wavestrip-readout,
107
+ .sonic-xy,
108
+ .sonic-xy-readout
109
+ ) {
58
110
  --_sonic-snap: calc(1px / 3);
59
- }
60
111
  }
112
+ }
61
113
 
62
114
  :is(
63
115
  .sonic-dial,
@@ -49,8 +49,18 @@
49
49
  );
50
50
 
51
51
  /* Glass is forced to Canvas like the page, so only a border shows its edge */
52
+ }
52
53
  @media (forced-colors: active) {
54
+ :is(
55
+ .sonic-dial-readout,
56
+ .sonic-envelope-readout,
57
+ .sonic-screen,
58
+ .sonic-slider-readout,
59
+ .sonic-waveform-readout,
60
+ .sonic-wavestrip-readout,
61
+ .sonic-xy-readout
62
+ ) {
53
63
  --_sonic-glass-edge: 1px solid CanvasText;
54
- }
55
64
  }
65
+ }
56
66
  }
@@ -77,8 +77,9 @@
77
77
  scale: var(--_sonic-keycap-scale);
78
78
  translate: 0 var(--_sonic-keycap-shift);
79
79
  transition: var(--_sonic-press-transition);
80
+ }
80
81
 
81
- &::before {
82
+ :is(.sonic-button-cap,.sonic-segmented-cap,.sonic-toggle-cap)::before {
82
83
  position: absolute;
83
84
  inset: var(--_sonic-keycap-bevel);
84
85
  content: '';
@@ -89,8 +90,7 @@
89
90
  box-shadow: var(--_sonic-face-shadow);
90
91
  }
91
92
 
92
- & > * {
93
+ :is(.sonic-button-cap,.sonic-segmented-cap,.sonic-toggle-cap) > * {
93
94
  position: relative;
94
95
  }
95
- }
96
96
  }
@@ -21,12 +21,16 @@
21
21
  color: var(--_sonic-glass-text);
22
22
  background: var(--_sonic-glass-fill);
23
23
  border: var(--_sonic-glass-edge);
24
+ }
24
25
 
25
26
  @media (forced-colors: active) {
27
+
28
+ .sonic-screen {
26
29
  --_sonic-glass-texture: 0;
30
+ }
27
31
  }
28
32
 
29
- &::after {
33
+ .sonic-screen::after {
30
34
  position: absolute;
31
35
  inset: 0;
32
36
  pointer-events: none;
@@ -57,7 +61,7 @@
57
61
 
58
62
  @media (forced-colors: none) {
59
63
  /* No var() beside the tile, which would parse the url() again on every style recalculation */
60
- &::before {
64
+ .sonic-screen::before {
61
65
  position: absolute;
62
66
  inset: 0;
63
67
  color: color-mix(in oklab, var(--_sonic-glass-text) 7.5%, transparent);
@@ -72,17 +76,15 @@
72
76
  }
73
77
 
74
78
  @media (prefers-reduced-motion: no-preference) {
75
- &:is(:focus-visible, :focus-within)::before,
76
- &:has(:state(dragging))::before {
79
+ .sonic-screen:is(:focus-visible,:focus-within)::before,.sonic-screen:has(:state(dragging))::before {
77
80
  animation: sonic-glass-breathe 3s ease-in-out infinite alternate;
78
81
  }
79
82
 
80
83
  @media (hover: hover) {
81
- &:hover::before {
84
+ .sonic-screen:hover::before {
82
85
  animation: sonic-glass-breathe 3s ease-in-out infinite alternate;
83
86
  }
84
87
  }
85
88
  }
86
89
  }
87
- }
88
90
  }
@@ -66,30 +66,42 @@
66
66
  overlay var(--_sonic-fade-duration) allow-discrete;
67
67
 
68
68
  /* Grid only while open; engines keep the flip a closed readout took against a filtered ancestor */
69
- &:popover-open {
69
+ }
70
+ :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout):popover-open {
70
71
  display: grid;
71
72
  opacity: 1;
72
73
  translate: 0;
74
+ }
73
75
 
74
76
  @starting-style {
77
+ :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout):popover-open {
75
78
  opacity: 0;
76
79
  translate: 0 calc(0.15 * var(--_sonic-readout-size));
77
- }
78
80
  }
81
+ }
79
82
 
80
83
  @media (prefers-reduced-motion: reduce) {
81
- translate: 0;
82
84
 
83
- &:popover-open {
85
+ :is(
86
+ .sonic-dial-readout,
87
+ .sonic-envelope-readout,
88
+ .sonic-slider-readout,
89
+ .sonic-waveform-readout,
90
+ .sonic-wavestrip-readout,
91
+ .sonic-xy-readout
92
+ ) {
93
+ translate: 0;
94
+ }
84
95
  @starting-style {
96
+
97
+ :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout):popover-open {
85
98
  translate: 0;
86
- }
87
99
  }
100
+ }
88
101
  }
89
102
 
90
- :state(editing) > :is(.sonic-dial, .sonic-slider, .sonic-waveform, .sonic-wavestrip) > & {
103
+ :state(editing) > :is(.sonic-dial,.sonic-slider,.sonic-waveform,.sonic-wavestrip) > :is(.sonic-dial-readout,.sonic-envelope-readout,.sonic-slider-readout,.sonic-waveform-readout,.sonic-wavestrip-readout,.sonic-xy-readout) {
91
104
  pointer-events: auto;
92
105
  cursor: text;
93
106
  }
94
- }
95
107
  }
@@ -5,21 +5,21 @@
5
5
  line-height: 1;
6
6
  white-space: nowrap;
7
7
  pointer-events: none;
8
+ }
8
9
 
9
- & > * {
10
+ :is(.sonic-dial-scale,.sonic-slider-scale) > * {
10
11
  position: absolute;
11
12
  }
12
13
 
13
- & svg {
14
+ :is(.sonic-dial-scale,.sonic-slider-scale) svg {
14
15
  display: block;
15
16
  inline-size: 1em;
16
17
  block-size: 1em;
17
18
  }
18
19
 
19
- & > .sonic-scale-tick {
20
+ :is(.sonic-dial-scale,.sonic-slider-scale) > .sonic-scale-tick {
20
21
  background: var(--sonic-scale, var(--_sonic-etch));
21
22
  }
22
- }
23
23
 
24
24
  @media (forced-colors: active) {
25
25
  :is(.sonic-dial-scale, .sonic-slider-scale) > .sonic-scale-tick {
@@ -23,21 +23,30 @@
23
23
  text-align: center;
24
24
  background: transparent;
25
25
  border: 0;
26
+ }
26
27
 
27
- &::selection {
28
+ :is(.sonic-dial-entry,.sonic-number-entry,.sonic-slider-entry,.sonic-waveform-entry,.sonic-wavestrip-entry)::selection {
28
29
  color: var(--sonic-entry-selection, var(--_sonic-lit));
29
30
  background: transparent;
30
31
  }
31
32
 
32
- &:focus-visible {
33
+ :is(.sonic-dial-entry,.sonic-number-entry,.sonic-slider-entry,.sonic-waveform-entry,.sonic-wavestrip-entry):focus-visible {
33
34
  outline: 2px solid transparent;
34
35
  outline-offset: -2px;
35
36
  }
36
37
 
37
38
  @supports (field-sizing: content) {
39
+
40
+ :is(
41
+ .sonic-dial-entry,
42
+ .sonic-number-entry,
43
+ .sonic-slider-entry,
44
+ .sonic-waveform-entry,
45
+ .sonic-wavestrip-entry
46
+ ) {
38
47
  inline-size: auto;
39
48
  min-inline-size: 3ch;
40
49
  field-sizing: content;
41
- }
42
50
  }
51
+ }
43
52
  }
@@ -66,8 +66,9 @@
66
66
  container-type: size;
67
67
  background: var(--_sonic-lens-bezel);
68
68
  border-radius: calc(var(--_sonic-meter-size) * var(--_sonic-meter-radius-ratio));
69
+ }
69
70
 
70
- &::after {
71
+ .sonic-meter::after {
71
72
  position: absolute;
72
73
  inset: 0;
73
74
  pointer-events: none;
@@ -75,7 +76,6 @@
75
76
  border-radius: inherit;
76
77
  box-shadow: var(--_sonic-groove);
77
78
  }
78
- }
79
79
 
80
80
  [orientation='horizontal'] > .sonic-meter {
81
81
  --_sonic-meter-toward: to right;
@@ -340,8 +340,9 @@
340
340
  block-size: var(--_sonic-meter-lens);
341
341
  background: var(--_sonic-lens);
342
342
  border-radius: 50%;
343
+ }
343
344
 
344
- &::after {
345
+ .sonic-meter-clip::after {
345
346
  position: absolute;
346
347
  inset: 0;
347
348
  content: '';
@@ -353,7 +354,6 @@
353
354
  border-radius: inherit;
354
355
  opacity: var(--_sonic-meter-clipped, 0);
355
356
  }
356
- }
357
357
 
358
358
  :is([value], :state(ladder)) > .sonic-meter > .sonic-meter-clip {
359
359
  display: none;
@@ -370,12 +370,12 @@
370
370
  .sonic-meter {
371
371
  forced-color-adjust: none;
372
372
  background: Canvas;
373
+ }
373
374
 
374
- &::after {
375
+ .sonic-meter::after {
375
376
  border: 1px solid CanvasText;
376
377
  box-shadow: none;
377
378
  }
378
- }
379
379
 
380
380
  :is(.sonic-meter-segments, .sonic-meter-clip) {
381
381
  background: var(--_sonic-unlit);
@@ -45,15 +45,14 @@
45
45
  align-items: center;
46
46
  margin: 0;
47
47
  white-space: nowrap;
48
+ }
48
49
 
49
- &::before,
50
- &::after {
50
+ .sonic-panel-title::before,.sonic-panel-title::after {
51
51
  flex: 1;
52
52
  min-inline-size: 1em;
53
53
  content: '';
54
54
  border-block-start: 1px solid var(--_sonic-panel-line);
55
55
  }
56
- }
57
56
 
58
57
  .sonic-panel-rule {
59
58
  align-self: stretch;
@@ -28,8 +28,9 @@
28
28
  var(--_sonic-ring-size) * (var(--_sonic-ring-ratio) + var(--_sonic-ring-gap-ratio))
29
29
  );
30
30
  border-radius: 50%;
31
+ }
31
32
 
32
- &::before {
33
+ .sonic-ring::before {
33
34
  --_sonic-arc-width: calc(var(--_sonic-ring-size) * var(--_sonic-ring-ratio));
34
35
  --_sonic-arc-inset: 0px;
35
36
 
@@ -53,13 +54,12 @@
53
54
  }
54
55
 
55
56
  @media (forced-colors: active) {
56
- &::before {
57
+ .sonic-ring::before {
57
58
  --_sonic-arc-shade: none;
58
59
 
59
60
  forced-color-adjust: none;
60
61
  }
61
62
  }
62
- }
63
63
 
64
64
  .sonic-ring > :not(:defined),
65
65
  .sonic-ring > * > .sonic-button {
@@ -166,16 +166,16 @@
166
166
 
167
167
  position: relative;
168
168
  padding-inline: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-padding-ratio));
169
+ }
169
170
 
170
- & > * {
171
+ .sonic-segmented-cap > * {
171
172
  filter: var(--_sonic-engraving);
172
173
  }
173
174
 
174
- & > svg {
175
+ .sonic-segmented-cap > svg {
175
176
  inline-size: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-icon-ratio));
176
177
  block-size: calc(var(--_sonic-segmented-size) * var(--_sonic-segmented-icon-ratio));
177
178
  }
178
- }
179
179
 
180
180
  .sonic-segmented-option[aria-checked='true'] .sonic-segmented-cap > * {
181
181
  filter: var(--_sonic-engraving) var(--_sonic-legend-glow);
@@ -190,14 +190,14 @@
190
190
  --_sonic-skirt: var(--_sonic-lit);
191
191
  --_sonic-face: var(--_sonic-lit);
192
192
  --_sonic-ink: HighlightText;
193
+ }
193
194
 
194
- &:disabled {
195
+ .sonic-segmented-option[aria-checked='true']:disabled {
195
196
  --_sonic-ink: ButtonFace;
196
197
  }
197
198
 
198
- & .sonic-segmented-cap > * {
199
+ .sonic-segmented-option[aria-checked='true'] .sonic-segmented-cap > * {
199
200
  filter: none;
200
201
  }
201
- }
202
202
  }
203
203
  }
@@ -117,11 +117,14 @@
117
117
  --_sonic-slider-groove-hovered var(--_sonic-fade-duration) ease-out
118
118
  var(--_sonic-slider-groove-hover-delay),
119
119
  --_sonic-slider-groove-held var(--_sonic-fade-duration) ease-out;
120
+ }
120
121
 
121
122
  @media (prefers-reduced-motion: reduce) {
123
+
124
+ .sonic-slider {
122
125
  transition: none;
123
- }
124
126
  }
127
+ }
125
128
 
126
129
  :where(:not(:disabled)) > .sonic-slider:focus-visible,
127
130
  :state(dragging) > .sonic-slider {
@@ -206,11 +209,14 @@
206
209
  1,
207
210
  1
208
211
  );
212
+ }
209
213
 
210
214
  @media (prefers-reduced-motion: reduce) {
215
+
216
+ :state(springing) > .sonic-slider {
211
217
  transition: none;
212
- }
213
218
  }
219
+ }
214
220
 
215
221
  [dimmed] > .sonic-slider {
216
222
  --_sonic-slider-lit: var(--_sonic-lit-off);
@@ -269,8 +275,9 @@
269
275
 
270
276
  .sonic-slider-scale {
271
277
  font-size: calc(var(--_sonic-slider-size) * var(--_sonic-slider-scale-font-ratio));
278
+ }
272
279
 
273
- & > * {
280
+ .sonic-slider-scale > * {
274
281
  --_sonic-slider-scale-along: calc(
275
282
  var(--_sonic-slider-cap) / 2 + var(--_sonic-scale-at, 0) * var(--_sonic-slider-travel)
276
283
  );
@@ -280,23 +287,19 @@
280
287
  translate: -50% 0;
281
288
  }
282
289
 
283
- & > .sonic-scale-tick {
290
+ .sonic-slider-scale > .sonic-scale-tick {
284
291
  inline-size: var(--_sonic-unit);
285
292
  block-size: calc(var(--_sonic-slider-scale-band) * 0.4);
286
293
  }
287
- }
288
-
289
- [orientation='vertical'] > .sonic-slider > .sonic-slider-scale {
290
- & > * {
294
+ :is([orientation='vertical'] > .sonic-slider > .sonic-slider-scale) > * {
291
295
  inset: auto var(--_sonic-slider-scale-edge) var(--_sonic-slider-scale-along) auto;
292
296
  translate: 0 50%;
293
297
  }
294
298
 
295
- & > .sonic-scale-tick {
299
+ :is([orientation='vertical'] > .sonic-slider > .sonic-slider-scale) > .sonic-scale-tick {
296
300
  inline-size: calc(var(--_sonic-slider-scale-band) * 0.4);
297
301
  block-size: var(--_sonic-unit);
298
302
  }
299
- }
300
303
 
301
304
  .sonic-slider-groove {
302
305
  --_sonic-slider-lit-to: var(--_sonic-slider-played, var(--_sonic-slider-value, 0));
@@ -314,12 +317,13 @@
314
317
  transparent
315
318
  calc(
316
319
  var(--_sonic-slider-lit-low) * var(--_sonic-slider-travel) +
317
- var(--_sonic-slider-groove-end) * sign(var(--_sonic-slider-lit-low))
320
+ var(--_sonic-slider-groove-end) * clamp(0, var(--_sonic-slider-lit-low) * 100000, 1)
318
321
  ),
319
322
  var(--_sonic-slider-lit) 0
320
323
  calc(
321
324
  var(--_sonic-slider-lit-high) * var(--_sonic-slider-travel) +
322
- var(--_sonic-slider-groove-end) * (2 - sign(1 - var(--_sonic-slider-lit-high)))
325
+ var(--_sonic-slider-groove-end) *
326
+ (2 - clamp(0, (1 - var(--_sonic-slider-lit-high)) * 100000, 1))
323
327
  ),
324
328
  transparent 0
325
329
  ),
@@ -401,41 +405,37 @@
401
405
 
402
406
  display: block;
403
407
  background: color-mix(in oklab, var(--_sonic-slider-modulation) 50%, transparent);
408
+ }
404
409
 
405
- &::before,
406
- &::after {
410
+ :is(:state(modulated) > .sonic-slider > .sonic-slider-modulation)::before,:is(:state(modulated) > .sonic-slider > .sonic-slider-modulation)::after {
407
411
  position: absolute;
408
412
  content: '';
409
413
  }
410
414
 
411
- &::before {
415
+ :is(:state(modulated) > .sonic-slider > .sonic-slider-modulation)::before {
412
416
  inset: 0 auto 0 var(--_sonic-slider-live-start);
413
417
  inline-size: var(--_sonic-slider-live-length);
414
418
  background: var(--_sonic-slider-modulation);
415
419
  border-radius: inherit;
416
420
  }
417
421
 
418
- &::after {
422
+ :is(:state(modulated) > .sonic-slider > .sonic-slider-modulation)::after {
419
423
  inset: var(--_sonic-slider-tick-overhang) auto var(--_sonic-slider-tick-overhang)
420
424
  var(--_sonic-slider-tick-start);
421
425
  inline-size: var(--_sonic-unit);
422
426
  background: var(--_sonic-slider-modulation-tick);
423
427
  }
424
- }
425
-
426
- :where([orientation='vertical']):state(modulated) > .sonic-slider > .sonic-slider-modulation {
427
- &::before {
428
+ :is(:where([orientation='vertical']):state(modulated) > .sonic-slider > .sonic-slider-modulation)::before {
428
429
  inset: auto 0 var(--_sonic-slider-live-start);
429
430
  inline-size: auto;
430
431
  block-size: var(--_sonic-slider-live-length);
431
432
  }
432
433
 
433
- &::after {
434
+ :is(:where([orientation='vertical']):state(modulated) > .sonic-slider > .sonic-slider-modulation)::after {
434
435
  inset: auto var(--_sonic-slider-tick-overhang) var(--_sonic-slider-tick-start);
435
436
  inline-size: auto;
436
437
  block-size: var(--_sonic-unit);
437
438
  }
438
- }
439
439
 
440
440
  .sonic-slider-cap {
441
441
  --_sonic-slider-indicator-width: calc(
@@ -464,21 +464,21 @@
464
464
  var(--_sonic-rim),
465
465
  var(--_sonic-focus-shadow);
466
466
  translate: var(--_sonic-slider-offset) 0;
467
+ }
467
468
 
468
- &::before,
469
- &::after {
469
+ .sonic-slider-cap::before,.sonic-slider-cap::after {
470
470
  position: absolute;
471
471
  content: '';
472
472
  }
473
473
 
474
- &::before {
474
+ .sonic-slider-cap::before {
475
475
  inset: var(--_sonic-slider-bevel);
476
476
  background: var(--_sonic-face);
477
477
  border-radius: max(0px, var(--_sonic-slider-corner) - var(--_sonic-slider-bevel));
478
478
  box-shadow: var(--_sonic-face-shadow);
479
479
  }
480
480
 
481
- &::after {
481
+ .sonic-slider-cap::after {
482
482
  inset: var(--_sonic-slider-indicator-inset)
483
483
  calc(50% - var(--_sonic-slider-indicator-width) / 2);
484
484
  background: var(--_sonic-slider-indicator);
@@ -486,19 +486,18 @@
486
486
  box-shadow: inset 0 0 calc(0.75 * var(--_sonic-unit))
487
487
  rgb(from var(--_sonic-shade) r g b / calc(0.55 * var(--_sonic-relief)));
488
488
  }
489
- }
490
489
 
491
490
  [orientation='vertical'] > .sonic-slider > .sonic-slider-cap {
492
491
  inset: auto 0 0 var(--_sonic-slider-scale-band);
493
492
  inline-size: auto;
494
493
  block-size: var(--_sonic-slider-cap);
495
494
  translate: 0 calc(-1 * var(--_sonic-slider-offset));
495
+ }
496
496
 
497
- &::after {
497
+ :is([orientation='vertical'] > .sonic-slider > .sonic-slider-cap)::after {
498
498
  inset: calc(50% - var(--_sonic-slider-indicator-width) / 2)
499
499
  var(--_sonic-slider-indicator-inset);
500
500
  }
501
- }
502
501
 
503
502
  :disabled > .sonic-slider > .sonic-slider-cap::after {
504
503
  background: var(--_sonic-ink-disabled);