@xsynaptic/sonic-ui 0.5.0 → 0.6.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 (118) hide show
  1. package/README.md +3 -1
  2. package/dist/default/dat.js +5 -4
  3. package/dist/default/define/button.js +1 -1
  4. package/dist/default/define.js +2 -2
  5. package/dist/default/elements/button.js +3 -3
  6. package/dist/default/elements/envelope.js +32 -16
  7. package/dist/default/elements/meter.js +11 -7
  8. package/dist/default/elements/number.js +1 -1
  9. package/dist/default/elements/radio-group.js +43 -45
  10. package/dist/default/elements/readout.js +1 -1
  11. package/dist/default/elements/sonic-element.js +56 -29
  12. package/dist/default/elements/switch.js +32 -38
  13. package/dist/default/elements/value-element.js +111 -108
  14. package/dist/default/elements/wave-element.js +5 -2
  15. package/dist/default/elements/waveform.js +35 -12
  16. package/dist/default/elements/wavestrip.js +18 -15
  17. package/dist/default/elements/xy.js +32 -18
  18. package/dist/default/index.js +2 -2
  19. package/dist/default/lib/adsr-shape.js +5 -0
  20. package/dist/default/lib/ballistics.js +2 -2
  21. package/dist/default/lib/canvas-surface.js +13 -2
  22. package/dist/default/lib/distribute.js +1 -1
  23. package/dist/default/lib/drag-step.js +4 -4
  24. package/dist/default/lib/frame-timeline.js +2 -1
  25. package/dist/default/lib/marker-band.js +54 -10
  26. package/dist/default/lib/marker-rider.js +10 -4
  27. package/dist/default/lib/math.js +6 -1
  28. package/dist/default/lib/pointer-drag.js +8 -5
  29. package/dist/default/lib/resample-peaks.js +11 -1
  30. package/dist/default/lib/write-attribute.js +1 -0
  31. package/dist/dev/dat.d.ts +2 -2
  32. package/dist/dev/dat.js +5 -4
  33. package/dist/dev/dat.js.map +1 -1
  34. package/dist/dev/define/button.js +1 -1
  35. package/dist/dev/define.d.ts +4 -4
  36. package/dist/dev/define.js +2 -2
  37. package/dist/dev/elements/button.js +3 -3
  38. package/dist/dev/elements/button.js.map +1 -1
  39. package/dist/dev/elements/dial.d.ts +1 -1
  40. package/dist/dev/elements/dial.js.map +1 -1
  41. package/dist/dev/elements/envelope.js +32 -16
  42. package/dist/dev/elements/envelope.js.map +1 -1
  43. package/dist/dev/elements/meter.d.ts +1 -1
  44. package/dist/dev/elements/meter.js +11 -7
  45. package/dist/dev/elements/meter.js.map +1 -1
  46. package/dist/dev/elements/number.js +1 -1
  47. package/dist/dev/elements/number.js.map +1 -1
  48. package/dist/dev/elements/radio-group.js +43 -45
  49. package/dist/dev/elements/radio-group.js.map +1 -1
  50. package/dist/dev/elements/readout.js +1 -1
  51. package/dist/dev/elements/readout.js.map +1 -1
  52. package/dist/dev/elements/slider.d.ts +1 -1
  53. package/dist/dev/elements/slider.js.map +1 -1
  54. package/dist/dev/elements/sonic-element.d.ts +4 -2
  55. package/dist/dev/elements/sonic-element.js +79 -29
  56. package/dist/dev/elements/sonic-element.js.map +1 -1
  57. package/dist/dev/elements/switch.js +32 -38
  58. package/dist/dev/elements/switch.js.map +1 -1
  59. package/dist/dev/elements/value-element.d.ts +3 -3
  60. package/dist/dev/elements/value-element.js +111 -108
  61. package/dist/dev/elements/value-element.js.map +1 -1
  62. package/dist/dev/elements/wave-element.d.ts +1 -0
  63. package/dist/dev/elements/wave-element.js +5 -2
  64. package/dist/dev/elements/wave-element.js.map +1 -1
  65. package/dist/dev/elements/waveform.d.ts +1 -1
  66. package/dist/dev/elements/waveform.js +35 -12
  67. package/dist/dev/elements/waveform.js.map +1 -1
  68. package/dist/dev/elements/wavestrip.js +18 -15
  69. package/dist/dev/elements/wavestrip.js.map +1 -1
  70. package/dist/dev/elements/xy.d.ts +3 -3
  71. package/dist/dev/elements/xy.js +32 -18
  72. package/dist/dev/elements/xy.js.map +1 -1
  73. package/dist/dev/index.d.ts +2 -2
  74. package/dist/dev/index.js +2 -2
  75. package/dist/dev/lib/adsr-shape.js +5 -0
  76. package/dist/dev/lib/adsr-shape.js.map +1 -1
  77. package/dist/dev/lib/ballistics.js +2 -2
  78. package/dist/dev/lib/ballistics.js.map +1 -1
  79. package/dist/dev/lib/canvas-surface.d.ts +1 -0
  80. package/dist/dev/lib/canvas-surface.js +13 -2
  81. package/dist/dev/lib/canvas-surface.js.map +1 -1
  82. package/dist/dev/lib/distribute.js +1 -1
  83. package/dist/dev/lib/distribute.js.map +1 -1
  84. package/dist/dev/lib/drag-step.js +4 -4
  85. package/dist/dev/lib/drag-step.js.map +1 -1
  86. package/dist/dev/lib/frame-timeline.js +2 -1
  87. package/dist/dev/lib/frame-timeline.js.map +1 -1
  88. package/dist/dev/lib/marker-band.js +54 -10
  89. package/dist/dev/lib/marker-band.js.map +1 -1
  90. package/dist/dev/lib/marker-rider.js +10 -4
  91. package/dist/dev/lib/marker-rider.js.map +1 -1
  92. package/dist/dev/lib/math.js +6 -1
  93. package/dist/dev/lib/math.js.map +1 -1
  94. package/dist/dev/lib/pointer-drag.js +8 -5
  95. package/dist/dev/lib/pointer-drag.js.map +1 -1
  96. package/dist/dev/lib/resample-peaks.js +11 -1
  97. package/dist/dev/lib/resample-peaks.js.map +1 -1
  98. package/dist/dev/lib/write-attribute.js +1 -0
  99. package/dist/dev/lib/write-attribute.js.map +1 -1
  100. package/dist/skins/amber.css +8 -0
  101. package/dist/skins/flat.css +25 -0
  102. package/dist/skins/ivory.css +1 -0
  103. package/dist/skins/lime.css +2 -0
  104. package/dist/skins/slate.css +2 -0
  105. package/dist/styles/button.css +38 -10
  106. package/dist/styles/dial.css +24 -16
  107. package/dist/styles/envelope.css +56 -11
  108. package/dist/styles/led.css +3 -3
  109. package/dist/styles/material.css +83 -41
  110. package/dist/styles/meter.css +8 -4
  111. package/dist/styles/panel.css +5 -3
  112. package/dist/styles/segmented.css +27 -5
  113. package/dist/styles/slider.css +2 -1
  114. package/dist/styles/switch.css +59 -20
  115. package/dist/styles/waveform.css +28 -5
  116. package/dist/styles/wavestrip.css +23 -6
  117. package/dist/styles/xy.css +61 -24
  118. package/package.json +2 -5
@@ -37,7 +37,7 @@
37
37
  --_sonic-button-icon-ratio: var(--sonic-button-icon-ratio, 0.5);
38
38
  --_sonic-button-led-ratio: var(--sonic-button-led-ratio, 0.2);
39
39
  --_sonic-button-led-icon-ratio: var(--sonic-button-led-icon-ratio, 0.35);
40
- --_sonic-button-depth-ratio: var(--sonic-button-depth-ratio, 0.03);
40
+ --_sonic-button-depth-ratio: var(--sonic-button-depth-ratio, calc(0.03 * var(--_sonic-relief)));
41
41
  --_sonic-button-press-scale: var(--sonic-button-press-scale, 0.985);
42
42
  --_sonic-unit: calc(var(--_sonic-button-size) / 32);
43
43
  --_sonic-button-corner: calc(var(--_sonic-button-size) * var(--_sonic-button-radius-ratio));
@@ -65,7 +65,11 @@
65
65
 
66
66
  /* Before the latched rule, which must win unchanged */
67
67
  :where([armed]) > .sonic-button:not(:disabled, [aria-disabled='true']) {
68
- --_sonic-keycap-glow: color-mix(in oklab, var(--_sonic-lit) 8%, transparent);
68
+ --_sonic-keycap-glow: color-mix(
69
+ in oklab,
70
+ var(--_sonic-lit) calc(8% * var(--_sonic-relief)),
71
+ transparent
72
+ );
69
73
 
70
74
  color: color-mix(in oklab, var(--_sonic-lit) 55%, var(--_sonic-ink));
71
75
 
@@ -87,13 +91,24 @@
87
91
  }
88
92
 
89
93
  .sonic-button:is([aria-pressed='true'], :where([momentary]:state(pressed)) > *) {
90
- --_sonic-keycap-glow: color-mix(in oklab, var(--_sonic-lit) 22%, transparent);
94
+ --_sonic-keycap-glow: var(--_sonic-keycap-lit-glow);
91
95
 
92
96
  color: var(--_sonic-lit);
93
- background: linear-gradient(
94
- var(--_sonic-light-fall),
95
- color-mix(in oklab, var(--_sonic-lit) 25%, #000),
96
- color-mix(in oklab, var(--_sonic-lit) 60%, #000)
97
+ background: var(
98
+ --sonic-well-lit,
99
+ linear-gradient(
100
+ var(--_sonic-light-fall),
101
+ color-mix(
102
+ in oklab,
103
+ color-mix(in oklab, var(--_sonic-lit) 25%, #000) calc(100% * var(--_sonic-relief)),
104
+ transparent
105
+ ),
106
+ color-mix(
107
+ in oklab,
108
+ color-mix(in oklab, var(--_sonic-lit) 60%, #000) calc(100% * var(--_sonic-relief)),
109
+ transparent
110
+ )
111
+ )
97
112
  );
98
113
  }
99
114
 
@@ -127,6 +142,16 @@
127
142
  }
128
143
  }
129
144
 
145
+ .sonic-button[aria-pressed='true']:not(:disabled, [aria-disabled='true']):focus-visible {
146
+ color: var(--sonic-lit-hover, var(--_sonic-lit));
147
+ }
148
+
149
+ @media (hover: hover) {
150
+ .sonic-button[aria-pressed='true']:not(:disabled, [aria-disabled='true']):hover {
151
+ color: var(--sonic-lit-hover, var(--_sonic-lit));
152
+ }
153
+ }
154
+
130
155
  .sonic-button-cap {
131
156
  --_sonic-keycap-corner: max(0px, var(--_sonic-button-corner) - var(--_sonic-button-gap));
132
157
  --_sonic-keycap-bevel: calc(var(--_sonic-button-size) * var(--_sonic-button-bevel-ratio));
@@ -150,7 +175,11 @@
150
175
  inline-size: calc(var(--_sonic-button-size) * var(--_sonic-button-icon-ratio));
151
176
  block-size: calc(var(--_sonic-button-size) * var(--_sonic-button-icon-ratio));
152
177
  filter: var(--_sonic-engraving);
153
- mask-image: linear-gradient(var(--_sonic-light-fall), #000 15%, rgb(0 0 0 / 60%));
178
+ mask-image: linear-gradient(
179
+ var(--_sonic-light-fall),
180
+ #000 15%,
181
+ rgb(0 0 0 / calc(1 - 0.4 * var(--_sonic-relief)))
182
+ );
154
183
  mask-repeat: no-repeat;
155
184
  }
156
185
  }
@@ -163,8 +192,7 @@
163
192
  .sonic-button:is([aria-pressed='true'], :where([momentary]:state(pressed)) > *)
164
193
  .sonic-button-cap
165
194
  > svg {
166
- filter: var(--_sonic-engraving)
167
- drop-shadow(0 0 var(--_sonic-unit) color-mix(in oklab, var(--_sonic-lit) 35%, transparent));
195
+ filter: var(--_sonic-engraving) var(--_sonic-legend-glow);
168
196
  }
169
197
 
170
198
  /* fallow-ignore-next-line code-duplication -- one pressed state across the cap's parts */
@@ -145,6 +145,7 @@
145
145
 
146
146
  .sonic-dial-scale {
147
147
  font-size: calc(var(--_sonic-dial-size) * var(--_sonic-dial-scale-font-ratio));
148
+ line-height: 1cap;
148
149
 
149
150
  & > * {
150
151
  --_sonic-dial-scale-angle: calc(
@@ -158,8 +159,8 @@
158
159
 
159
160
  inset: calc(50% - var(--_sonic-dial-scale-cos) * var(--_sonic-dial-scale-radius)) auto auto
160
161
  calc(50% + var(--_sonic-dial-scale-sin) * var(--_sonic-dial-scale-radius));
161
- translate: calc(-50% + var(--_sonic-dial-scale-sin) * 50%)
162
- calc(-50% - var(--_sonic-dial-scale-cos) * 50%);
162
+ translate: calc(-50% + var(--_sonic-dial-scale-sin) * (50% + 0.15cap))
163
+ calc(-50% - var(--_sonic-dial-scale-cos) * (50% + 0.15cap));
163
164
  }
164
165
 
165
166
  & > .sonic-scale-tick {
@@ -310,9 +311,10 @@
310
311
  &::before {
311
312
  inset: 0;
312
313
  background: repeating-conic-gradient(
313
- rgb(0 0 0 / 30%) 0,
314
- rgb(255 255 255 / 12%) calc(var(--_sonic-dial-ridge-angle) / 2),
315
- rgb(0 0 0 / 30%) var(--_sonic-dial-ridge-angle)
314
+ rgb(0 0 0 / calc(0.3 * var(--_sonic-relief))) 0,
315
+ rgb(255 255 255 / calc(0.12 * var(--_sonic-relief)))
316
+ calc(var(--_sonic-dial-ridge-angle) / 2),
317
+ rgb(0 0 0 / calc(0.3 * var(--_sonic-relief))) var(--_sonic-dial-ridge-angle)
316
318
  );
317
319
  rotate: var(--_sonic-dial-angle);
318
320
  }
@@ -325,15 +327,15 @@
325
327
  calc(
326
328
  var(--_sonic-dial-face-drift) * var(--_sonic-dial-angle) - var(--_sonic-light-tilt)
327
329
  ),
328
- rgb(255 255 255 / 16%),
330
+ rgb(255 255 255 / calc(0.16 * var(--_sonic-relief))),
329
331
  transparent 12%,
330
- rgb(0 0 0 / 10%) 25%,
332
+ rgb(0 0 0 / calc(0.1 * var(--_sonic-relief))) 25%,
331
333
  transparent 38%,
332
- rgb(255 255 255 / 12%) 50%,
334
+ rgb(255 255 255 / calc(0.12 * var(--_sonic-relief))) 50%,
333
335
  transparent 62%,
334
- rgb(0 0 0 / 10%) 75%,
336
+ rgb(0 0 0 / calc(0.1 * var(--_sonic-relief))) 75%,
335
337
  transparent 88%,
336
- rgb(255 255 255 / 16%)
338
+ rgb(255 255 255 / calc(0.16 * var(--_sonic-relief)))
337
339
  ),
338
340
  var(--_sonic-face);
339
341
  box-shadow: var(--_sonic-face-shadow);
@@ -351,6 +353,9 @@
351
353
  --_sonic-dial-indicator-width: calc(
352
354
  var(--_sonic-dial-size) * var(--_sonic-dial-indicator-ratio)
353
355
  );
356
+ --_sonic-dial-indicator-tip: calc(
357
+ var(--_sonic-dial-indicator-width) * (1 - var(--_sonic-dial-indicator-taper)) / 2
358
+ );
354
359
 
355
360
  position: absolute;
356
361
  inset-block-start: 6%;
@@ -360,12 +365,15 @@
360
365
  content: '';
361
366
  background: var(--_sonic-ink);
362
367
  border-radius: calc(var(--_sonic-dial-indicator-width) / 2);
363
- box-shadow: inset 0 0 calc(0.75 * var(--_sonic-unit)) rgb(0 0 0 / 55%);
364
- clip-path: polygon(
365
- calc(50% * var(--_sonic-dial-indicator-taper)) 0,
366
- calc(100% - 50% * var(--_sonic-dial-indicator-taper)) 0,
367
- 100% 100%,
368
- 0 100%
368
+ box-shadow: inset 0 0 calc(0.75 * var(--_sonic-unit))
369
+ rgb(0 0 0 / calc(0.55 * var(--_sonic-relief)));
370
+ clip-path: shape(
371
+ from 0 100%,
372
+ line to calc(50% - var(--_sonic-dial-indicator-tip)) var(--_sonic-dial-indicator-tip),
373
+ arc to calc(50% + var(--_sonic-dial-indicator-tip)) var(--_sonic-dial-indicator-tip) of
374
+ var(--_sonic-dial-indicator-tip) cw,
375
+ line to 100% 100%,
376
+ close
369
377
  );
370
378
  translate: -50% 0;
371
379
  }
@@ -30,26 +30,36 @@
30
30
  --_sonic-envelope-curve-ratio: var(--sonic-envelope-curve-ratio, 0.08);
31
31
  --_sonic-unit: calc(var(--_sonic-envelope-size) / 64);
32
32
  --_sonic-envelope-inset: calc(var(--_sonic-envelope-size) * var(--_sonic-envelope-inset-ratio));
33
+ --_sonic-glass-radius: calc(var(--_sonic-envelope-size) * var(--_sonic-envelope-radius-ratio));
33
34
 
34
35
  inline-size: calc(var(--_sonic-envelope-size) * var(--_sonic-envelope-aspect-ratio));
35
36
  block-size: var(--_sonic-envelope-size);
36
37
  container-type: size;
37
- border-radius: calc(var(--_sonic-envelope-size) * var(--_sonic-envelope-radius-ratio));
38
+ border-radius: var(--_sonic-glass-radius);
39
+ isolation: isolate;
38
40
  }
39
41
 
40
42
  .sonic-envelope-graph {
41
43
  position: absolute;
42
44
  inset: var(--_sonic-envelope-inset);
45
+ z-index: 1;
43
46
  inline-size: calc(100% - 2 * var(--_sonic-envelope-inset));
44
47
  block-size: calc(100% - 2 * var(--_sonic-envelope-inset));
45
48
  overflow: visible;
46
49
  pointer-events: none;
50
+ clip-path: inset(calc(-1 * var(--_sonic-envelope-inset)));
47
51
  }
48
52
 
49
53
  .sonic-envelope-fill {
50
54
  fill: color-mix(in oklab, var(--_sonic-lit) 18%, transparent);
51
55
  }
52
56
 
57
+ .sonic-envelope-floor {
58
+ height: calc(
59
+ 1px * var(--_sonic-envelope-inset-ratio) / (1 - 2 * var(--_sonic-envelope-inset-ratio))
60
+ );
61
+ }
62
+
53
63
  .sonic-envelope-line {
54
64
  fill: none;
55
65
  stroke: var(--_sonic-lit);
@@ -60,11 +70,13 @@
60
70
  }
61
71
 
62
72
  :is(.sonic-envelope-handle, .sonic-envelope-curve) {
63
- --_sonic-point-ring: var(--_sonic-glass-text);
64
- --_sonic-point-core: var(--_sonic-glass);
65
- --_sonic-point-halo: 0 0 transparent;
66
- --_sonic-point-held-halo: 0 0 calc(0.5 * var(--_sonic-point-size))
67
- calc(0.05 * var(--_sonic-point-size)) color-mix(in oklab, var(--_sonic-lit) 50%, transparent);
73
+ --_sonic-point-ring: var(--_sonic-lit);
74
+ --_sonic-point-core: var(--_sonic-lit);
75
+ --_sonic-point-lift: color-mix(in oklab, var(--_sonic-lit) 85%, #fff);
76
+ --_sonic-point-edge: max(1px, var(--_sonic-point-stroke, 0px));
77
+ --_sonic-point-halo: transparent;
78
+ --_sonic-point-bracket: transparent;
79
+ --_sonic-point-bracket-scale: 0.6;
68
80
 
69
81
  position: absolute;
70
82
  inset: auto auto
@@ -76,18 +88,37 @@
76
88
  var(--_sonic-envelope-inset) + var(--_sonic-envelope-x, 0) *
77
89
  (100cqi - 2 * var(--_sonic-envelope-inset)) - var(--_sonic-point-size) / 2
78
90
  );
91
+ z-index: 1;
79
92
  box-sizing: border-box;
80
93
  inline-size: var(--_sonic-point-size);
81
94
  block-size: var(--_sonic-point-size);
82
95
  touch-action: none;
83
96
  background: var(--_sonic-point-core);
84
- border: max(1px, var(--_sonic-point-stroke, 0px)) solid var(--_sonic-point-ring);
97
+ border: var(--_sonic-point-edge) solid var(--_sonic-point-ring);
85
98
  border-radius: 50%;
86
- box-shadow: var(--_sonic-point-halo), var(--_sonic-focus-shadow, 0 0 transparent);
99
+ box-shadow:
100
+ 0 0 calc(0.5 * var(--_sonic-point-size)) calc(0.05 * var(--_sonic-point-size))
101
+ var(--_sonic-point-halo),
102
+ var(--_sonic-focus-shadow, 0 0 transparent);
87
103
  transition:
88
104
  background-color 120ms ease-out,
89
105
  border-color 120ms ease-out,
90
106
  box-shadow 120ms ease-out;
107
+
108
+ &::after {
109
+ position: absolute;
110
+ inset: calc(-0.4 * var(--_sonic-point-size) - 2 * var(--_sonic-point-edge));
111
+ pointer-events: none;
112
+ content: '';
113
+ border: var(--_sonic-point-edge) solid var(--_sonic-point-bracket);
114
+ border-block-start-color: transparent;
115
+ border-radius: 50%;
116
+ rotate: 45deg;
117
+ scale: var(--_sonic-point-bracket-scale);
118
+ transition:
119
+ border-color 120ms ease-out,
120
+ scale 120ms ease-out;
121
+ }
91
122
  }
92
123
 
93
124
  .sonic-envelope-handle {
@@ -116,26 +147,39 @@
116
147
 
117
148
  :is(.sonic-envelope-curve, .sonic-envelope-handle)[data-sonic-disabled] {
118
149
  --_sonic-point-ring: var(--_sonic-unlit);
150
+ --_sonic-point-core: var(--_sonic-glass);
119
151
 
120
152
  cursor: default;
121
153
  }
122
154
 
123
155
  @media (hover: hover) {
124
156
  :is(.sonic-envelope-curve, .sonic-envelope-handle):not([data-sonic-disabled]):hover {
125
- --_sonic-point-ring: var(--_sonic-lit);
157
+ --_sonic-point-ring: var(--_sonic-point-lift);
158
+ --_sonic-point-core: var(--_sonic-point-lift);
126
159
  }
127
160
  }
128
161
 
129
162
  :is(.sonic-envelope-curve, .sonic-envelope-handle):not([data-sonic-disabled]):active {
130
163
  --_sonic-point-ring: var(--_sonic-lit);
131
- --_sonic-point-core: var(--_sonic-lit);
132
- --_sonic-point-halo: var(--_sonic-point-held-halo);
164
+ --_sonic-point-core: var(--_sonic-glass);
165
+ --_sonic-point-halo: color-mix(
166
+ in oklab,
167
+ var(--_sonic-lit) calc(50% * var(--_sonic-relief)),
168
+ transparent
169
+ );
170
+ --_sonic-point-bracket: color-mix(
171
+ in oklab,
172
+ var(--_sonic-lit) calc(100% * (1 - var(--_sonic-relief))),
173
+ transparent
174
+ );
175
+ --_sonic-point-bracket-scale: 1;
133
176
  }
134
177
 
135
178
  @media (forced-colors: active) {
136
179
  .sonic-envelope {
137
180
  --_sonic-lit: Highlight;
138
181
  --_sonic-unlit: GrayText;
182
+ --_sonic-glass: Canvas;
139
183
  }
140
184
 
141
185
  .sonic-envelope-graph {
@@ -144,6 +188,7 @@
144
188
 
145
189
  :is(.sonic-envelope-curve, .sonic-envelope-handle) {
146
190
  --_sonic-point-ring: CanvasText;
191
+ --_sonic-point-lift: Highlight;
147
192
 
148
193
  forced-color-adjust: none;
149
194
  }
@@ -10,7 +10,7 @@
10
10
  --_sonic-led-lens-ratio: var(--sonic-led-lens-ratio, 0.625);
11
11
  --_sonic-lit-alt: var(--sonic-lit-alt, oklch(79% 0.2 150deg));
12
12
  --_sonic-unit: calc(var(--_sonic-led-size) / 8);
13
- --_sonic-led-bezel: color-mix(in oklab, var(--_sonic-unlit) 55%, #000);
13
+ --_sonic-led-bezel: var(--sonic-bezel, color-mix(in oklab, var(--_sonic-unlit) 55%, #000));
14
14
 
15
15
  position: relative;
16
16
  display: inline-block;
@@ -87,7 +87,7 @@
87
87
  background:
88
88
  radial-gradient(
89
89
  closest-side,
90
- color-mix(in oklab, var(--_sonic-lit) 60%, transparent)
90
+ color-mix(in oklab, var(--_sonic-lit) calc(60% * var(--_sonic-relief)), transparent)
91
91
  calc(var(--_sonic-led-lens-ratio) * 100%),
92
92
  transparent
93
93
  ),
@@ -96,7 +96,7 @@
96
96
  &::after {
97
97
  background: radial-gradient(
98
98
  closest-side,
99
- color-mix(in oklab, var(--_sonic-lit) 55%, #fff),
99
+ color-mix(in oklab, var(--_sonic-lit) calc(100% - 45% * var(--_sonic-relief)), #fff),
100
100
  var(--_sonic-lit)
101
101
  );
102
102
  }
@@ -41,6 +41,7 @@
41
41
  .sonic-xy-readout
42
42
  ) {
43
43
  --_sonic-unlit: var(--sonic-unlit, oklch(27.4% 0.005 286deg));
44
+ --_sonic-relief: var(--sonic-relief, 0);
44
45
  --_sonic-light-tilt: var(--sonic-light-tilt, 17deg);
45
46
  --_sonic-light-fall: calc(180deg - var(--_sonic-light-tilt));
46
47
  --_sonic-cast-x: calc(sin(var(--_sonic-light-tilt)) * var(--_sonic-unit));
@@ -77,19 +78,19 @@
77
78
  );
78
79
  --_sonic-arc-shade: radial-gradient(
79
80
  closest-side,
80
- rgb(0 0 0 / 55%) calc(100% - var(--_sonic-arc-width)),
81
+ rgb(0 0 0 / calc(0.55 * var(--_sonic-relief))) calc(100% - var(--_sonic-arc-width)),
81
82
  transparent calc(100% - var(--_sonic-arc-width) * 0.4),
82
- rgb(0 0 0 / 25%) 100%
83
+ rgb(0 0 0 / calc(0.25 * var(--_sonic-relief))) 100%
83
84
  );
84
85
  }
85
86
 
86
87
  :is(.sonic-led, .sonic-meter) {
87
88
  --_sonic-lens-glint: linear-gradient(
88
89
  var(--_sonic-light-fall),
89
- rgb(255 255 255 / 10%),
90
+ rgb(255 255 255 / calc(0.1 * var(--_sonic-relief))),
90
91
  transparent 60%
91
92
  );
92
- --_sonic-lens-glass: color-mix(in oklab, var(--_sonic-unlit) 60%, #000);
93
+ --_sonic-lens-glass: var(--sonic-lens, color-mix(in oklab, var(--_sonic-unlit) 60%, #000));
93
94
  --_sonic-lens: var(--_sonic-lens-glint), var(--_sonic-lens-glass);
94
95
  --_sonic-hot: var(--sonic-hot, oklch(70.5% 0.187 48deg));
95
96
  --_sonic-clip: var(--sonic-clip, oklch(63.7% 0.208 25deg));
@@ -106,41 +107,44 @@
106
107
  .sonic-wavestrip,
107
108
  .sonic-xy
108
109
  ) {
109
- --_sonic-cap: var(--sonic-cap, oklch(37% 0.012 286deg));
110
- --_sonic-cap-hover: var(--sonic-cap-hover, oklch(44.2% 0.015 286deg));
110
+ --_sonic-cap: var(--sonic-cap, transparent);
111
+ --_sonic-cap-hover: var(--sonic-cap-hover, transparent);
111
112
  --_sonic-focus: var(--sonic-focus, oklch(90% 0.23 128deg));
112
- --_sonic-ink: var(--sonic-ink, color-mix(in oklab, var(--_sonic-cap) 30%, #fff));
113
+ --_sonic-ink: var(--sonic-ink, currentcolor);
113
114
  --_sonic-etch: color-mix(in oklab, var(--_sonic-ink) 30%, transparent);
114
- --_sonic-ink-lift: color-mix(in oklab, var(--_sonic-ink) 60%, #fff);
115
+ --_sonic-ink-lift: var(--sonic-ink-hover, color-mix(in oklab, var(--_sonic-ink) 60%, #fff));
115
116
  --_sonic-lit-disabled: color-mix(in oklab, var(--_sonic-ink) 25%, var(--_sonic-unlit));
116
117
  --_sonic-skirt: linear-gradient(
117
118
  var(--_sonic-light-fall),
118
- color-mix(in oklab, var(--_sonic-cap) 70%, #fff),
119
- color-mix(in oklab, var(--_sonic-cap) 55%, #000)
119
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 30% * var(--_sonic-relief)), #fff),
120
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 45% * var(--_sonic-relief)), #000)
120
121
  );
121
122
  --_sonic-face: linear-gradient(
122
123
  var(--_sonic-light-fall),
123
- color-mix(in oklab, var(--_sonic-cap) 85%, #000),
124
- color-mix(in oklab, var(--_sonic-cap) 90%, #fff)
124
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 15% * var(--_sonic-relief)), #000),
125
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 10% * var(--_sonic-relief)), #fff)
125
126
  );
126
127
  --_sonic-sheen: linear-gradient(
127
128
  105deg,
128
129
  transparent 20%,
129
- rgb(255 255 255 / 10%) 45%,
130
+ rgb(255 255 255 / calc(0.1 * var(--_sonic-relief))) 45%,
130
131
  transparent 55%,
131
- rgb(0 0 0 / 6%) 80%
132
+ rgb(0 0 0 / calc(0.06 * var(--_sonic-relief))) 80%
132
133
  );
133
134
  --_sonic-press-transition:
134
135
  scale 60ms cubic-bezier(0.4, 0, 0.2, 1), translate 60ms cubic-bezier(0.4, 0, 0.2, 1),
135
136
  box-shadow 60ms cubic-bezier(0.4, 0, 0.2, 1);
136
137
  --_sonic-face-shadow:
137
138
  inset var(--_sonic-cast-x) var(--_sonic-cast-y) calc(1.5 * var(--_sonic-unit))
138
- rgb(0 0 0 / 35%),
139
+ rgb(0 0 0 / calc(0.35 * var(--_sonic-relief))),
139
140
  calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) var(--_sonic-unit)
140
- rgb(255 255 255 / 12%);
141
+ rgb(255 255 255 / calc(0.12 * var(--_sonic-relief)));
141
142
  --_sonic-rim: 0 0 0 max(1px, 0.75 * var(--_sonic-unit))
142
- color-mix(in oklab, var(--_sonic-cap) 40%, #000);
143
- --_sonic-drop-shade: rgb(0 0 0 / 65%);
143
+ var(
144
+ --sonic-cap-edge,
145
+ color-mix(in oklab, var(--_sonic-cap) calc(100% - 60% * var(--_sonic-relief)), #000)
146
+ );
147
+ --_sonic-drop-shade: rgb(0 0 0 / calc(0.65 * var(--_sonic-relief)));
144
148
  --_sonic-focus-shadow: 0 0 transparent;
145
149
  --_sonic-focus-glow: 0 0 max(4px, 3 * var(--_sonic-unit)) max(1px, 0.5 * var(--_sonic-unit))
146
150
  color-mix(in oklab, var(--_sonic-focus) 60%, transparent);
@@ -186,7 +190,7 @@
186
190
  --sonic-glass-text,
187
191
  color-mix(in oklab, var(--_sonic-glass) 20%, #fff)
188
192
  );
189
- --_sonic-glass-edge: 0 none;
193
+ --_sonic-glass-edge: 1px solid var(--sonic-glass-edge);
190
194
 
191
195
  /* Glass is forced to Canvas like the page, so only a border shows its edge */
192
196
  @media (forced-colors: active) {
@@ -196,8 +200,8 @@
196
200
 
197
201
  /* A definite cell, so percentage-sized content fills the glass; a canvas sized to its own box would feed back */
198
202
  :is(.sonic-envelope, .sonic-number, .sonic-screen, .sonic-waveform, .sonic-wavestrip, .sonic-xy) {
199
- --_sonic-glass-depth: var(--sonic-glass-depth, 1);
200
- --_sonic-glass-texture: var(--sonic-glass-texture, 1);
203
+ --_sonic-glass-depth: var(--sonic-glass-depth, var(--_sonic-relief));
204
+ --_sonic-glass-texture: var(--sonic-glass-texture, var(--_sonic-relief));
201
205
  --_sonic-glass-pitch: max(2px, round(2 * var(--_sonic-unit), 1px));
202
206
 
203
207
  position: relative;
@@ -276,16 +280,20 @@
276
280
  }
277
281
 
278
282
  @media (forced-colors: none) {
279
- :is(.sonic-number, .sonic-screen),
280
- :is(.sonic-envelope, .sonic-waveform, .sonic-wavestrip, .sonic-xy)::after {
281
- filter: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='w' x='-0.3' y='-0.3' width='1.6' height='1.6' primitiveUnits='objectBoundingBox' color-interpolation-filters='sRGB'%3E%3CfeFlood x='0' y='0' width='1' height='1' flood-color='%23000'/%3E%3CfeFlood x='.5' y='0' width='.5' height='1' flood-color='%23f00' result='r'/%3E%3CfeFlood x='0' y='.5' width='1' height='.5' flood-color='%230f0' result='g'/%3E%3CfeFlood x='0' y='0' width='1' height='1' flood-color='%23000' result='k'/%3E%3CfeComposite in='r' in2='g' operator='arithmetic' k2='1' k3='1' result='h'/%3E%3CfeMerge x='0' y='0' width='1' height='1'%3E%3CfeMergeNode in='k'/%3E%3CfeMergeNode in='h'/%3E%3C/feMerge%3E%3CfeGaussianBlur x='0' y='0' width='1' height='1' stdDeviation='0.25'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1'/%3E%3CfeComponentTransfer result='a'%3E%3CfeFuncR type='table' tableValues='0 0.052 0.172 0.25 0.312 0.364 0.412 0.457 0.5 0.543 0.588 0.636 0.688 0.75 0.828 0.948 1'/%3E%3CfeFuncG type='table' tableValues='0 0.052 0.172 0.25 0.312 0.364 0.412 0.457 0.5 0.543 0.588 0.636 0.688 0.75 0.828 0.948 1'/%3E%3C/feComponentTransfer%3E%3CfeComponentTransfer%3E%3CfeFuncR type='table' tableValues='1 0.563 0.25 0.063 0 0.063 0.25 0.563 1'/%3E%3CfeFuncG type='table' tableValues='1 0.563 0.25 0.063 0 0.063 0.25 0.563 1'/%3E%3C/feComponentTransfer%3E%3CfeColorMatrix values='.5 .5 0 0 0 .5 .5 0 0 0 0 0 0 0 0 0 0 0 0 1'/%3E%3CfeComponentTransfer result='f'%3E%3CfeFuncR type='gamma' amplitude='0.333' exponent='2'/%3E%3CfeFuncG type='gamma' exponent='2'/%3E%3C/feComponentTransfer%3E%3CfeComposite in='a' in2='f' operator='arithmetic' k1='1' k3='-.5' k4='.5' result='m'/%3E%3CfeFlood flood-color='%23808080'/%3E%3CfeMerge result='n'%3E%3CfeMergeNode/%3E%3CfeMergeNode in='m'/%3E%3C/feMerge%3E%3CfeDisplacementMap in='SourceGraphic' in2='n' scale='0.04' xChannelSelector='R' yChannelSelector='G'/%3E%3C/filter%3E%3C/svg%3E#w");
282
- }
283
-
284
283
  /* A query reads the parent, or a pseudo-element's own element: on a readout itself, 0 leaves the warp on */
285
- @container style(--sonic-glass-texture: 0) {
284
+ @container style(--sonic-relief: 1) and (not style(--sonic-glass-texture: 0)) {
286
285
  :is(.sonic-number, .sonic-screen),
287
286
  :is(.sonic-envelope, .sonic-waveform, .sonic-wavestrip, .sonic-xy)::after {
288
- filter: none;
287
+ filter: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='w' x='-0.3' y='-0.3' width='1.6' height='1.6' primitiveUnits='objectBoundingBox' color-interpolation-filters='sRGB'%3E%3CfeFlood x='0' y='0' width='1' height='1' flood-color='%23000'/%3E%3CfeFlood x='.5' y='0' width='.5' height='1' flood-color='%23f00' result='r'/%3E%3CfeFlood x='0' y='.5' width='1' height='.5' flood-color='%230f0' result='g'/%3E%3CfeFlood x='0' y='0' width='1' height='1' flood-color='%23000' result='k'/%3E%3CfeComposite in='r' in2='g' operator='arithmetic' k2='1' k3='1' result='h'/%3E%3CfeMerge x='0' y='0' width='1' height='1'%3E%3CfeMergeNode in='k'/%3E%3CfeMergeNode in='h'/%3E%3C/feMerge%3E%3CfeGaussianBlur x='0' y='0' width='1' height='1' stdDeviation='0.25'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1'/%3E%3CfeComponentTransfer result='a'%3E%3CfeFuncR type='table' tableValues='0 0.052 0.172 0.25 0.312 0.364 0.412 0.457 0.5 0.543 0.588 0.636 0.688 0.75 0.828 0.948 1'/%3E%3CfeFuncG type='table' tableValues='0 0.052 0.172 0.25 0.312 0.364 0.412 0.457 0.5 0.543 0.588 0.636 0.688 0.75 0.828 0.948 1'/%3E%3C/feComponentTransfer%3E%3CfeComponentTransfer%3E%3CfeFuncR type='table' tableValues='1 0.563 0.25 0.063 0 0.063 0.25 0.563 1'/%3E%3CfeFuncG type='table' tableValues='1 0.563 0.25 0.063 0 0.063 0.25 0.563 1'/%3E%3C/feComponentTransfer%3E%3CfeColorMatrix values='.5 .5 0 0 0 .5 .5 0 0 0 0 0 0 0 0 0 0 0 0 1'/%3E%3CfeComponentTransfer result='f'%3E%3CfeFuncR type='gamma' amplitude='0.333' exponent='2'/%3E%3CfeFuncG type='gamma' exponent='2'/%3E%3C/feComponentTransfer%3E%3CfeComposite in='a' in2='f' operator='arithmetic' k1='1' k3='-.5' k4='.5' result='m'/%3E%3CfeFlood flood-color='%23808080'/%3E%3CfeMerge result='n'%3E%3CfeMergeNode/%3E%3CfeMergeNode in='m'/%3E%3C/feMerge%3E%3CfeDisplacementMap in='SourceGraphic' in2='n' scale='0.016' xChannelSelector='R' yChannelSelector='G'/%3E%3C/filter%3E%3C/svg%3E#w");
288
+ }
289
+
290
+ :is(.sonic-envelope, .sonic-waveform, .sonic-wavestrip, .sonic-xy)::after {
291
+ --_sonic-glass-bend: calc(0.008 * hypot(100cqi, 100cqb));
292
+
293
+ inset: calc(-1 * var(--_sonic-glass-bend));
294
+ border: var(--_sonic-glass-bend) solid rgb(0 0 0 / 50%);
295
+ border-radius: calc(var(--_sonic-glass-radius) + var(--_sonic-glass-bend));
296
+ clip-path: inset(var(--_sonic-glass-bend) round var(--_sonic-glass-radius));
289
297
  }
290
298
  }
291
299
  }
@@ -304,23 +312,37 @@
304
312
  --_sonic-well:
305
313
  inset calc(var(--_sonic-well-depth) * var(--_sonic-cast-x))
306
314
  calc(var(--_sonic-well-depth) * var(--_sonic-cast-y))
307
- calc(2 * var(--_sonic-well-depth) * var(--_sonic-unit)) rgb(0 0 0 / 60%),
315
+ calc(2 * var(--_sonic-well-depth) * var(--_sonic-unit))
316
+ rgb(0 0 0 / calc(0.6 * var(--_sonic-relief))),
308
317
  calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-x))
309
- calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-y)) 0 rgb(255 255 255 / 6%);
318
+ calc(0.5 * var(--_sonic-well-depth) * var(--_sonic-cast-y)) 0
319
+ rgb(255 255 255 / calc(0.06 * var(--_sonic-relief)));
310
320
  }
311
321
 
312
322
  :is(.sonic-button, .sonic-segmented) {
313
- --_sonic-well-floor: linear-gradient(
314
- var(--_sonic-light-fall),
315
- color-mix(in oklab, var(--_sonic-unlit) 55%, #000),
316
- color-mix(in oklab, var(--_sonic-unlit) 85%, #000)
323
+ --_sonic-well-floor: var(
324
+ --sonic-well,
325
+ linear-gradient(
326
+ var(--_sonic-light-fall),
327
+ color-mix(
328
+ in oklab,
329
+ color-mix(in oklab, var(--_sonic-unlit) 55%, #000) calc(100% * var(--_sonic-relief)),
330
+ transparent
331
+ ),
332
+ color-mix(
333
+ in oklab,
334
+ color-mix(in oklab, var(--_sonic-unlit) 85%, #000) calc(100% * var(--_sonic-relief)),
335
+ transparent
336
+ )
337
+ )
317
338
  );
318
339
  --_sonic-engraving: drop-shadow(
319
340
  calc(-0.4 * var(--_sonic-cast-x)) calc(-0.4 * var(--_sonic-cast-y))
320
- calc(0.4 * var(--_sonic-unit)) rgb(0 0 0 / 30%)
341
+ calc(0.4 * var(--_sonic-unit)) rgb(0 0 0 / calc(0.3 * var(--_sonic-relief)))
321
342
  )
322
343
  drop-shadow(
323
- calc(0.3 * var(--_sonic-cast-x)) calc(0.3 * var(--_sonic-cast-y)) 0 rgb(255 255 255 / 7%)
344
+ calc(0.3 * var(--_sonic-cast-x)) calc(0.3 * var(--_sonic-cast-y)) 0
345
+ rgb(255 255 255 / calc(0.07 * var(--_sonic-relief)))
324
346
  );
325
347
  }
326
348
 
@@ -333,6 +355,25 @@
333
355
  --_sonic-keycap-drop: calc(1.5 * var(--_sonic-cast-x)) calc(1.5 * var(--_sonic-cast-y))
334
356
  calc(2 * var(--_sonic-unit)) var(--_sonic-drop-shade);
335
357
  --_sonic-keycap-glow: transparent;
358
+ --_sonic-keycap-lit-glow: color-mix(
359
+ in oklab,
360
+ var(--_sonic-lit) calc(22% * var(--_sonic-relief)),
361
+ transparent
362
+ );
363
+ --_sonic-legend-glow: drop-shadow(
364
+ 0 0 var(--_sonic-unit)
365
+ color-mix(in oklab, var(--_sonic-lit) calc(35% * var(--_sonic-relief)), transparent)
366
+ );
367
+ }
368
+
369
+ :is(.sonic-button, .sonic-segmented-option, .sonic-switch-position) {
370
+ --_sonic-target-outset: min(0px, calc((100% - var(--sonic-target-size, 100%)) / 2));
371
+
372
+ &::after {
373
+ position: absolute;
374
+ inset: var(--_sonic-target-outset);
375
+ content: '';
376
+ }
336
377
  }
337
378
 
338
379
  /* Each sheet maps its own depth, corner, bevel and face corner onto the `keycap` tokens */
@@ -365,9 +406,10 @@
365
406
  :is(.sonic-meter, .sonic-slider) {
366
407
  --_sonic-groove:
367
408
  inset var(--_sonic-cast-x) var(--_sonic-cast-y) calc(0.75 * var(--_sonic-unit))
368
- rgb(0 0 0 / 55%),
369
- inset 0 0 calc(0.5 * var(--_sonic-unit)) rgb(0 0 0 / 30%),
370
- calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) 0 rgb(255 255 255 / 6%);
409
+ rgb(0 0 0 / calc(0.55 * var(--_sonic-relief))),
410
+ inset 0 0 calc(0.5 * var(--_sonic-unit)) rgb(0 0 0 / calc(0.3 * var(--_sonic-relief))),
411
+ calc(0.5 * var(--_sonic-cast-x)) calc(0.5 * var(--_sonic-cast-y)) 0
412
+ rgb(255 255 255 / calc(0.06 * var(--_sonic-relief)));
371
413
  }
372
414
 
373
415
  @media (hover: hover) {
@@ -437,8 +479,8 @@
437
479
  border-radius: calc(0.25 * var(--_sonic-readout-size));
438
480
  box-shadow:
439
481
  calc(2 * var(--_sonic-cast-x)) calc(2 * var(--_sonic-cast-y)) calc(6 * var(--_sonic-unit))
440
- rgb(0 0 0 / 55%),
441
- inset 0 0 0 max(1px, var(--_sonic-unit)) rgb(255 255 255 / 8%);
482
+ rgb(0 0 0 / calc(0.55 * var(--_sonic-relief))),
483
+ inset 0 0 0 max(1px, var(--_sonic-unit)) rgb(255 255 255 / calc(0.08 * var(--_sonic-relief)));
442
484
  opacity: 0;
443
485
  translate: 0 calc(0.15 * var(--_sonic-readout-size));
444
486
  transition:
@@ -66,7 +66,7 @@
66
66
  flex-shrink: 0;
67
67
  inline-size: var(--_sonic-meter-size);
68
68
  block-size: var(--_sonic-meter-length);
69
- background: color-mix(in oklab, var(--_sonic-unlit) 55%, #000);
69
+ background: var(--sonic-bezel, color-mix(in oklab, var(--_sonic-unlit) 55%, #000));
70
70
  border-radius: calc(var(--_sonic-meter-size) * var(--_sonic-meter-radius-ratio));
71
71
 
72
72
  &::after {
@@ -257,14 +257,18 @@
257
257
  position: absolute;
258
258
  inset: 0;
259
259
  content: '';
260
- background: linear-gradient(var(--_sonic-light-fall), rgb(255 255 255 / 10%), transparent 60%) 0
261
- 100% / 100% var(--_sonic-meter-pitch) repeat-y;
260
+ background: linear-gradient(
261
+ var(--_sonic-light-fall),
262
+ rgb(255 255 255 / calc(0.1 * var(--_sonic-relief))),
263
+ transparent 60%
264
+ )
265
+ 0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
262
266
  }
263
267
 
264
268
  :state(ladder) > .sonic-meter > .sonic-meter-bar::after {
265
269
  background: radial-gradient(
266
270
  circle var(--_sonic-meter-ladder-radius),
267
- rgb(255 255 255 / 45%),
271
+ rgb(255 255 255 / calc(0.45 * var(--_sonic-relief))),
268
272
  transparent
269
273
  )
270
274
  0 100% / 100% var(--_sonic-meter-pitch) repeat-y;
@@ -25,12 +25,14 @@
25
25
  border-radius: var(--_sonic-panel-radius);
26
26
  box-shadow:
27
27
  inset var(--_sonic-cast-x) var(--_sonic-cast-y)
28
- max(var(--_sonic-panel-depth), -1 * var(--_sonic-panel-depth)) rgb(255 255 255 / 7%),
28
+ max(var(--_sonic-panel-depth), -1 * var(--_sonic-panel-depth))
29
+ rgb(255 255 255 / calc(0.07 * var(--_sonic-relief))),
29
30
  inset calc(-1 * var(--_sonic-cast-x)) calc(-1 * var(--_sonic-cast-y))
30
- max(var(--_sonic-panel-depth), -1 * var(--_sonic-panel-depth)) rgb(0 0 0 / 35%),
31
+ max(var(--_sonic-panel-depth), -1 * var(--_sonic-panel-depth))
32
+ rgb(0 0 0 / calc(0.35 * var(--_sonic-relief))),
31
33
  calc(2 * sin(var(--_sonic-light-tilt)) * max(0px, var(--_sonic-panel-depth)))
32
34
  calc(2 * cos(var(--_sonic-light-tilt)) * max(0px, var(--_sonic-panel-depth)))
33
- calc(3 * max(0px, var(--_sonic-panel-depth))) rgb(0 0 0 / 45%);
35
+ calc(3 * max(0px, var(--_sonic-panel-depth))) rgb(0 0 0 / calc(0.45 * var(--_sonic-relief)));
34
36
  }
35
37
 
36
38
  .sonic-panel-title {