seblify 0.2.1 → 0.4.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 (141) hide show
  1. package/README.md +145 -49
  2. package/dist/components/AppShell.svelte +1 -1
  3. package/dist/components/Banner.svelte +3 -3
  4. package/dist/components/Button.svelte +4 -4
  5. package/dist/components/action/button/button/Button.svelte +1041 -0
  6. package/dist/components/action/button/button/Button.svelte.d.ts +28 -0
  7. package/dist/components/action/button/button-group/ButtonGroup.svelte +146 -0
  8. package/dist/components/action/button/button-group/ButtonGroup.svelte.d.ts +14 -0
  9. package/dist/components/action/button/floating-action-button/FloatingActionButton.svelte +1102 -0
  10. package/dist/components/action/button/floating-action-button/FloatingActionButton.svelte.d.ts +26 -0
  11. package/dist/components/action/button/icon-button/IconButton.svelte +954 -0
  12. package/dist/components/action/button/icon-button/IconButton.svelte.d.ts +22 -0
  13. package/dist/components/action/button/timed-button/TimedButton.svelte +1143 -0
  14. package/dist/components/action/button/timed-button/TimedButton.svelte.d.ts +32 -0
  15. package/dist/components/action/button/toggle-button/ToggleButton.svelte +1109 -0
  16. package/dist/components/action/button/toggle-button/ToggleButton.svelte.d.ts +28 -0
  17. package/dist/components/action/button/toggle-button-group/ToggleButtonGroup.svelte +242 -0
  18. package/dist/components/action/button/toggle-button-group/ToggleButtonGroup.svelte.d.ts +19 -0
  19. package/dist/components/action/button/toggle-button-group/ToggleButtonGroup.test.svelte +36 -0
  20. package/dist/components/action/button/toggle-button-group/ToggleButtonGroup.test.svelte.d.ts +11 -0
  21. package/dist/components/action/button/toggle-button-group/context.d.ts +8 -0
  22. package/dist/components/action/button/toggle-button-group/context.js +8 -0
  23. package/dist/components/action/input/field/pin-input/PinInput.svelte +4 -4
  24. package/dist/components/action/input/select/checkbox/Checkbox.svelte +4704 -25
  25. package/dist/components/action/input/select/checkbox/Checkbox.svelte.d.ts +28 -0
  26. package/dist/components/action/input/select/checkbox/checkbox-relations.svelte.d.ts +46 -0
  27. package/dist/components/action/input/select/checkbox/checkbox-relations.svelte.js +202 -0
  28. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/bounce.d.ts +1 -0
  29. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/bounce.html +27 -0
  30. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/bounce.js +13 -0
  31. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/bump.d.ts +1 -0
  32. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/bump.html +12 -0
  33. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/bump.js +13 -0
  34. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/draw.d.ts +1 -0
  35. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/draw.html +12 -0
  36. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/draw.js +12 -0
  37. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/fade.d.ts +1 -0
  38. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/fade.html +12 -0
  39. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/fade.js +12 -0
  40. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/pop.d.ts +1 -0
  41. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/pop.html +12 -0
  42. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/pop.js +13 -0
  43. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/rise.d.ts +1 -0
  44. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/rise.html +27 -0
  45. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/rise.js +13 -0
  46. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/scale.d.ts +1 -0
  47. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/scale.html +27 -0
  48. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/scale.js +13 -0
  49. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/visual-state.d.ts +1 -0
  50. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/visual-state.html +12 -0
  51. package/dist/components/action/input/select/checkbox/tests/visual-fixtures/visual-state.js +278 -0
  52. package/dist/components/action/input/select/{theme-switch/ThemeSwitch.svelte → color-mode-switch/ColorModeSwitch.svelte} +8 -8
  53. package/dist/components/action/input/select/color-mode-switch/ColorModeSwitch.svelte.d.ts +10 -0
  54. package/dist/components/action/input/select/segment-control/SegmentControl.svelte +2 -2
  55. package/dist/components/action/input/select/slider/Slider.svelte +1 -1
  56. package/dist/components/action/input/select/switch/Switch.svelte +1004 -99
  57. package/dist/components/action/input/select/switch/Switch.svelte.d.ts +8 -3
  58. package/dist/components/display/annotation/badge/Badge.svelte +732 -63
  59. package/dist/components/display/annotation/badge/Badge.svelte.d.ts +1 -1
  60. package/dist/components/display/annotation/tag/Tag.svelte +670 -58
  61. package/dist/components/display/annotation/tag/Tag.svelte.d.ts +3 -1
  62. package/dist/components/display/data-display/metric/date-time/DateTimeValue.svelte +59 -0
  63. package/dist/components/display/data-display/metric/date-time/DateTimeValue.svelte.d.ts +13 -0
  64. package/dist/components/display/data-display/metric/date-time/DateValue.svelte +52 -0
  65. package/dist/components/display/data-display/metric/date-time/DateValue.svelte.d.ts +11 -0
  66. package/dist/components/display/data-display/metric/date-time/TimeValue.svelte +55 -0
  67. package/dist/components/display/data-display/metric/date-time/TimeValue.svelte.d.ts +12 -0
  68. package/dist/components/display/data-display/metric/duration/Duration.svelte +64 -0
  69. package/dist/components/display/data-display/metric/duration/Duration.svelte.d.ts +16 -0
  70. package/dist/components/display/data-display/metric/relative-time/RelativeTime.svelte +121 -0
  71. package/dist/components/display/data-display/metric/relative-time/RelativeTime.svelte.d.ts +21 -0
  72. package/dist/components/display/data-display/metric/timestamp-card/TimestampCard.svelte +121 -0
  73. package/dist/components/display/data-display/metric/timestamp-card/TimestampCard.svelte.d.ts +25 -0
  74. package/dist/components/display/data-display/visual/timeline/TimelineItem.svelte +660 -51
  75. package/dist/components/display/data-display/visual/timeline/context.d.ts +1 -1
  76. package/dist/components/display/feedback/loading/loading-dots/LoadingDots.svelte +657 -48
  77. package/dist/components/display/feedback/loading/loading-dots/LoadingDots.svelte.d.ts +1 -1
  78. package/dist/components/display/feedback/loading/spinner/Spinner.svelte +657 -48
  79. package/dist/components/display/feedback/loading/spinner/Spinner.svelte.d.ts +1 -1
  80. package/dist/components/display/motion/collapse/Collapse.svelte +115 -0
  81. package/dist/components/display/motion/collapse/Collapse.svelte.d.ts +17 -0
  82. package/dist/components/display/typography/accordion/Accordion.svelte +347 -0
  83. package/dist/components/display/typography/accordion/Accordion.svelte.d.ts +13 -0
  84. package/dist/components/display/typography/accordion/AccordionGroup.svelte +132 -0
  85. package/dist/components/display/typography/accordion/AccordionGroup.svelte.d.ts +11 -0
  86. package/dist/components/display/typography/accordion/context.d.ts +8 -0
  87. package/dist/components/display/typography/accordion/context.js +8 -0
  88. package/dist/components/display/typography/code-snippet/CodeSnippet.svelte +3 -3
  89. package/dist/components/display/typography/eyebrow/Eyebrow.svelte +2 -2
  90. package/dist/components/display/typography/highlight/Highlight.svelte +719 -59
  91. package/dist/components/display/typography/highlight/Highlight.svelte.d.ts +1 -1
  92. package/dist/components/framework/layout/container/app-shell/AppShell.svelte +16 -2
  93. package/dist/components/framework/navigation/context/breadcrumb/Breadcrumb.svelte +1 -1
  94. package/dist/components/framework/navigation/sidebar/sidebar/Sidebar.svelte +35 -10
  95. package/dist/components/framework/navigation/sidebar/sidenav/Sidenav.svelte +5 -5
  96. package/dist/components/framework/overlay/tooltip/Tooltip.svelte +1011 -0
  97. package/dist/components/framework/overlay/tooltip/Tooltip.svelte.d.ts +31 -0
  98. package/dist/components/framework/surface/paper/Paper.svelte +730 -87
  99. package/dist/components/framework/surface/paper/Paper.svelte.d.ts +1 -1
  100. package/dist/components/utility/format/date-time/formatDateTime.d.ts +23 -0
  101. package/dist/components/utility/format/date-time/formatDateTime.js +33 -0
  102. package/dist/components/utility/format/duration/formatDuration.d.ts +15 -0
  103. package/dist/components/utility/format/duration/formatDuration.js +218 -0
  104. package/dist/components/utility/format/relative-time/formatRelativeTime.d.ts +42 -0
  105. package/dist/components/utility/format/relative-time/formatRelativeTime.js +530 -0
  106. package/dist/design-system/inheritance/tokens.js +6 -0
  107. package/dist/design-system/reserved-props/allowed-options.d.ts +9 -4
  108. package/dist/design-system/theme/tokens.d.ts +72 -2
  109. package/dist/design-system/theme/tokens.js +173 -134
  110. package/dist/icons/generated/check-thick.svelte +16 -0
  111. package/dist/icons/generated/check-thick.svelte.d.ts +7 -0
  112. package/dist/icons/generated/check.svelte +16 -0
  113. package/dist/icons/generated/check.svelte.d.ts +7 -0
  114. package/dist/icons/generated/close-thick.svelte +16 -0
  115. package/dist/icons/generated/close-thick.svelte.d.ts +7 -0
  116. package/dist/icons/generated/close.svelte +16 -0
  117. package/dist/icons/generated/close.svelte.d.ts +7 -0
  118. package/dist/icons/generated/index.d.ts +4 -0
  119. package/dist/icons/generated/index.js +4 -0
  120. package/dist/icons/generated/manifest.js +28 -0
  121. package/dist/index.d.ts +22 -2
  122. package/dist/index.js +22 -2
  123. package/dist/styles/tone-context.css +656 -46
  124. package/dist/theme.css +1 -161
  125. package/dist/themes/canopy.css +373 -0
  126. package/dist/themes/cobalt.css +373 -0
  127. package/dist/themes/iris.css +373 -0
  128. package/dist/themes/lumen.css +373 -0
  129. package/dist/themes/mono.css +373 -0
  130. package/dist/themes/moss.css +373 -0
  131. package/dist/themes/noir.css +373 -0
  132. package/dist/themes/plain.css +373 -0
  133. package/dist/themes/pulse.css +373 -0
  134. package/dist/themes/signal.css +373 -0
  135. package/dist/themes/slate.css +373 -0
  136. package/dist/themes/solar.css +373 -0
  137. package/dist/themes/sorbet.css +373 -0
  138. package/dist/themes/studio.css +369 -0
  139. package/dist/themes/vesper.css +373 -0
  140. package/package.json +32 -4
  141. package/dist/components/action/input/select/theme-switch/ThemeSwitch.svelte.d.ts +0 -10
@@ -3,7 +3,8 @@
3
3
  import { CircleOutlineIcon, HandleGripIcon, MinusIcon } from 'seblify/icons';
4
4
 
5
5
  type SwitchRadius = 'none' | 'sm' | 'md' | 'lg' | 'full' | CustomCssSize;
6
- type SwitchAnimation = 'smooth' | 'snappy' | 'bouncy';
6
+ type SwitchAnimation = 'smooth' | 'bouncy';
7
+ type SwitchOrientation = 'horizontal' | 'vertical';
7
8
  type SwitchShape = 'pill' | 'floating' | 'line' | 'flat' | 'long';
8
9
  type SwitchSize =
9
10
  | 'xxs'
@@ -17,20 +18,24 @@
17
18
  type SwitchTone =
18
19
  | 'neutral'
19
20
  | 'primary'
21
+ | 'secondary'
20
22
  | 'success'
21
23
  | 'danger'
22
24
  | 'warning'
23
- | 'info'
24
- | 'inverse';
25
- type SwitchVariant = 'solid' | 'soft' | 'tint';
25
+ | 'info';
26
+ type SwitchVariant = 'solid' | 'soft' | 'tint' | 'outline';
26
27
 
27
28
  type Props = SeblifyProps<{
28
29
  animation?: SwitchAnimation;
30
+ ariaLabel?: string;
29
31
  checked?: boolean;
30
32
  description?: string;
31
33
  disabled?: boolean;
34
+ duration?: number;
35
+ focusTone?: SwitchTone;
32
36
  label?: string;
33
37
  name?: string;
38
+ orientation?: SwitchOrientation;
34
39
  radius?: SwitchRadius;
35
40
  shape?: SwitchShape;
36
41
  showGripIcon?: boolean;
@@ -80,13 +85,44 @@
80
85
  );
81
86
  }
82
87
 
88
+ function resolveDurationNumber(duration: number): number {
89
+ if (!Number.isFinite(duration)) {
90
+ return 0;
91
+ }
92
+
93
+ return Math.max(0, duration);
94
+ }
95
+
96
+ function resolveDurationValue(duration: number): string {
97
+ return `${resolveDurationNumber(duration)}ms`;
98
+ }
99
+
100
+ function supportsThumbGrip(shape: SwitchShape): boolean {
101
+ return shape === 'pill' || shape === 'floating' || shape === 'line';
102
+ }
103
+
104
+ function supportsTrackIcons(shape: SwitchShape): boolean {
105
+ return shape !== 'line';
106
+ }
107
+
108
+ function resolveGripIconSize(shape: SwitchShape): string {
109
+ return shape === 'floating' || shape === 'line' ? '1em' : '0.75em';
110
+ }
111
+
112
+ const BOUNCY_MOTION_CLEAR_BUFFER = 80;
113
+ const switchId = $props.id();
114
+
83
115
  let {
84
116
  checked = $bindable(false),
85
117
  animation = 'smooth',
118
+ ariaLabel,
86
119
  description,
87
120
  disabled = false,
121
+ duration = 190,
122
+ focusTone,
88
123
  label,
89
124
  name,
125
+ orientation = 'horizontal',
90
126
  radius = 'full',
91
127
  shape = 'pill',
92
128
  showGripIcon = false,
@@ -102,31 +138,56 @@
102
138
 
103
139
  const sizeValue = $derived(resolveSizeValue(size));
104
140
  const radiusValue = $derived(resolveRadiusValue(radius));
105
- const showThumbGrip = $derived(
106
- showGripIcon &&
107
- (shape === 'pill' || shape === 'floating' || shape === 'line'),
108
- );
109
- const showTrackIcons = $derived(showTrackIcon && shape !== 'line');
110
- const gripIconSize = $derived(
111
- shape === 'floating' || shape === 'line' ? '1em' : '0.75em',
141
+ const resolvedDuration = $derived(resolveDurationNumber(duration));
142
+ const durationValue = $derived(resolveDurationValue(duration));
143
+ const labelId = $derived(label ? `${switchId}-label` : undefined);
144
+ const descriptionId = $derived(
145
+ description ? `${switchId}-description` : undefined,
112
146
  );
147
+ const showContent = $derived(Boolean(label || description));
148
+ const showThumbGrip = $derived(showGripIcon && supportsThumbGrip(shape));
149
+ const showTrackIcons = $derived(showTrackIcon && supportsTrackIcons(shape));
150
+ const gripIconSize = $derived(resolveGripIconSize(shape));
113
151
  const onTrackIconSize = $derived(shape === 'pill' ? '0.95em' : '0.75em');
114
152
  const offTrackIconSize = $derived(shape === 'pill' ? '0.9em' : '0.7em');
115
153
 
116
154
  $effect(() => {
117
155
  const currentChecked = checked;
156
+ const canBounce = animation === 'bouncy' && resolvedDuration > 0;
118
157
 
119
158
  if (!hasMounted) {
120
159
  hasMounted = true;
121
160
  previousChecked = currentChecked;
161
+ bouncyMotion = 'none';
162
+ return;
163
+ }
164
+
165
+ if (!canBounce) {
166
+ previousChecked = currentChecked;
167
+ bouncyMotion = 'none';
122
168
  return;
123
169
  }
124
170
 
125
171
  if (currentChecked !== previousChecked) {
126
- bouncyMotion =
127
- animation === 'bouncy' ? (currentChecked ? 'to-on' : 'to-off') : 'none';
172
+ bouncyMotion = currentChecked ? 'to-on' : 'to-off';
128
173
  previousChecked = currentChecked;
129
174
  }
175
+
176
+ const activeMotion = bouncyMotion;
177
+
178
+ if (activeMotion === 'none') {
179
+ return;
180
+ }
181
+
182
+ const timeout = window.setTimeout(() => {
183
+ if (bouncyMotion === activeMotion) {
184
+ bouncyMotion = 'none';
185
+ }
186
+ }, resolvedDuration + BOUNCY_MOTION_CLEAR_BUFFER);
187
+
188
+ return () => {
189
+ window.clearTimeout(timeout);
190
+ };
130
191
  });
131
192
 
132
193
  function handleThumbAnimationEnd() {
@@ -141,13 +202,26 @@
141
202
  class="switch seblify-tone-context"
142
203
  data-animation={animation}
143
204
  data-bouncy-motion={bouncyMotion}
205
+ data-focus-tone={focusTone ?? tone ?? 'inherit'}
206
+ data-orientation={orientation}
144
207
  data-seblify-tone={tone ?? 'inherit'}
145
208
  data-shape={shape}
146
209
  data-variant={variant}
147
210
  style:--switch-size={sizeValue}
148
211
  style:--switch-radius={radiusValue}
212
+ style:--switch-duration={durationValue}
149
213
  >
150
- <input bind:checked {disabled} {name} role="switch" type="checkbox" {value} />
214
+ <input
215
+ aria-describedby={descriptionId}
216
+ aria-label={labelId ? undefined : ariaLabel}
217
+ aria-labelledby={labelId}
218
+ bind:checked
219
+ {disabled}
220
+ {name}
221
+ role="switch"
222
+ type="checkbox"
223
+ {value}
224
+ />
151
225
  <span class="control" aria-hidden="true">
152
226
  {#if showTrackIcons}
153
227
  <span class="track-icons">
@@ -167,111 +241,725 @@
167
241
  {/if}
168
242
  </span>
169
243
  </span>
170
- <span class="content">
171
- {#if label}
172
- <span class="label">{label}</span>
173
- {/if}
174
- {#if description}
175
- <span class="description">{description}</span>
176
- {/if}
177
- </span>
244
+ {#if showContent}
245
+ <span class="content">
246
+ {#if label}
247
+ <span class="label" id={labelId}>{label}</span>
248
+ {/if}
249
+ {#if description}
250
+ <span class="description" id={descriptionId}>{description}</span>
251
+ {/if}
252
+ </span>
253
+ {/if}
178
254
  </label>
179
255
 
180
256
  <style>:where(.seblify-tone-context) {
181
- --seblify-tone-fill: var(--seblify-color-fill-neutral, #516176);
182
- --seblify-tone-fill-text: var(--seblify-color-fill-neutral-text, #ffffff);
183
- --seblify-tone-surface: var(--seblify-color-surface-muted, #d9e0e8);
184
- --seblify-tone-text: var(--seblify-color-text-muted, #516176);
185
- --seblify-tone-border: var(--seblify-color-border, #c8d2df);
257
+ --seblify-tone-fill: var(--seblify-color-neutral-fill, #6f5f55);
258
+ --seblify-tone-fill-hover: var(--seblify-color-neutral-fill-hover, #5b4d45);
259
+ --seblify-tone-fill-text: var(--seblify-color-neutral-fill-text, #fff4e7);
260
+ --seblify-tone-surface: var(--seblify-color-neutral-surface, #f2ebe4);
261
+ --seblify-tone-surface-hover: var(
262
+ --seblify-color-neutral-surface-hover,
263
+ #ebe1d8
264
+ );
265
+ --seblify-tone-text: var(--seblify-color-neutral-text, #6f5f55);
266
+ --seblify-tone-border: var(--seblify-color-neutral-border, #ded0c4);
267
+ --seblify-tone-derived-surface: var(
268
+ --seblify-color-neutral-derived-surface,
269
+ var(--seblify-color-surface-muted, #f2ebe4)
270
+ );
271
+ --seblify-tone-derived-border: var(
272
+ --seblify-color-neutral-derived-border,
273
+ color-mix(
274
+ in srgb,
275
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
276
+ var(--seblify-color-border-strong, #c5afa0) 78%
277
+ )
278
+ );
279
+ --seblify-tone-derived-text: var(
280
+ --seblify-color-neutral-derived-text,
281
+ var(--seblify-color-text-subtle, #8b7a70)
282
+ );
283
+ --seblify-tone-on-inverse-surface: var(
284
+ --seblify-color-neutral-on-inverse-surface,
285
+ color-mix(
286
+ in srgb,
287
+ var(--seblify-color-text-inverse, #fff4e7) 10%,
288
+ var(--seblify-color-surface-inverse, #15110f) 90%
289
+ )
290
+ );
291
+ --seblify-tone-on-inverse-surface-hover: var(
292
+ --seblify-color-neutral-on-inverse-surface-hover,
293
+ color-mix(
294
+ in srgb,
295
+ var(--seblify-color-text-inverse, #fff4e7) 16%,
296
+ var(--seblify-color-surface-inverse, #15110f) 84%
297
+ )
298
+ );
299
+ --seblify-tone-on-inverse-text: var(
300
+ --seblify-color-neutral-on-inverse-text,
301
+ var(--seblify-color-text-inverse, #fff4e7)
302
+ );
303
+ --seblify-tone-on-inverse-border: var(
304
+ --seblify-color-neutral-on-inverse-border,
305
+ var(--seblify-color-border-inverse, #4a3b32)
306
+ );
307
+ --seblify-tone-control-fill: var(--seblify-tone-fill);
308
+ --seblify-tone-control-fill-hover: var(--seblify-tone-fill-hover);
309
+ --seblify-tone-control-fill-text: var(--seblify-tone-fill-text);
310
+ --seblify-tone-control-surface: var(--seblify-tone-surface);
311
+ --seblify-tone-control-surface-hover: var(--seblify-tone-surface-hover);
312
+ --seblify-tone-control-default-text: var(--seblify-color-text, #211916);
313
+ --seblify-tone-control-text: var(--seblify-tone-text);
314
+ --seblify-tone-control-border: var(--seblify-tone-border);
315
+ --seblify-tone-control-derived-surface: var(--seblify-tone-derived-surface);
316
+ --seblify-tone-control-derived-border: var(--seblify-tone-derived-border);
317
+ --seblify-tone-control-derived-text: var(--seblify-tone-derived-text);
186
318
  }
187
319
 
188
320
  :where(.seblify-tone-context[data-seblify-tone='inherit']) {
189
321
  --seblify-tone-fill: var(
190
322
  --seblify-current-tone-fill,
191
- var(--seblify-color-fill-neutral, #516176)
323
+ var(--seblify-color-neutral-fill, #6f5f55)
324
+ );
325
+ --seblify-tone-fill-hover: var(
326
+ --seblify-current-tone-fill-hover,
327
+ var(--seblify-color-neutral-fill-hover, #5b4d45)
192
328
  );
193
329
  --seblify-tone-fill-text: var(
194
330
  --seblify-current-tone-fill-text,
195
- var(--seblify-color-fill-neutral-text, #ffffff)
331
+ var(--seblify-color-neutral-fill-text, #fff4e7)
196
332
  );
197
333
  --seblify-tone-surface: var(
198
334
  --seblify-current-tone-surface,
199
- var(--seblify-color-surface-muted, #d9e0e8)
335
+ var(--seblify-color-neutral-surface, #f2ebe4)
336
+ );
337
+ --seblify-tone-surface-hover: var(
338
+ --seblify-current-tone-surface-hover,
339
+ var(--seblify-color-neutral-surface-hover, #ebe1d8)
200
340
  );
201
341
  --seblify-tone-text: var(
202
342
  --seblify-current-tone-text,
203
- var(--seblify-color-text-muted, #516176)
343
+ var(--seblify-color-neutral-text, #6f5f55)
204
344
  );
205
345
  --seblify-tone-border: var(
206
346
  --seblify-current-tone-border,
207
- var(--seblify-color-border, #c8d2df)
347
+ var(--seblify-color-neutral-border, #ded0c4)
348
+ );
349
+ --seblify-tone-derived-surface: var(
350
+ --seblify-current-tone-derived-surface,
351
+ var(
352
+ --seblify-color-neutral-derived-surface,
353
+ var(--seblify-color-surface-muted, #f2ebe4)
354
+ )
355
+ );
356
+ --seblify-tone-derived-border: var(
357
+ --seblify-current-tone-derived-border,
358
+ var(
359
+ --seblify-color-neutral-derived-border,
360
+ color-mix(
361
+ in srgb,
362
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
363
+ var(--seblify-color-border-strong, #c5afa0) 78%
364
+ )
365
+ )
366
+ );
367
+ --seblify-tone-derived-text: var(
368
+ --seblify-current-tone-derived-text,
369
+ var(
370
+ --seblify-color-neutral-derived-text,
371
+ var(--seblify-color-text-subtle, #8b7a70)
372
+ )
373
+ );
374
+ --seblify-tone-on-inverse-surface: var(
375
+ --seblify-current-tone-on-inverse-surface,
376
+ var(
377
+ --seblify-color-neutral-on-inverse-surface,
378
+ color-mix(
379
+ in srgb,
380
+ var(--seblify-color-text-inverse, #fff4e7) 10%,
381
+ var(--seblify-color-surface-inverse, #15110f) 90%
382
+ )
383
+ )
384
+ );
385
+ --seblify-tone-on-inverse-surface-hover: var(
386
+ --seblify-current-tone-on-inverse-surface-hover,
387
+ var(
388
+ --seblify-color-neutral-on-inverse-surface-hover,
389
+ color-mix(
390
+ in srgb,
391
+ var(--seblify-color-text-inverse, #fff4e7) 16%,
392
+ var(--seblify-color-surface-inverse, #15110f) 84%
393
+ )
394
+ )
395
+ );
396
+ --seblify-tone-on-inverse-text: var(
397
+ --seblify-current-tone-on-inverse-text,
398
+ var(
399
+ --seblify-color-neutral-on-inverse-text,
400
+ var(--seblify-color-text-inverse, #fff4e7)
401
+ )
402
+ );
403
+ --seblify-tone-on-inverse-border: var(
404
+ --seblify-current-tone-on-inverse-border,
405
+ var(
406
+ --seblify-color-neutral-on-inverse-border,
407
+ var(--seblify-color-border-inverse, #4a3b32)
408
+ )
208
409
  );
209
410
  }
210
411
 
211
412
  :where(.seblify-tone-context[data-seblify-tone='neutral']) {
212
- --seblify-tone-fill: var(--seblify-color-fill-neutral, #516176);
213
- --seblify-tone-fill-text: var(--seblify-color-fill-neutral-text, #ffffff);
214
- --seblify-tone-surface: var(--seblify-color-surface-muted, #d9e0e8);
215
- --seblify-tone-text: var(--seblify-color-text-muted, #516176);
216
- --seblify-tone-border: var(--seblify-color-border, #c8d2df);
413
+ --seblify-tone-fill: var(--seblify-color-neutral-fill, #6f5f55);
414
+ --seblify-tone-fill-hover: var(--seblify-color-neutral-fill-hover, #5b4d45);
415
+ --seblify-tone-fill-text: var(--seblify-color-neutral-fill-text, #fff4e7);
416
+ --seblify-tone-surface: var(--seblify-color-neutral-surface, #f2ebe4);
417
+ --seblify-tone-surface-hover: var(
418
+ --seblify-color-neutral-surface-hover,
419
+ #ebe1d8
420
+ );
421
+ --seblify-tone-text: var(--seblify-color-neutral-text, #6f5f55);
422
+ --seblify-tone-border: var(--seblify-color-neutral-border, #ded0c4);
423
+ --seblify-tone-derived-surface: var(
424
+ --seblify-color-neutral-derived-surface,
425
+ var(--seblify-color-surface-muted, #f2ebe4)
426
+ );
427
+ --seblify-tone-derived-border: var(
428
+ --seblify-color-neutral-derived-border,
429
+ color-mix(
430
+ in srgb,
431
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
432
+ var(--seblify-color-border-strong, #c5afa0) 78%
433
+ )
434
+ );
435
+ --seblify-tone-derived-text: var(
436
+ --seblify-color-neutral-derived-text,
437
+ var(--seblify-color-text-subtle, #8b7a70)
438
+ );
439
+ --seblify-tone-on-inverse-surface: var(
440
+ --seblify-color-neutral-on-inverse-surface,
441
+ color-mix(
442
+ in srgb,
443
+ var(--seblify-color-text-inverse, #fff4e7) 10%,
444
+ var(--seblify-color-surface-inverse, #15110f) 90%
445
+ )
446
+ );
447
+ --seblify-tone-on-inverse-surface-hover: var(
448
+ --seblify-color-neutral-on-inverse-surface-hover,
449
+ color-mix(
450
+ in srgb,
451
+ var(--seblify-color-text-inverse, #fff4e7) 16%,
452
+ var(--seblify-color-surface-inverse, #15110f) 84%
453
+ )
454
+ );
455
+ --seblify-tone-on-inverse-text: var(
456
+ --seblify-color-neutral-on-inverse-text,
457
+ var(--seblify-color-text-inverse, #fff4e7)
458
+ );
459
+ --seblify-tone-on-inverse-border: var(
460
+ --seblify-color-neutral-on-inverse-border,
461
+ var(--seblify-color-border-inverse, #4a3b32)
462
+ );
463
+ }
464
+
465
+ :where(.seblify-tone-context[data-seblify-tone='strong']) {
466
+ --seblify-tone-fill: var(--seblify-color-strong-fill, #211916);
467
+ --seblify-tone-fill-hover: var(--seblify-color-strong-fill-hover, #080706);
468
+ --seblify-tone-fill-text: var(--seblify-color-strong-fill-text, #fff4e7);
469
+ --seblify-tone-surface: var(--seblify-color-strong-surface, #ffffff);
470
+ --seblify-tone-surface-hover: var(
471
+ --seblify-color-strong-surface-hover,
472
+ #f2ebe4
473
+ );
474
+ --seblify-tone-text: var(--seblify-color-strong-text, #211916);
475
+ --seblify-tone-border: var(--seblify-color-strong-border, #c5afa0);
476
+ --seblify-tone-derived-surface: var(
477
+ --seblify-color-strong-derived-surface,
478
+ color-mix(
479
+ in srgb,
480
+ var(--seblify-tone-fill) 10%,
481
+ var(--seblify-color-surface, #fffdf9) 90%
482
+ )
483
+ );
484
+ --seblify-tone-derived-border: var(
485
+ --seblify-color-strong-derived-border,
486
+ color-mix(
487
+ in srgb,
488
+ var(--seblify-tone-fill) 26%,
489
+ var(--seblify-color-border-strong, #c5afa0) 74%
490
+ )
491
+ );
492
+ --seblify-tone-derived-text: var(
493
+ --seblify-color-strong-derived-text,
494
+ color-mix(
495
+ in srgb,
496
+ var(--seblify-tone-fill) 66%,
497
+ var(--seblify-color-text-muted, #6f5f55) 34%
498
+ )
499
+ );
500
+ --seblify-tone-on-inverse-surface: var(
501
+ --seblify-color-strong-on-inverse-surface,
502
+ color-mix(
503
+ in srgb,
504
+ var(--seblify-color-text-inverse, #fff4e7) 14%,
505
+ var(--seblify-color-surface-inverse, #15110f) 86%
506
+ )
507
+ );
508
+ --seblify-tone-on-inverse-surface-hover: var(
509
+ --seblify-color-strong-on-inverse-surface-hover,
510
+ color-mix(
511
+ in srgb,
512
+ var(--seblify-color-text-inverse, #fff4e7) 22%,
513
+ var(--seblify-color-surface-inverse, #15110f) 78%
514
+ )
515
+ );
516
+ --seblify-tone-on-inverse-text: var(
517
+ --seblify-color-strong-on-inverse-text,
518
+ var(--seblify-color-text-inverse, #fff4e7)
519
+ );
520
+ --seblify-tone-on-inverse-border: var(
521
+ --seblify-color-strong-on-inverse-border,
522
+ color-mix(
523
+ in srgb,
524
+ var(--seblify-color-text-inverse, #fff4e7) 42%,
525
+ var(--seblify-color-border-inverse, #4a3b32) 58%
526
+ )
527
+ );
217
528
  }
218
529
 
219
530
  :where(.seblify-tone-context[data-seblify-tone='primary']) {
220
- --seblify-tone-fill: var(--seblify-color-fill-primary, #146a6f);
221
- --seblify-tone-fill-text: var(--seblify-color-fill-primary-text, #ffffff);
222
- --seblify-tone-surface: var(--seblify-color-surface-accent, #f7fbfb);
223
- --seblify-tone-text: var(--seblify-color-fill-primary, #146a6f);
224
- --seblify-tone-border: var(--seblify-color-border-accent, #9ab7ba);
531
+ --seblify-tone-fill: var(--seblify-color-primary-fill, #b43f5a);
532
+ --seblify-tone-fill-hover: var(--seblify-color-primary-fill-hover, #9f334d);
533
+ --seblify-tone-fill-text: var(--seblify-color-primary-fill-text, #fff4e7);
534
+ --seblify-tone-surface: var(--seblify-color-primary-surface, #fae8ed);
535
+ --seblify-tone-surface-hover: var(
536
+ --seblify-color-primary-surface-hover,
537
+ #f5d5dd
538
+ );
539
+ --seblify-tone-text: var(--seblify-color-primary-text, #8f2b43);
540
+ --seblify-tone-border: var(--seblify-color-primary-border, #e6a6b5);
541
+ --seblify-tone-derived-surface: var(
542
+ --seblify-color-primary-derived-surface,
543
+ var(
544
+ --seblify-color-neutral-derived-surface,
545
+ var(--seblify-color-surface-muted, #f2ebe4)
546
+ )
547
+ );
548
+ --seblify-tone-derived-border: var(
549
+ --seblify-color-primary-derived-border,
550
+ var(
551
+ --seblify-color-neutral-derived-border,
552
+ color-mix(
553
+ in srgb,
554
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
555
+ var(--seblify-color-border-strong, #c5afa0) 78%
556
+ )
557
+ )
558
+ );
559
+ --seblify-tone-derived-text: var(
560
+ --seblify-color-primary-derived-text,
561
+ var(
562
+ --seblify-color-neutral-derived-text,
563
+ var(--seblify-color-text-subtle, #8b7a70)
564
+ )
565
+ );
566
+ --seblify-tone-on-inverse-surface: var(
567
+ --seblify-color-primary-on-inverse-surface,
568
+ color-mix(
569
+ in srgb,
570
+ var(--seblify-color-primary-fill, #b43f5a) 22%,
571
+ var(--seblify-color-surface-inverse, #15110f) 78%
572
+ )
573
+ );
574
+ --seblify-tone-on-inverse-surface-hover: var(
575
+ --seblify-color-primary-on-inverse-surface-hover,
576
+ color-mix(
577
+ in srgb,
578
+ var(--seblify-color-primary-fill, #b43f5a) 32%,
579
+ var(--seblify-color-surface-inverse, #15110f) 68%
580
+ )
581
+ );
582
+ --seblify-tone-on-inverse-text: var(
583
+ --seblify-color-primary-on-inverse-text,
584
+ var(--seblify-color-primary-fill, #b43f5a)
585
+ );
586
+ --seblify-tone-on-inverse-border: var(
587
+ --seblify-color-primary-on-inverse-border,
588
+ var(--seblify-color-primary-border, #e6a6b5)
589
+ );
590
+ }
591
+
592
+ :where(.seblify-tone-context[data-seblify-tone='secondary']) {
593
+ --seblify-tone-fill: var(--seblify-color-secondary-fill, #6f3a55);
594
+ --seblify-tone-fill-hover: var(--seblify-color-secondary-fill-hover, #5e2f47);
595
+ --seblify-tone-fill-text: var(--seblify-color-secondary-fill-text, #fff4e7);
596
+ --seblify-tone-surface: var(--seblify-color-secondary-surface, #f4e5ee);
597
+ --seblify-tone-surface-hover: var(
598
+ --seblify-color-secondary-surface-hover,
599
+ #ecd3e0
600
+ );
601
+ --seblify-tone-text: var(--seblify-color-secondary-text, #6f3a55);
602
+ --seblify-tone-border: var(--seblify-color-secondary-border, #d7a6bf);
603
+ --seblify-tone-derived-surface: var(
604
+ --seblify-color-secondary-derived-surface,
605
+ var(
606
+ --seblify-color-neutral-derived-surface,
607
+ var(--seblify-color-surface-muted, #f2ebe4)
608
+ )
609
+ );
610
+ --seblify-tone-derived-border: var(
611
+ --seblify-color-secondary-derived-border,
612
+ var(
613
+ --seblify-color-neutral-derived-border,
614
+ color-mix(
615
+ in srgb,
616
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
617
+ var(--seblify-color-border-strong, #c5afa0) 78%
618
+ )
619
+ )
620
+ );
621
+ --seblify-tone-derived-text: var(
622
+ --seblify-color-secondary-derived-text,
623
+ var(
624
+ --seblify-color-neutral-derived-text,
625
+ var(--seblify-color-text-subtle, #8b7a70)
626
+ )
627
+ );
628
+ --seblify-tone-on-inverse-surface: var(
629
+ --seblify-color-secondary-on-inverse-surface,
630
+ color-mix(
631
+ in srgb,
632
+ var(--seblify-color-secondary-fill, #6f3a55) 22%,
633
+ var(--seblify-color-surface-inverse, #15110f) 78%
634
+ )
635
+ );
636
+ --seblify-tone-on-inverse-surface-hover: var(
637
+ --seblify-color-secondary-on-inverse-surface-hover,
638
+ color-mix(
639
+ in srgb,
640
+ var(--seblify-color-secondary-fill, #6f3a55) 32%,
641
+ var(--seblify-color-surface-inverse, #15110f) 68%
642
+ )
643
+ );
644
+ --seblify-tone-on-inverse-text: var(
645
+ --seblify-color-secondary-on-inverse-text,
646
+ var(--seblify-color-secondary-fill, #6f3a55)
647
+ );
648
+ --seblify-tone-on-inverse-border: var(
649
+ --seblify-color-secondary-on-inverse-border,
650
+ var(--seblify-color-secondary-border, #d7a6bf)
651
+ );
225
652
  }
226
653
 
227
654
  :where(.seblify-tone-context[data-seblify-tone='success']) {
228
- --seblify-tone-fill: var(--seblify-color-fill-success, #1f7a3f);
229
- --seblify-tone-fill-text: var(--seblify-color-fill-success-text, #ffffff);
230
- --seblify-tone-surface: var(--seblify-color-success-surface, #e8f8ee);
231
- --seblify-tone-text: var(--seblify-color-success-text, #143d25);
232
- --seblify-tone-border: var(--seblify-color-success-border, #b8ddc7);
655
+ --seblify-tone-fill: var(--seblify-color-success-fill, #777447);
656
+ --seblify-tone-fill-hover: var(--seblify-color-success-fill-hover, #66633c);
657
+ --seblify-tone-fill-text: var(--seblify-color-success-fill-text, #fff4e7);
658
+ --seblify-tone-surface: var(--seblify-color-success-surface, #eeeddf);
659
+ --seblify-tone-surface-hover: var(
660
+ --seblify-color-success-surface-hover,
661
+ #e1dfc4
662
+ );
663
+ --seblify-tone-text: var(--seblify-color-success-text, #5d5b34);
664
+ --seblify-tone-border: var(--seblify-color-success-border, #cbc790);
665
+ --seblify-tone-derived-surface: var(
666
+ --seblify-color-success-derived-surface,
667
+ var(
668
+ --seblify-color-neutral-derived-surface,
669
+ var(--seblify-color-surface-muted, #f2ebe4)
670
+ )
671
+ );
672
+ --seblify-tone-derived-border: var(
673
+ --seblify-color-success-derived-border,
674
+ var(
675
+ --seblify-color-neutral-derived-border,
676
+ color-mix(
677
+ in srgb,
678
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
679
+ var(--seblify-color-border-strong, #c5afa0) 78%
680
+ )
681
+ )
682
+ );
683
+ --seblify-tone-derived-text: var(
684
+ --seblify-color-success-derived-text,
685
+ var(
686
+ --seblify-color-neutral-derived-text,
687
+ var(--seblify-color-text-subtle, #8b7a70)
688
+ )
689
+ );
690
+ --seblify-tone-on-inverse-surface: var(
691
+ --seblify-color-success-on-inverse-surface,
692
+ color-mix(
693
+ in srgb,
694
+ var(--seblify-color-success-fill, #777447) 22%,
695
+ var(--seblify-color-surface-inverse, #15110f) 78%
696
+ )
697
+ );
698
+ --seblify-tone-on-inverse-surface-hover: var(
699
+ --seblify-color-success-on-inverse-surface-hover,
700
+ color-mix(
701
+ in srgb,
702
+ var(--seblify-color-success-fill, #777447) 32%,
703
+ var(--seblify-color-surface-inverse, #15110f) 68%
704
+ )
705
+ );
706
+ --seblify-tone-on-inverse-text: var(
707
+ --seblify-color-success-on-inverse-text,
708
+ var(--seblify-color-success-fill, #777447)
709
+ );
710
+ --seblify-tone-on-inverse-border: var(
711
+ --seblify-color-success-on-inverse-border,
712
+ var(--seblify-color-success-border, #cbc790)
713
+ );
233
714
  }
234
715
 
235
716
  :where(.seblify-tone-context[data-seblify-tone='danger']) {
236
- --seblify-tone-fill: var(--seblify-color-fill-danger, #c93434);
237
- --seblify-tone-fill-text: var(--seblify-color-fill-danger-text, #ffffff);
238
- --seblify-tone-surface: var(--seblify-color-error-surface, #fff0f0);
239
- --seblify-tone-text: var(--seblify-color-error-text, #5a1717);
240
- --seblify-tone-border: var(--seblify-color-error-border, #efb6b6);
717
+ --seblify-tone-fill: var(--seblify-color-danger-fill, #b83d45);
718
+ --seblify-tone-fill-hover: var(--seblify-color-danger-fill-hover, #9f3239);
719
+ --seblify-tone-fill-text: var(--seblify-color-danger-fill-text, #fff4e7);
720
+ --seblify-tone-surface: var(--seblify-color-danger-surface, #fae7e8);
721
+ --seblify-tone-surface-hover: var(
722
+ --seblify-color-danger-surface-hover,
723
+ #f3d2d4
724
+ );
725
+ --seblify-tone-text: var(--seblify-color-danger-text, #923038);
726
+ --seblify-tone-border: var(--seblify-color-danger-border, #e2a2a7);
727
+ --seblify-tone-derived-surface: var(
728
+ --seblify-color-danger-derived-surface,
729
+ var(
730
+ --seblify-color-neutral-derived-surface,
731
+ var(--seblify-color-surface-muted, #f2ebe4)
732
+ )
733
+ );
734
+ --seblify-tone-derived-border: var(
735
+ --seblify-color-danger-derived-border,
736
+ var(
737
+ --seblify-color-neutral-derived-border,
738
+ color-mix(
739
+ in srgb,
740
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
741
+ var(--seblify-color-border-strong, #c5afa0) 78%
742
+ )
743
+ )
744
+ );
745
+ --seblify-tone-derived-text: var(
746
+ --seblify-color-danger-derived-text,
747
+ var(
748
+ --seblify-color-neutral-derived-text,
749
+ var(--seblify-color-text-subtle, #8b7a70)
750
+ )
751
+ );
752
+ --seblify-tone-on-inverse-surface: var(
753
+ --seblify-color-danger-on-inverse-surface,
754
+ color-mix(
755
+ in srgb,
756
+ var(--seblify-color-danger-fill, #b83d45) 22%,
757
+ var(--seblify-color-surface-inverse, #15110f) 78%
758
+ )
759
+ );
760
+ --seblify-tone-on-inverse-surface-hover: var(
761
+ --seblify-color-danger-on-inverse-surface-hover,
762
+ color-mix(
763
+ in srgb,
764
+ var(--seblify-color-danger-fill, #b83d45) 32%,
765
+ var(--seblify-color-surface-inverse, #15110f) 68%
766
+ )
767
+ );
768
+ --seblify-tone-on-inverse-text: var(
769
+ --seblify-color-danger-on-inverse-text,
770
+ var(--seblify-color-danger-fill, #b83d45)
771
+ );
772
+ --seblify-tone-on-inverse-border: var(
773
+ --seblify-color-danger-on-inverse-border,
774
+ var(--seblify-color-danger-border, #e2a2a7)
775
+ );
241
776
  }
242
777
 
243
778
  :where(.seblify-tone-context[data-seblify-tone='warning']) {
244
- --seblify-tone-fill: var(--seblify-color-fill-warning, #8a5a00);
245
- --seblify-tone-fill-text: var(--seblify-color-fill-warning-text, #ffffff);
246
- --seblify-tone-surface: var(--seblify-color-warning-surface, #fff6d8);
247
- --seblify-tone-text: var(--seblify-color-warning-text, #4d3900);
248
- --seblify-tone-border: var(--seblify-color-warning-border, #e8d28f);
779
+ --seblify-tone-fill: var(--seblify-color-warning-fill, #9a6d24);
780
+ --seblify-tone-fill-hover: var(--seblify-color-warning-fill-hover, #805918);
781
+ --seblify-tone-fill-text: var(--seblify-color-warning-fill-text, #fff4e7);
782
+ --seblify-tone-surface: var(--seblify-color-warning-surface, #f8edd8);
783
+ --seblify-tone-surface-hover: var(
784
+ --seblify-color-warning-surface-hover,
785
+ #efddbd
786
+ );
787
+ --seblify-tone-text: var(--seblify-color-warning-text, #7a5418);
788
+ --seblify-tone-border: var(--seblify-color-warning-border, #d8b46c);
789
+ --seblify-tone-derived-surface: var(
790
+ --seblify-color-warning-derived-surface,
791
+ var(
792
+ --seblify-color-neutral-derived-surface,
793
+ var(--seblify-color-surface-muted, #f2ebe4)
794
+ )
795
+ );
796
+ --seblify-tone-derived-border: var(
797
+ --seblify-color-warning-derived-border,
798
+ var(
799
+ --seblify-color-neutral-derived-border,
800
+ color-mix(
801
+ in srgb,
802
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
803
+ var(--seblify-color-border-strong, #c5afa0) 78%
804
+ )
805
+ )
806
+ );
807
+ --seblify-tone-derived-text: var(
808
+ --seblify-color-warning-derived-text,
809
+ var(
810
+ --seblify-color-neutral-derived-text,
811
+ var(--seblify-color-text-subtle, #8b7a70)
812
+ )
813
+ );
814
+ --seblify-tone-on-inverse-surface: var(
815
+ --seblify-color-warning-on-inverse-surface,
816
+ color-mix(
817
+ in srgb,
818
+ var(--seblify-color-warning-fill, #9a6d24) 22%,
819
+ var(--seblify-color-surface-inverse, #15110f) 78%
820
+ )
821
+ );
822
+ --seblify-tone-on-inverse-surface-hover: var(
823
+ --seblify-color-warning-on-inverse-surface-hover,
824
+ color-mix(
825
+ in srgb,
826
+ var(--seblify-color-warning-fill, #9a6d24) 32%,
827
+ var(--seblify-color-surface-inverse, #15110f) 68%
828
+ )
829
+ );
830
+ --seblify-tone-on-inverse-text: var(
831
+ --seblify-color-warning-on-inverse-text,
832
+ var(--seblify-color-warning-fill, #9a6d24)
833
+ );
834
+ --seblify-tone-on-inverse-border: var(
835
+ --seblify-color-warning-on-inverse-border,
836
+ var(--seblify-color-warning-border, #d8b46c)
837
+ );
249
838
  }
250
839
 
251
840
  :where(.seblify-tone-context[data-seblify-tone='info']) {
252
- --seblify-tone-fill: var(--seblify-color-fill-info, #1f6fb2);
253
- --seblify-tone-fill-text: var(--seblify-color-fill-info-text, #ffffff);
254
- --seblify-tone-surface: var(--seblify-color-info-surface, #eaf3ff);
255
- --seblify-tone-text: var(--seblify-color-info-text, #102f55);
256
- --seblify-tone-border: var(--seblify-color-info-border, #bfd1ea);
841
+ --seblify-tone-fill: var(--seblify-color-info-fill, #a5664a);
842
+ --seblify-tone-fill-hover: var(--seblify-color-info-fill-hover, #8f543b);
843
+ --seblify-tone-fill-text: var(--seblify-color-info-fill-text, #fff4e7);
844
+ --seblify-tone-surface: var(--seblify-color-info-surface, #f6e6de);
845
+ --seblify-tone-surface-hover: var(
846
+ --seblify-color-info-surface-hover,
847
+ #edd3c6
848
+ );
849
+ --seblify-tone-text: var(--seblify-color-info-text, #844932);
850
+ --seblify-tone-border: var(--seblify-color-info-border, #d49d85);
851
+ --seblify-tone-derived-surface: var(
852
+ --seblify-color-info-derived-surface,
853
+ var(
854
+ --seblify-color-neutral-derived-surface,
855
+ var(--seblify-color-surface-muted, #f2ebe4)
856
+ )
857
+ );
858
+ --seblify-tone-derived-border: var(
859
+ --seblify-color-info-derived-border,
860
+ var(
861
+ --seblify-color-neutral-derived-border,
862
+ color-mix(
863
+ in srgb,
864
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
865
+ var(--seblify-color-border-strong, #c5afa0) 78%
866
+ )
867
+ )
868
+ );
869
+ --seblify-tone-derived-text: var(
870
+ --seblify-color-info-derived-text,
871
+ var(
872
+ --seblify-color-neutral-derived-text,
873
+ var(--seblify-color-text-subtle, #8b7a70)
874
+ )
875
+ );
876
+ --seblify-tone-on-inverse-surface: var(
877
+ --seblify-color-info-on-inverse-surface,
878
+ color-mix(
879
+ in srgb,
880
+ var(--seblify-color-info-fill, #a5664a) 22%,
881
+ var(--seblify-color-surface-inverse, #15110f) 78%
882
+ )
883
+ );
884
+ --seblify-tone-on-inverse-surface-hover: var(
885
+ --seblify-color-info-on-inverse-surface-hover,
886
+ color-mix(
887
+ in srgb,
888
+ var(--seblify-color-info-fill, #a5664a) 32%,
889
+ var(--seblify-color-surface-inverse, #15110f) 68%
890
+ )
891
+ );
892
+ --seblify-tone-on-inverse-text: var(
893
+ --seblify-color-info-on-inverse-text,
894
+ var(--seblify-color-info-fill, #a5664a)
895
+ );
896
+ --seblify-tone-on-inverse-border: var(
897
+ --seblify-color-info-on-inverse-border,
898
+ var(--seblify-color-info-border, #d49d85)
899
+ );
900
+ }
901
+
902
+ :where(.seblify-tone-context[data-seblify-surface='inverse']) {
903
+ --seblify-tone-control-surface: var(--seblify-tone-on-inverse-surface);
904
+ --seblify-tone-control-surface-hover: var(
905
+ --seblify-tone-on-inverse-surface-hover
906
+ );
907
+ --seblify-tone-control-default-text: var(
908
+ --seblify-color-text-inverse,
909
+ #fff4e7
910
+ );
911
+ --seblify-tone-control-text: var(--seblify-tone-on-inverse-text);
912
+ --seblify-tone-control-border: var(--seblify-tone-on-inverse-border);
913
+ --seblify-tone-control-derived-surface: color-mix(
914
+ in srgb,
915
+ var(--seblify-tone-on-inverse-surface) 70%,
916
+ var(--seblify-color-surface-inverse, #15110f) 30%
917
+ );
918
+ --seblify-tone-control-derived-border: color-mix(
919
+ in srgb,
920
+ var(--seblify-tone-on-inverse-border) 72%,
921
+ var(--seblify-color-border-inverse, #4a3b32) 28%
922
+ );
923
+ --seblify-tone-control-derived-text: var(--seblify-tone-on-inverse-text);
257
924
  }
258
925
 
259
- :where(.seblify-tone-context[data-seblify-tone='inverse']) {
260
- --seblify-tone-fill: var(--seblify-color-fill-inverse, #172033);
261
- --seblify-tone-fill-text: var(--seblify-color-fill-inverse-text, #ffffff);
262
- --seblify-tone-surface: var(--seblify-color-surface-inverse-hover, #263043);
263
- --seblify-tone-text: var(--seblify-color-fill-inverse-text, #ffffff);
264
- --seblify-tone-border: var(--seblify-color-border-inverse, #263043);
926
+ :where(
927
+ .seblify-tone-context[data-seblify-surface='inverse'][data-seblify-tone='strong']
928
+ ) {
929
+ --seblify-tone-control-fill: var(--seblify-color-text-inverse, #fff4e7);
930
+ --seblify-tone-control-fill-hover: color-mix(
931
+ in srgb,
932
+ var(--seblify-color-text-inverse, #fff4e7) 88%,
933
+ var(--seblify-color-surface-inverse, #15110f) 12%
934
+ );
935
+ --seblify-tone-control-fill-text: var(--seblify-color-text, #211916);
265
936
  }
266
937
 
267
938
  :where(.seblify-tone-publisher) {
268
939
  --seblify-current-tone-fill: var(--seblify-tone-fill);
940
+ --seblify-current-tone-fill-hover: var(--seblify-tone-fill-hover);
269
941
  --seblify-current-tone-fill-text: var(--seblify-tone-fill-text);
270
942
  --seblify-current-tone-surface: var(--seblify-tone-surface);
943
+ --seblify-current-tone-surface-hover: var(--seblify-tone-surface-hover);
271
944
  --seblify-current-tone-text: var(--seblify-tone-text);
272
945
  --seblify-current-tone-border: var(--seblify-tone-border);
946
+ --seblify-current-tone-derived-surface: var(--seblify-tone-derived-surface);
947
+ --seblify-current-tone-derived-border: var(--seblify-tone-derived-border);
948
+ --seblify-current-tone-derived-text: var(--seblify-tone-derived-text);
949
+ --seblify-current-tone-on-inverse-surface: var(
950
+ --seblify-tone-on-inverse-surface
951
+ );
952
+ --seblify-current-tone-on-inverse-surface-hover: var(
953
+ --seblify-tone-on-inverse-surface-hover
954
+ );
955
+ --seblify-current-tone-on-inverse-text: var(--seblify-tone-on-inverse-text);
956
+ --seblify-current-tone-on-inverse-border: var(
957
+ --seblify-tone-on-inverse-border
958
+ );
273
959
  }
274
960
 
961
+ /* Base */
962
+
275
963
  .switch {
276
964
  --switch-track-width: calc(var(--switch-size) * 1.75);
277
965
  --switch-track-height: var(--switch-size);
@@ -284,12 +972,15 @@
284
972
  var(--switch-track-height) - 2 * var(--switch-radius-inset)
285
973
  );
286
974
  --switch-thumb-width: var(--switch-thumb-size);
975
+ --switch-thumb-height: var(--switch-thumb-size);
287
976
  --switch-thumb-travel: calc(
288
977
  var(--switch-track-width) - var(--switch-thumb-width) - 2 *
289
978
  var(--switch-radius-inset)
290
979
  );
291
980
  --switch-thumb-position-off: 0px;
292
981
  --switch-thumb-position-on: var(--switch-thumb-travel);
982
+ --switch-thumb-transform-off: translateX(var(--switch-thumb-position-off));
983
+ --switch-thumb-transform-on: translateX(var(--switch-thumb-position-on));
293
984
  --switch-thumb-radius: max(
294
985
  0px,
295
986
  min(
@@ -299,6 +990,7 @@
299
990
  );
300
991
  --switch-solid-border: var(--seblify-tone-fill);
301
992
  --switch-solid-surface: var(--seblify-tone-fill);
993
+ --switch-focus-tone-fill: var(--seblify-tone-fill);
302
994
  --switch-solid-thumb: color-mix(
303
995
  in srgb,
304
996
  var(--seblify-tone-fill) 8%,
@@ -319,6 +1011,13 @@
319
1011
  var(--seblify-tone-fill) 78%,
320
1012
  var(--seblify-color-surface, #ffffff)
321
1013
  );
1014
+ --switch-outline-border: var(--seblify-tone-fill);
1015
+ --switch-outline-surface: color-mix(
1016
+ in srgb,
1017
+ var(--seblify-tone-fill) 7%,
1018
+ var(--seblify-color-surface, #ffffff)
1019
+ );
1020
+ --switch-outline-thumb: var(--seblify-tone-fill);
322
1021
  --switch-off-border: var(--seblify-color-border-strong, #aab7c5);
323
1022
  --switch-off-surface: var(--seblify-color-surface-muted, #d9e0e8);
324
1023
  --switch-off-thumb: var(--seblify-color-surface, #ffffff);
@@ -335,9 +1034,9 @@
335
1034
  );
336
1035
  --switch-bouncy-runup: max(1px, calc(var(--switch-thumb-size) * 0.1));
337
1036
  --switch-bouncy-overshoot: max(1px, calc(var(--switch-thumb-size) * 0.07));
338
- --switch-thumb-motion-duration: 160ms;
1037
+ --switch-thumb-motion-duration: var(--switch-duration);
339
1038
  --switch-thumb-motion-timing: cubic-bezier(0.32, 0.72, 0, 1);
340
- --switch-state-duration: 160ms;
1039
+ --switch-state-duration: var(--switch-duration);
341
1040
  --switch-state-timing: ease;
342
1041
  --switch-track-icon-on-color: color-mix(
343
1042
  in srgb,
@@ -351,7 +1050,7 @@
351
1050
  );
352
1051
  --switch-focus-ring-color: color-mix(
353
1052
  in srgb,
354
- var(--seblify-tone-fill) 56%,
1053
+ var(--switch-focus-tone-fill) 56%,
355
1054
  transparent
356
1055
  );
357
1056
 
@@ -363,47 +1062,75 @@
363
1062
  cursor: pointer;
364
1063
  }
365
1064
 
1065
+ /* Tone */
1066
+
366
1067
  .switch[data-seblify-tone='inherit'] {
367
1068
  --seblify-tone-fill: var(
368
1069
  --seblify-current-tone-fill,
369
- var(--seblify-color-fill-neutral, #5b6675)
1070
+ var(--seblify-color-neutral-fill, #6f5f55)
1071
+ );
1072
+ --seblify-tone-fill-hover: var(
1073
+ --seblify-current-tone-fill-hover,
1074
+ var(--seblify-color-neutral-fill-hover, #5b4d45)
370
1075
  );
371
1076
  --seblify-tone-fill-text: var(
372
1077
  --seblify-current-tone-fill-text,
373
- var(--seblify-color-fill-neutral-text, #ffffff)
1078
+ var(--seblify-color-neutral-fill-text, #fff4e7)
374
1079
  );
375
1080
  --seblify-tone-surface: var(
376
1081
  --seblify-current-tone-surface,
377
- var(--seblify-color-surface-neutral, #f4f6f8)
1082
+ var(--seblify-color-neutral-surface, #f2ebe4)
1083
+ );
1084
+ --seblify-tone-surface-hover: var(
1085
+ --seblify-current-tone-surface-hover,
1086
+ var(--seblify-color-neutral-surface-hover, #ebe1d8)
378
1087
  );
379
1088
  --seblify-tone-text: var(
380
1089
  --seblify-current-tone-text,
381
- var(--seblify-color-fill-neutral, #5b6675)
1090
+ var(--seblify-color-neutral-text, #6f5f55)
382
1091
  );
383
1092
  --seblify-tone-border: var(
384
1093
  --seblify-current-tone-border,
385
- var(--seblify-color-border-neutral, #c5ccd6)
1094
+ var(--seblify-color-neutral-border, #ded0c4)
386
1095
  );
387
1096
  }
388
1097
 
389
- .switch[data-animation='smooth'] {
390
- --switch-thumb-motion-duration: 190ms;
391
- --switch-thumb-motion-timing: cubic-bezier(0.32, 0.72, 0, 1);
392
- --switch-state-duration: 190ms;
393
- --switch-state-timing: ease;
1098
+ .switch[data-focus-tone='inherit'] {
1099
+ --switch-focus-tone-fill: var(--seblify-tone-fill);
1100
+ }
1101
+
1102
+ .switch[data-focus-tone='neutral'] {
1103
+ --switch-focus-tone-fill: var(--seblify-color-neutral-fill, #6f5f55);
394
1104
  }
395
1105
 
396
- .switch[data-animation='snappy'] {
397
- --switch-thumb-motion-duration: 90ms;
398
- --switch-thumb-motion-timing: cubic-bezier(0.12, 0.92, 0.18, 1);
399
- --switch-state-duration: 90ms;
400
- --switch-state-timing: linear;
1106
+ .switch[data-focus-tone='primary'] {
1107
+ --switch-focus-tone-fill: var(--seblify-color-primary-fill, #b43f5a);
401
1108
  }
402
1109
 
1110
+ .switch[data-focus-tone='secondary'] {
1111
+ --switch-focus-tone-fill: var(--seblify-color-secondary-fill, #6f3a55);
1112
+ }
1113
+
1114
+ .switch[data-focus-tone='success'] {
1115
+ --switch-focus-tone-fill: var(--seblify-color-success-fill, #777447);
1116
+ }
1117
+
1118
+ .switch[data-focus-tone='danger'] {
1119
+ --switch-focus-tone-fill: var(--seblify-color-danger-fill, #b83d45);
1120
+ }
1121
+
1122
+ .switch[data-focus-tone='warning'] {
1123
+ --switch-focus-tone-fill: var(--seblify-color-warning-fill, #9a6d24);
1124
+ }
1125
+
1126
+ .switch[data-focus-tone='info'] {
1127
+ --switch-focus-tone-fill: var(--seblify-color-info-fill, #a5664a);
1128
+ }
1129
+
1130
+ /* Motion */
1131
+
403
1132
  .switch[data-animation='bouncy'] {
404
- --switch-thumb-motion-duration: 380ms;
405
1133
  --switch-thumb-motion-timing: cubic-bezier(0.24, 1.18, 0.4, 1);
406
- --switch-state-duration: 220ms;
407
1134
  --switch-state-timing: ease;
408
1135
  }
409
1136
 
@@ -451,6 +1178,50 @@
451
1178
  }
452
1179
  }
453
1180
 
1181
+ @keyframes switch-bouncy-vertical-to-on {
1182
+ 0% {
1183
+ transform: translateY(var(--switch-thumb-position-off));
1184
+ }
1185
+
1186
+ 20% {
1187
+ transform: translateY(
1188
+ calc(var(--switch-thumb-position-off) - var(--switch-bouncy-runup))
1189
+ );
1190
+ }
1191
+
1192
+ 76% {
1193
+ transform: translateY(
1194
+ calc(var(--switch-thumb-position-on) + var(--switch-bouncy-overshoot))
1195
+ );
1196
+ }
1197
+
1198
+ 100% {
1199
+ transform: translateY(var(--switch-thumb-position-on));
1200
+ }
1201
+ }
1202
+
1203
+ @keyframes switch-bouncy-vertical-to-off {
1204
+ 0% {
1205
+ transform: translateY(var(--switch-thumb-position-on));
1206
+ }
1207
+
1208
+ 20% {
1209
+ transform: translateY(
1210
+ calc(var(--switch-thumb-position-on) + var(--switch-bouncy-runup))
1211
+ );
1212
+ }
1213
+
1214
+ 76% {
1215
+ transform: translateY(
1216
+ calc(var(--switch-thumb-position-off) - var(--switch-bouncy-overshoot))
1217
+ );
1218
+ }
1219
+
1220
+ 100% {
1221
+ transform: translateY(var(--switch-thumb-position-off));
1222
+ }
1223
+ }
1224
+
454
1225
  input {
455
1226
  position: absolute;
456
1227
  width: 1px;
@@ -462,6 +1233,8 @@ input {
462
1233
  white-space: nowrap;
463
1234
  }
464
1235
 
1236
+ /* Structure */
1237
+
465
1238
  .control {
466
1239
  position: relative;
467
1240
  display: inline-flex;
@@ -512,7 +1285,7 @@ input {
512
1285
  .thumb {
513
1286
  display: inline-flex;
514
1287
  width: var(--switch-thumb-width);
515
- height: var(--switch-thumb-size);
1288
+ height: var(--switch-thumb-height);
516
1289
  align-items: center;
517
1290
  justify-content: center;
518
1291
  border-radius: var(--switch-thumb-radius);
@@ -524,7 +1297,7 @@ input {
524
1297
  var(--seblify-color-text-muted, #516176) 36%,
525
1298
  transparent
526
1299
  );
527
- transform: translateX(var(--switch-thumb-position-off));
1300
+ transform: var(--switch-thumb-transform-off);
528
1301
  transition:
529
1302
  transform var(--switch-thumb-motion-duration)
530
1303
  var(--switch-thumb-motion-timing),
@@ -533,6 +1306,8 @@ input {
533
1306
  color var(--switch-state-duration) var(--switch-state-timing);
534
1307
  }
535
1308
 
1309
+ /* Shapes */
1310
+
536
1311
  .switch[data-shape='floating'],
537
1312
  .switch[data-shape='line'] {
538
1313
  --switch-track-height: calc(var(--switch-size) * 0.6666667);
@@ -596,6 +1371,86 @@ input {
596
1371
  --switch-thumb-width: var(--switch-thumb-size);
597
1372
  }
598
1373
 
1374
+ /* Orientation */
1375
+
1376
+ .switch[data-orientation='vertical'] {
1377
+ --switch-track-width: var(--switch-size);
1378
+ --switch-track-height: calc(var(--switch-size) * 1.75);
1379
+ --switch-thumb-size: calc(
1380
+ var(--switch-track-width) - 2 * var(--switch-radius-inset)
1381
+ );
1382
+ --switch-thumb-width: var(--switch-thumb-size);
1383
+ --switch-thumb-height: var(--switch-thumb-size);
1384
+ --switch-thumb-travel: calc(
1385
+ var(--switch-track-height) - var(--switch-thumb-height) - 2 *
1386
+ var(--switch-radius-inset)
1387
+ );
1388
+ --switch-thumb-position-off: var(--switch-thumb-travel);
1389
+ --switch-thumb-position-on: 0px;
1390
+ --switch-thumb-transform-off: translateY(var(--switch-thumb-position-off));
1391
+ --switch-thumb-transform-on: translateY(var(--switch-thumb-position-on));
1392
+ --switch-track-icon-offset: calc(
1393
+ var(--switch-radius-inset) + var(--switch-thumb-size) * 0.08
1394
+ );
1395
+ }
1396
+
1397
+ .switch[data-orientation='vertical'] .control {
1398
+ flex-direction: column;
1399
+ }
1400
+
1401
+ .switch[data-orientation='vertical'][data-shape='flat'],
1402
+ .switch[data-orientation='vertical'][data-shape='long'] {
1403
+ --switch-track-width: calc(var(--switch-size) * 0.75);
1404
+ --switch-track-height: calc(var(--switch-size) * 1.75);
1405
+ --switch-thumb-size: calc(
1406
+ var(--switch-track-width) - 2 * var(--switch-radius-inset)
1407
+ );
1408
+ --switch-thumb-width: var(--switch-thumb-size);
1409
+ --switch-thumb-height: calc(var(--switch-thumb-size) * 1.55);
1410
+ }
1411
+
1412
+ .switch[data-orientation='vertical'][data-shape='long'] {
1413
+ --switch-thumb-height: var(--switch-thumb-size);
1414
+ }
1415
+
1416
+ .switch[data-orientation='vertical'][data-shape='floating'],
1417
+ .switch[data-orientation='vertical'][data-shape='line'] {
1418
+ --switch-track-width: calc(var(--switch-size) * 0.6666667);
1419
+ --switch-track-height: calc(var(--switch-size) * 1.75);
1420
+ --switch-padding: 0px;
1421
+ --switch-radius-inset: var(--switch-border-width);
1422
+ --switch-thumb-size: var(--switch-size);
1423
+ --switch-thumb-width: var(--switch-thumb-size);
1424
+ --switch-thumb-height: var(--switch-thumb-size);
1425
+ --switch-thumb-travel: calc(
1426
+ var(--switch-track-height) - var(--switch-thumb-height)
1427
+ );
1428
+ --switch-thumb-position-off: var(--switch-thumb-travel);
1429
+ --switch-thumb-position-on: calc(-2 * var(--switch-border-width));
1430
+ }
1431
+
1432
+ .switch[data-orientation='vertical'][data-shape='line'] {
1433
+ --switch-track-width: calc(var(--switch-size) * 0.3333333);
1434
+ }
1435
+
1436
+ .switch[data-orientation='vertical'] .track-icon {
1437
+ left: 50%;
1438
+ transform: translateX(-50%);
1439
+ }
1440
+
1441
+ .switch[data-orientation='vertical'] .track-icon--on {
1442
+ top: var(--switch-track-icon-offset);
1443
+ transform: translateX(-50%) rotate(90deg);
1444
+ }
1445
+
1446
+ .switch[data-orientation='vertical'] .track-icon--off {
1447
+ top: auto;
1448
+ right: auto;
1449
+ bottom: var(--switch-track-icon-offset);
1450
+ }
1451
+
1452
+ /* States */
1453
+
599
1454
  input:checked + .control {
600
1455
  border-color: var(--switch-on-border);
601
1456
  background: var(--switch-on-surface);
@@ -622,7 +1477,7 @@ input:checked + .control .thumb {
622
1477
  }
623
1478
 
624
1479
  input:checked + .control .thumb {
625
- transform: translateX(var(--switch-thumb-position-on));
1480
+ transform: var(--switch-thumb-transform-on);
626
1481
  }
627
1482
 
628
1483
  .thumb-grip {
@@ -639,16 +1494,34 @@ input:checked + .control .thumb {
639
1494
  overflow: visible;
640
1495
  }
641
1496
 
642
- .switch[data-animation='bouncy'][data-bouncy-motion='to-on'] .thumb {
1497
+ /* Animation selectors */
1498
+
1499
+ .switch[data-orientation='horizontal'][data-animation='bouncy'][data-bouncy-motion='to-on']
1500
+ .thumb {
643
1501
  animation: switch-bouncy-to-on var(--switch-thumb-motion-duration)
644
1502
  var(--switch-thumb-motion-timing);
645
1503
  }
646
1504
 
647
- .switch[data-animation='bouncy'][data-bouncy-motion='to-off'] .thumb {
1505
+ .switch[data-orientation='horizontal'][data-animation='bouncy'][data-bouncy-motion='to-off']
1506
+ .thumb {
648
1507
  animation: switch-bouncy-to-off var(--switch-thumb-motion-duration)
649
1508
  var(--switch-thumb-motion-timing);
650
1509
  }
651
1510
 
1511
+ .switch[data-orientation='vertical'][data-animation='bouncy'][data-bouncy-motion='to-on']
1512
+ .thumb {
1513
+ animation: switch-bouncy-vertical-to-on var(--switch-thumb-motion-duration)
1514
+ var(--switch-thumb-motion-timing);
1515
+ }
1516
+
1517
+ .switch[data-orientation='vertical'][data-animation='bouncy'][data-bouncy-motion='to-off']
1518
+ .thumb {
1519
+ animation: switch-bouncy-vertical-to-off var(--switch-thumb-motion-duration)
1520
+ var(--switch-thumb-motion-timing);
1521
+ }
1522
+
1523
+ /* Variants */
1524
+
652
1525
  .switch[data-variant='soft'] {
653
1526
  --switch-on-border: var(--switch-soft-border);
654
1527
  --switch-on-surface: var(--switch-soft-surface);
@@ -662,7 +1535,25 @@ input:checked + .control .thumb {
662
1535
  --switch-off-thumb: var(--switch-soft-thumb);
663
1536
  }
664
1537
 
665
- :global([data-theme='dark']) .switch {
1538
+ .switch[data-variant='outline'] {
1539
+ --switch-off-border: var(--seblify-color-border-strong, #aab7c5);
1540
+ --switch-off-surface: var(--seblify-color-surface, #ffffff);
1541
+ --switch-off-thumb: var(--switch-off-border);
1542
+ --switch-on-border: var(--switch-outline-border);
1543
+ --switch-on-surface: var(--switch-outline-surface);
1544
+ --switch-on-thumb-base: var(--switch-outline-thumb);
1545
+ --switch-on-thumb: var(--switch-on-thumb-base);
1546
+ --switch-track-icon-on-color: color-mix(
1547
+ in srgb,
1548
+ var(--seblify-tone-fill) 48%,
1549
+ transparent
1550
+ );
1551
+ }
1552
+
1553
+ /* Color schemes */
1554
+
1555
+ :global([data-color-mode='dark']) .switch {
1556
+ --switch-off-surface: #2c231e;
666
1557
  --switch-solid-thumb: color-mix(
667
1558
  in srgb,
668
1559
  var(--seblify-tone-fill) 18%,
@@ -671,15 +1562,16 @@ input:checked + .control .thumb {
671
1562
  --switch-soft-thumb: var(--seblify-tone-fill);
672
1563
  }
673
1564
 
674
- :global([data-theme='dark']) .switch[data-shape='floating'],
675
- :global([data-theme='dark']) .switch[data-shape='line'] {
1565
+ :global([data-color-mode='dark']) .switch[data-shape='floating'],
1566
+ :global([data-color-mode='dark']) .switch[data-shape='line'] {
676
1567
  --switch-off-thumb: var(--seblify-color-surface-hover, #253241);
677
1568
  --switch-thumb-shadow:
678
1569
  0 6px 14px rgb(0 0 0 / 34%), 0 2px 5px rgb(0 0 0 / 28%);
679
1570
  }
680
1571
 
681
1572
  @media (prefers-color-scheme: dark) {
682
- :global(:root:not([data-theme])) .switch {
1573
+ :global(:root:not([data-color-mode])) .switch {
1574
+ --switch-off-surface: #2c231e;
683
1575
  --switch-solid-thumb: color-mix(
684
1576
  in srgb,
685
1577
  var(--seblify-tone-fill) 18%,
@@ -688,14 +1580,27 @@ input:checked + .control .thumb {
688
1580
  --switch-soft-thumb: var(--seblify-tone-fill);
689
1581
  }
690
1582
 
691
- :global(:root:not([data-theme])) .switch[data-shape='floating'],
692
- :global(:root:not([data-theme])) .switch[data-shape='line'] {
1583
+ :global(:root:not([data-color-mode])) .switch[data-shape='floating'],
1584
+ :global(:root:not([data-color-mode])) .switch[data-shape='line'] {
693
1585
  --switch-off-thumb: var(--seblify-color-surface-hover, #253241);
694
1586
  --switch-thumb-shadow:
695
1587
  0 6px 14px rgb(0 0 0 / 34%), 0 2px 5px rgb(0 0 0 / 28%);
696
1588
  }
697
1589
  }
698
1590
 
1591
+ @media (prefers-reduced-motion: reduce) {
1592
+ .switch {
1593
+ --switch-thumb-motion-duration: 0ms;
1594
+ --switch-thumb-motion-timing: linear;
1595
+ --switch-state-duration: 0ms;
1596
+ --switch-state-timing: linear;
1597
+ }
1598
+
1599
+ .switch[data-animation='bouncy'] .thumb {
1600
+ animation: none;
1601
+ }
1602
+ }
1603
+
699
1604
  input:focus-visible + .control {
700
1605
  outline: 3px solid var(--switch-focus-ring-color);
701
1606
  outline-offset: 2px;