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