@phcdevworks/spectre-ui 0.4.1 → 1.1.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.
package/dist/index.css CHANGED
@@ -6,17 +6,18 @@
6
6
  --sp-surface-page: #f8fafc;
7
7
  --sp-surface-card: #ffffff;
8
8
  --sp-surface-input: #ffffff;
9
- --sp-surface-overlay: rgba(15,23,42,0.6);
9
+ --sp-surface-overlay: rgba(15, 23, 42, 0.6);
10
+ --sp-surface-hero: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
10
11
  --sp-text-on-page-default: #0f172a;
11
12
  --sp-text-on-page-muted: #475569;
12
- --sp-text-on-page-subtle: #94a3b8;
13
- --sp-text-on-page-meta: #94a3b8;
13
+ --sp-text-on-page-subtle: #64748b;
14
+ --sp-text-on-page-meta: #64748b;
14
15
  --sp-text-on-surface-default: #0f172a;
15
- --sp-text-on-surface-muted: #6b7280;
16
- --sp-text-on-surface-subtle: #94a3b8;
17
- --sp-text-on-surface-meta: #94a3b8;
16
+ --sp-text-on-surface-muted: #475569;
17
+ --sp-text-on-surface-subtle: #64748b;
18
+ --sp-text-on-surface-meta: #64748b;
18
19
  --sp-component-card-text: #0f172a;
19
- --sp-component-card-text-muted: #6b7280;
20
+ --sp-component-card-text-muted: #64748b;
20
21
  --sp-component-input-text: #0f172a;
21
22
  --sp-component-input-placeholder: #94a3b8;
22
23
  --sp-button-text-default: #0f172a;
@@ -33,40 +34,40 @@
33
34
  --sp-badge-danger-text: #b91c1c;
34
35
  --sp-icon-box-bg: #ffffff;
35
36
  --sp-icon-box-border: #e2e8f0;
36
- --sp-icon-box-icon-default: #6c32e6;
37
+ --sp-icon-box-icon-default: #2563eb;
37
38
  --sp-icon-box-icon-success: #16a34a;
38
39
  --sp-icon-box-icon-warning: #d97706;
39
40
  --sp-icon-box-icon-danger: #dc2626;
40
- --sp-color-brand-50: #f5f0ff;
41
- --sp-color-brand-100: #ebe2ff;
42
- --sp-color-brand-200: #d7c6ff;
43
- --sp-color-brand-300: #bfa1ff;
44
- --sp-color-brand-400: #a37aff;
45
- --sp-color-brand-500: #8652ff;
46
- --sp-color-brand-600: #6c32e6;
47
- --sp-color-brand-700: #5626b4;
48
- --sp-color-brand-800: #3d1b7f;
49
- --sp-color-brand-900: #241147;
41
+ --sp-color-brand-50: #eff6ff;
42
+ --sp-color-brand-100: #dbeafe;
43
+ --sp-color-brand-200: #bfdbfe;
44
+ --sp-color-brand-300: #93c5fd;
45
+ --sp-color-brand-400: #60a5fa;
46
+ --sp-color-brand-500: #3b82f6;
47
+ --sp-color-brand-600: #2563eb;
48
+ --sp-color-brand-700: #1d4ed8;
49
+ --sp-color-brand-800: #1e40af;
50
+ --sp-color-brand-900: #1e3a8a;
50
51
  --sp-color-neutral-50: #f8fafc;
51
52
  --sp-color-neutral-100: #f1f5f9;
52
53
  --sp-color-neutral-200: #e2e8f0;
53
- --sp-color-neutral-300: #cbd5f5;
54
+ --sp-color-neutral-300: #cbd5e1;
54
55
  --sp-color-neutral-400: #94a3b8;
55
56
  --sp-color-neutral-500: #64748b;
56
57
  --sp-color-neutral-600: #475569;
57
58
  --sp-color-neutral-700: #334155;
58
59
  --sp-color-neutral-800: #1e293b;
59
60
  --sp-color-neutral-900: #0f172a;
60
- --sp-color-accent-50: #e5fff8;
61
- --sp-color-accent-100: #b8ffed;
62
- --sp-color-accent-200: #89ffe1;
63
- --sp-color-accent-300: #59ffd6;
64
- --sp-color-accent-400: #29ffca;
65
- --sp-color-accent-500: #03e6b3;
66
- --sp-color-accent-600: #00b389;
67
- --sp-color-accent-700: #008060;
68
- --sp-color-accent-800: #004d38;
69
- --sp-color-accent-900: #002a20;
61
+ --sp-color-accent-50: #f5f3ff;
62
+ --sp-color-accent-100: #ede9fe;
63
+ --sp-color-accent-200: #ddd6fe;
64
+ --sp-color-accent-300: #c4b5fd;
65
+ --sp-color-accent-400: #a78bfa;
66
+ --sp-color-accent-500: #8b5cf6;
67
+ --sp-color-accent-600: #7c3aed;
68
+ --sp-color-accent-700: #6d28d9;
69
+ --sp-color-accent-800: #5b21b6;
70
+ --sp-color-accent-900: #4c1d95;
70
71
  --sp-color-success-50: #f0fdf4;
71
72
  --sp-color-success-100: #dcfce7;
72
73
  --sp-color-success-200: #bbf7d0;
@@ -107,9 +108,26 @@
107
108
  --sp-color-info-700: #1d4ed8;
108
109
  --sp-color-info-800: #1e40af;
109
110
  --sp-color-info-900: #1e3a8a;
110
- --sp-color-focus-primary: #8652ff;
111
+ --sp-color-indigo-500: #667eea;
112
+ --sp-color-indigo-600: #5c67f2;
113
+ --sp-color-violet-600: #764ba2;
114
+ --sp-color-focus-primary: #3b82f6;
111
115
  --sp-color-focus-error: #ef4444;
112
116
  --sp-color-focus-info: #3b82f6;
117
+ --sp-color-white-0: #;
118
+ --sp-color-white-1: f;
119
+ --sp-color-white-2: f;
120
+ --sp-color-white-3: f;
121
+ --sp-color-white-4: f;
122
+ --sp-color-white-5: f;
123
+ --sp-color-white-6: f;
124
+ --sp-color-black-0: #;
125
+ --sp-color-black-1: 0;
126
+ --sp-color-black-2: 0;
127
+ --sp-color-black-3: 0;
128
+ --sp-color-black-4: 0;
129
+ --sp-color-black-5: 0;
130
+ --sp-color-black-6: 0;
113
131
  --sp-space-0: 0rem;
114
132
  --sp-space-4: 0.25rem;
115
133
  --sp-space-8: 0.5rem;
@@ -136,14 +154,17 @@
136
154
  --sp-layout-container-padding-inline-sm: 1rem;
137
155
  --sp-layout-container-padding-inline-md: 1.5rem;
138
156
  --sp-layout-container-padding-inline-lg: 2rem;
157
+ --sp-layout-container-max-width: 72rem;
158
+ --sp-border-width-base: 1px;
159
+ --sp-border-width-thick: 2px;
139
160
  --sp-radius-none: 0;
140
161
  --sp-radius-sm: 2px;
141
162
  --sp-radius-md: 4px;
142
163
  --sp-radius-lg: 8px;
143
164
  --sp-radius-pill: 999px;
144
- --sp-font-family-sans: 'Inter', 'Helvetica Neue', Arial, sans-serif;
145
- --sp-font-family-serif: 'Spectre Serif', 'Georgia', serif;
146
- --sp-font-family-mono: 'JetBrains Mono', 'SFMono-Regular', Consolas, monospace;
165
+ --sp-font-family-sans: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
166
+ --sp-font-family-serif: 'Times New Roman', Times, serif;
167
+ --sp-font-family-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
147
168
  --sp-font-xs-size: 0.75rem;
148
169
  --sp-font-xs-line-height: 1.25rem;
149
170
  --sp-font-xs-weight: 400;
@@ -165,12 +186,12 @@
165
186
  --sp-font-xs-letter-spacing: 0.02em;
166
187
  --sp-text-on-page-default: #0f172a;
167
188
  --sp-text-on-page-muted: #475569;
168
- --sp-text-on-page-subtle: #94a3b8;
169
- --sp-text-on-page-meta: #94a3b8;
189
+ --sp-text-on-page-subtle: #64748b;
190
+ --sp-text-on-page-meta: #64748b;
170
191
  --sp-text-on-surface-default: #0f172a;
171
- --sp-text-on-surface-muted: #6b7280;
172
- --sp-text-on-surface-subtle: #94a3b8;
173
- --sp-text-on-surface-meta: #94a3b8;
192
+ --sp-text-on-surface-muted: #475569;
193
+ --sp-text-on-surface-subtle: #64748b;
194
+ --sp-text-on-surface-meta: #64748b;
174
195
  --sp-badge-neutral-bg: #f1f5f9;
175
196
  --sp-badge-neutral-text: #334155;
176
197
  --sp-badge-info-bg: #dbeafe;
@@ -183,14 +204,14 @@
183
204
  --sp-badge-danger-text: #b91c1c;
184
205
  --sp-icon-box-bg: #ffffff;
185
206
  --sp-icon-box-border: #e2e8f0;
186
- --sp-icon-box-icon-default: #6c32e6;
207
+ --sp-icon-box-icon-default: #2563eb;
187
208
  --sp-icon-box-icon-success: #16a34a;
188
209
  --sp-icon-box-icon-warning: #d97706;
189
210
  --sp-icon-box-icon-danger: #dc2626;
190
211
  --sp-shadow-none: none;
191
- --sp-shadow-sm: 0 1px 2px 0 rgba(15, 23, 42, 0.08);
192
- --sp-shadow-md: 0 3px 8px -1px rgba(15, 23, 42, 0.1);
193
- --sp-shadow-lg: 0 8px 20px -4px rgba(15, 23, 42, 0.18);
212
+ --sp-shadow-sm: 0 1px 2px 0 rgba(30, 41, 59, 0.06);
213
+ --sp-shadow-md: 0 2px 6px -1px rgba(30, 41, 59, 0.08);
214
+ --sp-shadow-lg: 0 6px 16px -4px rgba(30, 41, 59, 0.12);
194
215
  --sp-breakpoint-sm: 640px;
195
216
  --sp-breakpoint-md: 768px;
196
217
  --sp-breakpoint-lg: 1024px;
@@ -214,7 +235,7 @@
214
235
  --sp-easing-in: cubic-bezier(0.4, 0, 1, 1);
215
236
  --sp-easing-out: cubic-bezier(0, 0, 0.2, 1);
216
237
  --sp-easing-inout: cubic-bezier(0.4, 0, 0.2, 1);
217
- --sp-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
238
+ --sp-easing-spring: cubic-bezier(0.4, 0, 0.2, 1);
218
239
  --sp-opacity-disabled: 0.38;
219
240
  --sp-opacity-hover: 0.92;
220
241
  --sp-opacity-active: 0.84;
@@ -226,45 +247,65 @@
226
247
  --sp-focus-ring-style: solid;
227
248
  --sp-min-touch-target: 44px;
228
249
  --sp-min-text-size: 16px;
229
- --sp-button-primary-bg: #8652ff;
230
- --sp-button-primary-bghover: #6c32e6;
231
- --sp-button-primary-bgactive: #5626b4;
232
- --sp-button-primary-bgdisabled: #cbd5f5;
250
+ --sp-button-primary-bg: #2563eb;
251
+ --sp-button-primary-bghover: #1d4ed8;
252
+ --sp-button-primary-bgactive: #1e40af;
253
+ --sp-button-primary-bgdisabled: #e2e8f0;
233
254
  --sp-button-primary-text: #ffffff;
234
255
  --sp-button-primary-textdisabled: #94a3b8;
256
+ --sp-button-primary-focusring: rgba(59, 130, 246, 0.4);
235
257
  --sp-button-secondary-bg: #ffffff;
236
- --sp-button-secondary-bghover: #f1f5f9;
237
- --sp-button-secondary-bgactive: #e2e8f0;
258
+ --sp-button-secondary-bghover: #f8fafc;
259
+ --sp-button-secondary-bgactive: #f1f5f9;
238
260
  --sp-button-secondary-bgdisabled: #f8fafc;
239
- --sp-button-secondary-text: #8652ff;
261
+ --sp-button-secondary-text: #2563eb;
240
262
  --sp-button-secondary-textdisabled: #94a3b8;
241
- --sp-button-secondary-border: #8652ff;
242
- --sp-button-secondary-borderdisabled: #cbd5f5;
263
+ --sp-button-secondary-border: #2563eb;
264
+ --sp-button-secondary-borderdisabled: #e2e8f0;
265
+ --sp-button-secondary-focusring: rgba(59, 130, 246, 0.4);
243
266
  --sp-button-ghost-bg: transparent;
244
- --sp-button-ghost-bghover: #f5f0ff;
245
- --sp-button-ghost-bgactive: #ebe2ff;
267
+ --sp-button-ghost-bghover: #eff6ff;
268
+ --sp-button-ghost-bgactive: #dbeafe;
246
269
  --sp-button-ghost-bgdisabled: transparent;
247
- --sp-button-ghost-text: #8652ff;
270
+ --sp-button-ghost-text: #2563eb;
248
271
  --sp-button-ghost-textdisabled: #94a3b8;
249
- --sp-button-danger-bg: #ef4444;
250
- --sp-button-danger-bghover: #dc2626;
251
- --sp-button-danger-bgactive: #b91c1c;
272
+ --sp-button-ghost-focusring: rgba(59, 130, 246, 0.4);
273
+ --sp-button-danger-bg: #dc2626;
274
+ --sp-button-danger-bghover: #b91c1c;
275
+ --sp-button-danger-bgactive: #991b1b;
252
276
  --sp-button-danger-bgdisabled: #fecaca;
253
277
  --sp-button-danger-text: #ffffff;
254
278
  --sp-button-danger-textdisabled: #94a3b8;
255
- --sp-button-success-bg: #22c55e;
256
- --sp-button-success-bghover: #16a34a;
257
- --sp-button-success-bgactive: #15803d;
279
+ --sp-button-danger-focusring: rgba(239, 68, 68, 0.4);
280
+ --sp-button-success-bg: #15803d;
281
+ --sp-button-success-bghover: #166534;
282
+ --sp-button-success-bgactive: #14532d;
258
283
  --sp-button-success-bgdisabled: #bbf7d0;
259
284
  --sp-button-success-text: #ffffff;
260
285
  --sp-button-success-textdisabled: #94a3b8;
286
+ --sp-button-success-focusring: rgba(34, 197, 94, 0.4);
287
+ --sp-button-cta-bg: #f59e0b;
288
+ --sp-button-cta-bghover: #d97706;
289
+ --sp-button-cta-bgactive: #b45309;
290
+ --sp-button-cta-bgdisabled: #fde68a;
291
+ --sp-button-cta-text: #0f172a;
292
+ --sp-button-cta-textdisabled: #94a3b8;
293
+ --sp-button-cta-shadow: 0 4px 14px 0 rgba(245, 158, 11, 0.39);
294
+ --sp-button-cta-focusring: rgba(245, 158, 11, 0.4);
295
+ --sp-button-accent-bg: #7c3aed;
296
+ --sp-button-accent-bghover: #6d28d9;
297
+ --sp-button-accent-bgactive: #5b21b6;
298
+ --sp-button-accent-bgdisabled: #ddd6fe;
299
+ --sp-button-accent-text: #ffffff;
300
+ --sp-button-accent-textdisabled: #94a3b8;
301
+ --sp-button-accent-focusring: rgba(139, 92, 246, 0.4);
261
302
  --sp-form-default-bg: #ffffff;
262
- --sp-form-default-border: #cbd5f5;
303
+ --sp-form-default-border: #cbd5e1;
263
304
  --sp-form-default-text: #0f172a;
264
305
  --sp-form-default-placeholder: #94a3b8;
265
- --sp-form-hover-border: #8652ff;
266
- --sp-form-focus-border: #8652ff;
267
- --sp-form-focus-ring: #8652ff;
306
+ --sp-form-hover-border: #3b82f6;
307
+ --sp-form-focus-border: #3b82f6;
308
+ --sp-form-focus-ring: #3b82f6;
268
309
  --sp-form-valid-border: #22c55e;
269
310
  --sp-form-valid-bg: #f0fdf4;
270
311
  --sp-form-valid-text: #15803d;
@@ -289,13 +330,13 @@
289
330
  --sp-animation-scalein-duration: 200ms;
290
331
  --sp-animation-scalein-easing: cubic-bezier(0.34, 1.56, 0.64, 1);
291
332
  --sp-animation-scalein-keyframes: scale-in;
292
- --sp-animation-bounce-duration: 500ms;
293
- --sp-animation-bounce-easing: cubic-bezier(0.34, 1.56, 0.64, 1);
333
+ --sp-animation-bounce-duration: 300ms;
334
+ --sp-animation-bounce-easing: cubic-bezier(0.4, 0, 0.2, 1);
294
335
  --sp-animation-bounce-keyframes: bounce;
295
- --sp-animation-shake-duration: 400ms;
336
+ --sp-animation-shake-duration: 250ms;
296
337
  --sp-animation-shake-easing: cubic-bezier(0.4, 0, 0.2, 1);
297
338
  --sp-animation-shake-keyframes: shake;
298
- --sp-animation-pulse-duration: 1500ms;
339
+ --sp-animation-pulse-duration: 1200ms;
299
340
  --sp-animation-pulse-easing: cubic-bezier(0.4, 0, 0.2, 1);
300
341
  --sp-animation-pulse-keyframes: pulse;
301
342
  }
@@ -304,16 +345,17 @@
304
345
  --sp-surface-card: #1e293b;
305
346
  --sp-surface-input: #334155;
306
347
  --sp-surface-overlay: #1e293b;
348
+ --sp-surface-hero: linear-gradient(135deg, #4c1d95 0%, #6d28d9 100%);
307
349
  --sp-text-on-page-default: #f8fafc;
308
- --sp-text-on-page-muted: #cbd5f5;
350
+ --sp-text-on-page-muted: #cbd5e1;
309
351
  --sp-text-on-page-subtle: #94a3b8;
310
352
  --sp-text-on-page-meta: #94a3b8;
311
353
  --sp-text-on-surface-default: #f1f5f9;
312
- --sp-text-on-surface-muted: #cbd5f5;
354
+ --sp-text-on-surface-muted: #cbd5e1;
313
355
  --sp-text-on-surface-subtle: #94a3b8;
314
356
  --sp-text-on-surface-meta: #94a3b8;
315
357
  --sp-component-card-text: #f1f5f9;
316
- --sp-component-card-text-muted: #cbd5f5;
358
+ --sp-component-card-text-muted: #cbd5e1;
317
359
  --sp-component-input-text: #f1f5f9;
318
360
  --sp-component-input-placeholder: #94a3b8;
319
361
  --sp-button-text-default: #f1f5f9;
@@ -330,7 +372,7 @@
330
372
  --sp-badge-danger-text: #fee2e2;
331
373
  --sp-icon-box-bg: #1e293b;
332
374
  --sp-icon-box-border: #334155;
333
- --sp-icon-box-icon-default: #a37aff;
375
+ --sp-icon-box-icon-default: #93c5fd;
334
376
  --sp-icon-box-icon-success: #4ade80;
335
377
  --sp-icon-box-icon-warning: #fbbf24;
336
378
  --sp-icon-box-icon-danger: #f87171;
@@ -391,7 +433,7 @@
391
433
  }
392
434
 
393
435
  :focus-visible {
394
- outline: var(--sp-focus-ring-width) solid var(--sp-color-focus-primary);
436
+ outline: var(--sp-focus-ring-width) var(--sp-focus-ring-style) var(--sp-color-focus-primary);
395
437
  outline-offset: var(--sp-focus-ring-offset);
396
438
  }
397
439
 
@@ -403,6 +445,9 @@
403
445
  @layer components {
404
446
 
405
447
  :root {
448
+ /* structural border width */
449
+ --sp-component-border-width: var(--sp-border-width-base);
450
+
406
451
  /* button roles */
407
452
  --sp-component-button-border-base: var(--sp-component-button-ghost-bg);
408
453
  --sp-component-button-shadow: var(--sp-shadow-sm);
@@ -438,6 +483,21 @@
438
483
  --sp-component-button-success-bg-disabled: var(--sp-button-success-bgdisabled);
439
484
  --sp-component-button-success-text: var(--sp-button-success-text);
440
485
  --sp-component-button-success-text-disabled: var(--sp-button-success-textdisabled);
486
+ /* FLAG: buttons.cta tokens in spectre-tokens v2.x use warning.500 (Gold),
487
+ which violates the Aesthetic Audit guardrails. Remaining on accent palette. */
488
+ --sp-component-button-cta-bg: var(--sp-color-accent-600);
489
+ --sp-component-button-cta-bg-hover: var(--sp-color-accent-700);
490
+ --sp-component-button-cta-bg-active: var(--sp-color-accent-800);
491
+ --sp-component-button-cta-bg-disabled: var(--sp-color-accent-200);
492
+ --sp-component-button-cta-text: var(--sp-color-neutral-50);
493
+ --sp-component-button-cta-text-disabled: var(--sp-color-neutral-400);
494
+ --sp-component-button-cta-shadow: 0 4px 14px 0 var(--sp-color-accent-500) / 0.39;
495
+ --sp-component-button-accent-bg: var(--sp-button-accent-bg);
496
+ --sp-component-button-accent-bg-hover: var(--sp-button-accent-bghover);
497
+ --sp-component-button-accent-bg-active: var(--sp-button-accent-bgactive);
498
+ --sp-component-button-accent-bg-disabled: var(--sp-button-accent-bgdisabled);
499
+ --sp-component-button-accent-text: var(--sp-button-accent-text);
500
+ --sp-component-button-accent-text-disabled: var(--sp-button-accent-textdisabled);
441
501
 
442
502
  /* card roles */
443
503
  --sp-component-card-bg: var(--sp-surface-card);
@@ -479,12 +539,29 @@
479
539
  --sp-component-badge-radius: var(--sp-radius-pill);
480
540
  --sp-component-badge-primary-bg: var(--sp-button-primary-bg);
481
541
  --sp-component-badge-primary-text: var(--sp-button-text-on-primary);
542
+ --sp-component-badge-secondary-bg: var(--sp-button-secondary-bg);
543
+ --sp-component-badge-secondary-text: var(--sp-button-secondary-text);
544
+ --sp-component-badge-secondary-border: var(--sp-button-secondary-border);
482
545
  --sp-component-badge-success-bg: var(--sp-badge-success-bg);
483
546
  --sp-component-badge-success-text: var(--sp-badge-success-text);
484
547
  --sp-component-badge-warning-bg: var(--sp-badge-warning-bg);
485
548
  --sp-component-badge-warning-text: var(--sp-badge-warning-text);
486
549
  --sp-component-badge-danger-bg: var(--sp-badge-danger-bg);
487
550
  --sp-component-badge-danger-text: var(--sp-badge-danger-text);
551
+ --sp-component-badge-neutral-bg: var(--sp-badge-neutral-bg);
552
+ --sp-component-badge-neutral-text: var(--sp-badge-neutral-text);
553
+ --sp-component-badge-info-bg: var(--sp-badge-info-bg);
554
+ --sp-component-badge-info-text: var(--sp-badge-info-text);
555
+
556
+ /* badge hover states — missing from core token exports, mapped to semantic logic */
557
+ --sp-component-badge-primary-bg-hover: var(--sp-button-primary-bghover);
558
+ --sp-component-badge-secondary-bg-hover: var(--sp-button-secondary-bghover);
559
+ --sp-component-badge-success-bg-hover: var(--sp-color-success-200);
560
+ --sp-component-badge-warning-bg-hover: var(--sp-color-warning-200);
561
+ --sp-component-badge-danger-bg-hover: var(--sp-color-error-200);
562
+ --sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-200);
563
+ --sp-component-badge-info-bg-hover: var(--sp-color-info-200);
564
+
488
565
  --sp-component-badge-padding-x-sm: var(--sp-space-8);
489
566
  --sp-component-badge-padding-x-md: var(--sp-space-12);
490
567
  --sp-component-badge-padding-x-lg: var(--sp-space-16);
@@ -507,6 +584,67 @@
507
584
  --sp-component-iconbox-danger-text: var(--sp-icon-box-icon-danger);
508
585
  --sp-component-iconbox-info-bg: var(--sp-color-info-50);
509
586
  --sp-component-iconbox-info-text: var(--sp-badge-info-text);
587
+
588
+ /* testimonial roles */
589
+ --sp-component-testimonial-bg: var(--sp-surface-card);
590
+ --sp-component-testimonial-border: var(--sp-color-neutral-200);
591
+ --sp-component-testimonial-text: var(--sp-color-neutral-700);
592
+ --sp-component-testimonial-author-name: var(--sp-color-neutral-900);
593
+ --sp-component-testimonial-author-title: var(--sp-color-neutral-500);
594
+ --sp-component-testimonial-quote-mark: var(--sp-color-neutral-300);
595
+
596
+ /* pricing card roles */
597
+ --sp-component-pricing-card-bg: var(--sp-surface-card);
598
+ --sp-component-pricing-card-border: var(--sp-color-neutral-200);
599
+ /* FLAG: component.pricingCard.featuredBg in tokens is info.600 (Blue), which clashing
600
+ with the warning.500 (Gold) badge. Remaining on neutral-900 to pass Aesthetic Audit. */
601
+ --sp-component-pricing-card-featured-bg: var(--sp-color-neutral-900);
602
+ --sp-component-pricing-card-featured-text: var(--sp-color-neutral-50);
603
+ --sp-component-pricing-card-featured-badge-bg: var(--sp-color-warning-500);
604
+ --sp-component-pricing-card-featured-badge-text: var(--sp-color-neutral-900);
605
+ --sp-component-pricing-card-price: var(--sp-color-neutral-900);
606
+ --sp-component-pricing-card-featured-price: var(--sp-color-neutral-50);
607
+ --sp-component-pricing-card-price-description: var(--sp-color-neutral-500);
608
+
609
+ /* rating roles */
610
+ --sp-component-rating-star-filled: var(--sp-color-warning-500);
611
+ --sp-component-rating-star-empty: var(--sp-color-neutral-200);
612
+ --sp-component-rating-text: var(--sp-color-neutral-500);
613
+ }
614
+
615
+ /* dark mode overrides for complex component tokens not yet exported by spectre-tokens v2.x */
616
+ :root[data-spectre-theme="dark"] {
617
+ --sp-component-testimonial-bg: var(--sp-color-neutral-800);
618
+ --sp-component-testimonial-border: var(--sp-color-neutral-700);
619
+ --sp-component-testimonial-text: var(--sp-color-neutral-300);
620
+ --sp-component-testimonial-author-name: var(--sp-color-neutral-100);
621
+ --sp-component-testimonial-author-title: var(--sp-color-neutral-400);
622
+ --sp-component-testimonial-quote-mark: var(--sp-color-neutral-600);
623
+
624
+ --sp-component-pricing-card-bg: var(--sp-color-neutral-800);
625
+ --sp-component-pricing-card-border: var(--sp-color-neutral-700);
626
+ --sp-component-pricing-card-price: var(--sp-color-neutral-100);
627
+ --sp-component-pricing-card-price-description: var(--sp-color-neutral-400);
628
+
629
+ --sp-component-rating-star-empty: var(--sp-color-neutral-700);
630
+ --sp-component-rating-text: var(--sp-color-neutral-400);
631
+
632
+ --sp-component-badge-success-bg: var(--sp-color-success-800);
633
+ --sp-component-badge-success-text: var(--sp-color-success-100);
634
+ --sp-component-badge-warning-bg: var(--sp-color-warning-800);
635
+ --sp-component-badge-warning-text: var(--sp-color-warning-100);
636
+ --sp-component-badge-danger-bg: var(--sp-color-error-800);
637
+ --sp-component-badge-danger-text: var(--sp-color-error-100);
638
+ --sp-component-badge-neutral-bg: var(--sp-color-neutral-700);
639
+ --sp-component-badge-neutral-text: var(--sp-color-neutral-100);
640
+ --sp-component-badge-info-bg: var(--sp-color-info-800);
641
+ --sp-component-badge-info-text: var(--sp-color-info-100);
642
+
643
+ --sp-component-badge-success-bg-hover: var(--sp-color-success-700);
644
+ --sp-component-badge-warning-bg-hover: var(--sp-color-warning-700);
645
+ --sp-component-badge-danger-bg-hover: var(--sp-color-error-700);
646
+ --sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-600);
647
+ --sp-component-badge-info-bg-hover: var(--sp-color-info-700);
510
648
  }
511
649
 
512
650
  /* BUTTONS -------------------------------------------------------------- */
@@ -517,7 +655,7 @@
517
655
  gap: var(--sp-space-4);
518
656
  padding: var(--sp-space-4) var(--sp-space-16);
519
657
  border-radius: var(--sp-radius-md);
520
- border: 1px solid var(--sp-component-button-border-base);
658
+ border: var(--sp-component-border-width) solid var(--sp-component-button-border-base);
521
659
  font-family: var(--sp-font-family-sans);
522
660
  font-size: var(--sp-font-md-size);
523
661
  line-height: 1;
@@ -550,6 +688,10 @@
550
688
  width: 100%;
551
689
  }
552
690
 
691
+ .sp-btn--pill {
692
+ border-radius: var(--sp-radius-pill);
693
+ }
694
+
553
695
  .sp-btn--icon {
554
696
  padding-inline: var(--sp-space-12);
555
697
  padding-block: var(--sp-space-4);
@@ -574,16 +716,8 @@
574
716
  line-height: var(--sp-font-lg-line-height);
575
717
  }
576
718
 
577
- /* Generic forced-state helpers (safe, variant rules still set actual colors) */
578
- .sp-btn.sp-btn--hover,
579
- .sp-btn.is-hover {
580
- /* no-op here; variant sections below define the actual hover colors */
581
- }
719
+ /* Generic forced-state helpers (actual colors defined in variant sections below) */
582
720
 
583
- .sp-btn.sp-btn--active,
584
- .sp-btn.is-active {
585
- /* no-op here; variant sections below define the actual active colors */
586
- }
587
721
 
588
722
  /* primary */
589
723
  .sp-btn--primary {
@@ -709,6 +843,56 @@
709
843
  color: var(--sp-component-button-success-text-disabled);
710
844
  }
711
845
 
846
+ /* cta */
847
+ .sp-btn--cta {
848
+ background-color: var(--sp-component-button-cta-bg);
849
+ color: var(--sp-component-button-cta-text);
850
+ box-shadow: var(--sp-component-button-cta-shadow);
851
+ }
852
+
853
+ .sp-btn--cta.sp-btn--hover,
854
+ .sp-btn--cta.is-hover,
855
+ .sp-btn--cta:hover {
856
+ background-color: var(--sp-component-button-cta-bg-hover);
857
+ }
858
+
859
+ .sp-btn--cta.sp-btn--active,
860
+ .sp-btn--cta.is-active,
861
+ .sp-btn--cta:active {
862
+ background-color: var(--sp-component-button-cta-bg-active);
863
+ }
864
+
865
+ .sp-btn--cta.sp-btn--disabled,
866
+ .sp-btn--cta:disabled {
867
+ background-color: var(--sp-component-button-cta-bg-disabled);
868
+ color: var(--sp-component-button-cta-text-disabled);
869
+ box-shadow: none;
870
+ }
871
+
872
+ /* accent */
873
+ .sp-btn--accent {
874
+ background-color: var(--sp-component-button-accent-bg);
875
+ color: var(--sp-component-button-accent-text);
876
+ }
877
+
878
+ .sp-btn--accent.sp-btn--hover,
879
+ .sp-btn--accent.is-hover,
880
+ .sp-btn--accent:hover {
881
+ background-color: var(--sp-component-button-accent-bg-hover);
882
+ }
883
+
884
+ .sp-btn--accent.sp-btn--active,
885
+ .sp-btn--accent.is-active,
886
+ .sp-btn--accent:active {
887
+ background-color: var(--sp-component-button-accent-bg-active);
888
+ }
889
+
890
+ .sp-btn--accent.sp-btn--disabled,
891
+ .sp-btn--accent:disabled {
892
+ background-color: var(--sp-component-button-accent-bg-disabled);
893
+ color: var(--sp-component-button-accent-text-disabled);
894
+ }
895
+
712
896
  /* INPUTS --------------------------------------------------------------- */
713
897
 
714
898
  .sp-input-wrapper {
@@ -742,7 +926,7 @@
742
926
  appearance: none;
743
927
  padding: var(--sp-space-4) var(--sp-space-16);
744
928
  border-radius: var(--sp-radius-md);
745
- border: 1px solid var(--sp-component-input-role-border);
929
+ border: var(--sp-component-border-width) solid var(--sp-component-input-role-border);
746
930
  background-color: var(--sp-component-input-role-bg);
747
931
  color: var(--sp-component-input-role-text);
748
932
  font-family: var(--sp-font-family-sans);
@@ -780,10 +964,14 @@
780
964
  width: 100%;
781
965
  }
782
966
 
967
+ .sp-input--pill {
968
+ border-radius: var(--sp-radius-pill);
969
+ }
970
+
783
971
  .sp-input:focus,
784
972
  .sp-input--focus {
785
973
  border-color: var(--sp-component-input-role-border-focus);
786
- box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + 1px) var(--sp-component-input-role-ring);
974
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-component-input-role-ring);
787
975
  outline: none;
788
976
  }
789
977
 
@@ -824,7 +1012,7 @@
824
1012
  border-radius: var(--sp-radius-lg);
825
1013
  padding: var(--sp-space-24);
826
1014
  box-shadow: var(--sp-component-card-shadow);
827
- border: 1px solid var(--sp-component-card-border-base);
1015
+ border: var(--sp-component-border-width) solid var(--sp-component-card-border-base);
828
1016
  }
829
1017
 
830
1018
  .sp-card p {
@@ -865,6 +1053,11 @@
865
1053
  height: 100%;
866
1054
  }
867
1055
 
1056
+ .sp-card--disabled {
1057
+ opacity: var(--sp-opacity-disabled);
1058
+ pointer-events: none;
1059
+ }
1060
+
868
1061
  .sp-card--interactive {
869
1062
  cursor: pointer;
870
1063
  transition:
@@ -875,7 +1068,7 @@
875
1068
  .sp-card--interactive:hover,
876
1069
  .sp-card--interactive:focus-visible,
877
1070
  .sp-card--interactive:focus-within {
878
- transform: translateY(-1px);
1071
+ transform: translateY(calc(var(--sp-component-border-width) * -1));
879
1072
  box-shadow: var(--sp-component-card-shadow-elevated);
880
1073
  }
881
1074
 
@@ -892,7 +1085,7 @@
892
1085
  padding: var(--sp-component-badge-padding-y-md) var(--sp-component-badge-padding-x-md);
893
1086
  font-size: var(--sp-font-sm-size);
894
1087
  line-height: var(--sp-font-sm-line-height);
895
- border: 1px solid transparent;
1088
+ border: var(--sp-component-border-width) solid transparent;
896
1089
  white-space: nowrap;
897
1090
  }
898
1091
 
@@ -919,21 +1112,75 @@
919
1112
  color: var(--sp-component-badge-primary-text);
920
1113
  }
921
1114
 
1115
+ .sp-badge--primary.sp-badge--interactive:hover {
1116
+ background-color: var(--sp-component-badge-primary-bg-hover);
1117
+ }
1118
+
1119
+ .sp-badge--secondary {
1120
+ background-color: var(--sp-component-badge-secondary-bg);
1121
+ color: var(--sp-component-badge-secondary-text);
1122
+ border-color: var(--sp-component-badge-secondary-border);
1123
+ }
1124
+
1125
+ .sp-badge--secondary.sp-badge--interactive:hover {
1126
+ background-color: var(--sp-component-badge-secondary-bg-hover);
1127
+ }
1128
+
922
1129
  .sp-badge--success {
923
1130
  background-color: var(--sp-component-badge-success-bg);
924
1131
  color: var(--sp-component-badge-success-text);
925
1132
  }
926
1133
 
1134
+ .sp-badge--success.sp-badge--interactive:hover {
1135
+ background-color: var(--sp-component-badge-success-bg-hover);
1136
+ }
1137
+
927
1138
  .sp-badge--warning {
928
1139
  background-color: var(--sp-component-badge-warning-bg);
929
1140
  color: var(--sp-component-badge-warning-text);
930
1141
  }
931
1142
 
1143
+ .sp-badge--warning.sp-badge--interactive:hover {
1144
+ background-color: var(--sp-component-badge-warning-bg-hover);
1145
+ }
1146
+
932
1147
  .sp-badge--danger {
933
1148
  background-color: var(--sp-component-badge-danger-bg);
934
1149
  color: var(--sp-component-badge-danger-text);
935
1150
  }
936
1151
 
1152
+ .sp-badge--danger.sp-badge--interactive:hover {
1153
+ background-color: var(--sp-component-badge-danger-bg-hover);
1154
+ }
1155
+
1156
+ .sp-badge--neutral {
1157
+ background-color: var(--sp-component-badge-neutral-bg);
1158
+ color: var(--sp-component-badge-neutral-text);
1159
+ }
1160
+
1161
+ .sp-badge--neutral.sp-badge--interactive:hover {
1162
+ background-color: var(--sp-component-badge-neutral-bg-hover);
1163
+ }
1164
+
1165
+ .sp-badge--info {
1166
+ background-color: var(--sp-component-badge-info-bg);
1167
+ color: var(--sp-component-badge-info-text);
1168
+ }
1169
+
1170
+ .sp-badge--info.sp-badge--interactive:hover {
1171
+ background-color: var(--sp-component-badge-info-bg-hover);
1172
+ }
1173
+
1174
+ .sp-badge--interactive {
1175
+ cursor: pointer;
1176
+ transition: background-color var(--sp-duration-fast) var(--sp-easing-out);
1177
+ }
1178
+
1179
+ .sp-badge--disabled {
1180
+ opacity: var(--sp-opacity-disabled);
1181
+ pointer-events: none;
1182
+ }
1183
+
937
1184
  /* ICON BOXES ----------------------------------------------------------- */
938
1185
 
939
1186
  .sp-iconbox {
@@ -1038,6 +1285,157 @@
1038
1285
  background-color: var(--sp-component-iconbox-info-bg);
1039
1286
  color: var(--sp-component-iconbox-info-text);
1040
1287
  }
1288
+
1289
+ .sp-iconbox--disabled {
1290
+ opacity: var(--sp-opacity-disabled);
1291
+ pointer-events: none;
1292
+ }
1293
+
1294
+ /* TESTIMONIALS --------------------------------------------------------- */
1295
+
1296
+ .sp-testimonial {
1297
+ background-color: var(--sp-component-testimonial-bg);
1298
+ border: var(--sp-component-border-width) solid var(--sp-component-testimonial-border);
1299
+ border-radius: var(--sp-radius-lg);
1300
+ padding: var(--sp-space-32);
1301
+ display: flex;
1302
+ flex-direction: column;
1303
+ gap: var(--sp-space-24);
1304
+ }
1305
+
1306
+ .sp-testimonial-quote {
1307
+ color: var(--sp-component-testimonial-text);
1308
+ font-size: var(--sp-font-lg-size);
1309
+ line-height: var(--sp-font-lg-line-height);
1310
+ font-style: italic;
1311
+ position: relative;
1312
+ }
1313
+
1314
+ .sp-testimonial-quote::before {
1315
+ content: "“";
1316
+ color: var(--sp-component-testimonial-quote-mark);
1317
+ font-size: var(--sp-space-48);
1318
+ position: absolute;
1319
+ top: calc(var(--sp-space-24) * -1);
1320
+ left: calc(var(--sp-space-16) * -1);
1321
+ opacity: var(--sp-opacity-overlay);
1322
+ }
1323
+
1324
+ .sp-testimonial-author {
1325
+ display: flex;
1326
+ align-items: center;
1327
+ gap: var(--sp-space-16);
1328
+ }
1329
+
1330
+ .sp-testimonial-author-info {
1331
+ display: flex;
1332
+ flex-direction: column;
1333
+ }
1334
+
1335
+ .sp-testimonial-author-name {
1336
+ color: var(--sp-component-testimonial-author-name);
1337
+ font-weight: var(--sp-font-xl-weight);
1338
+ font-size: var(--sp-font-md-size);
1339
+ }
1340
+
1341
+ .sp-testimonial-author-title {
1342
+ color: var(--sp-component-testimonial-author-title);
1343
+ font-size: var(--sp-font-sm-size);
1344
+ }
1345
+
1346
+ /* PRICING CARDS -------------------------------------------------------- */
1347
+
1348
+ .sp-pricing-card {
1349
+ background-color: var(--sp-component-pricing-card-bg);
1350
+ border: var(--sp-component-border-width) solid var(--sp-component-pricing-card-border);
1351
+ border-radius: var(--sp-radius-lg);
1352
+ padding: var(--sp-space-32);
1353
+ display: flex;
1354
+ flex-direction: column;
1355
+ gap: var(--sp-space-24);
1356
+ position: relative;
1357
+ transition: transform var(--sp-duration-fast) var(--sp-easing-out);
1358
+ }
1359
+
1360
+ .sp-pricing-card--featured {
1361
+ background-color: var(--sp-component-pricing-card-featured-bg);
1362
+ color: var(--sp-component-pricing-card-featured-text);
1363
+ transform: scale(1.05);
1364
+ z-index: 1;
1365
+ border: none;
1366
+ }
1367
+
1368
+ .sp-pricing-card--disabled {
1369
+ opacity: var(--sp-opacity-disabled);
1370
+ pointer-events: none;
1371
+ }
1372
+
1373
+ .sp-pricing-card-badge {
1374
+ position: absolute;
1375
+ top: var(--sp-space-16);
1376
+ right: var(--sp-space-16);
1377
+ background-color: var(--sp-component-pricing-card-featured-badge-bg);
1378
+ color: var(--sp-component-pricing-card-featured-badge-text);
1379
+ padding: var(--sp-space-4) var(--sp-space-12);
1380
+ border-radius: var(--sp-radius-pill);
1381
+ font-size: var(--sp-font-xs-size);
1382
+ font-weight: var(--sp-font-md-weight);
1383
+ }
1384
+
1385
+ .sp-pricing-card-price-container {
1386
+ display: flex;
1387
+ align-items: baseline;
1388
+ gap: var(--sp-space-4);
1389
+ }
1390
+
1391
+ .sp-pricing-card-price {
1392
+ font-size: var(--sp-font-2xl-size);
1393
+ font-weight: var(--sp-font-2xl-weight);
1394
+ color: var(--sp-component-pricing-card-price);
1395
+ }
1396
+
1397
+ .sp-pricing-card--featured .sp-pricing-card-price {
1398
+ color: var(--sp-component-pricing-card-featured-price);
1399
+ }
1400
+
1401
+ .sp-pricing-card-description {
1402
+ color: var(--sp-component-pricing-card-price-description);
1403
+ font-size: var(--sp-font-sm-size);
1404
+ }
1405
+
1406
+ .sp-pricing-card--featured .sp-pricing-card-description {
1407
+ color: var(--sp-component-pricing-card-featured-text);
1408
+ opacity: 0.8;
1409
+ }
1410
+
1411
+ /* RATING --------------------------------------------------------------- */
1412
+
1413
+ .sp-rating {
1414
+ display: inline-flex;
1415
+ align-items: center;
1416
+ gap: var(--sp-space-8);
1417
+ }
1418
+
1419
+ .sp-rating-stars {
1420
+ display: flex;
1421
+ gap: var(--sp-space-4);
1422
+ color: var(--sp-component-rating-star-empty);
1423
+ }
1424
+
1425
+ .sp-rating-star {
1426
+ display: flex;
1427
+ align-items: center;
1428
+ justify-content: center;
1429
+ }
1430
+
1431
+ .sp-rating-star--filled {
1432
+ color: var(--sp-component-rating-star-filled);
1433
+ }
1434
+
1435
+ .sp-rating-text {
1436
+ color: var(--sp-component-rating-text);
1437
+ font-size: var(--sp-font-sm-size);
1438
+ }
1041
1439
  }
1042
1440
  @layer utilities {
1043
1441
  .sp-stack {
@@ -1059,7 +1457,7 @@
1059
1457
  margin-right: auto;
1060
1458
  padding-left: var(--sp-layout-container-padding-inline-md);
1061
1459
  padding-right: var(--sp-layout-container-padding-inline-md);
1062
- max-width: 72rem;
1460
+ max-width: var(--sp-layout-container-max-width);
1063
1461
  }
1064
1462
 
1065
1463
  .sp-section {
@@ -1108,50 +1506,42 @@
1108
1506
  }
1109
1507
 
1110
1508
  .sp-animate-fade-in {
1111
- animation: var(--sp-animation-fadein-keyframes)
1112
- var(--sp-animation-fadein-duration) var(--sp-animation-fadein-easing);
1509
+ animation: var(--sp-animation-fadein-keyframes) var(--sp-animation-fadein-duration) var(--sp-animation-fadein-easing);
1113
1510
  }
1114
1511
 
1115
1512
  .sp-animate-fade-out {
1116
- animation: var(--sp-animation-fadeout-keyframes)
1117
- var(--sp-animation-fadeout-duration) var(--sp-animation-fadeout-easing);
1513
+ animation: var(--sp-animation-fadeout-keyframes) var(--sp-animation-fadeout-duration) var(--sp-animation-fadeout-easing);
1118
1514
  }
1119
1515
 
1120
1516
  .sp-animate-slide-up {
1121
- animation: var(--sp-animation-slideup-keyframes)
1122
- var(--sp-animation-slideup-duration) var(--sp-animation-slideup-easing);
1517
+ animation: var(--sp-animation-slideup-keyframes) var(--sp-animation-slideup-duration) var(--sp-animation-slideup-easing);
1123
1518
  }
1124
1519
 
1125
1520
  .sp-animate-slide-down {
1126
- animation: var(--sp-animation-slidedown-keyframes)
1127
- var(--sp-animation-slidedown-duration)
1128
- var(--sp-animation-slidedown-easing);
1521
+ animation: var(--sp-animation-slidedown-keyframes) var(--sp-animation-slidedown-duration) var(--sp-animation-slidedown-easing);
1129
1522
  }
1130
1523
 
1131
1524
  .sp-animate-scale-in {
1132
- animation: var(--sp-animation-scalein-keyframes)
1133
- var(--sp-animation-scalein-duration) var(--sp-animation-scalein-easing);
1525
+ animation: var(--sp-animation-scalein-keyframes) var(--sp-animation-scalein-duration) var(--sp-animation-scalein-easing);
1134
1526
  }
1135
1527
 
1136
1528
  .sp-animate-bounce {
1137
- animation: var(--sp-animation-bounce-keyframes)
1138
- var(--sp-animation-bounce-duration) var(--sp-animation-bounce-easing);
1529
+ animation: var(--sp-animation-bounce-keyframes) var(--sp-animation-bounce-duration) var(--sp-animation-bounce-easing);
1139
1530
  }
1140
1531
 
1141
1532
  .sp-animate-shake {
1142
- animation: var(--sp-animation-shake-keyframes)
1143
- var(--sp-animation-shake-duration) var(--sp-animation-shake-easing);
1533
+ animation: var(--sp-animation-shake-keyframes) var(--sp-animation-shake-duration) var(--sp-animation-shake-easing);
1144
1534
  }
1145
1535
 
1146
1536
  .sp-animate-pulse {
1147
- animation: var(--sp-animation-pulse-keyframes)
1148
- var(--sp-animation-pulse-duration) var(--sp-animation-pulse-easing);
1537
+ animation: var(--sp-animation-pulse-keyframes) var(--sp-animation-pulse-duration) var(--sp-animation-pulse-easing);
1149
1538
  }
1150
1539
 
1151
1540
  @keyframes fade-in {
1152
1541
  from {
1153
1542
  opacity: 0;
1154
1543
  }
1544
+
1155
1545
  to {
1156
1546
  opacity: 1;
1157
1547
  }
@@ -1161,6 +1551,7 @@
1161
1551
  from {
1162
1552
  opacity: 1;
1163
1553
  }
1554
+
1164
1555
  to {
1165
1556
  opacity: 0;
1166
1557
  }
@@ -1169,8 +1560,9 @@
1169
1560
  @keyframes slide-up {
1170
1561
  from {
1171
1562
  opacity: 0;
1172
- transform: translateY(0.5rem);
1563
+ transform: translateY(var(--sp-space-8));
1173
1564
  }
1565
+
1174
1566
  to {
1175
1567
  opacity: 1;
1176
1568
  transform: translateY(0);
@@ -1180,8 +1572,9 @@
1180
1572
  @keyframes slide-down {
1181
1573
  from {
1182
1574
  opacity: 0;
1183
- transform: translateY(-0.5rem);
1575
+ transform: translateY(calc(var(--sp-space-8) * -1));
1184
1576
  }
1577
+
1185
1578
  to {
1186
1579
  opacity: 1;
1187
1580
  transform: translateY(0);
@@ -1193,6 +1586,7 @@
1193
1586
  opacity: 0;
1194
1587
  transform: scale(0.95);
1195
1588
  }
1589
+
1196
1590
  to {
1197
1591
  opacity: 1;
1198
1592
  transform: scale(1);
@@ -1200,35 +1594,42 @@
1200
1594
  }
1201
1595
 
1202
1596
  @keyframes bounce {
1597
+
1203
1598
  0%,
1204
1599
  100% {
1205
1600
  transform: translateY(0);
1206
1601
  }
1602
+
1207
1603
  50% {
1208
- transform: translateY(-0.375rem);
1604
+ transform: translateY(calc(var(--sp-space-4) * -1.5));
1209
1605
  }
1210
1606
  }
1211
1607
 
1212
1608
  @keyframes shake {
1609
+
1213
1610
  0%,
1214
1611
  100% {
1215
1612
  transform: translateX(0);
1216
1613
  }
1614
+
1217
1615
  20%,
1218
1616
  60% {
1219
- transform: translateX(-0.375rem);
1617
+ transform: translateX(calc(var(--sp-space-4) * -1.5));
1220
1618
  }
1619
+
1221
1620
  40%,
1222
1621
  80% {
1223
- transform: translateX(0.375rem);
1622
+ transform: translateX(calc(var(--sp-space-4) * 1.5));
1224
1623
  }
1225
1624
  }
1226
1625
 
1227
1626
  @keyframes pulse {
1627
+
1228
1628
  0%,
1229
1629
  100% {
1230
1630
  transform: scale(1);
1231
1631
  }
1632
+
1232
1633
  50% {
1233
1634
  transform: scale(1.04);
1234
1635
  }