@phcdevworks/spectre-ui 1.1.2 → 1.3.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
@@ -7,17 +7,20 @@
7
7
  --sp-surface-card: #ffffff;
8
8
  --sp-surface-input: #ffffff;
9
9
  --sp-surface-overlay: rgba(20, 27, 36, 0.6);
10
+ --sp-surface-alternate: #eef1f6;
10
11
  --sp-surface-hero: linear-gradient(135deg, #5b6ee1 0%, #6f3fd7 100%);
11
12
  --sp-text-on-page-default: #141b24;
12
13
  --sp-text-on-page-muted: #4b576a;
13
14
  --sp-text-on-page-subtle: #657287;
14
15
  --sp-text-on-page-meta: #657287;
16
+ --sp-text-on-page-brand: #1f57db;
15
17
  --sp-text-on-surface-default: #141b24;
16
18
  --sp-text-on-surface-muted: #4b576a;
17
19
  --sp-text-on-surface-subtle: #657287;
18
20
  --sp-text-on-surface-meta: #657287;
21
+ --sp-text-on-surface-brand: #1f57db;
19
22
  --sp-component-card-text: #141b24;
20
- --sp-component-card-text-muted: #657287;
23
+ --sp-component-card-text-muted: #4b576a;
21
24
  --sp-component-input-text: #141b24;
22
25
  --sp-component-input-placeholder: #657287;
23
26
  --sp-button-text-default: #141b24;
@@ -114,20 +117,8 @@
114
117
  --sp-color-focus-primary: #336df4;
115
118
  --sp-color-focus-error: #ef4444;
116
119
  --sp-color-focus-info: #0369a1;
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;
120
+ --sp-color-white: #ffffff;
121
+ --sp-color-black: #000000;
131
122
  --sp-space-0: 0rem;
132
123
  --sp-space-4: 0.25rem;
133
124
  --sp-space-8: 0.5rem;
@@ -176,13 +167,25 @@
176
167
  --sp-font-md-weight: 500;
177
168
  --sp-font-lg-size: 1.25rem;
178
169
  --sp-font-lg-line-height: 2rem;
179
- --sp-font-lg-weight: 500;
170
+ --sp-font-lg-weight: 600;
180
171
  --sp-font-xl-size: 1.5rem;
181
172
  --sp-font-xl-line-height: 2.125rem;
182
173
  --sp-font-xl-weight: 600;
183
174
  --sp-font-2xl-size: 1.875rem;
184
175
  --sp-font-2xl-line-height: 2.5rem;
185
- --sp-font-2xl-weight: 600;
176
+ --sp-font-2xl-weight: 700;
177
+ --sp-font-3xl-size: 2.25rem;
178
+ --sp-font-3xl-line-height: 2.75rem;
179
+ --sp-font-3xl-weight: 700;
180
+ --sp-font-4xl-size: 3rem;
181
+ --sp-font-4xl-line-height: 3.5rem;
182
+ --sp-font-4xl-weight: 800;
183
+ --sp-font-5xl-size: 3.75rem;
184
+ --sp-font-5xl-line-height: 4.25rem;
185
+ --sp-font-5xl-weight: 800;
186
+ --sp-font-6xl-size: 4.5rem;
187
+ --sp-font-6xl-line-height: 5rem;
188
+ --sp-font-6xl-weight: 900;
186
189
  --sp-font-xs-letter-spacing: 0.02em;
187
190
  --sp-text-on-page-default: #141b24;
188
191
  --sp-text-on-page-muted: #4b576a;
@@ -254,6 +257,7 @@
254
257
  --sp-button-primary-text: #ffffff;
255
258
  --sp-button-primary-textdisabled: #8a96ad;
256
259
  --sp-button-primary-focusring: rgba(14, 165, 233, 0.4);
260
+ --sp-button-primary-focusvisible: rgba(14, 165, 233, 0.4);
257
261
  --sp-button-secondary-bg: #ffffff;
258
262
  --sp-button-secondary-bghover: #f7f8fb;
259
263
  --sp-button-secondary-bgactive: #eef1f6;
@@ -263,6 +267,7 @@
263
267
  --sp-button-secondary-border: #075985;
264
268
  --sp-button-secondary-borderdisabled: #d9dfeb;
265
269
  --sp-button-secondary-focusring: rgba(14, 165, 233, 0.4);
270
+ --sp-button-secondary-focusvisible: rgba(14, 165, 233, 0.4);
266
271
  --sp-button-ghost-bg: transparent;
267
272
  --sp-button-ghost-bghover: #f0f9ff;
268
273
  --sp-button-ghost-bgactive: #e0f2fe;
@@ -270,6 +275,7 @@
270
275
  --sp-button-ghost-text: #075985;
271
276
  --sp-button-ghost-textdisabled: #8a96ad;
272
277
  --sp-button-ghost-focusring: rgba(14, 165, 233, 0.4);
278
+ --sp-button-ghost-focusvisible: rgba(14, 165, 233, 0.4);
273
279
  --sp-button-danger-bg: #dc2626;
274
280
  --sp-button-danger-bghover: #b91c1c;
275
281
  --sp-button-danger-bgactive: #991b1b;
@@ -299,6 +305,7 @@
299
305
  --sp-button-accent-text: #ffffff;
300
306
  --sp-button-accent-textdisabled: #8a96ad;
301
307
  --sp-button-accent-focusring: rgba(133, 79, 247, 0.4);
308
+ --sp-button-accent-focusvisible: rgba(133, 79, 247, 0.4);
302
309
  --sp-form-default-bg: #ffffff;
303
310
  --sp-form-default-border: #b7c1d4;
304
311
  --sp-form-default-text: #141b24;
@@ -306,6 +313,8 @@
306
313
  --sp-form-hover-border: #0ea5e9;
307
314
  --sp-form-focus-border: #0ea5e9;
308
315
  --sp-form-focus-ring: #0ea5e9;
316
+ --sp-form-focusvisible-border: #0ea5e9;
317
+ --sp-form-focusvisible-ring: #0ea5e9;
309
318
  --sp-form-valid-border: #22c55e;
310
319
  --sp-form-valid-bg: #f0fdf4;
311
320
  --sp-form-valid-text: #15803d;
@@ -345,15 +354,18 @@
345
354
  --sp-surface-card: #222b38;
346
355
  --sp-surface-input: #374253;
347
356
  --sp-surface-overlay: #222b38;
348
- --sp-surface-hero: linear-gradient(135deg, #401f75 0%, #5d28b8 100%);
357
+ --sp-surface-alternate: #222b38;
358
+ --sp-surface-hero: linear-gradient(135deg, #5d28b8 0%, #401f75 100%);
349
359
  --sp-text-on-page-default: #f7f8fb;
350
360
  --sp-text-on-page-muted: #b7c1d4;
351
361
  --sp-text-on-page-subtle: #8a96ad;
352
362
  --sp-text-on-page-meta: #8a96ad;
363
+ --sp-text-on-page-brand: #5a92ff;
353
364
  --sp-text-on-surface-default: #eef1f6;
354
365
  --sp-text-on-surface-muted: #b7c1d4;
355
366
  --sp-text-on-surface-subtle: #8a96ad;
356
367
  --sp-text-on-surface-meta: #8a96ad;
368
+ --sp-text-on-surface-brand: #5a92ff;
357
369
  --sp-component-card-text: #eef1f6;
358
370
  --sp-component-card-text-muted: #b7c1d4;
359
371
  --sp-component-input-text: #eef1f6;
@@ -372,7 +384,7 @@
372
384
  --sp-badge-danger-text: #fee2e2;
373
385
  --sp-icon-box-bg: #222b38;
374
386
  --sp-icon-box-border: #374253;
375
- --sp-icon-box-icon-default: #7dd3fc;
387
+ --sp-icon-box-icon-default: #38bdf8;
376
388
  --sp-icon-box-icon-success: #4ade80;
377
389
  --sp-icon-box-icon-warning: #ffc21a;
378
390
  --sp-icon-box-icon-danger: #f87171;
@@ -385,13 +397,14 @@
385
397
  box-sizing: border-box;
386
398
  }
387
399
 
388
- html,
389
- body {
400
+ html {
390
401
  margin: 0;
391
402
  padding: 0;
392
403
  }
393
404
 
394
405
  body {
406
+ margin: 0;
407
+ padding: 0;
395
408
  min-height: 100vh;
396
409
  font-family: var(--sp-font-family-sans);
397
410
  font-size: var(--sp-font-md-size);
@@ -410,13 +423,13 @@
410
423
  }
411
424
 
412
425
  input,
413
- button,
414
426
  textarea,
415
427
  select {
416
428
  font: inherit;
417
429
  }
418
430
 
419
431
  button {
432
+ font: inherit;
420
433
  border: none;
421
434
  background: none;
422
435
  padding: 0;
@@ -444,7 +457,7 @@
444
457
  }
445
458
  @layer components {
446
459
 
447
- :root {
460
+ :where(:root) {
448
461
  /* structural border width */
449
462
  --sp-component-border-width: var(--sp-border-width-base);
450
463
 
@@ -500,8 +513,7 @@
500
513
 
501
514
  /* card roles */
502
515
  --sp-component-card-bg: var(--sp-surface-card);
503
- --sp-component-card-text: var(--sp-text-on-surface-default);
504
- --sp-component-card-text-muted: var(--sp-text-on-surface-muted);
516
+ /* --sp-component-card-text and --sp-component-card-text-muted are now provided directly by the token package */
505
517
  --sp-component-card-border: var(--sp-color-neutral-200);
506
518
  --sp-component-card-border-base: var(--sp-component-card-ghost-border);
507
519
  --sp-component-card-shadow: var(--sp-shadow-sm);
@@ -517,8 +529,8 @@
517
529
  /* input roles */
518
530
  --sp-component-input-role-border: var(--sp-form-default-border);
519
531
  --sp-component-input-role-bg: var(--sp-form-default-bg);
520
- --sp-component-input-role-text: var(--sp-form-default-text);
521
- --sp-component-input-role-placeholder: var(--sp-form-default-placeholder);
532
+ --sp-component-input-role-text: var(--sp-component-input-text);
533
+ --sp-component-input-role-placeholder: var(--sp-component-input-placeholder);
522
534
  --sp-component-input-role-border-hover: var(--sp-form-hover-border);
523
535
  --sp-component-input-role-border-focus: var(--sp-form-focus-border);
524
536
  --sp-component-input-role-ring: var(--sp-form-focus-ring);
@@ -579,7 +591,7 @@
579
591
  --sp-component-iconbox-success-bg: var(--sp-color-success-50);
580
592
  --sp-component-iconbox-success-text: var(--sp-icon-box-icon-success);
581
593
  --sp-component-iconbox-warning-bg: var(--sp-color-warning-50);
582
- --sp-component-iconbox-warning-text: var(--sp-icon-box-icon-warning);
594
+ --sp-component-iconbox-warning-text: var(--sp-color-warning-800);
583
595
  --sp-component-iconbox-danger-bg: var(--sp-color-error-50);
584
596
  --sp-component-iconbox-danger-text: var(--sp-icon-box-icon-danger);
585
597
  --sp-component-iconbox-info-bg: var(--sp-color-info-50);
@@ -608,10 +620,13 @@
608
620
  --sp-component-rating-star-filled: var(--sp-color-warning-500);
609
621
  --sp-component-rating-star-empty: var(--sp-color-neutral-200);
610
622
  --sp-component-rating-text: var(--sp-color-neutral-500);
623
+ --sp-component-rating-size-sm: var(--sp-font-sm-size);
624
+ --sp-component-rating-size-md: var(--sp-font-md-size);
625
+ --sp-component-rating-size-lg: var(--sp-font-lg-size);
611
626
  }
612
627
 
613
628
  /* dark mode overrides mapped from Spectre token mode definitions */
614
- :root[data-spectre-theme="dark"] {
629
+ :where(:root[data-spectre-theme="dark"]) {
615
630
  --sp-component-testimonial-bg: var(--sp-color-neutral-800);
616
631
  --sp-component-testimonial-border: var(--sp-color-neutral-700);
617
632
  --sp-component-testimonial-text: var(--sp-color-neutral-200);
@@ -627,23 +642,6 @@
627
642
  --sp-component-rating-star-filled: var(--sp-color-warning-400);
628
643
  --sp-component-rating-star-empty: var(--sp-color-neutral-700);
629
644
  --sp-component-rating-text: var(--sp-color-neutral-400);
630
-
631
- --sp-component-badge-success-bg: var(--sp-color-success-800);
632
- --sp-component-badge-success-text: var(--sp-color-success-100);
633
- --sp-component-badge-warning-bg: var(--sp-color-warning-800);
634
- --sp-component-badge-warning-text: var(--sp-color-warning-100);
635
- --sp-component-badge-danger-bg: var(--sp-color-error-800);
636
- --sp-component-badge-danger-text: var(--sp-color-error-100);
637
- --sp-component-badge-neutral-bg: var(--sp-color-neutral-700);
638
- --sp-component-badge-neutral-text: var(--sp-color-neutral-100);
639
- --sp-component-badge-info-bg: var(--sp-color-info-900);
640
- --sp-component-badge-info-text: var(--sp-color-info-100);
641
-
642
- --sp-component-badge-success-bg-hover: var(--sp-color-success-700);
643
- --sp-component-badge-warning-bg-hover: var(--sp-color-warning-800);
644
- --sp-component-badge-danger-bg-hover: var(--sp-color-error-700);
645
- --sp-component-badge-neutral-bg-hover: var(--sp-color-neutral-600);
646
- --sp-component-badge-info-bg-hover: var(--sp-color-info-700);
647
645
  }
648
646
 
649
647
  /* BUTTONS -------------------------------------------------------------- */
@@ -657,7 +655,7 @@
657
655
  border: var(--sp-component-border-width) solid var(--sp-component-button-border-base);
658
656
  font-family: var(--sp-font-family-sans);
659
657
  font-size: var(--sp-font-md-size);
660
- line-height: 1;
658
+ line-height: var(--sp-font-md-line-height);
661
659
  font-weight: var(--sp-font-md-weight);
662
660
  text-decoration: none;
663
661
  appearance: none;
@@ -683,6 +681,13 @@
683
681
  opacity: var(--sp-opacity-active);
684
682
  }
685
683
 
684
+ .sp-btn:focus-visible,
685
+ .sp-btn--focus,
686
+ .sp-btn.is-focus {
687
+ outline: none;
688
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
689
+ }
690
+
686
691
  .sp-btn--full {
687
692
  width: 100%;
688
693
  }
@@ -968,10 +973,17 @@
968
973
  }
969
974
 
970
975
  .sp-input:hover,
971
- .sp-input--hover {
976
+ .sp-input--hover,
977
+ .sp-input.is-hover {
972
978
  border-color: var(--sp-component-input-role-border-hover);
973
979
  }
974
980
 
981
+ .sp-input:active,
982
+ .sp-input--active,
983
+ .sp-input.is-active {
984
+ opacity: var(--sp-opacity-active);
985
+ }
986
+
975
987
  .sp-input:focus,
976
988
  .sp-input--focus,
977
989
  .sp-input.is-focus {
@@ -999,6 +1011,7 @@
999
1011
  background-color: var(--sp-component-input-role-bg-disabled);
1000
1012
  color: var(--sp-component-input-role-text-disabled);
1001
1013
  border-color: var(--sp-component-input-role-border-disabled);
1014
+ box-shadow: none;
1002
1015
  cursor: not-allowed;
1003
1016
  pointer-events: none;
1004
1017
  }
@@ -1007,7 +1020,6 @@
1007
1020
  color: var(--sp-component-input-role-text-disabled);
1008
1021
  }
1009
1022
 
1010
- .sp-input--disabled,
1011
1023
  .sp-input--disabled:focus {
1012
1024
  box-shadow: none;
1013
1025
  }
@@ -1080,7 +1092,8 @@
1080
1092
  cursor: pointer;
1081
1093
  transition:
1082
1094
  transform var(--sp-duration-fast) var(--sp-easing-out),
1083
- box-shadow var(--sp-duration-fast) var(--sp-easing-out);
1095
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1096
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
1084
1097
  }
1085
1098
 
1086
1099
  .sp-card--interactive:hover,
@@ -1094,6 +1107,13 @@
1094
1107
  box-shadow: var(--sp-component-card-shadow-elevated);
1095
1108
  }
1096
1109
 
1110
+ .sp-card--interactive:active,
1111
+ .sp-card--interactive.sp-card--active,
1112
+ .sp-card--interactive.is-active {
1113
+ opacity: var(--sp-opacity-active);
1114
+ transform: translateY(0);
1115
+ }
1116
+
1097
1117
  /* BADGES --------------------------------------------------------------- */
1098
1118
 
1099
1119
  .sp-badge {
@@ -1135,7 +1155,8 @@
1135
1155
  }
1136
1156
 
1137
1157
  .sp-badge--primary.sp-badge--interactive:hover,
1138
- .sp-badge--primary.sp-badge--interactive.sp-badge--hover {
1158
+ .sp-badge--primary.sp-badge--interactive.sp-badge--hover,
1159
+ .sp-badge--primary.sp-badge--interactive.is-hover {
1139
1160
  background-color: var(--sp-component-badge-primary-bg-hover);
1140
1161
  }
1141
1162
 
@@ -1146,7 +1167,8 @@
1146
1167
  }
1147
1168
 
1148
1169
  .sp-badge--secondary.sp-badge--interactive:hover,
1149
- .sp-badge--secondary.sp-badge--interactive.sp-badge--hover {
1170
+ .sp-badge--secondary.sp-badge--interactive.sp-badge--hover,
1171
+ .sp-badge--secondary.sp-badge--interactive.is-hover {
1150
1172
  background-color: var(--sp-component-badge-secondary-bg-hover);
1151
1173
  }
1152
1174
 
@@ -1156,7 +1178,8 @@
1156
1178
  }
1157
1179
 
1158
1180
  .sp-badge--success.sp-badge--interactive:hover,
1159
- .sp-badge--success.sp-badge--interactive.sp-badge--hover {
1181
+ .sp-badge--success.sp-badge--interactive.sp-badge--hover,
1182
+ .sp-badge--success.sp-badge--interactive.is-hover {
1160
1183
  background-color: var(--sp-component-badge-success-bg-hover);
1161
1184
  }
1162
1185
 
@@ -1166,7 +1189,8 @@
1166
1189
  }
1167
1190
 
1168
1191
  .sp-badge--warning.sp-badge--interactive:hover,
1169
- .sp-badge--warning.sp-badge--interactive.sp-badge--hover {
1192
+ .sp-badge--warning.sp-badge--interactive.sp-badge--hover,
1193
+ .sp-badge--warning.sp-badge--interactive.is-hover {
1170
1194
  background-color: var(--sp-component-badge-warning-bg-hover);
1171
1195
  }
1172
1196
 
@@ -1176,7 +1200,8 @@
1176
1200
  }
1177
1201
 
1178
1202
  .sp-badge--danger.sp-badge--interactive:hover,
1179
- .sp-badge--danger.sp-badge--interactive.sp-badge--hover {
1203
+ .sp-badge--danger.sp-badge--interactive.sp-badge--hover,
1204
+ .sp-badge--danger.sp-badge--interactive.is-hover {
1180
1205
  background-color: var(--sp-component-badge-danger-bg-hover);
1181
1206
  }
1182
1207
 
@@ -1186,7 +1211,8 @@
1186
1211
  }
1187
1212
 
1188
1213
  .sp-badge--neutral.sp-badge--interactive:hover,
1189
- .sp-badge--neutral.sp-badge--interactive.sp-badge--hover {
1214
+ .sp-badge--neutral.sp-badge--interactive.sp-badge--hover,
1215
+ .sp-badge--neutral.sp-badge--interactive.is-hover {
1190
1216
  background-color: var(--sp-component-badge-neutral-bg-hover);
1191
1217
  }
1192
1218
 
@@ -1196,13 +1222,32 @@
1196
1222
  }
1197
1223
 
1198
1224
  .sp-badge--info.sp-badge--interactive:hover,
1199
- .sp-badge--info.sp-badge--interactive.sp-badge--hover {
1225
+ .sp-badge--info.sp-badge--interactive.sp-badge--hover,
1226
+ .sp-badge--info.sp-badge--interactive.is-hover {
1200
1227
  background-color: var(--sp-component-badge-info-bg-hover);
1201
1228
  }
1202
1229
 
1203
1230
  .sp-badge--interactive {
1204
1231
  cursor: pointer;
1205
- transition: background-color var(--sp-duration-fast) var(--sp-easing-out);
1232
+ transition:
1233
+ background-color var(--sp-duration-fast) var(--sp-easing-out),
1234
+ color var(--sp-duration-fast) var(--sp-easing-out),
1235
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1236
+ border-color var(--sp-duration-fast) var(--sp-easing-out),
1237
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
1238
+ }
1239
+
1240
+ .sp-badge--interactive:active,
1241
+ .sp-badge--interactive.sp-badge--active,
1242
+ .sp-badge--interactive.is-active {
1243
+ opacity: var(--sp-opacity-active);
1244
+ }
1245
+
1246
+ .sp-badge--interactive:focus-visible,
1247
+ .sp-badge--interactive.sp-badge--focus,
1248
+ .sp-badge--interactive.is-focus {
1249
+ outline: none;
1250
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
1206
1251
  }
1207
1252
 
1208
1253
  .sp-badge--disabled {
@@ -1226,7 +1271,12 @@
1226
1271
  background-color: var(--sp-component-iconbox-primary-bg);
1227
1272
  font-family: var(--sp-font-family-sans);
1228
1273
  font-weight: var(--sp-font-md-weight);
1229
- line-height: 0;
1274
+ transition:
1275
+ background-color var(--sp-duration-fast) var(--sp-easing-out),
1276
+ color var(--sp-duration-fast) var(--sp-easing-out),
1277
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1278
+ border-color var(--sp-duration-fast) var(--sp-easing-out),
1279
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
1230
1280
  }
1231
1281
 
1232
1282
  /* Harden icon rendering:
@@ -1234,11 +1284,6 @@
1234
1284
  - force currentColor for common svg shapes
1235
1285
  - preserve stroke-only icons (fill="none")
1236
1286
  */
1237
- .sp-iconbox,
1238
- .sp-iconbox>i {
1239
- line-height: 0;
1240
- }
1241
-
1242
1287
  .sp-iconbox>i {
1243
1288
  display: inline-flex;
1244
1289
  align-items: center;
@@ -1257,7 +1302,6 @@
1257
1302
  }
1258
1303
 
1259
1304
  /* default to inheriting via currentColor */
1260
- .sp-iconbox svg,
1261
1305
  .sp-iconbox svg path,
1262
1306
  .sp-iconbox svg circle,
1263
1307
  .sp-iconbox svg rect,
@@ -1295,6 +1339,10 @@
1295
1339
  font-size: var(--sp-font-lg-size);
1296
1340
  }
1297
1341
 
1342
+ .sp-iconbox--pill {
1343
+ border-radius: var(--sp-radius-pill);
1344
+ }
1345
+
1298
1346
  .sp-iconbox--primary {
1299
1347
  background-color: var(--sp-component-iconbox-primary-bg);
1300
1348
  color: var(--sp-component-iconbox-primary-text);
@@ -1320,9 +1368,35 @@
1320
1368
  color: var(--sp-component-iconbox-info-text);
1321
1369
  }
1322
1370
 
1371
+ .sp-iconbox--interactive {
1372
+ cursor: pointer;
1373
+ }
1374
+
1375
+ .sp-iconbox--interactive:hover,
1376
+ .sp-iconbox--interactive.sp-iconbox--hover,
1377
+ .sp-iconbox--interactive.is-hover {
1378
+ opacity: var(--sp-opacity-hover);
1379
+ }
1380
+
1381
+ .sp-iconbox--interactive:active,
1382
+ .sp-iconbox--interactive.sp-iconbox--active,
1383
+ .sp-iconbox--interactive.is-active {
1384
+ opacity: var(--sp-opacity-active);
1385
+ }
1386
+
1387
+ .sp-iconbox--interactive:focus-visible,
1388
+ .sp-iconbox--interactive.sp-iconbox--focus,
1389
+ .sp-iconbox--interactive.is-focus {
1390
+ outline: none;
1391
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
1392
+ }
1393
+
1394
+ .sp-iconbox:disabled,
1395
+ .sp-iconbox[aria-disabled="true"],
1323
1396
  .sp-iconbox--disabled {
1324
1397
  opacity: var(--sp-opacity-disabled);
1325
1398
  pointer-events: none;
1399
+ cursor: not-allowed;
1326
1400
  }
1327
1401
 
1328
1402
  .sp-iconbox--loading {
@@ -1352,6 +1426,37 @@
1352
1426
  pointer-events: none;
1353
1427
  }
1354
1428
 
1429
+ .sp-testimonial--interactive {
1430
+ cursor: pointer;
1431
+ transition:
1432
+ transform var(--sp-duration-fast) var(--sp-easing-out),
1433
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1434
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
1435
+ }
1436
+
1437
+ .sp-testimonial--interactive:hover,
1438
+ .sp-testimonial--interactive:focus-within,
1439
+ .sp-testimonial--interactive.sp-testimonial--hover,
1440
+ .sp-testimonial--interactive.is-hover {
1441
+ transform: translateY(calc(var(--sp-component-border-width) * -1));
1442
+ box-shadow: var(--sp-shadow-lg);
1443
+ }
1444
+
1445
+ .sp-testimonial--interactive:active,
1446
+ .sp-testimonial--interactive.sp-testimonial--active,
1447
+ .sp-testimonial--interactive.is-active {
1448
+ opacity: var(--sp-opacity-active);
1449
+ transform: translateY(0);
1450
+ }
1451
+
1452
+ .sp-testimonial--interactive:focus-visible,
1453
+ .sp-testimonial--interactive.sp-testimonial--focus,
1454
+ .sp-testimonial--interactive.is-focus {
1455
+ outline: none;
1456
+ transform: translateY(calc(var(--sp-component-border-width) * -1));
1457
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
1458
+ }
1459
+
1355
1460
  .sp-testimonial-quote {
1356
1461
  color: var(--sp-component-testimonial-text);
1357
1462
  font-size: var(--sp-font-lg-size);
@@ -1403,7 +1508,10 @@
1403
1508
  flex-direction: column;
1404
1509
  gap: var(--sp-space-24);
1405
1510
  position: relative;
1406
- transition: transform var(--sp-duration-fast) var(--sp-easing-out);
1511
+ transition:
1512
+ transform var(--sp-duration-fast) var(--sp-easing-out),
1513
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out),
1514
+ opacity var(--sp-duration-fast) var(--sp-easing-out);
1407
1515
  }
1408
1516
 
1409
1517
  .sp-pricing-card--featured {
@@ -1424,6 +1532,49 @@
1424
1532
  pointer-events: none;
1425
1533
  }
1426
1534
 
1535
+ .sp-pricing-card--interactive {
1536
+ cursor: pointer;
1537
+ }
1538
+
1539
+ .sp-pricing-card--interactive:hover,
1540
+ .sp-pricing-card--interactive:focus-within,
1541
+ .sp-pricing-card--interactive.sp-pricing-card--hover,
1542
+ .sp-pricing-card--interactive.is-hover {
1543
+ transform: translateY(calc(var(--sp-component-border-width) * -1));
1544
+ box-shadow: var(--sp-shadow-lg);
1545
+ }
1546
+
1547
+ .sp-pricing-card--featured.sp-pricing-card--interactive:hover,
1548
+ .sp-pricing-card--featured.sp-pricing-card--interactive:focus-visible,
1549
+ .sp-pricing-card--featured.sp-pricing-card--interactive:focus-within,
1550
+ .sp-pricing-card--featured.sp-pricing-card--interactive.sp-pricing-card--hover,
1551
+ .sp-pricing-card--featured.sp-pricing-card--interactive.is-hover,
1552
+ .sp-pricing-card--featured.sp-pricing-card--interactive.sp-pricing-card--focus,
1553
+ .sp-pricing-card--featured.sp-pricing-card--interactive.is-focus {
1554
+ transform: scale(1.05) translateY(calc(var(--sp-component-border-width) * -1));
1555
+ }
1556
+
1557
+ .sp-pricing-card--interactive:active,
1558
+ .sp-pricing-card--interactive.sp-pricing-card--active,
1559
+ .sp-pricing-card--interactive.is-active {
1560
+ opacity: var(--sp-opacity-active);
1561
+ transform: translateY(0);
1562
+ }
1563
+
1564
+ .sp-pricing-card--featured.sp-pricing-card--interactive:active,
1565
+ .sp-pricing-card--featured.sp-pricing-card--interactive.sp-pricing-card--active,
1566
+ .sp-pricing-card--featured.sp-pricing-card--interactive.is-active {
1567
+ transform: scale(1.05) translateY(0);
1568
+ }
1569
+
1570
+ .sp-pricing-card--interactive:focus-visible,
1571
+ .sp-pricing-card--interactive.sp-pricing-card--focus,
1572
+ .sp-pricing-card--interactive.is-focus {
1573
+ outline: none;
1574
+ transform: translateY(calc(var(--sp-component-border-width) * -1));
1575
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
1576
+ }
1577
+
1427
1578
  .sp-pricing-card-badge {
1428
1579
  position: absolute;
1429
1580
  top: var(--sp-space-16);
@@ -1468,11 +1619,31 @@
1468
1619
  display: inline-flex;
1469
1620
  align-items: center;
1470
1621
  gap: var(--sp-space-8);
1622
+ font-size: var(--sp-component-rating-size-md);
1623
+ border-radius: var(--sp-radius-md);
1624
+ transition:
1625
+ opacity var(--sp-duration-fast) var(--sp-easing-out),
1626
+ box-shadow var(--sp-duration-fast) var(--sp-easing-out);
1627
+ }
1628
+
1629
+ .sp-rating--sm {
1630
+ font-size: var(--sp-component-rating-size-sm);
1631
+ }
1632
+
1633
+ .sp-rating--md {
1634
+ font-size: var(--sp-component-rating-size-md);
1471
1635
  }
1472
1636
 
1637
+ .sp-rating--lg {
1638
+ font-size: var(--sp-component-rating-size-lg);
1639
+ }
1640
+
1641
+ .sp-rating:disabled,
1642
+ .sp-rating[aria-disabled="true"],
1473
1643
  .sp-rating--disabled {
1474
1644
  opacity: var(--sp-opacity-disabled);
1475
1645
  pointer-events: none;
1646
+ cursor: not-allowed;
1476
1647
  }
1477
1648
 
1478
1649
  .sp-rating--loading {
@@ -1480,6 +1651,29 @@
1480
1651
  pointer-events: none;
1481
1652
  }
1482
1653
 
1654
+ .sp-rating--interactive {
1655
+ cursor: pointer;
1656
+ }
1657
+
1658
+ .sp-rating--interactive:hover,
1659
+ .sp-rating--interactive.sp-rating--hover,
1660
+ .sp-rating--interactive.is-hover {
1661
+ opacity: var(--sp-opacity-hover);
1662
+ }
1663
+
1664
+ .sp-rating--interactive:active,
1665
+ .sp-rating--interactive.sp-rating--active,
1666
+ .sp-rating--interactive.is-active {
1667
+ opacity: var(--sp-opacity-active);
1668
+ }
1669
+
1670
+ .sp-rating--interactive:focus-visible,
1671
+ .sp-rating--interactive.sp-rating--focus,
1672
+ .sp-rating--interactive.is-focus {
1673
+ outline: none;
1674
+ box-shadow: 0 0 0 calc(var(--sp-focus-ring-width) + var(--sp-component-border-width)) var(--sp-color-focus-primary);
1675
+ }
1676
+
1483
1677
  .sp-rating-stars {
1484
1678
  display: flex;
1485
1679
  gap: var(--sp-space-4);