@phcdevworks/spectre-ui 1.1.1 → 1.2.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.
@@ -1,3 +1,396 @@
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: #4b576a;
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: 600;
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: 700;
182
+ --sp-font-3xl-size: 2.25rem;
183
+ --sp-font-3xl-line-height: 2.75rem;
184
+ --sp-font-3xl-weight: 700;
185
+ --sp-font-4xl-size: 3rem;
186
+ --sp-font-4xl-line-height: 3.5rem;
187
+ --sp-font-4xl-weight: 800;
188
+ --sp-font-5xl-size: 3.75rem;
189
+ --sp-font-5xl-line-height: 4.25rem;
190
+ --sp-font-5xl-weight: 800;
191
+ --sp-font-6xl-size: 4.5rem;
192
+ --sp-font-6xl-line-height: 5rem;
193
+ --sp-font-6xl-weight: 900;
194
+ --sp-font-xs-letter-spacing: 0.02em;
195
+ --sp-text-on-page-default: #141b24;
196
+ --sp-text-on-page-muted: #4b576a;
197
+ --sp-text-on-page-subtle: #657287;
198
+ --sp-text-on-page-meta: #657287;
199
+ --sp-text-on-surface-default: #141b24;
200
+ --sp-text-on-surface-muted: #4b576a;
201
+ --sp-text-on-surface-subtle: #657287;
202
+ --sp-text-on-surface-meta: #657287;
203
+ --sp-badge-neutral-bg: #eef1f6;
204
+ --sp-badge-neutral-text: #374253;
205
+ --sp-badge-info-bg: #e0f2fe;
206
+ --sp-badge-info-text: #075985;
207
+ --sp-badge-success-bg: #dcfce7;
208
+ --sp-badge-success-text: #166534;
209
+ --sp-badge-warning-bg: #fff1c2;
210
+ --sp-badge-warning-text: #8f5200;
211
+ --sp-badge-danger-bg: #fee2e2;
212
+ --sp-badge-danger-text: #991b1b;
213
+ --sp-icon-box-bg: #ffffff;
214
+ --sp-icon-box-border: #d9dfeb;
215
+ --sp-icon-box-icon-default: #0369a1;
216
+ --sp-icon-box-icon-success: #16a34a;
217
+ --sp-icon-box-icon-warning: #d48806;
218
+ --sp-icon-box-icon-danger: #dc2626;
219
+ --sp-shadow-none: none;
220
+ --sp-shadow-sm: 0 1px 2px 0 rgba(34, 43, 56, 0.06);
221
+ --sp-shadow-md: 0 2px 6px -1px rgba(34, 43, 56, 0.08);
222
+ --sp-shadow-lg: 0 6px 16px -4px rgba(34, 43, 56, 0.12);
223
+ --sp-breakpoint-sm: 640px;
224
+ --sp-breakpoint-md: 768px;
225
+ --sp-breakpoint-lg: 1024px;
226
+ --sp-breakpoint-xl: 1280px;
227
+ --sp-breakpoint-2xl: 1536px;
228
+ --sp-z-index-base: 0;
229
+ --sp-z-index-dropdown: 1000;
230
+ --sp-z-index-sticky: 1100;
231
+ --sp-z-index-fixed: 1200;
232
+ --sp-z-index-overlay: 1300;
233
+ --sp-z-index-modal: 1400;
234
+ --sp-z-index-popover: 1500;
235
+ --sp-z-index-tooltip: 1600;
236
+ --sp-duration-instant: 75ms;
237
+ --sp-duration-fast: 150ms;
238
+ --sp-duration-base: 200ms;
239
+ --sp-duration-moderate: 300ms;
240
+ --sp-duration-slow: 500ms;
241
+ --sp-duration-slower: 700ms;
242
+ --sp-easing-linear: linear;
243
+ --sp-easing-in: cubic-bezier(0.4, 0, 1, 1);
244
+ --sp-easing-out: cubic-bezier(0, 0, 0.2, 1);
245
+ --sp-easing-inout: cubic-bezier(0.4, 0, 0.2, 1);
246
+ --sp-easing-spring: cubic-bezier(0.4, 0, 0.2, 1);
247
+ --sp-opacity-disabled: 0.38;
248
+ --sp-opacity-hover: 0.92;
249
+ --sp-opacity-active: 0.84;
250
+ --sp-opacity-focus: 1;
251
+ --sp-opacity-overlay: 0.5;
252
+ --sp-opacity-tooltip: 0.95;
253
+ --sp-focus-ring-width: 2px;
254
+ --sp-focus-ring-offset: 2px;
255
+ --sp-focus-ring-style: solid;
256
+ --sp-min-touch-target: 44px;
257
+ --sp-min-text-size: 16px;
258
+ --sp-button-primary-bg: #0369a1;
259
+ --sp-button-primary-bghover: #075985;
260
+ --sp-button-primary-bgactive: #0c4a6e;
261
+ --sp-button-primary-bgdisabled: #d9dfeb;
262
+ --sp-button-primary-text: #ffffff;
263
+ --sp-button-primary-textdisabled: #8a96ad;
264
+ --sp-button-primary-focusring: rgba(14, 165, 233, 0.4);
265
+ --sp-button-primary-focusvisible: {colors.info.500} / 0.4;
266
+ --sp-button-secondary-bg: #ffffff;
267
+ --sp-button-secondary-bghover: #f7f8fb;
268
+ --sp-button-secondary-bgactive: #eef1f6;
269
+ --sp-button-secondary-bgdisabled: #f7f8fb;
270
+ --sp-button-secondary-text: #075985;
271
+ --sp-button-secondary-textdisabled: #8a96ad;
272
+ --sp-button-secondary-border: #075985;
273
+ --sp-button-secondary-borderdisabled: #d9dfeb;
274
+ --sp-button-secondary-focusring: rgba(14, 165, 233, 0.4);
275
+ --sp-button-secondary-focusvisible: {colors.info.500} / 0.4;
276
+ --sp-button-ghost-bg: transparent;
277
+ --sp-button-ghost-bghover: #f0f9ff;
278
+ --sp-button-ghost-bgactive: #e0f2fe;
279
+ --sp-button-ghost-bgdisabled: transparent;
280
+ --sp-button-ghost-text: #075985;
281
+ --sp-button-ghost-textdisabled: #8a96ad;
282
+ --sp-button-ghost-focusring: rgba(14, 165, 233, 0.4);
283
+ --sp-button-ghost-focusvisible: {colors.info.500} / 0.4;
284
+ --sp-button-danger-bg: #dc2626;
285
+ --sp-button-danger-bghover: #b91c1c;
286
+ --sp-button-danger-bgactive: #991b1b;
287
+ --sp-button-danger-bgdisabled: #fecaca;
288
+ --sp-button-danger-text: #ffffff;
289
+ --sp-button-danger-textdisabled: #8a96ad;
290
+ --sp-button-danger-focusring: rgba(239, 68, 68, 0.4);
291
+ --sp-button-success-bg: #15803d;
292
+ --sp-button-success-bghover: #166534;
293
+ --sp-button-success-bgactive: #14532d;
294
+ --sp-button-success-bgdisabled: #bbf7d0;
295
+ --sp-button-success-text: #ffffff;
296
+ --sp-button-success-textdisabled: #8a96ad;
297
+ --sp-button-success-focusring: rgba(34, 197, 94, 0.4);
298
+ --sp-button-cta-bg: #1f57db;
299
+ --sp-button-cta-bghover: #1946b4;
300
+ --sp-button-cta-bgactive: #173b8f;
301
+ --sp-button-cta-bgdisabled: #b9d2ff;
302
+ --sp-button-cta-text: #ffffff;
303
+ --sp-button-cta-textdisabled: #8a96ad;
304
+ --sp-button-cta-shadow: 0 4px 14px 0 rgba(51, 109, 244, 0.39);
305
+ --sp-button-cta-focusring: rgba(51, 109, 244, 0.4);
306
+ --sp-button-accent-bg: #7135dd;
307
+ --sp-button-accent-bghover: #5d28b8;
308
+ --sp-button-accent-bgactive: #4d2393;
309
+ --sp-button-accent-bgdisabled: #ddccff;
310
+ --sp-button-accent-text: #ffffff;
311
+ --sp-button-accent-textdisabled: #8a96ad;
312
+ --sp-button-accent-focusring: rgba(133, 79, 247, 0.4);
313
+ --sp-button-accent-focusvisible: {colors.accent.500} / 0.4;
314
+ --sp-form-default-bg: #ffffff;
315
+ --sp-form-default-border: #b7c1d4;
316
+ --sp-form-default-text: #141b24;
317
+ --sp-form-default-placeholder: #657287;
318
+ --sp-form-hover-border: #0ea5e9;
319
+ --sp-form-focus-border: #0ea5e9;
320
+ --sp-form-focus-ring: #0ea5e9;
321
+ --sp-form-focusvisible-border: {colors.info.500};
322
+ --sp-form-focusvisible-ring: {colors.info.500};
323
+ --sp-form-valid-border: #22c55e;
324
+ --sp-form-valid-bg: #f0fdf4;
325
+ --sp-form-valid-text: #15803d;
326
+ --sp-form-invalid-border: #ef4444;
327
+ --sp-form-invalid-bg: #fef2f2;
328
+ --sp-form-invalid-text: #b91c1c;
329
+ --sp-form-disabled-bg: #f7f8fb;
330
+ --sp-form-disabled-border: #d9dfeb;
331
+ --sp-form-disabled-text: #8a96ad;
332
+ --sp-animation-fadein-duration: 200ms;
333
+ --sp-animation-fadein-easing: cubic-bezier(0, 0, 0.2, 1);
334
+ --sp-animation-fadein-keyframes: fade-in;
335
+ --sp-animation-fadeout-duration: 150ms;
336
+ --sp-animation-fadeout-easing: cubic-bezier(0.4, 0, 1, 1);
337
+ --sp-animation-fadeout-keyframes: fade-out;
338
+ --sp-animation-slideup-duration: 300ms;
339
+ --sp-animation-slideup-easing: cubic-bezier(0, 0, 0.2, 1);
340
+ --sp-animation-slideup-keyframes: slide-up;
341
+ --sp-animation-slidedown-duration: 300ms;
342
+ --sp-animation-slidedown-easing: cubic-bezier(0, 0, 0.2, 1);
343
+ --sp-animation-slidedown-keyframes: slide-down;
344
+ --sp-animation-scalein-duration: 200ms;
345
+ --sp-animation-scalein-easing: cubic-bezier(0.34, 1.56, 0.64, 1);
346
+ --sp-animation-scalein-keyframes: scale-in;
347
+ --sp-animation-bounce-duration: 300ms;
348
+ --sp-animation-bounce-easing: cubic-bezier(0.4, 0, 0.2, 1);
349
+ --sp-animation-bounce-keyframes: bounce;
350
+ --sp-animation-shake-duration: 250ms;
351
+ --sp-animation-shake-easing: cubic-bezier(0.4, 0, 0.2, 1);
352
+ --sp-animation-shake-keyframes: shake;
353
+ --sp-animation-pulse-duration: 1200ms;
354
+ --sp-animation-pulse-easing: cubic-bezier(0.4, 0, 0.2, 1);
355
+ --sp-animation-pulse-keyframes: pulse;
356
+ }
357
+ :root[data-spectre-theme="dark"] {
358
+ --sp-surface-page: #141b24;
359
+ --sp-surface-card: #222b38;
360
+ --sp-surface-input: #374253;
361
+ --sp-surface-overlay: #222b38;
362
+ --sp-surface-hero: linear-gradient(135deg, #401f75 0%, #5d28b8 100%);
363
+ --sp-text-on-page-default: #f7f8fb;
364
+ --sp-text-on-page-muted: #b7c1d4;
365
+ --sp-text-on-page-subtle: #8a96ad;
366
+ --sp-text-on-page-meta: #8a96ad;
367
+ --sp-text-on-surface-default: #eef1f6;
368
+ --sp-text-on-surface-muted: #b7c1d4;
369
+ --sp-text-on-surface-subtle: #8a96ad;
370
+ --sp-text-on-surface-meta: #8a96ad;
371
+ --sp-component-card-text: #eef1f6;
372
+ --sp-component-card-text-muted: #b7c1d4;
373
+ --sp-component-input-text: #eef1f6;
374
+ --sp-component-input-placeholder: #b7c1d4;
375
+ --sp-button-text-default: #eef1f6;
376
+ --sp-button-text-on-primary: #ffffff;
377
+ --sp-badge-neutral-bg: #374253;
378
+ --sp-badge-neutral-text: #eef1f6;
379
+ --sp-badge-info-bg: #0c4a6e;
380
+ --sp-badge-info-text: #e0f2fe;
381
+ --sp-badge-success-bg: #166534;
382
+ --sp-badge-success-text: #dcfce7;
383
+ --sp-badge-warning-bg: #8f5200;
384
+ --sp-badge-warning-text: #fff1c2;
385
+ --sp-badge-danger-bg: #991b1b;
386
+ --sp-badge-danger-text: #fee2e2;
387
+ --sp-icon-box-bg: #222b38;
388
+ --sp-icon-box-border: #374253;
389
+ --sp-icon-box-icon-default: #38bdf8;
390
+ --sp-icon-box-icon-success: #4ade80;
391
+ --sp-icon-box-icon-warning: #ffc21a;
392
+ --sp-icon-box-icon-danger: #f87171;
393
+ }
1
394
  @layer components {
2
395
 
3
396
  :root {
@@ -39,15 +432,14 @@
39
432
  --sp-component-button-success-bg-disabled: var(--sp-button-success-bgdisabled);
40
433
  --sp-component-button-success-text: var(--sp-button-success-text);
41
434
  --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;
435
+ /* CTA button alignment restored to official tokens as they now use the brand palette (Blue). */
436
+ --sp-component-button-cta-bg: var(--sp-button-cta-bg);
437
+ --sp-component-button-cta-bg-hover: var(--sp-button-cta-bghover);
438
+ --sp-component-button-cta-bg-active: var(--sp-button-cta-bgactive);
439
+ --sp-component-button-cta-bg-disabled: var(--sp-button-cta-bgdisabled);
440
+ --sp-component-button-cta-text: var(--sp-button-cta-text);
441
+ --sp-component-button-cta-text-disabled: var(--sp-button-cta-textdisabled);
442
+ --sp-component-button-cta-shadow: var(--sp-button-cta-shadow);
51
443
  --sp-component-button-accent-bg: var(--sp-button-accent-bg);
52
444
  --sp-component-button-accent-bg-hover: var(--sp-button-accent-bghover);
53
445
  --sp-component-button-accent-bg-active: var(--sp-button-accent-bgactive);
@@ -76,6 +468,7 @@
76
468
  --sp-component-input-role-bg: var(--sp-form-default-bg);
77
469
  --sp-component-input-role-text: var(--sp-form-default-text);
78
470
  --sp-component-input-role-placeholder: var(--sp-form-default-placeholder);
471
+ --sp-component-input-role-border-hover: var(--sp-form-hover-border);
79
472
  --sp-component-input-role-border-focus: var(--sp-form-focus-border);
80
473
  --sp-component-input-role-ring: var(--sp-form-focus-ring);
81
474
  --sp-component-input-role-border-error: var(--sp-form-invalid-border);
@@ -109,7 +502,7 @@
109
502
  --sp-component-badge-info-bg: var(--sp-badge-info-bg);
110
503
  --sp-component-badge-info-text: var(--sp-badge-info-text);
111
504
 
112
- /* badge hover states missing from core token exports, mapped to semantic logic */
505
+ /* badge hover states derived from Spectre token semantics */
113
506
  --sp-component-badge-primary-bg-hover: var(--sp-button-primary-bghover);
114
507
  --sp-component-badge-secondary-bg-hover: var(--sp-button-secondary-bghover);
115
508
  --sp-component-badge-success-bg-hover: var(--sp-color-success-200);
@@ -152,10 +545,8 @@
152
545
  /* pricing card roles */
153
546
  --sp-component-pricing-card-bg: var(--sp-surface-card);
154
547
  --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);
548
+ --sp-component-pricing-card-featured-bg: var(--sp-color-info-600);
549
+ --sp-component-pricing-card-featured-text: var(--sp-button-text-on-primary);
159
550
  --sp-component-pricing-card-featured-badge-bg: var(--sp-color-warning-500);
160
551
  --sp-component-pricing-card-featured-badge-text: var(--sp-color-neutral-900);
161
552
  --sp-component-pricing-card-price: var(--sp-color-neutral-900);
@@ -166,22 +557,26 @@
166
557
  --sp-component-rating-star-filled: var(--sp-color-warning-500);
167
558
  --sp-component-rating-star-empty: var(--sp-color-neutral-200);
168
559
  --sp-component-rating-text: var(--sp-color-neutral-500);
560
+ --sp-component-rating-size-sm: var(--sp-font-sm-size);
561
+ --sp-component-rating-size-md: var(--sp-font-md-size);
562
+ --sp-component-rating-size-lg: var(--sp-font-lg-size);
169
563
  }
170
564
 
171
- /* dark mode overrides for complex component tokens not yet exported by spectre-tokens v2.x */
565
+ /* dark mode overrides mapped from Spectre token mode definitions */
172
566
  :root[data-spectre-theme="dark"] {
173
567
  --sp-component-testimonial-bg: var(--sp-color-neutral-800);
174
568
  --sp-component-testimonial-border: var(--sp-color-neutral-700);
175
- --sp-component-testimonial-text: var(--sp-color-neutral-300);
569
+ --sp-component-testimonial-text: var(--sp-color-neutral-200);
176
570
  --sp-component-testimonial-author-name: var(--sp-color-neutral-100);
177
- --sp-component-testimonial-author-title: var(--sp-color-neutral-400);
571
+ --sp-component-testimonial-author-title: var(--sp-color-neutral-300);
178
572
  --sp-component-testimonial-quote-mark: var(--sp-color-neutral-600);
179
573
 
180
574
  --sp-component-pricing-card-bg: var(--sp-color-neutral-800);
181
575
  --sp-component-pricing-card-border: var(--sp-color-neutral-700);
182
576
  --sp-component-pricing-card-price: var(--sp-color-neutral-100);
183
- --sp-component-pricing-card-price-description: var(--sp-color-neutral-400);
577
+ --sp-component-pricing-card-price-description: var(--sp-color-neutral-300);
184
578
 
579
+ --sp-component-rating-star-filled: var(--sp-color-warning-400);
185
580
  --sp-component-rating-star-empty: var(--sp-color-neutral-700);
186
581
  --sp-component-rating-text: var(--sp-color-neutral-400);
187
582
 
@@ -193,14 +588,20 @@
193
588
  --sp-component-badge-danger-text: var(--sp-color-error-100);
194
589
  --sp-component-badge-neutral-bg: var(--sp-color-neutral-700);
195
590
  --sp-component-badge-neutral-text: var(--sp-color-neutral-100);
196
- --sp-component-badge-info-bg: var(--sp-color-info-800);
591
+ --sp-component-badge-info-bg: var(--sp-color-info-900);
197
592
  --sp-component-badge-info-text: var(--sp-color-info-100);
198
593
 
199
594
  --sp-component-badge-success-bg-hover: var(--sp-color-success-700);
200
- --sp-component-badge-warning-bg-hover: var(--sp-color-warning-700);
595
+ --sp-component-badge-warning-bg-hover: var(--sp-color-warning-800);
201
596
  --sp-component-badge-danger-bg-hover: var(--sp-color-error-700);
202
597
  --sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-600);
203
598
  --sp-component-badge-info-bg-hover: var(--sp-color-info-700);
599
+
600
+ --sp-component-iconbox-primary-bg: var(--sp-color-brand-900);
601
+ --sp-component-iconbox-success-bg: var(--sp-color-success-900);
602
+ --sp-component-iconbox-warning-bg: var(--sp-color-warning-900);
603
+ --sp-component-iconbox-danger-bg: var(--sp-color-error-900);
604
+ --sp-component-iconbox-info-bg: var(--sp-color-info-900);
204
605
  }
205
606
 
206
607
  /* BUTTONS -------------------------------------------------------------- */
@@ -240,6 +641,13 @@
240
641
  opacity: var(--sp-opacity-active);
241
642
  }
242
643
 
644
+ .sp-btn:focus-visible,
645
+ .sp-btn--focus,
646
+ .sp-btn.is-focus {
647
+ outline: none;
648
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
649
+ }
650
+
243
651
  .sp-btn--full {
244
652
  width: 100%;
245
653
  }
@@ -524,8 +932,14 @@
524
932
  border-radius: var(--sp-radius-pill);
525
933
  }
526
934
 
935
+ .sp-input:hover,
936
+ .sp-input--hover {
937
+ border-color: var(--sp-component-input-role-border-hover);
938
+ }
939
+
527
940
  .sp-input:focus,
528
- .sp-input--focus {
941
+ .sp-input--focus,
942
+ .sp-input.is-focus {
529
943
  border-color: var(--sp-component-input-role-border-focus);
530
944
  box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-component-input-role-ring);
531
945
  outline: none;
@@ -544,11 +958,14 @@
544
958
  color: var(--sp-component-input-role-text);
545
959
  }
546
960
 
961
+ .sp-input:disabled,
962
+ .sp-input[aria-disabled="true"],
547
963
  .sp-input--disabled {
548
964
  background-color: var(--sp-component-input-role-bg-disabled);
549
965
  color: var(--sp-component-input-role-text-disabled);
550
966
  border-color: var(--sp-component-input-role-border-disabled);
551
967
  cursor: not-allowed;
968
+ pointer-events: none;
552
969
  }
553
970
 
554
971
  .sp-input--disabled::placeholder {
@@ -619,6 +1036,11 @@
619
1036
  pointer-events: none;
620
1037
  }
621
1038
 
1039
+ .sp-card--loading {
1040
+ opacity: var(--sp-opacity-active);
1041
+ pointer-events: none;
1042
+ }
1043
+
622
1044
  .sp-card--interactive {
623
1045
  cursor: pointer;
624
1046
  transition:
@@ -628,7 +1050,11 @@
628
1050
 
629
1051
  .sp-card--interactive:hover,
630
1052
  .sp-card--interactive:focus-visible,
631
- .sp-card--interactive:focus-within {
1053
+ .sp-card--interactive:focus-within,
1054
+ .sp-card--interactive.sp-card--hover,
1055
+ .sp-card--interactive.is-hover,
1056
+ .sp-card--interactive.sp-card--focus,
1057
+ .sp-card--interactive.is-focus {
632
1058
  transform: translateY(calc(var(--sp-component-border-width) * -1));
633
1059
  box-shadow: var(--sp-component-card-shadow-elevated);
634
1060
  }
@@ -673,7 +1099,9 @@
673
1099
  color: var(--sp-component-badge-primary-text);
674
1100
  }
675
1101
 
676
- .sp-badge--primary.sp-badge--interactive:hover {
1102
+ .sp-badge--primary.sp-badge--interactive:hover,
1103
+ .sp-badge--primary.sp-badge--interactive.sp-badge--hover,
1104
+ .sp-badge--primary.sp-badge--interactive.is-hover {
677
1105
  background-color: var(--sp-component-badge-primary-bg-hover);
678
1106
  }
679
1107
 
@@ -683,7 +1111,9 @@
683
1111
  border-color: var(--sp-component-badge-secondary-border);
684
1112
  }
685
1113
 
686
- .sp-badge--secondary.sp-badge--interactive:hover {
1114
+ .sp-badge--secondary.sp-badge--interactive:hover,
1115
+ .sp-badge--secondary.sp-badge--interactive.sp-badge--hover,
1116
+ .sp-badge--secondary.sp-badge--interactive.is-hover {
687
1117
  background-color: var(--sp-component-badge-secondary-bg-hover);
688
1118
  }
689
1119
 
@@ -692,7 +1122,9 @@
692
1122
  color: var(--sp-component-badge-success-text);
693
1123
  }
694
1124
 
695
- .sp-badge--success.sp-badge--interactive:hover {
1125
+ .sp-badge--success.sp-badge--interactive:hover,
1126
+ .sp-badge--success.sp-badge--interactive.sp-badge--hover,
1127
+ .sp-badge--success.sp-badge--interactive.is-hover {
696
1128
  background-color: var(--sp-component-badge-success-bg-hover);
697
1129
  }
698
1130
 
@@ -701,7 +1133,9 @@
701
1133
  color: var(--sp-component-badge-warning-text);
702
1134
  }
703
1135
 
704
- .sp-badge--warning.sp-badge--interactive:hover {
1136
+ .sp-badge--warning.sp-badge--interactive:hover,
1137
+ .sp-badge--warning.sp-badge--interactive.sp-badge--hover,
1138
+ .sp-badge--warning.sp-badge--interactive.is-hover {
705
1139
  background-color: var(--sp-component-badge-warning-bg-hover);
706
1140
  }
707
1141
 
@@ -710,7 +1144,9 @@
710
1144
  color: var(--sp-component-badge-danger-text);
711
1145
  }
712
1146
 
713
- .sp-badge--danger.sp-badge--interactive:hover {
1147
+ .sp-badge--danger.sp-badge--interactive:hover,
1148
+ .sp-badge--danger.sp-badge--interactive.sp-badge--hover,
1149
+ .sp-badge--danger.sp-badge--interactive.is-hover {
714
1150
  background-color: var(--sp-component-badge-danger-bg-hover);
715
1151
  }
716
1152
 
@@ -719,7 +1155,9 @@
719
1155
  color: var(--sp-component-badge-neutral-text);
720
1156
  }
721
1157
 
722
- .sp-badge--neutral.sp-badge--interactive:hover {
1158
+ .sp-badge--neutral.sp-badge--interactive:hover,
1159
+ .sp-badge--neutral.sp-badge--interactive.sp-badge--hover,
1160
+ .sp-badge--neutral.sp-badge--interactive.is-hover {
723
1161
  background-color: var(--sp-component-badge-neutral-bg-hover);
724
1162
  }
725
1163
 
@@ -728,13 +1166,33 @@
728
1166
  color: var(--sp-component-badge-info-text);
729
1167
  }
730
1168
 
731
- .sp-badge--info.sp-badge--interactive:hover {
1169
+ .sp-badge--info.sp-badge--interactive:hover,
1170
+ .sp-badge--info.sp-badge--interactive.sp-badge--hover,
1171
+ .sp-badge--info.sp-badge--interactive.is-hover {
732
1172
  background-color: var(--sp-component-badge-info-bg-hover);
733
1173
  }
734
1174
 
735
1175
  .sp-badge--interactive {
736
1176
  cursor: pointer;
737
- transition: background-color var(--sp-duration-fast) var(--sp-easing-out);
1177
+ transition:
1178
+ background-color var(--sp-duration-fast) var(--sp-easing-out),
1179
+ color var(--sp-duration-fast) var(--sp-easing-out),
1180
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1181
+ border-color var(--sp-duration-fast) var(--sp-easing-out),
1182
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
1183
+ }
1184
+
1185
+ .sp-badge--interactive:active,
1186
+ .sp-badge--interactive.sp-badge--active,
1187
+ .sp-badge--interactive.is-active {
1188
+ opacity: var(--sp-opacity-active);
1189
+ }
1190
+
1191
+ .sp-badge--interactive:focus-visible,
1192
+ .sp-badge--interactive.sp-badge--focus,
1193
+ .sp-badge--interactive.is-focus {
1194
+ outline: none;
1195
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
738
1196
  }
739
1197
 
740
1198
  .sp-badge--disabled {
@@ -759,6 +1217,12 @@
759
1217
  font-family: var(--sp-font-family-sans);
760
1218
  font-weight: var(--sp-font-md-weight);
761
1219
  line-height: 0;
1220
+ transition:
1221
+ background-color var(--sp-duration-fast) var(--sp-easing-out),
1222
+ color var(--sp-duration-fast) var(--sp-easing-out),
1223
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1224
+ border-color var(--sp-duration-fast) var(--sp-easing-out),
1225
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
762
1226
  }
763
1227
 
764
1228
  /* Harden icon rendering:
@@ -852,9 +1316,35 @@
852
1316
  color: var(--sp-component-iconbox-info-text);
853
1317
  }
854
1318
 
1319
+ .sp-iconbox--interactive {
1320
+ cursor: pointer;
1321
+ }
1322
+
1323
+ .sp-iconbox--interactive:hover,
1324
+ .sp-iconbox--interactive.sp-iconbox--hover,
1325
+ .sp-iconbox--interactive.is-hover {
1326
+ opacity: var(--sp-opacity-hover);
1327
+ }
1328
+
1329
+ .sp-iconbox--interactive:active,
1330
+ .sp-iconbox--interactive.sp-iconbox--active,
1331
+ .sp-iconbox--interactive.is-active {
1332
+ opacity: var(--sp-opacity-active);
1333
+ }
1334
+
1335
+ .sp-iconbox--interactive:focus-visible,
1336
+ .sp-iconbox--interactive.sp-iconbox--focus,
1337
+ .sp-iconbox--interactive.is-focus {
1338
+ outline: none;
1339
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
1340
+ }
1341
+
1342
+ .sp-iconbox:disabled,
1343
+ .sp-iconbox[aria-disabled="true"],
855
1344
  .sp-iconbox--disabled {
856
1345
  opacity: var(--sp-opacity-disabled);
857
1346
  pointer-events: none;
1347
+ cursor: not-allowed;
858
1348
  }
859
1349
 
860
1350
  .sp-iconbox--loading {
@@ -951,6 +1441,11 @@
951
1441
  pointer-events: none;
952
1442
  }
953
1443
 
1444
+ .sp-pricing-card--loading {
1445
+ opacity: var(--sp-opacity-active);
1446
+ pointer-events: none;
1447
+ }
1448
+
954
1449
  .sp-pricing-card-badge {
955
1450
  position: absolute;
956
1451
  top: var(--sp-space-16);
@@ -995,6 +1490,19 @@
995
1490
  display: inline-flex;
996
1491
  align-items: center;
997
1492
  gap: var(--sp-space-8);
1493
+ font-size: var(--sp-component-rating-size-md);
1494
+ }
1495
+
1496
+ .sp-rating--sm {
1497
+ font-size: var(--sp-component-rating-size-sm);
1498
+ }
1499
+
1500
+ .sp-rating--md {
1501
+ font-size: var(--sp-component-rating-size-md);
1502
+ }
1503
+
1504
+ .sp-rating--lg {
1505
+ font-size: var(--sp-component-rating-size-lg);
998
1506
  }
999
1507
 
1000
1508
  .sp-rating--disabled {