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
@@ -0,0 +1,1041 @@
1
+ <script lang="ts">
2
+ import type { CustomCssSize, SeblifyProps } from 'seblify';
3
+ import type { Snippet } from 'svelte';
4
+
5
+ type ButtonRadius = 'none' | 'sm' | 'md' | 'lg' | 'full' | CustomCssSize;
6
+ type ButtonSize = 'sm' | 'md' | 'lg' | 'xl' | CustomCssSize;
7
+ type ButtonTone =
8
+ | 'neutral'
9
+ | 'strong'
10
+ | 'primary'
11
+ | 'secondary'
12
+ | 'success'
13
+ | 'danger'
14
+ | 'warning'
15
+ | 'info';
16
+ type ButtonSurface = 'default' | 'inverse';
17
+ type ButtonType = 'button' | 'submit' | 'reset';
18
+ type ButtonVariant = 'solid' | 'soft' | 'tint' | 'outline' | 'plain';
19
+
20
+ type Props = SeblifyProps<{
21
+ [key: string]: unknown;
22
+ ariaLabel?: string;
23
+ children?: Snippet;
24
+ class?: string;
25
+ disabled?: boolean;
26
+ end?: Snippet;
27
+ fullWidth?: boolean;
28
+ label?: string;
29
+ loading?: boolean;
30
+ loadingLabel?: string;
31
+ radius?: ButtonRadius;
32
+ size?: ButtonSize;
33
+ start?: Snippet;
34
+ surface?: ButtonSurface;
35
+ tone?: ButtonTone;
36
+ type?: ButtonType;
37
+ variant?: ButtonVariant;
38
+ }>;
39
+
40
+ const BUTTON_SIZE_MAP: Record<
41
+ Exclude<ButtonSize, CustomCssSize>,
42
+ { gap: string; height: string; icon: string; padding: string }
43
+ > = {
44
+ sm: {
45
+ gap: '0.375rem',
46
+ height: '2rem',
47
+ icon: '1rem',
48
+ padding: '0.75rem',
49
+ },
50
+ md: {
51
+ gap: '0.5rem',
52
+ height: '2.25rem',
53
+ icon: '1.125rem',
54
+ padding: '0.875rem',
55
+ },
56
+ lg: {
57
+ gap: '0.625rem',
58
+ height: '2.75rem',
59
+ icon: '1.25rem',
60
+ padding: '1rem',
61
+ },
62
+ xl: {
63
+ gap: '0.75rem',
64
+ height: '3.25rem',
65
+ icon: '1.375rem',
66
+ padding: '1.125rem',
67
+ },
68
+ };
69
+ const BUTTON_RADIUS_MAP: Record<
70
+ Exclude<ButtonRadius, CustomCssSize>,
71
+ string
72
+ > = {
73
+ none: '0',
74
+ sm: '0.25rem',
75
+ md: '0.375rem',
76
+ lg: '0.5rem',
77
+ full: '999px',
78
+ };
79
+
80
+ let {
81
+ ariaLabel,
82
+ children,
83
+ class: className,
84
+ disabled = false,
85
+ end,
86
+ fullWidth = false,
87
+ label,
88
+ loading = false,
89
+ loadingLabel,
90
+ radius = 'md',
91
+ size = 'md',
92
+ start,
93
+ surface = 'default',
94
+ tone = 'primary',
95
+ type = 'button',
96
+ variant = 'solid',
97
+ ...restProps
98
+ }: Props = $props();
99
+
100
+ function cssSize(value: CustomCssSize): string {
101
+ return typeof value === 'number' ? `${value}px` : value;
102
+ }
103
+
104
+ function resolveSizeConfig(value: ButtonSize) {
105
+ if (typeof value === 'number') {
106
+ const resolvedSize = cssSize(value);
107
+
108
+ return {
109
+ gap: '0.5rem',
110
+ height: resolvedSize,
111
+ icon: `max(1rem, calc(${resolvedSize} * 0.46))`,
112
+ padding: `max(0.75rem, calc(${resolvedSize} * 0.42))`,
113
+ };
114
+ }
115
+
116
+ const namedConfig = BUTTON_SIZE_MAP[value as keyof typeof BUTTON_SIZE_MAP];
117
+
118
+ if (namedConfig) {
119
+ return namedConfig;
120
+ }
121
+
122
+ return {
123
+ gap: '0.5rem',
124
+ height: value,
125
+ icon: `max(1rem, calc(${value} * 0.46))`,
126
+ padding: `max(0.75rem, calc(${value} * 0.42))`,
127
+ };
128
+ }
129
+
130
+ function resolveRadiusValue(value: ButtonRadius): string {
131
+ if (typeof value === 'number') {
132
+ return cssSize(value);
133
+ }
134
+
135
+ return BUTTON_RADIUS_MAP[value as keyof typeof BUTTON_RADIUS_MAP] ?? value;
136
+ }
137
+
138
+ const sizeConfig = $derived(resolveSizeConfig(size));
139
+ const radiusValue = $derived(resolveRadiusValue(radius));
140
+ const isDisabled = $derived(disabled || loading);
141
+ const accessibleLabel = $derived(
142
+ loading && loadingLabel ? loadingLabel : ariaLabel,
143
+ );
144
+ </script>
145
+
146
+ <button
147
+ {...restProps}
148
+ aria-busy={loading || undefined}
149
+ aria-label={accessibleLabel}
150
+ class={`button seblify-tone-context${className ? ` ${className}` : ''}`}
151
+ class:full-width={fullWidth}
152
+ data-loading={loading}
153
+ data-seblify-surface={surface}
154
+ data-seblify-tone={tone}
155
+ data-surface={surface}
156
+ data-variant={variant}
157
+ disabled={isDisabled}
158
+ style:--button-gap={sizeConfig.gap}
159
+ style:--button-height={sizeConfig.height}
160
+ style:--button-icon-size={sizeConfig.icon}
161
+ style:--button-padding-inline={sizeConfig.padding}
162
+ style:--button-radius={radiusValue}
163
+ {type}
164
+ >
165
+ <span class="button__inner seblify-tone-publisher">
166
+ {#if loading}
167
+ <span class="button__spinner" aria-hidden="true"></span>
168
+ {:else if start}
169
+ <span class="button__media" aria-hidden="true">
170
+ {@render start()}
171
+ </span>
172
+ {/if}
173
+
174
+ <span class="button__content">
175
+ {#if children}
176
+ {@render children()}
177
+ {:else}
178
+ {label}
179
+ {/if}
180
+ </span>
181
+
182
+ {#if end}
183
+ <span class="button__media" aria-hidden="true">
184
+ {@render end()}
185
+ </span>
186
+ {/if}
187
+ </span>
188
+ </button>
189
+
190
+ <style>:where(.seblify-tone-context) {
191
+ --seblify-tone-fill: var(--seblify-color-neutral-fill, #6f5f55);
192
+ --seblify-tone-fill-hover: var(--seblify-color-neutral-fill-hover, #5b4d45);
193
+ --seblify-tone-fill-text: var(--seblify-color-neutral-fill-text, #fff4e7);
194
+ --seblify-tone-surface: var(--seblify-color-neutral-surface, #f2ebe4);
195
+ --seblify-tone-surface-hover: var(
196
+ --seblify-color-neutral-surface-hover,
197
+ #ebe1d8
198
+ );
199
+ --seblify-tone-text: var(--seblify-color-neutral-text, #6f5f55);
200
+ --seblify-tone-border: var(--seblify-color-neutral-border, #ded0c4);
201
+ --seblify-tone-derived-surface: var(
202
+ --seblify-color-neutral-derived-surface,
203
+ var(--seblify-color-surface-muted, #f2ebe4)
204
+ );
205
+ --seblify-tone-derived-border: var(
206
+ --seblify-color-neutral-derived-border,
207
+ color-mix(
208
+ in srgb,
209
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
210
+ var(--seblify-color-border-strong, #c5afa0) 78%
211
+ )
212
+ );
213
+ --seblify-tone-derived-text: var(
214
+ --seblify-color-neutral-derived-text,
215
+ var(--seblify-color-text-subtle, #8b7a70)
216
+ );
217
+ --seblify-tone-on-inverse-surface: var(
218
+ --seblify-color-neutral-on-inverse-surface,
219
+ color-mix(
220
+ in srgb,
221
+ var(--seblify-color-text-inverse, #fff4e7) 10%,
222
+ var(--seblify-color-surface-inverse, #15110f) 90%
223
+ )
224
+ );
225
+ --seblify-tone-on-inverse-surface-hover: var(
226
+ --seblify-color-neutral-on-inverse-surface-hover,
227
+ color-mix(
228
+ in srgb,
229
+ var(--seblify-color-text-inverse, #fff4e7) 16%,
230
+ var(--seblify-color-surface-inverse, #15110f) 84%
231
+ )
232
+ );
233
+ --seblify-tone-on-inverse-text: var(
234
+ --seblify-color-neutral-on-inverse-text,
235
+ var(--seblify-color-text-inverse, #fff4e7)
236
+ );
237
+ --seblify-tone-on-inverse-border: var(
238
+ --seblify-color-neutral-on-inverse-border,
239
+ var(--seblify-color-border-inverse, #4a3b32)
240
+ );
241
+ --seblify-tone-control-fill: var(--seblify-tone-fill);
242
+ --seblify-tone-control-fill-hover: var(--seblify-tone-fill-hover);
243
+ --seblify-tone-control-fill-text: var(--seblify-tone-fill-text);
244
+ --seblify-tone-control-surface: var(--seblify-tone-surface);
245
+ --seblify-tone-control-surface-hover: var(--seblify-tone-surface-hover);
246
+ --seblify-tone-control-default-text: var(--seblify-color-text, #211916);
247
+ --seblify-tone-control-text: var(--seblify-tone-text);
248
+ --seblify-tone-control-border: var(--seblify-tone-border);
249
+ --seblify-tone-control-derived-surface: var(--seblify-tone-derived-surface);
250
+ --seblify-tone-control-derived-border: var(--seblify-tone-derived-border);
251
+ --seblify-tone-control-derived-text: var(--seblify-tone-derived-text);
252
+ }
253
+
254
+ :where(.seblify-tone-context[data-seblify-tone='inherit']) {
255
+ --seblify-tone-fill: var(
256
+ --seblify-current-tone-fill,
257
+ var(--seblify-color-neutral-fill, #6f5f55)
258
+ );
259
+ --seblify-tone-fill-hover: var(
260
+ --seblify-current-tone-fill-hover,
261
+ var(--seblify-color-neutral-fill-hover, #5b4d45)
262
+ );
263
+ --seblify-tone-fill-text: var(
264
+ --seblify-current-tone-fill-text,
265
+ var(--seblify-color-neutral-fill-text, #fff4e7)
266
+ );
267
+ --seblify-tone-surface: var(
268
+ --seblify-current-tone-surface,
269
+ var(--seblify-color-neutral-surface, #f2ebe4)
270
+ );
271
+ --seblify-tone-surface-hover: var(
272
+ --seblify-current-tone-surface-hover,
273
+ var(--seblify-color-neutral-surface-hover, #ebe1d8)
274
+ );
275
+ --seblify-tone-text: var(
276
+ --seblify-current-tone-text,
277
+ var(--seblify-color-neutral-text, #6f5f55)
278
+ );
279
+ --seblify-tone-border: var(
280
+ --seblify-current-tone-border,
281
+ var(--seblify-color-neutral-border, #ded0c4)
282
+ );
283
+ --seblify-tone-derived-surface: var(
284
+ --seblify-current-tone-derived-surface,
285
+ var(
286
+ --seblify-color-neutral-derived-surface,
287
+ var(--seblify-color-surface-muted, #f2ebe4)
288
+ )
289
+ );
290
+ --seblify-tone-derived-border: var(
291
+ --seblify-current-tone-derived-border,
292
+ var(
293
+ --seblify-color-neutral-derived-border,
294
+ color-mix(
295
+ in srgb,
296
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
297
+ var(--seblify-color-border-strong, #c5afa0) 78%
298
+ )
299
+ )
300
+ );
301
+ --seblify-tone-derived-text: var(
302
+ --seblify-current-tone-derived-text,
303
+ var(
304
+ --seblify-color-neutral-derived-text,
305
+ var(--seblify-color-text-subtle, #8b7a70)
306
+ )
307
+ );
308
+ --seblify-tone-on-inverse-surface: var(
309
+ --seblify-current-tone-on-inverse-surface,
310
+ var(
311
+ --seblify-color-neutral-on-inverse-surface,
312
+ color-mix(
313
+ in srgb,
314
+ var(--seblify-color-text-inverse, #fff4e7) 10%,
315
+ var(--seblify-color-surface-inverse, #15110f) 90%
316
+ )
317
+ )
318
+ );
319
+ --seblify-tone-on-inverse-surface-hover: var(
320
+ --seblify-current-tone-on-inverse-surface-hover,
321
+ var(
322
+ --seblify-color-neutral-on-inverse-surface-hover,
323
+ color-mix(
324
+ in srgb,
325
+ var(--seblify-color-text-inverse, #fff4e7) 16%,
326
+ var(--seblify-color-surface-inverse, #15110f) 84%
327
+ )
328
+ )
329
+ );
330
+ --seblify-tone-on-inverse-text: var(
331
+ --seblify-current-tone-on-inverse-text,
332
+ var(
333
+ --seblify-color-neutral-on-inverse-text,
334
+ var(--seblify-color-text-inverse, #fff4e7)
335
+ )
336
+ );
337
+ --seblify-tone-on-inverse-border: var(
338
+ --seblify-current-tone-on-inverse-border,
339
+ var(
340
+ --seblify-color-neutral-on-inverse-border,
341
+ var(--seblify-color-border-inverse, #4a3b32)
342
+ )
343
+ );
344
+ }
345
+
346
+ :where(.seblify-tone-context[data-seblify-tone='neutral']) {
347
+ --seblify-tone-fill: var(--seblify-color-neutral-fill, #6f5f55);
348
+ --seblify-tone-fill-hover: var(--seblify-color-neutral-fill-hover, #5b4d45);
349
+ --seblify-tone-fill-text: var(--seblify-color-neutral-fill-text, #fff4e7);
350
+ --seblify-tone-surface: var(--seblify-color-neutral-surface, #f2ebe4);
351
+ --seblify-tone-surface-hover: var(
352
+ --seblify-color-neutral-surface-hover,
353
+ #ebe1d8
354
+ );
355
+ --seblify-tone-text: var(--seblify-color-neutral-text, #6f5f55);
356
+ --seblify-tone-border: var(--seblify-color-neutral-border, #ded0c4);
357
+ --seblify-tone-derived-surface: var(
358
+ --seblify-color-neutral-derived-surface,
359
+ var(--seblify-color-surface-muted, #f2ebe4)
360
+ );
361
+ --seblify-tone-derived-border: var(
362
+ --seblify-color-neutral-derived-border,
363
+ color-mix(
364
+ in srgb,
365
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
366
+ var(--seblify-color-border-strong, #c5afa0) 78%
367
+ )
368
+ );
369
+ --seblify-tone-derived-text: var(
370
+ --seblify-color-neutral-derived-text,
371
+ var(--seblify-color-text-subtle, #8b7a70)
372
+ );
373
+ --seblify-tone-on-inverse-surface: var(
374
+ --seblify-color-neutral-on-inverse-surface,
375
+ color-mix(
376
+ in srgb,
377
+ var(--seblify-color-text-inverse, #fff4e7) 10%,
378
+ var(--seblify-color-surface-inverse, #15110f) 90%
379
+ )
380
+ );
381
+ --seblify-tone-on-inverse-surface-hover: var(
382
+ --seblify-color-neutral-on-inverse-surface-hover,
383
+ color-mix(
384
+ in srgb,
385
+ var(--seblify-color-text-inverse, #fff4e7) 16%,
386
+ var(--seblify-color-surface-inverse, #15110f) 84%
387
+ )
388
+ );
389
+ --seblify-tone-on-inverse-text: var(
390
+ --seblify-color-neutral-on-inverse-text,
391
+ var(--seblify-color-text-inverse, #fff4e7)
392
+ );
393
+ --seblify-tone-on-inverse-border: var(
394
+ --seblify-color-neutral-on-inverse-border,
395
+ var(--seblify-color-border-inverse, #4a3b32)
396
+ );
397
+ }
398
+
399
+ :where(.seblify-tone-context[data-seblify-tone='strong']) {
400
+ --seblify-tone-fill: var(--seblify-color-strong-fill, #211916);
401
+ --seblify-tone-fill-hover: var(--seblify-color-strong-fill-hover, #080706);
402
+ --seblify-tone-fill-text: var(--seblify-color-strong-fill-text, #fff4e7);
403
+ --seblify-tone-surface: var(--seblify-color-strong-surface, #ffffff);
404
+ --seblify-tone-surface-hover: var(
405
+ --seblify-color-strong-surface-hover,
406
+ #f2ebe4
407
+ );
408
+ --seblify-tone-text: var(--seblify-color-strong-text, #211916);
409
+ --seblify-tone-border: var(--seblify-color-strong-border, #c5afa0);
410
+ --seblify-tone-derived-surface: var(
411
+ --seblify-color-strong-derived-surface,
412
+ color-mix(
413
+ in srgb,
414
+ var(--seblify-tone-fill) 10%,
415
+ var(--seblify-color-surface, #fffdf9) 90%
416
+ )
417
+ );
418
+ --seblify-tone-derived-border: var(
419
+ --seblify-color-strong-derived-border,
420
+ color-mix(
421
+ in srgb,
422
+ var(--seblify-tone-fill) 26%,
423
+ var(--seblify-color-border-strong, #c5afa0) 74%
424
+ )
425
+ );
426
+ --seblify-tone-derived-text: var(
427
+ --seblify-color-strong-derived-text,
428
+ color-mix(
429
+ in srgb,
430
+ var(--seblify-tone-fill) 66%,
431
+ var(--seblify-color-text-muted, #6f5f55) 34%
432
+ )
433
+ );
434
+ --seblify-tone-on-inverse-surface: var(
435
+ --seblify-color-strong-on-inverse-surface,
436
+ color-mix(
437
+ in srgb,
438
+ var(--seblify-color-text-inverse, #fff4e7) 14%,
439
+ var(--seblify-color-surface-inverse, #15110f) 86%
440
+ )
441
+ );
442
+ --seblify-tone-on-inverse-surface-hover: var(
443
+ --seblify-color-strong-on-inverse-surface-hover,
444
+ color-mix(
445
+ in srgb,
446
+ var(--seblify-color-text-inverse, #fff4e7) 22%,
447
+ var(--seblify-color-surface-inverse, #15110f) 78%
448
+ )
449
+ );
450
+ --seblify-tone-on-inverse-text: var(
451
+ --seblify-color-strong-on-inverse-text,
452
+ var(--seblify-color-text-inverse, #fff4e7)
453
+ );
454
+ --seblify-tone-on-inverse-border: var(
455
+ --seblify-color-strong-on-inverse-border,
456
+ color-mix(
457
+ in srgb,
458
+ var(--seblify-color-text-inverse, #fff4e7) 42%,
459
+ var(--seblify-color-border-inverse, #4a3b32) 58%
460
+ )
461
+ );
462
+ }
463
+
464
+ :where(.seblify-tone-context[data-seblify-tone='primary']) {
465
+ --seblify-tone-fill: var(--seblify-color-primary-fill, #b43f5a);
466
+ --seblify-tone-fill-hover: var(--seblify-color-primary-fill-hover, #9f334d);
467
+ --seblify-tone-fill-text: var(--seblify-color-primary-fill-text, #fff4e7);
468
+ --seblify-tone-surface: var(--seblify-color-primary-surface, #fae8ed);
469
+ --seblify-tone-surface-hover: var(
470
+ --seblify-color-primary-surface-hover,
471
+ #f5d5dd
472
+ );
473
+ --seblify-tone-text: var(--seblify-color-primary-text, #8f2b43);
474
+ --seblify-tone-border: var(--seblify-color-primary-border, #e6a6b5);
475
+ --seblify-tone-derived-surface: var(
476
+ --seblify-color-primary-derived-surface,
477
+ var(
478
+ --seblify-color-neutral-derived-surface,
479
+ var(--seblify-color-surface-muted, #f2ebe4)
480
+ )
481
+ );
482
+ --seblify-tone-derived-border: var(
483
+ --seblify-color-primary-derived-border,
484
+ var(
485
+ --seblify-color-neutral-derived-border,
486
+ color-mix(
487
+ in srgb,
488
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
489
+ var(--seblify-color-border-strong, #c5afa0) 78%
490
+ )
491
+ )
492
+ );
493
+ --seblify-tone-derived-text: var(
494
+ --seblify-color-primary-derived-text,
495
+ var(
496
+ --seblify-color-neutral-derived-text,
497
+ var(--seblify-color-text-subtle, #8b7a70)
498
+ )
499
+ );
500
+ --seblify-tone-on-inverse-surface: var(
501
+ --seblify-color-primary-on-inverse-surface,
502
+ color-mix(
503
+ in srgb,
504
+ var(--seblify-color-primary-fill, #b43f5a) 22%,
505
+ var(--seblify-color-surface-inverse, #15110f) 78%
506
+ )
507
+ );
508
+ --seblify-tone-on-inverse-surface-hover: var(
509
+ --seblify-color-primary-on-inverse-surface-hover,
510
+ color-mix(
511
+ in srgb,
512
+ var(--seblify-color-primary-fill, #b43f5a) 32%,
513
+ var(--seblify-color-surface-inverse, #15110f) 68%
514
+ )
515
+ );
516
+ --seblify-tone-on-inverse-text: var(
517
+ --seblify-color-primary-on-inverse-text,
518
+ var(--seblify-color-primary-fill, #b43f5a)
519
+ );
520
+ --seblify-tone-on-inverse-border: var(
521
+ --seblify-color-primary-on-inverse-border,
522
+ var(--seblify-color-primary-border, #e6a6b5)
523
+ );
524
+ }
525
+
526
+ :where(.seblify-tone-context[data-seblify-tone='secondary']) {
527
+ --seblify-tone-fill: var(--seblify-color-secondary-fill, #6f3a55);
528
+ --seblify-tone-fill-hover: var(--seblify-color-secondary-fill-hover, #5e2f47);
529
+ --seblify-tone-fill-text: var(--seblify-color-secondary-fill-text, #fff4e7);
530
+ --seblify-tone-surface: var(--seblify-color-secondary-surface, #f4e5ee);
531
+ --seblify-tone-surface-hover: var(
532
+ --seblify-color-secondary-surface-hover,
533
+ #ecd3e0
534
+ );
535
+ --seblify-tone-text: var(--seblify-color-secondary-text, #6f3a55);
536
+ --seblify-tone-border: var(--seblify-color-secondary-border, #d7a6bf);
537
+ --seblify-tone-derived-surface: var(
538
+ --seblify-color-secondary-derived-surface,
539
+ var(
540
+ --seblify-color-neutral-derived-surface,
541
+ var(--seblify-color-surface-muted, #f2ebe4)
542
+ )
543
+ );
544
+ --seblify-tone-derived-border: var(
545
+ --seblify-color-secondary-derived-border,
546
+ var(
547
+ --seblify-color-neutral-derived-border,
548
+ color-mix(
549
+ in srgb,
550
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
551
+ var(--seblify-color-border-strong, #c5afa0) 78%
552
+ )
553
+ )
554
+ );
555
+ --seblify-tone-derived-text: var(
556
+ --seblify-color-secondary-derived-text,
557
+ var(
558
+ --seblify-color-neutral-derived-text,
559
+ var(--seblify-color-text-subtle, #8b7a70)
560
+ )
561
+ );
562
+ --seblify-tone-on-inverse-surface: var(
563
+ --seblify-color-secondary-on-inverse-surface,
564
+ color-mix(
565
+ in srgb,
566
+ var(--seblify-color-secondary-fill, #6f3a55) 22%,
567
+ var(--seblify-color-surface-inverse, #15110f) 78%
568
+ )
569
+ );
570
+ --seblify-tone-on-inverse-surface-hover: var(
571
+ --seblify-color-secondary-on-inverse-surface-hover,
572
+ color-mix(
573
+ in srgb,
574
+ var(--seblify-color-secondary-fill, #6f3a55) 32%,
575
+ var(--seblify-color-surface-inverse, #15110f) 68%
576
+ )
577
+ );
578
+ --seblify-tone-on-inverse-text: var(
579
+ --seblify-color-secondary-on-inverse-text,
580
+ var(--seblify-color-secondary-fill, #6f3a55)
581
+ );
582
+ --seblify-tone-on-inverse-border: var(
583
+ --seblify-color-secondary-on-inverse-border,
584
+ var(--seblify-color-secondary-border, #d7a6bf)
585
+ );
586
+ }
587
+
588
+ :where(.seblify-tone-context[data-seblify-tone='success']) {
589
+ --seblify-tone-fill: var(--seblify-color-success-fill, #777447);
590
+ --seblify-tone-fill-hover: var(--seblify-color-success-fill-hover, #66633c);
591
+ --seblify-tone-fill-text: var(--seblify-color-success-fill-text, #fff4e7);
592
+ --seblify-tone-surface: var(--seblify-color-success-surface, #eeeddf);
593
+ --seblify-tone-surface-hover: var(
594
+ --seblify-color-success-surface-hover,
595
+ #e1dfc4
596
+ );
597
+ --seblify-tone-text: var(--seblify-color-success-text, #5d5b34);
598
+ --seblify-tone-border: var(--seblify-color-success-border, #cbc790);
599
+ --seblify-tone-derived-surface: var(
600
+ --seblify-color-success-derived-surface,
601
+ var(
602
+ --seblify-color-neutral-derived-surface,
603
+ var(--seblify-color-surface-muted, #f2ebe4)
604
+ )
605
+ );
606
+ --seblify-tone-derived-border: var(
607
+ --seblify-color-success-derived-border,
608
+ var(
609
+ --seblify-color-neutral-derived-border,
610
+ color-mix(
611
+ in srgb,
612
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
613
+ var(--seblify-color-border-strong, #c5afa0) 78%
614
+ )
615
+ )
616
+ );
617
+ --seblify-tone-derived-text: var(
618
+ --seblify-color-success-derived-text,
619
+ var(
620
+ --seblify-color-neutral-derived-text,
621
+ var(--seblify-color-text-subtle, #8b7a70)
622
+ )
623
+ );
624
+ --seblify-tone-on-inverse-surface: var(
625
+ --seblify-color-success-on-inverse-surface,
626
+ color-mix(
627
+ in srgb,
628
+ var(--seblify-color-success-fill, #777447) 22%,
629
+ var(--seblify-color-surface-inverse, #15110f) 78%
630
+ )
631
+ );
632
+ --seblify-tone-on-inverse-surface-hover: var(
633
+ --seblify-color-success-on-inverse-surface-hover,
634
+ color-mix(
635
+ in srgb,
636
+ var(--seblify-color-success-fill, #777447) 32%,
637
+ var(--seblify-color-surface-inverse, #15110f) 68%
638
+ )
639
+ );
640
+ --seblify-tone-on-inverse-text: var(
641
+ --seblify-color-success-on-inverse-text,
642
+ var(--seblify-color-success-fill, #777447)
643
+ );
644
+ --seblify-tone-on-inverse-border: var(
645
+ --seblify-color-success-on-inverse-border,
646
+ var(--seblify-color-success-border, #cbc790)
647
+ );
648
+ }
649
+
650
+ :where(.seblify-tone-context[data-seblify-tone='danger']) {
651
+ --seblify-tone-fill: var(--seblify-color-danger-fill, #b83d45);
652
+ --seblify-tone-fill-hover: var(--seblify-color-danger-fill-hover, #9f3239);
653
+ --seblify-tone-fill-text: var(--seblify-color-danger-fill-text, #fff4e7);
654
+ --seblify-tone-surface: var(--seblify-color-danger-surface, #fae7e8);
655
+ --seblify-tone-surface-hover: var(
656
+ --seblify-color-danger-surface-hover,
657
+ #f3d2d4
658
+ );
659
+ --seblify-tone-text: var(--seblify-color-danger-text, #923038);
660
+ --seblify-tone-border: var(--seblify-color-danger-border, #e2a2a7);
661
+ --seblify-tone-derived-surface: var(
662
+ --seblify-color-danger-derived-surface,
663
+ var(
664
+ --seblify-color-neutral-derived-surface,
665
+ var(--seblify-color-surface-muted, #f2ebe4)
666
+ )
667
+ );
668
+ --seblify-tone-derived-border: var(
669
+ --seblify-color-danger-derived-border,
670
+ var(
671
+ --seblify-color-neutral-derived-border,
672
+ color-mix(
673
+ in srgb,
674
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
675
+ var(--seblify-color-border-strong, #c5afa0) 78%
676
+ )
677
+ )
678
+ );
679
+ --seblify-tone-derived-text: var(
680
+ --seblify-color-danger-derived-text,
681
+ var(
682
+ --seblify-color-neutral-derived-text,
683
+ var(--seblify-color-text-subtle, #8b7a70)
684
+ )
685
+ );
686
+ --seblify-tone-on-inverse-surface: var(
687
+ --seblify-color-danger-on-inverse-surface,
688
+ color-mix(
689
+ in srgb,
690
+ var(--seblify-color-danger-fill, #b83d45) 22%,
691
+ var(--seblify-color-surface-inverse, #15110f) 78%
692
+ )
693
+ );
694
+ --seblify-tone-on-inverse-surface-hover: var(
695
+ --seblify-color-danger-on-inverse-surface-hover,
696
+ color-mix(
697
+ in srgb,
698
+ var(--seblify-color-danger-fill, #b83d45) 32%,
699
+ var(--seblify-color-surface-inverse, #15110f) 68%
700
+ )
701
+ );
702
+ --seblify-tone-on-inverse-text: var(
703
+ --seblify-color-danger-on-inverse-text,
704
+ var(--seblify-color-danger-fill, #b83d45)
705
+ );
706
+ --seblify-tone-on-inverse-border: var(
707
+ --seblify-color-danger-on-inverse-border,
708
+ var(--seblify-color-danger-border, #e2a2a7)
709
+ );
710
+ }
711
+
712
+ :where(.seblify-tone-context[data-seblify-tone='warning']) {
713
+ --seblify-tone-fill: var(--seblify-color-warning-fill, #9a6d24);
714
+ --seblify-tone-fill-hover: var(--seblify-color-warning-fill-hover, #805918);
715
+ --seblify-tone-fill-text: var(--seblify-color-warning-fill-text, #fff4e7);
716
+ --seblify-tone-surface: var(--seblify-color-warning-surface, #f8edd8);
717
+ --seblify-tone-surface-hover: var(
718
+ --seblify-color-warning-surface-hover,
719
+ #efddbd
720
+ );
721
+ --seblify-tone-text: var(--seblify-color-warning-text, #7a5418);
722
+ --seblify-tone-border: var(--seblify-color-warning-border, #d8b46c);
723
+ --seblify-tone-derived-surface: var(
724
+ --seblify-color-warning-derived-surface,
725
+ var(
726
+ --seblify-color-neutral-derived-surface,
727
+ var(--seblify-color-surface-muted, #f2ebe4)
728
+ )
729
+ );
730
+ --seblify-tone-derived-border: var(
731
+ --seblify-color-warning-derived-border,
732
+ var(
733
+ --seblify-color-neutral-derived-border,
734
+ color-mix(
735
+ in srgb,
736
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
737
+ var(--seblify-color-border-strong, #c5afa0) 78%
738
+ )
739
+ )
740
+ );
741
+ --seblify-tone-derived-text: var(
742
+ --seblify-color-warning-derived-text,
743
+ var(
744
+ --seblify-color-neutral-derived-text,
745
+ var(--seblify-color-text-subtle, #8b7a70)
746
+ )
747
+ );
748
+ --seblify-tone-on-inverse-surface: var(
749
+ --seblify-color-warning-on-inverse-surface,
750
+ color-mix(
751
+ in srgb,
752
+ var(--seblify-color-warning-fill, #9a6d24) 22%,
753
+ var(--seblify-color-surface-inverse, #15110f) 78%
754
+ )
755
+ );
756
+ --seblify-tone-on-inverse-surface-hover: var(
757
+ --seblify-color-warning-on-inverse-surface-hover,
758
+ color-mix(
759
+ in srgb,
760
+ var(--seblify-color-warning-fill, #9a6d24) 32%,
761
+ var(--seblify-color-surface-inverse, #15110f) 68%
762
+ )
763
+ );
764
+ --seblify-tone-on-inverse-text: var(
765
+ --seblify-color-warning-on-inverse-text,
766
+ var(--seblify-color-warning-fill, #9a6d24)
767
+ );
768
+ --seblify-tone-on-inverse-border: var(
769
+ --seblify-color-warning-on-inverse-border,
770
+ var(--seblify-color-warning-border, #d8b46c)
771
+ );
772
+ }
773
+
774
+ :where(.seblify-tone-context[data-seblify-tone='info']) {
775
+ --seblify-tone-fill: var(--seblify-color-info-fill, #a5664a);
776
+ --seblify-tone-fill-hover: var(--seblify-color-info-fill-hover, #8f543b);
777
+ --seblify-tone-fill-text: var(--seblify-color-info-fill-text, #fff4e7);
778
+ --seblify-tone-surface: var(--seblify-color-info-surface, #f6e6de);
779
+ --seblify-tone-surface-hover: var(
780
+ --seblify-color-info-surface-hover,
781
+ #edd3c6
782
+ );
783
+ --seblify-tone-text: var(--seblify-color-info-text, #844932);
784
+ --seblify-tone-border: var(--seblify-color-info-border, #d49d85);
785
+ --seblify-tone-derived-surface: var(
786
+ --seblify-color-info-derived-surface,
787
+ var(
788
+ --seblify-color-neutral-derived-surface,
789
+ var(--seblify-color-surface-muted, #f2ebe4)
790
+ )
791
+ );
792
+ --seblify-tone-derived-border: var(
793
+ --seblify-color-info-derived-border,
794
+ var(
795
+ --seblify-color-neutral-derived-border,
796
+ color-mix(
797
+ in srgb,
798
+ var(--seblify-color-neutral-fill, #6f5f55) 22%,
799
+ var(--seblify-color-border-strong, #c5afa0) 78%
800
+ )
801
+ )
802
+ );
803
+ --seblify-tone-derived-text: var(
804
+ --seblify-color-info-derived-text,
805
+ var(
806
+ --seblify-color-neutral-derived-text,
807
+ var(--seblify-color-text-subtle, #8b7a70)
808
+ )
809
+ );
810
+ --seblify-tone-on-inverse-surface: var(
811
+ --seblify-color-info-on-inverse-surface,
812
+ color-mix(
813
+ in srgb,
814
+ var(--seblify-color-info-fill, #a5664a) 22%,
815
+ var(--seblify-color-surface-inverse, #15110f) 78%
816
+ )
817
+ );
818
+ --seblify-tone-on-inverse-surface-hover: var(
819
+ --seblify-color-info-on-inverse-surface-hover,
820
+ color-mix(
821
+ in srgb,
822
+ var(--seblify-color-info-fill, #a5664a) 32%,
823
+ var(--seblify-color-surface-inverse, #15110f) 68%
824
+ )
825
+ );
826
+ --seblify-tone-on-inverse-text: var(
827
+ --seblify-color-info-on-inverse-text,
828
+ var(--seblify-color-info-fill, #a5664a)
829
+ );
830
+ --seblify-tone-on-inverse-border: var(
831
+ --seblify-color-info-on-inverse-border,
832
+ var(--seblify-color-info-border, #d49d85)
833
+ );
834
+ }
835
+
836
+ :where(.seblify-tone-context[data-seblify-surface='inverse']) {
837
+ --seblify-tone-control-surface: var(--seblify-tone-on-inverse-surface);
838
+ --seblify-tone-control-surface-hover: var(
839
+ --seblify-tone-on-inverse-surface-hover
840
+ );
841
+ --seblify-tone-control-default-text: var(
842
+ --seblify-color-text-inverse,
843
+ #fff4e7
844
+ );
845
+ --seblify-tone-control-text: var(--seblify-tone-on-inverse-text);
846
+ --seblify-tone-control-border: var(--seblify-tone-on-inverse-border);
847
+ --seblify-tone-control-derived-surface: color-mix(
848
+ in srgb,
849
+ var(--seblify-tone-on-inverse-surface) 70%,
850
+ var(--seblify-color-surface-inverse, #15110f) 30%
851
+ );
852
+ --seblify-tone-control-derived-border: color-mix(
853
+ in srgb,
854
+ var(--seblify-tone-on-inverse-border) 72%,
855
+ var(--seblify-color-border-inverse, #4a3b32) 28%
856
+ );
857
+ --seblify-tone-control-derived-text: var(--seblify-tone-on-inverse-text);
858
+ }
859
+
860
+ :where(
861
+ .seblify-tone-context[data-seblify-surface='inverse'][data-seblify-tone='strong']
862
+ ) {
863
+ --seblify-tone-control-fill: var(--seblify-color-text-inverse, #fff4e7);
864
+ --seblify-tone-control-fill-hover: color-mix(
865
+ in srgb,
866
+ var(--seblify-color-text-inverse, #fff4e7) 88%,
867
+ var(--seblify-color-surface-inverse, #15110f) 12%
868
+ );
869
+ --seblify-tone-control-fill-text: var(--seblify-color-text, #211916);
870
+ }
871
+
872
+ :where(.seblify-tone-publisher) {
873
+ --seblify-current-tone-fill: var(--seblify-tone-fill);
874
+ --seblify-current-tone-fill-hover: var(--seblify-tone-fill-hover);
875
+ --seblify-current-tone-fill-text: var(--seblify-tone-fill-text);
876
+ --seblify-current-tone-surface: var(--seblify-tone-surface);
877
+ --seblify-current-tone-surface-hover: var(--seblify-tone-surface-hover);
878
+ --seblify-current-tone-text: var(--seblify-tone-text);
879
+ --seblify-current-tone-border: var(--seblify-tone-border);
880
+ --seblify-current-tone-derived-surface: var(--seblify-tone-derived-surface);
881
+ --seblify-current-tone-derived-border: var(--seblify-tone-derived-border);
882
+ --seblify-current-tone-derived-text: var(--seblify-tone-derived-text);
883
+ --seblify-current-tone-on-inverse-surface: var(
884
+ --seblify-tone-on-inverse-surface
885
+ );
886
+ --seblify-current-tone-on-inverse-surface-hover: var(
887
+ --seblify-tone-on-inverse-surface-hover
888
+ );
889
+ --seblify-current-tone-on-inverse-text: var(--seblify-tone-on-inverse-text);
890
+ --seblify-current-tone-on-inverse-border: var(
891
+ --seblify-tone-on-inverse-border
892
+ );
893
+ }
894
+
895
+ .button {
896
+ --button-fill: var(--seblify-tone-control-fill);
897
+ --button-fill-hover: var(--seblify-tone-control-fill-hover);
898
+ --button-fill-text: var(--seblify-tone-control-fill-text);
899
+ --button-surface: var(--seblify-tone-control-surface);
900
+ --button-surface-hover: var(--seblify-tone-control-surface-hover);
901
+ --button-default-text: var(--seblify-tone-control-default-text);
902
+ --button-text: var(--seblify-tone-control-text);
903
+ --button-border: var(--seblify-tone-control-border);
904
+
905
+ display: inline-flex;
906
+ width: fit-content;
907
+ max-width: 100%;
908
+ min-height: var(--button-height);
909
+ align-items: center;
910
+ justify-content: center;
911
+ border: 1px solid transparent;
912
+ border-radius: var(--button-radius);
913
+ padding-block: 0;
914
+ padding-inline: var(--button-padding-inline);
915
+ background: transparent;
916
+ box-sizing: border-box;
917
+ color: var(--button-text);
918
+ cursor: pointer;
919
+ font: inherit;
920
+ font-size: 0.875rem;
921
+ font-weight: 800;
922
+ line-height: 1.2;
923
+ text-align: center;
924
+ text-decoration: none;
925
+ vertical-align: middle;
926
+ transition:
927
+ background-color 140ms ease,
928
+ border-color 140ms ease,
929
+ color 140ms ease,
930
+ box-shadow 140ms ease,
931
+ transform 120ms ease;
932
+ }
933
+
934
+ .full-width {
935
+ width: 100%;
936
+ }
937
+
938
+ .button__inner {
939
+ --seblify-current-size: var(--button-icon-size);
940
+
941
+ display: inline-flex;
942
+ min-width: 0;
943
+ align-items: center;
944
+ justify-content: center;
945
+ gap: var(--button-gap);
946
+ }
947
+
948
+ .button__content {
949
+ min-width: 0;
950
+ overflow: hidden;
951
+ text-overflow: ellipsis;
952
+ white-space: nowrap;
953
+ }
954
+
955
+ .button__media,
956
+ .button__spinner {
957
+ display: inline-flex;
958
+ width: var(--button-icon-size);
959
+ height: var(--button-icon-size);
960
+ flex: 0 0 auto;
961
+ align-items: center;
962
+ justify-content: center;
963
+ line-height: 0;
964
+ }
965
+
966
+ .button[data-variant='solid'] {
967
+ border-color: var(--button-fill);
968
+ background: var(--button-fill);
969
+ color: var(--button-fill-text);
970
+ box-shadow: var(--seblify-shadow-control, 0 1px 3px rgb(16 24 40 / 24%));
971
+ }
972
+
973
+ .button[data-variant='soft'] {
974
+ background: var(--button-surface);
975
+ color: var(--button-default-text);
976
+ }
977
+
978
+ .button[data-variant='tint'] {
979
+ background: var(--button-surface);
980
+ color: var(--button-text);
981
+ }
982
+
983
+ .button[data-variant='outline'] {
984
+ border-color: var(--button-border);
985
+ color: var(--button-text);
986
+ }
987
+
988
+ .button[data-variant='plain'] {
989
+ color: var(--button-text);
990
+ }
991
+
992
+ .button:not(:disabled):hover {
993
+ background: var(--button-surface-hover);
994
+ }
995
+
996
+ .button[data-variant='solid']:not(:disabled):hover {
997
+ border-color: var(--button-fill-hover);
998
+ background: var(--button-fill-hover);
999
+ }
1000
+
1001
+ .button:not(:disabled):active {
1002
+ transform: translateY(1px);
1003
+ }
1004
+
1005
+ .button:focus-visible {
1006
+ outline: 3px solid var(--seblify-color-focus-ring, #b43f5a);
1007
+ outline-offset: 2px;
1008
+ }
1009
+
1010
+ .button:disabled {
1011
+ cursor: not-allowed;
1012
+ opacity: var(--seblify-opacity-disabled, 0.56);
1013
+ }
1014
+
1015
+ .button[data-loading='true'] {
1016
+ cursor: progress;
1017
+ }
1018
+
1019
+ .button__spinner {
1020
+ border: max(2px, calc(var(--button-icon-size) / 8)) solid currentColor;
1021
+ border-block-start-color: transparent;
1022
+ border-radius: 999px;
1023
+ animation: button-spin 800ms linear infinite;
1024
+ }
1025
+
1026
+ @keyframes button-spin {
1027
+ to {
1028
+ transform: rotate(360deg);
1029
+ }
1030
+ }
1031
+
1032
+ @media (prefers-reduced-motion: reduce) {
1033
+ .button {
1034
+ transition-duration: 0ms;
1035
+ }
1036
+
1037
+ .button__spinner {
1038
+ animation-duration: 1400ms;
1039
+ }
1040
+ }
1041
+ </style>