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