@phcdevworks/spectre-ui 1.1.0 → 1.1.2

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.
@@ -1,3 +1,378 @@
1
+ :root {
2
+ --sp-surface-page: #f7f8fb;
3
+ --sp-surface-card: #ffffff;
4
+ --sp-surface-input: #ffffff;
5
+ --sp-surface-overlay: rgba(20, 27, 36, 0.6);
6
+ --sp-surface-hero: linear-gradient(135deg, #5b6ee1 0%, #6f3fd7 100%);
7
+ --sp-text-on-page-default: #141b24;
8
+ --sp-text-on-page-muted: #4b576a;
9
+ --sp-text-on-page-subtle: #657287;
10
+ --sp-text-on-page-meta: #657287;
11
+ --sp-text-on-surface-default: #141b24;
12
+ --sp-text-on-surface-muted: #4b576a;
13
+ --sp-text-on-surface-subtle: #657287;
14
+ --sp-text-on-surface-meta: #657287;
15
+ --sp-component-card-text: #141b24;
16
+ --sp-component-card-text-muted: #657287;
17
+ --sp-component-input-text: #141b24;
18
+ --sp-component-input-placeholder: #657287;
19
+ --sp-button-text-default: #141b24;
20
+ --sp-button-text-on-primary: #ffffff;
21
+ --sp-badge-neutral-bg: #eef1f6;
22
+ --sp-badge-neutral-text: #374253;
23
+ --sp-badge-info-bg: #e0f2fe;
24
+ --sp-badge-info-text: #075985;
25
+ --sp-badge-success-bg: #dcfce7;
26
+ --sp-badge-success-text: #15803d;
27
+ --sp-badge-warning-bg: #fff1c2;
28
+ --sp-badge-warning-text: #8f5200;
29
+ --sp-badge-danger-bg: #fee2e2;
30
+ --sp-badge-danger-text: #b91c1c;
31
+ --sp-icon-box-bg: #ffffff;
32
+ --sp-icon-box-border: #d9dfeb;
33
+ --sp-icon-box-icon-default: #0369a1;
34
+ --sp-icon-box-icon-success: #16a34a;
35
+ --sp-icon-box-icon-warning: #d48806;
36
+ --sp-icon-box-icon-danger: #dc2626;
37
+ --sp-color-brand-50: #eef4ff;
38
+ --sp-color-brand-100: #d9e7ff;
39
+ --sp-color-brand-200: #b9d2ff;
40
+ --sp-color-brand-300: #8ab6ff;
41
+ --sp-color-brand-400: #5a92ff;
42
+ --sp-color-brand-500: #336df4;
43
+ --sp-color-brand-600: #1f57db;
44
+ --sp-color-brand-700: #1946b4;
45
+ --sp-color-brand-800: #173b8f;
46
+ --sp-color-brand-900: #16336f;
47
+ --sp-color-neutral-50: #f7f8fb;
48
+ --sp-color-neutral-100: #eef1f6;
49
+ --sp-color-neutral-200: #d9dfeb;
50
+ --sp-color-neutral-300: #b7c1d4;
51
+ --sp-color-neutral-400: #8a96ad;
52
+ --sp-color-neutral-500: #657287;
53
+ --sp-color-neutral-600: #4b576a;
54
+ --sp-color-neutral-700: #374253;
55
+ --sp-color-neutral-800: #222b38;
56
+ --sp-color-neutral-900: #141b24;
57
+ --sp-color-accent-50: #f6f2ff;
58
+ --sp-color-accent-100: #eee5ff;
59
+ --sp-color-accent-200: #ddccff;
60
+ --sp-color-accent-300: #c3a7ff;
61
+ --sp-color-accent-400: #a279ff;
62
+ --sp-color-accent-500: #854ff7;
63
+ --sp-color-accent-600: #7135dd;
64
+ --sp-color-accent-700: #5d28b8;
65
+ --sp-color-accent-800: #4d2393;
66
+ --sp-color-accent-900: #401f75;
67
+ --sp-color-success-50: #f0fdf4;
68
+ --sp-color-success-100: #dcfce7;
69
+ --sp-color-success-200: #bbf7d0;
70
+ --sp-color-success-300: #86efac;
71
+ --sp-color-success-400: #4ade80;
72
+ --sp-color-success-500: #22c55e;
73
+ --sp-color-success-600: #16a34a;
74
+ --sp-color-success-700: #15803d;
75
+ --sp-color-success-800: #166534;
76
+ --sp-color-success-900: #14532d;
77
+ --sp-color-warning-50: #fffbea;
78
+ --sp-color-warning-100: #fff1c2;
79
+ --sp-color-warning-200: #ffe08a;
80
+ --sp-color-warning-300: #ffd24d;
81
+ --sp-color-warning-400: #ffc21a;
82
+ --sp-color-warning-500: #f5ad00;
83
+ --sp-color-warning-600: #d48806;
84
+ --sp-color-warning-700: #ad6800;
85
+ --sp-color-warning-800: #8f5200;
86
+ --sp-color-warning-900: #734000;
87
+ --sp-color-error-50: #fef2f2;
88
+ --sp-color-error-100: #fee2e2;
89
+ --sp-color-error-200: #fecaca;
90
+ --sp-color-error-300: #fca5a5;
91
+ --sp-color-error-400: #f87171;
92
+ --sp-color-error-500: #ef4444;
93
+ --sp-color-error-600: #dc2626;
94
+ --sp-color-error-700: #b91c1c;
95
+ --sp-color-error-800: #991b1b;
96
+ --sp-color-error-900: #7f1d1d;
97
+ --sp-color-info-50: #f0f9ff;
98
+ --sp-color-info-100: #e0f2fe;
99
+ --sp-color-info-200: #bae6fd;
100
+ --sp-color-info-300: #7dd3fc;
101
+ --sp-color-info-400: #38bdf8;
102
+ --sp-color-info-500: #0ea5e9;
103
+ --sp-color-info-600: #0369a1;
104
+ --sp-color-info-700: #075985;
105
+ --sp-color-info-800: #0c4a6e;
106
+ --sp-color-info-900: #082f49;
107
+ --sp-color-indigo-500: #5b6ee1;
108
+ --sp-color-indigo-600: #4d61db;
109
+ --sp-color-violet-600: #6f3fd7;
110
+ --sp-color-focus-primary: #336df4;
111
+ --sp-color-focus-error: #ef4444;
112
+ --sp-color-focus-info: #0369a1;
113
+ --sp-color-white-0: #;
114
+ --sp-color-white-1: f;
115
+ --sp-color-white-2: f;
116
+ --sp-color-white-3: f;
117
+ --sp-color-white-4: f;
118
+ --sp-color-white-5: f;
119
+ --sp-color-white-6: f;
120
+ --sp-color-black-0: #;
121
+ --sp-color-black-1: 0;
122
+ --sp-color-black-2: 0;
123
+ --sp-color-black-3: 0;
124
+ --sp-color-black-4: 0;
125
+ --sp-color-black-5: 0;
126
+ --sp-color-black-6: 0;
127
+ --sp-space-0: 0rem;
128
+ --sp-space-4: 0.25rem;
129
+ --sp-space-8: 0.5rem;
130
+ --sp-space-12: 0.75rem;
131
+ --sp-space-16: 1rem;
132
+ --sp-space-20: 1.25rem;
133
+ --sp-space-24: 1.5rem;
134
+ --sp-space-32: 2rem;
135
+ --sp-space-40: 2.5rem;
136
+ --sp-space-48: 3rem;
137
+ --sp-space-56: 3.5rem;
138
+ --sp-space-64: 4rem;
139
+ --sp-space-80: 5rem;
140
+ --sp-space-96: 6rem;
141
+ --sp-layout-section-padding-sm: 1.5rem;
142
+ --sp-layout-section-padding-md: 2rem;
143
+ --sp-layout-section-padding-lg: 3rem;
144
+ --sp-layout-section-gap-sm: 1rem;
145
+ --sp-layout-section-gap-md: 1.5rem;
146
+ --sp-layout-section-gap-lg: 2rem;
147
+ --sp-layout-stack-gap-sm: 0.5rem;
148
+ --sp-layout-stack-gap-md: 0.75rem;
149
+ --sp-layout-stack-gap-lg: 1rem;
150
+ --sp-layout-container-padding-inline-sm: 1rem;
151
+ --sp-layout-container-padding-inline-md: 1.5rem;
152
+ --sp-layout-container-padding-inline-lg: 2rem;
153
+ --sp-layout-container-max-width: 72rem;
154
+ --sp-border-width-base: 1px;
155
+ --sp-border-width-thick: 2px;
156
+ --sp-radius-none: 0;
157
+ --sp-radius-sm: 2px;
158
+ --sp-radius-md: 4px;
159
+ --sp-radius-lg: 8px;
160
+ --sp-radius-pill: 999px;
161
+ --sp-font-family-sans: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
162
+ --sp-font-family-serif: 'Times New Roman', Times, serif;
163
+ --sp-font-family-mono: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
164
+ --sp-font-xs-size: 0.75rem;
165
+ --sp-font-xs-line-height: 1.25rem;
166
+ --sp-font-xs-weight: 400;
167
+ --sp-font-sm-size: 0.875rem;
168
+ --sp-font-sm-line-height: 1.5rem;
169
+ --sp-font-sm-weight: 400;
170
+ --sp-font-md-size: 1rem;
171
+ --sp-font-md-line-height: 1.75rem;
172
+ --sp-font-md-weight: 500;
173
+ --sp-font-lg-size: 1.25rem;
174
+ --sp-font-lg-line-height: 2rem;
175
+ --sp-font-lg-weight: 500;
176
+ --sp-font-xl-size: 1.5rem;
177
+ --sp-font-xl-line-height: 2.125rem;
178
+ --sp-font-xl-weight: 600;
179
+ --sp-font-2xl-size: 1.875rem;
180
+ --sp-font-2xl-line-height: 2.5rem;
181
+ --sp-font-2xl-weight: 600;
182
+ --sp-font-xs-letter-spacing: 0.02em;
183
+ --sp-text-on-page-default: #141b24;
184
+ --sp-text-on-page-muted: #4b576a;
185
+ --sp-text-on-page-subtle: #657287;
186
+ --sp-text-on-page-meta: #657287;
187
+ --sp-text-on-surface-default: #141b24;
188
+ --sp-text-on-surface-muted: #4b576a;
189
+ --sp-text-on-surface-subtle: #657287;
190
+ --sp-text-on-surface-meta: #657287;
191
+ --sp-badge-neutral-bg: #eef1f6;
192
+ --sp-badge-neutral-text: #374253;
193
+ --sp-badge-info-bg: #e0f2fe;
194
+ --sp-badge-info-text: #075985;
195
+ --sp-badge-success-bg: #dcfce7;
196
+ --sp-badge-success-text: #166534;
197
+ --sp-badge-warning-bg: #fff1c2;
198
+ --sp-badge-warning-text: #8f5200;
199
+ --sp-badge-danger-bg: #fee2e2;
200
+ --sp-badge-danger-text: #991b1b;
201
+ --sp-icon-box-bg: #ffffff;
202
+ --sp-icon-box-border: #d9dfeb;
203
+ --sp-icon-box-icon-default: #0369a1;
204
+ --sp-icon-box-icon-success: #16a34a;
205
+ --sp-icon-box-icon-warning: #d48806;
206
+ --sp-icon-box-icon-danger: #dc2626;
207
+ --sp-shadow-none: none;
208
+ --sp-shadow-sm: 0 1px 2px 0 rgba(34, 43, 56, 0.06);
209
+ --sp-shadow-md: 0 2px 6px -1px rgba(34, 43, 56, 0.08);
210
+ --sp-shadow-lg: 0 6px 16px -4px rgba(34, 43, 56, 0.12);
211
+ --sp-breakpoint-sm: 640px;
212
+ --sp-breakpoint-md: 768px;
213
+ --sp-breakpoint-lg: 1024px;
214
+ --sp-breakpoint-xl: 1280px;
215
+ --sp-breakpoint-2xl: 1536px;
216
+ --sp-z-index-base: 0;
217
+ --sp-z-index-dropdown: 1000;
218
+ --sp-z-index-sticky: 1100;
219
+ --sp-z-index-fixed: 1200;
220
+ --sp-z-index-overlay: 1300;
221
+ --sp-z-index-modal: 1400;
222
+ --sp-z-index-popover: 1500;
223
+ --sp-z-index-tooltip: 1600;
224
+ --sp-duration-instant: 75ms;
225
+ --sp-duration-fast: 150ms;
226
+ --sp-duration-base: 200ms;
227
+ --sp-duration-moderate: 300ms;
228
+ --sp-duration-slow: 500ms;
229
+ --sp-duration-slower: 700ms;
230
+ --sp-easing-linear: linear;
231
+ --sp-easing-in: cubic-bezier(0.4, 0, 1, 1);
232
+ --sp-easing-out: cubic-bezier(0, 0, 0.2, 1);
233
+ --sp-easing-inout: cubic-bezier(0.4, 0, 0.2, 1);
234
+ --sp-easing-spring: cubic-bezier(0.4, 0, 0.2, 1);
235
+ --sp-opacity-disabled: 0.38;
236
+ --sp-opacity-hover: 0.92;
237
+ --sp-opacity-active: 0.84;
238
+ --sp-opacity-focus: 1;
239
+ --sp-opacity-overlay: 0.5;
240
+ --sp-opacity-tooltip: 0.95;
241
+ --sp-focus-ring-width: 2px;
242
+ --sp-focus-ring-offset: 2px;
243
+ --sp-focus-ring-style: solid;
244
+ --sp-min-touch-target: 44px;
245
+ --sp-min-text-size: 16px;
246
+ --sp-button-primary-bg: #0369a1;
247
+ --sp-button-primary-bghover: #075985;
248
+ --sp-button-primary-bgactive: #0c4a6e;
249
+ --sp-button-primary-bgdisabled: #d9dfeb;
250
+ --sp-button-primary-text: #ffffff;
251
+ --sp-button-primary-textdisabled: #8a96ad;
252
+ --sp-button-primary-focusring: rgba(14, 165, 233, 0.4);
253
+ --sp-button-secondary-bg: #ffffff;
254
+ --sp-button-secondary-bghover: #f7f8fb;
255
+ --sp-button-secondary-bgactive: #eef1f6;
256
+ --sp-button-secondary-bgdisabled: #f7f8fb;
257
+ --sp-button-secondary-text: #075985;
258
+ --sp-button-secondary-textdisabled: #8a96ad;
259
+ --sp-button-secondary-border: #075985;
260
+ --sp-button-secondary-borderdisabled: #d9dfeb;
261
+ --sp-button-secondary-focusring: rgba(14, 165, 233, 0.4);
262
+ --sp-button-ghost-bg: transparent;
263
+ --sp-button-ghost-bghover: #f0f9ff;
264
+ --sp-button-ghost-bgactive: #e0f2fe;
265
+ --sp-button-ghost-bgdisabled: transparent;
266
+ --sp-button-ghost-text: #075985;
267
+ --sp-button-ghost-textdisabled: #8a96ad;
268
+ --sp-button-ghost-focusring: rgba(14, 165, 233, 0.4);
269
+ --sp-button-danger-bg: #dc2626;
270
+ --sp-button-danger-bghover: #b91c1c;
271
+ --sp-button-danger-bgactive: #991b1b;
272
+ --sp-button-danger-bgdisabled: #fecaca;
273
+ --sp-button-danger-text: #ffffff;
274
+ --sp-button-danger-textdisabled: #8a96ad;
275
+ --sp-button-danger-focusring: rgba(239, 68, 68, 0.4);
276
+ --sp-button-success-bg: #15803d;
277
+ --sp-button-success-bghover: #166534;
278
+ --sp-button-success-bgactive: #14532d;
279
+ --sp-button-success-bgdisabled: #bbf7d0;
280
+ --sp-button-success-text: #ffffff;
281
+ --sp-button-success-textdisabled: #8a96ad;
282
+ --sp-button-success-focusring: rgba(34, 197, 94, 0.4);
283
+ --sp-button-cta-bg: #1f57db;
284
+ --sp-button-cta-bghover: #1946b4;
285
+ --sp-button-cta-bgactive: #173b8f;
286
+ --sp-button-cta-bgdisabled: #b9d2ff;
287
+ --sp-button-cta-text: #ffffff;
288
+ --sp-button-cta-textdisabled: #8a96ad;
289
+ --sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
290
+ --sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
291
+ --sp-button-accent-bg: #7135dd;
292
+ --sp-button-accent-bghover: #5d28b8;
293
+ --sp-button-accent-bgactive: #4d2393;
294
+ --sp-button-accent-bgdisabled: #ddccff;
295
+ --sp-button-accent-text: #ffffff;
296
+ --sp-button-accent-textdisabled: #8a96ad;
297
+ --sp-button-accent-focusring: rgba(133, 79, 247, 0.4);
298
+ --sp-form-default-bg: #ffffff;
299
+ --sp-form-default-border: #b7c1d4;
300
+ --sp-form-default-text: #141b24;
301
+ --sp-form-default-placeholder: #657287;
302
+ --sp-form-hover-border: #0ea5e9;
303
+ --sp-form-focus-border: #0ea5e9;
304
+ --sp-form-focus-ring: #0ea5e9;
305
+ --sp-form-valid-border: #22c55e;
306
+ --sp-form-valid-bg: #f0fdf4;
307
+ --sp-form-valid-text: #15803d;
308
+ --sp-form-invalid-border: #ef4444;
309
+ --sp-form-invalid-bg: #fef2f2;
310
+ --sp-form-invalid-text: #b91c1c;
311
+ --sp-form-disabled-bg: #f7f8fb;
312
+ --sp-form-disabled-border: #d9dfeb;
313
+ --sp-form-disabled-text: #8a96ad;
314
+ --sp-animation-fadein-duration: 200ms;
315
+ --sp-animation-fadein-easing: cubic-bezier(0, 0, 0.2, 1);
316
+ --sp-animation-fadein-keyframes: fade-in;
317
+ --sp-animation-fadeout-duration: 150ms;
318
+ --sp-animation-fadeout-easing: cubic-bezier(0.4, 0, 1, 1);
319
+ --sp-animation-fadeout-keyframes: fade-out;
320
+ --sp-animation-slideup-duration: 300ms;
321
+ --sp-animation-slideup-easing: cubic-bezier(0, 0, 0.2, 1);
322
+ --sp-animation-slideup-keyframes: slide-up;
323
+ --sp-animation-slidedown-duration: 300ms;
324
+ --sp-animation-slidedown-easing: cubic-bezier(0, 0, 0.2, 1);
325
+ --sp-animation-slidedown-keyframes: slide-down;
326
+ --sp-animation-scalein-duration: 200ms;
327
+ --sp-animation-scalein-easing: cubic-bezier(0.34, 1.56, 0.64, 1);
328
+ --sp-animation-scalein-keyframes: scale-in;
329
+ --sp-animation-bounce-duration: 300ms;
330
+ --sp-animation-bounce-easing: cubic-bezier(0.4, 0, 0.2, 1);
331
+ --sp-animation-bounce-keyframes: bounce;
332
+ --sp-animation-shake-duration: 250ms;
333
+ --sp-animation-shake-easing: cubic-bezier(0.4, 0, 0.2, 1);
334
+ --sp-animation-shake-keyframes: shake;
335
+ --sp-animation-pulse-duration: 1200ms;
336
+ --sp-animation-pulse-easing: cubic-bezier(0.4, 0, 0.2, 1);
337
+ --sp-animation-pulse-keyframes: pulse;
338
+ }
339
+ :root[data-spectre-theme="dark"] {
340
+ --sp-surface-page: #141b24;
341
+ --sp-surface-card: #222b38;
342
+ --sp-surface-input: #374253;
343
+ --sp-surface-overlay: #222b38;
344
+ --sp-surface-hero: linear-gradient(135deg, #401f75 0%, #5d28b8 100%);
345
+ --sp-text-on-page-default: #f7f8fb;
346
+ --sp-text-on-page-muted: #b7c1d4;
347
+ --sp-text-on-page-subtle: #8a96ad;
348
+ --sp-text-on-page-meta: #8a96ad;
349
+ --sp-text-on-surface-default: #eef1f6;
350
+ --sp-text-on-surface-muted: #b7c1d4;
351
+ --sp-text-on-surface-subtle: #8a96ad;
352
+ --sp-text-on-surface-meta: #8a96ad;
353
+ --sp-component-card-text: #eef1f6;
354
+ --sp-component-card-text-muted: #b7c1d4;
355
+ --sp-component-input-text: #eef1f6;
356
+ --sp-component-input-placeholder: #b7c1d4;
357
+ --sp-button-text-default: #eef1f6;
358
+ --sp-button-text-on-primary: #ffffff;
359
+ --sp-badge-neutral-bg: #374253;
360
+ --sp-badge-neutral-text: #eef1f6;
361
+ --sp-badge-info-bg: #0c4a6e;
362
+ --sp-badge-info-text: #e0f2fe;
363
+ --sp-badge-success-bg: #166534;
364
+ --sp-badge-success-text: #dcfce7;
365
+ --sp-badge-warning-bg: #8f5200;
366
+ --sp-badge-warning-text: #fff1c2;
367
+ --sp-badge-danger-bg: #991b1b;
368
+ --sp-badge-danger-text: #fee2e2;
369
+ --sp-icon-box-bg: #222b38;
370
+ --sp-icon-box-border: #374253;
371
+ --sp-icon-box-icon-default: #7dd3fc;
372
+ --sp-icon-box-icon-success: #4ade80;
373
+ --sp-icon-box-icon-warning: #ffc21a;
374
+ --sp-icon-box-icon-danger: #f87171;
375
+ }
1
376
  @layer components {
2
377
 
3
378
  :root {
@@ -39,15 +414,14 @@
39
414
  --sp-component-button-success-bg-disabled: var(--sp-button-success-bgdisabled);
40
415
  --sp-component-button-success-text: var(--sp-button-success-text);
41
416
  --sp-component-button-success-text-disabled: var(--sp-button-success-textdisabled);
42
- /* FLAG: buttons.cta tokens in spectre-tokens v2.x use warning.500 (Gold),
43
- which violates the Aesthetic Audit guardrails. Remaining on accent palette. */
44
- --sp-component-button-cta-bg: var(--sp-color-accent-600);
45
- --sp-component-button-cta-bg-hover: var(--sp-color-accent-700);
46
- --sp-component-button-cta-bg-active: var(--sp-color-accent-800);
47
- --sp-component-button-cta-bg-disabled: var(--sp-color-accent-200);
48
- --sp-component-button-cta-text: var(--sp-color-neutral-50);
49
- --sp-component-button-cta-text-disabled: var(--sp-color-neutral-400);
50
- --sp-component-button-cta-shadow: 0 4px 14px 0 var(--sp-color-accent-500) / 0.39;
417
+ /* CTA button alignment restored to official tokens as they now use the brand palette (Blue). */
418
+ --sp-component-button-cta-bg: var(--sp-button-cta-bg);
419
+ --sp-component-button-cta-bg-hover: var(--sp-button-cta-bghover);
420
+ --sp-component-button-cta-bg-active: var(--sp-button-cta-bgactive);
421
+ --sp-component-button-cta-bg-disabled: var(--sp-button-cta-bgdisabled);
422
+ --sp-component-button-cta-text: var(--sp-button-cta-text);
423
+ --sp-component-button-cta-text-disabled: var(--sp-button-cta-textdisabled);
424
+ --sp-component-button-cta-shadow: var(--sp-button-cta-shadow);
51
425
  --sp-component-button-accent-bg: var(--sp-button-accent-bg);
52
426
  --sp-component-button-accent-bg-hover: var(--sp-button-accent-bghover);
53
427
  --sp-component-button-accent-bg-active: var(--sp-button-accent-bgactive);
@@ -76,6 +450,7 @@
76
450
  --sp-component-input-role-bg: var(--sp-form-default-bg);
77
451
  --sp-component-input-role-text: var(--sp-form-default-text);
78
452
  --sp-component-input-role-placeholder: var(--sp-form-default-placeholder);
453
+ --sp-component-input-role-border-hover: var(--sp-form-hover-border);
79
454
  --sp-component-input-role-border-focus: var(--sp-form-focus-border);
80
455
  --sp-component-input-role-ring: var(--sp-form-focus-ring);
81
456
  --sp-component-input-role-border-error: var(--sp-form-invalid-border);
@@ -109,7 +484,7 @@
109
484
  --sp-component-badge-info-bg: var(--sp-badge-info-bg);
110
485
  --sp-component-badge-info-text: var(--sp-badge-info-text);
111
486
 
112
- /* badge hover states missing from core token exports, mapped to semantic logic */
487
+ /* badge hover states derived from Spectre token semantics */
113
488
  --sp-component-badge-primary-bg-hover: var(--sp-button-primary-bghover);
114
489
  --sp-component-badge-secondary-bg-hover: var(--sp-button-secondary-bghover);
115
490
  --sp-component-badge-success-bg-hover: var(--sp-color-success-200);
@@ -152,10 +527,8 @@
152
527
  /* pricing card roles */
153
528
  --sp-component-pricing-card-bg: var(--sp-surface-card);
154
529
  --sp-component-pricing-card-border: var(--sp-color-neutral-200);
155
- /* FLAG: component.pricingCard.featuredBg in tokens is info.600 (Blue), which clashing
156
- with the warning.500 (Gold) badge. Remaining on neutral-900 to pass Aesthetic Audit. */
157
- --sp-component-pricing-card-featured-bg: var(--sp-color-neutral-900);
158
- --sp-component-pricing-card-featured-text: var(--sp-color-neutral-50);
530
+ --sp-component-pricing-card-featured-bg: var(--sp-color-info-600);
531
+ --sp-component-pricing-card-featured-text: var(--sp-button-text-on-primary);
159
532
  --sp-component-pricing-card-featured-badge-bg: var(--sp-color-warning-500);
160
533
  --sp-component-pricing-card-featured-badge-text: var(--sp-color-neutral-900);
161
534
  --sp-component-pricing-card-price: var(--sp-color-neutral-900);
@@ -168,20 +541,21 @@
168
541
  --sp-component-rating-text: var(--sp-color-neutral-500);
169
542
  }
170
543
 
171
- /* dark mode overrides for complex component tokens not yet exported by spectre-tokens v2.x */
544
+ /* dark mode overrides mapped from Spectre token mode definitions */
172
545
  :root[data-spectre-theme="dark"] {
173
546
  --sp-component-testimonial-bg: var(--sp-color-neutral-800);
174
547
  --sp-component-testimonial-border: var(--sp-color-neutral-700);
175
- --sp-component-testimonial-text: var(--sp-color-neutral-300);
548
+ --sp-component-testimonial-text: var(--sp-color-neutral-200);
176
549
  --sp-component-testimonial-author-name: var(--sp-color-neutral-100);
177
- --sp-component-testimonial-author-title: var(--sp-color-neutral-400);
550
+ --sp-component-testimonial-author-title: var(--sp-color-neutral-300);
178
551
  --sp-component-testimonial-quote-mark: var(--sp-color-neutral-600);
179
552
 
180
553
  --sp-component-pricing-card-bg: var(--sp-color-neutral-800);
181
554
  --sp-component-pricing-card-border: var(--sp-color-neutral-700);
182
555
  --sp-component-pricing-card-price: var(--sp-color-neutral-100);
183
- --sp-component-pricing-card-price-description: var(--sp-color-neutral-400);
556
+ --sp-component-pricing-card-price-description: var(--sp-color-neutral-300);
184
557
 
558
+ --sp-component-rating-star-filled: var(--sp-color-warning-400);
185
559
  --sp-component-rating-star-empty: var(--sp-color-neutral-700);
186
560
  --sp-component-rating-text: var(--sp-color-neutral-400);
187
561
 
@@ -193,11 +567,11 @@
193
567
  --sp-component-badge-danger-text: var(--sp-color-error-100);
194
568
  --sp-component-badge-neutral-bg: var(--sp-color-neutral-700);
195
569
  --sp-component-badge-neutral-text: var(--sp-color-neutral-100);
196
- --sp-component-badge-info-bg: var(--sp-color-info-800);
570
+ --sp-component-badge-info-bg: var(--sp-color-info-900);
197
571
  --sp-component-badge-info-text: var(--sp-color-info-100);
198
572
 
199
573
  --sp-component-badge-success-bg-hover: var(--sp-color-success-700);
200
- --sp-component-badge-warning-bg-hover: var(--sp-color-warning-700);
574
+ --sp-component-badge-warning-bg-hover: var(--sp-color-warning-800);
201
575
  --sp-component-badge-danger-bg-hover: var(--sp-color-error-700);
202
576
  --sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-600);
203
577
  --sp-component-badge-info-bg-hover: var(--sp-color-info-700);
@@ -524,8 +898,14 @@
524
898
  border-radius: var(--sp-radius-pill);
525
899
  }
526
900
 
901
+ .sp-input:hover,
902
+ .sp-input--hover {
903
+ border-color: var(--sp-component-input-role-border-hover);
904
+ }
905
+
527
906
  .sp-input:focus,
528
- .sp-input--focus {
907
+ .sp-input--focus,
908
+ .sp-input.is-focus {
529
909
  border-color: var(--sp-component-input-role-border-focus);
530
910
  box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-component-input-role-ring);
531
911
  outline: none;
@@ -544,11 +924,14 @@
544
924
  color: var(--sp-component-input-role-text);
545
925
  }
546
926
 
927
+ .sp-input:disabled,
928
+ .sp-input[aria-disabled="true"],
547
929
  .sp-input--disabled {
548
930
  background-color: var(--sp-component-input-role-bg-disabled);
549
931
  color: var(--sp-component-input-role-text-disabled);
550
932
  border-color: var(--sp-component-input-role-border-disabled);
551
933
  cursor: not-allowed;
934
+ pointer-events: none;
552
935
  }
553
936
 
554
937
  .sp-input--disabled::placeholder {
@@ -560,6 +943,11 @@
560
943
  box-shadow: none;
561
944
  }
562
945
 
946
+ .sp-input--loading {
947
+ pointer-events: none;
948
+ opacity: var(--sp-opacity-active);
949
+ }
950
+
563
951
  /* CARDS ---------------------------------------------------------------- */
564
952
 
565
953
  .sp-card {
@@ -614,6 +1002,11 @@
614
1002
  pointer-events: none;
615
1003
  }
616
1004
 
1005
+ .sp-card--loading {
1006
+ opacity: var(--sp-opacity-active);
1007
+ pointer-events: none;
1008
+ }
1009
+
617
1010
  .sp-card--interactive {
618
1011
  cursor: pointer;
619
1012
  transition:
@@ -623,7 +1016,11 @@
623
1016
 
624
1017
  .sp-card--interactive:hover,
625
1018
  .sp-card--interactive:focus-visible,
626
- .sp-card--interactive:focus-within {
1019
+ .sp-card--interactive:focus-within,
1020
+ .sp-card--interactive.sp-card--hover,
1021
+ .sp-card--interactive.is-hover,
1022
+ .sp-card--interactive.sp-card--focus,
1023
+ .sp-card--interactive.is-focus {
627
1024
  transform: translateY(calc(var(--sp-component-border-width) * -1));
628
1025
  box-shadow: var(--sp-component-card-shadow-elevated);
629
1026
  }
@@ -668,7 +1065,8 @@
668
1065
  color: var(--sp-component-badge-primary-text);
669
1066
  }
670
1067
 
671
- .sp-badge--primary.sp-badge--interactive:hover {
1068
+ .sp-badge--primary.sp-badge--interactive:hover,
1069
+ .sp-badge--primary.sp-badge--interactive.sp-badge--hover {
672
1070
  background-color: var(--sp-component-badge-primary-bg-hover);
673
1071
  }
674
1072
 
@@ -678,7 +1076,8 @@
678
1076
  border-color: var(--sp-component-badge-secondary-border);
679
1077
  }
680
1078
 
681
- .sp-badge--secondary.sp-badge--interactive:hover {
1079
+ .sp-badge--secondary.sp-badge--interactive:hover,
1080
+ .sp-badge--secondary.sp-badge--interactive.sp-badge--hover {
682
1081
  background-color: var(--sp-component-badge-secondary-bg-hover);
683
1082
  }
684
1083
 
@@ -687,7 +1086,8 @@
687
1086
  color: var(--sp-component-badge-success-text);
688
1087
  }
689
1088
 
690
- .sp-badge--success.sp-badge--interactive:hover {
1089
+ .sp-badge--success.sp-badge--interactive:hover,
1090
+ .sp-badge--success.sp-badge--interactive.sp-badge--hover {
691
1091
  background-color: var(--sp-component-badge-success-bg-hover);
692
1092
  }
693
1093
 
@@ -696,7 +1096,8 @@
696
1096
  color: var(--sp-component-badge-warning-text);
697
1097
  }
698
1098
 
699
- .sp-badge--warning.sp-badge--interactive:hover {
1099
+ .sp-badge--warning.sp-badge--interactive:hover,
1100
+ .sp-badge--warning.sp-badge--interactive.sp-badge--hover {
700
1101
  background-color: var(--sp-component-badge-warning-bg-hover);
701
1102
  }
702
1103
 
@@ -705,7 +1106,8 @@
705
1106
  color: var(--sp-component-badge-danger-text);
706
1107
  }
707
1108
 
708
- .sp-badge--danger.sp-badge--interactive:hover {
1109
+ .sp-badge--danger.sp-badge--interactive:hover,
1110
+ .sp-badge--danger.sp-badge--interactive.sp-badge--hover {
709
1111
  background-color: var(--sp-component-badge-danger-bg-hover);
710
1112
  }
711
1113
 
@@ -714,7 +1116,8 @@
714
1116
  color: var(--sp-component-badge-neutral-text);
715
1117
  }
716
1118
 
717
- .sp-badge--neutral.sp-badge--interactive:hover {
1119
+ .sp-badge--neutral.sp-badge--interactive:hover,
1120
+ .sp-badge--neutral.sp-badge--interactive.sp-badge--hover {
718
1121
  background-color: var(--sp-component-badge-neutral-bg-hover);
719
1122
  }
720
1123
 
@@ -723,7 +1126,8 @@
723
1126
  color: var(--sp-component-badge-info-text);
724
1127
  }
725
1128
 
726
- .sp-badge--info.sp-badge--interactive:hover {
1129
+ .sp-badge--info.sp-badge--interactive:hover,
1130
+ .sp-badge--info.sp-badge--interactive.sp-badge--hover {
727
1131
  background-color: var(--sp-component-badge-info-bg-hover);
728
1132
  }
729
1133
 
@@ -737,6 +1141,11 @@
737
1141
  pointer-events: none;
738
1142
  }
739
1143
 
1144
+ .sp-badge--loading {
1145
+ opacity: var(--sp-opacity-active);
1146
+ pointer-events: none;
1147
+ }
1148
+
740
1149
  /* ICON BOXES ----------------------------------------------------------- */
741
1150
 
742
1151
  .sp-iconbox {
@@ -847,6 +1256,11 @@
847
1256
  pointer-events: none;
848
1257
  }
849
1258
 
1259
+ .sp-iconbox--loading {
1260
+ opacity: var(--sp-opacity-active);
1261
+ pointer-events: none;
1262
+ }
1263
+
850
1264
  /* TESTIMONIALS --------------------------------------------------------- */
851
1265
 
852
1266
  .sp-testimonial {
@@ -859,6 +1273,16 @@
859
1273
  gap: var(--sp-space-24);
860
1274
  }
861
1275
 
1276
+ .sp-testimonial--disabled {
1277
+ opacity: var(--sp-opacity-disabled);
1278
+ pointer-events: none;
1279
+ }
1280
+
1281
+ .sp-testimonial--loading {
1282
+ opacity: var(--sp-opacity-active);
1283
+ pointer-events: none;
1284
+ }
1285
+
862
1286
  .sp-testimonial-quote {
863
1287
  color: var(--sp-component-testimonial-text);
864
1288
  font-size: var(--sp-font-lg-size);
@@ -926,6 +1350,11 @@
926
1350
  pointer-events: none;
927
1351
  }
928
1352
 
1353
+ .sp-pricing-card--loading {
1354
+ opacity: var(--sp-opacity-active);
1355
+ pointer-events: none;
1356
+ }
1357
+
929
1358
  .sp-pricing-card-badge {
930
1359
  position: absolute;
931
1360
  top: var(--sp-space-16);
@@ -972,6 +1401,16 @@
972
1401
  gap: var(--sp-space-8);
973
1402
  }
974
1403
 
1404
+ .sp-rating--disabled {
1405
+ opacity: var(--sp-opacity-disabled);
1406
+ pointer-events: none;
1407
+ }
1408
+
1409
+ .sp-rating--loading {
1410
+ opacity: var(--sp-opacity-active);
1411
+ pointer-events: none;
1412
+ }
1413
+
975
1414
  .sp-rating-stars {
976
1415
  display: flex;
977
1416
  gap: var(--sp-space-4);
@@ -983,7 +1422,7 @@
983
1422
  align-items: center;
984
1423
  justify-content: center;
985
1424
  }
986
-
1425
+
987
1426
  .sp-rating-star--filled {
988
1427
  color: var(--sp-component-rating-star-filled);
989
1428
  }