@fluid-theme/core 0.4.3 → 2.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.
Files changed (107) hide show
  1. package/AGENTS.md +6 -29
  2. package/CHANGELOG.md +564 -2
  3. package/CLAUDE.md +201 -14
  4. package/GEMINI.md +6 -45
  5. package/README.md +17 -8
  6. package/assets/js/compare.js +77 -0
  7. package/assets/js/fit-text.js +103 -0
  8. package/assets/js/lightbox.js +153 -0
  9. package/assets/js/scroll-reveal.js +72 -0
  10. package/assets/js/toc-build.mjs +86 -0
  11. package/assets/js/toc.js +384 -0
  12. package/dist/fluid-1x.min.css +4 -0
  13. package/dist/fluid-fonts-archivo.min.css +2 -0
  14. package/dist/fluid-fonts-bodoni.min.css +2 -0
  15. package/dist/fluid-fonts.min.css +2 -0
  16. package/dist/fluid-legacy-1x.css +3 -0
  17. package/dist/fluid-nav.min.css +3 -0
  18. package/dist/fluid-toc.min.css +3 -0
  19. package/dist/fluid-zero.min.css +3 -0
  20. package/dist/fluid.min.css +3 -2
  21. package/dist/fonts/OFL-archivo.txt +93 -0
  22. package/dist/fonts/OFL-bodoni-moda.txt +93 -0
  23. package/dist/fonts/OFL-hanken-grotesk.txt +93 -0
  24. package/dist/fonts/OFL-newsreader.txt +93 -0
  25. package/dist/fonts/OFL-schibsted-grotesk.txt +93 -0
  26. package/dist/fonts/archivo-latin-wdth-italic.woff2 +0 -0
  27. package/dist/fonts/archivo-latin-wdth-normal.woff2 +0 -0
  28. package/dist/fonts/bodoni-moda-latin-opsz-italic.woff2 +0 -0
  29. package/dist/fonts/bodoni-moda-latin-opsz-normal.woff2 +0 -0
  30. package/dist/fonts/hanken-grotesk-latin-wght-italic.woff2 +0 -0
  31. package/dist/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
  32. package/dist/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  33. package/dist/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  34. package/dist/fonts/schibsted-grotesk-latin-wght-italic.woff2 +0 -0
  35. package/dist/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
  36. package/fluid-agent-kit/README.md +1 -0
  37. package/fluid-agent-kit/skills/accessibility.md +3 -1
  38. package/fluid-agent-kit/skills/css-conventions.md +22 -5
  39. package/fluid-agent-kit/skills/image-optimization.md +2 -0
  40. package/fluid-agent-kit/skills/preset-composition.md +108 -0
  41. package/package.json +36 -11
  42. package/src/animations/scroll-reveal.css +75 -193
  43. package/src/components/accordion.css +6 -47
  44. package/src/components/alert.css +47 -88
  45. package/src/components/avatar.css +4 -20
  46. package/src/components/badge.css +25 -48
  47. package/src/components/button.css +69 -175
  48. package/src/components/card.css +146 -481
  49. package/src/components/chip.css +46 -12
  50. package/src/components/compare.css +234 -0
  51. package/src/components/dropdown.css +10 -67
  52. package/src/components/empty-state.css +4 -0
  53. package/src/components/form.css +113 -81
  54. package/src/components/gallery.css +252 -0
  55. package/src/components/hero.css +203 -88
  56. package/src/components/indicator.css +23 -117
  57. package/src/components/loading.css +7 -29
  58. package/src/components/modal.css +12 -65
  59. package/src/components/nav-modes.css +261 -0
  60. package/src/components/nav.css +324 -392
  61. package/src/components/search-input.css +4 -2
  62. package/src/components/step-indicator.css +26 -27
  63. package/src/components/table.css +64 -171
  64. package/src/components/toc.css +254 -0
  65. package/src/components/tooltip.css +5 -46
  66. package/src/core/base.css +393 -547
  67. package/src/core/reset.css +17 -5
  68. package/src/core/tokens.css +426 -2276
  69. package/src/fluid.css +258 -17
  70. package/src/fonts/OFL-newsreader.txt +93 -0
  71. package/src/fonts/OFL-schibsted-grotesk.txt +93 -0
  72. package/src/fonts/fluid-fonts.css +55 -0
  73. package/src/fonts/newsreader-latin-opsz-italic.woff2 +0 -0
  74. package/src/fonts/newsreader-latin-opsz-normal.woff2 +0 -0
  75. package/src/fonts/schibsted-grotesk-latin-wght-italic.woff2 +0 -0
  76. package/src/fonts/schibsted-grotesk-latin-wght-normal.woff2 +0 -0
  77. package/src/layouts/positioning.css +6 -3
  78. package/src/legacy-1x.css +61 -0
  79. package/src/sections/cta.css +33 -101
  80. package/src/sections/features.css +42 -219
  81. package/src/sections/footer.css +53 -134
  82. package/src/sections/stats.css +40 -153
  83. package/src/sections/team.css +24 -113
  84. package/src/sections/testimonials.css +34 -148
  85. package/src/zero/base.css +166 -0
  86. package/src/zero/tokens.css +64 -0
  87. package/src/zero.css +20 -0
  88. package/starters/workflows/README.md +40 -0
  89. package/starters/workflows/dependabot.yml +21 -0
  90. package/starters/workflows/update-fluid-theme.yml +296 -0
  91. package/themes/fonts/OFL-archivo.txt +93 -0
  92. package/themes/fonts/OFL-bodoni-moda.txt +93 -0
  93. package/themes/fonts/OFL-hanken-grotesk.txt +93 -0
  94. package/themes/fonts/archivo-latin-wdth-italic.woff2 +0 -0
  95. package/themes/fonts/archivo-latin-wdth-normal.woff2 +0 -0
  96. package/themes/fonts/archivo.css +20 -0
  97. package/themes/fonts/bodoni-moda-latin-opsz-italic.woff2 +0 -0
  98. package/themes/fonts/bodoni-moda-latin-opsz-normal.woff2 +0 -0
  99. package/themes/fonts/bodoni.css +35 -0
  100. package/themes/fonts/hanken-grotesk-latin-wght-italic.woff2 +0 -0
  101. package/themes/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
  102. package/themes/gallery.css +105 -0
  103. package/themes/swiss.css +53 -0
  104. package/src/components/scroll-progress.css +0 -104
  105. package/src/components/settings-panel.css +0 -603
  106. package/src/components/themed-images.css +0 -229
  107. package/src/components/version-badge.css +0 -70
@@ -39,6 +39,8 @@
39
39
 
40
40
  .alert {
41
41
  --_alert-color: var(--color-info);
42
+ --_alert-fill: var(--color-info-fill);
43
+ --_alert-on: var(--color-info-on);
42
44
  --_alert-bg: var(--color-info-subtle);
43
45
  --_alert-border: var(--color-info);
44
46
 
@@ -46,16 +48,15 @@
46
48
  align-items: flex-start;
47
49
  gap: var(--space-3);
48
50
  padding: var(--space-4) var(--space-5);
49
- border-radius: var(--radius-lg);
50
- border-inline-start: 3px solid var(--_alert-border);
51
+ border-radius: var(--radius-card);
52
+ border-inline-start: var(--border-width-thick) solid var(--_alert-border);
51
53
  background: var(--_alert-bg);
52
54
  color: var(--color-text);
53
- font-size: var(--font-size-sm);
54
- line-height: var(--leading-normal);
55
-
55
+ font-size: var(--step--1);
56
+ line-height: 1.5;
56
57
  transition:
57
58
  opacity var(--duration-normal) var(--ease-fluid),
58
- transform var(--duration-normal) var(--ease-settle);
59
+ translate var(--duration-normal) var(--ease-settle);
59
60
  }
60
61
 
61
62
 
@@ -65,24 +66,32 @@
65
66
 
66
67
  .alert[data-status="success"] {
67
68
  --_alert-color: var(--color-success);
69
+ --_alert-fill: var(--color-success-fill);
70
+ --_alert-on: var(--color-success-on);
68
71
  --_alert-bg: var(--color-success-subtle);
69
72
  --_alert-border: var(--color-success);
70
73
  }
71
74
 
72
75
  .alert[data-status="warning"] {
73
76
  --_alert-color: var(--color-warning);
77
+ --_alert-fill: var(--color-warning-fill);
78
+ --_alert-on: var(--color-warning-on);
74
79
  --_alert-bg: var(--color-warning-subtle);
75
80
  --_alert-border: var(--color-warning);
76
81
  }
77
82
 
78
83
  .alert[data-status="error"] {
79
84
  --_alert-color: var(--color-error);
85
+ --_alert-fill: var(--color-error-fill);
86
+ --_alert-on: var(--color-error-on);
80
87
  --_alert-bg: var(--color-error-subtle);
81
88
  --_alert-border: var(--color-error);
82
89
  }
83
90
 
84
91
  .alert[data-status="info"] {
85
92
  --_alert-color: var(--color-info);
93
+ --_alert-fill: var(--color-info-fill);
94
+ --_alert-on: var(--color-info-on);
86
95
  --_alert-bg: var(--color-info-subtle);
87
96
  --_alert-border: var(--color-info);
88
97
  }
@@ -94,8 +103,8 @@
94
103
 
95
104
  /* Filled: solid background */
96
105
  .alert[data-variant="filled"] {
97
- background: var(--_alert-color);
98
- color: var(--white);
106
+ background: var(--_alert-fill);
107
+ color: var(--_alert-on);
99
108
  border-inline-start: none;
100
109
  }
101
110
 
@@ -107,7 +116,7 @@
107
116
  .alert[data-variant="outline"] {
108
117
  background: transparent;
109
118
  border: var(--border-width) solid var(--_alert-border);
110
- border-inline-start-width: 3px;
119
+ border-inline-start-width: var(--border-width-thick);
111
120
  }
112
121
 
113
122
 
@@ -130,7 +139,7 @@
130
139
  }
131
140
 
132
141
  .alert__title {
133
- font-weight: var(--weight-semibold);
142
+ font-weight: calc(700 + var(--_dark-weight));
134
143
  color: var(--_alert-color);
135
144
  margin-block-end: var(--space-1);
136
145
  display: block;
@@ -142,7 +151,7 @@
142
151
 
143
152
  .alert__close {
144
153
  --_btn-bg: transparent;
145
- --_btn-shadow: none;
154
+ --_btn-bg-hover: transparent;
146
155
 
147
156
  position: relative;
148
157
  flex-shrink: 0;
@@ -152,7 +161,6 @@
152
161
  inline-size: 1.5rem;
153
162
  block-size: 1.5rem;
154
163
  padding: 0;
155
- border-radius: var(--radius-sm);
156
164
  font-size: var(--font-size-lg);
157
165
  line-height: 1;
158
166
  color: var(--color-text-muted);
@@ -174,9 +182,11 @@
174
182
  /* Dismissing animation */
175
183
  .alert[data-dismissing] {
176
184
  opacity: 0;
177
- transform: translateX(var(--space-4));
185
+ translate: var(--space-4);
178
186
  }
179
187
 
188
+ .alert[data-dismissing]:dir(rtl) { translate: calc(-1 * var(--space-4)); }
189
+
180
190
 
181
191
  /* ========================================
182
192
  TOAST CONTAINER
@@ -218,14 +228,14 @@
218
228
 
219
229
  .toast-container[data-position="top-center"] {
220
230
  inset-block-start: 0;
221
- inset-inline-start: 50%;
222
- translate: -50% 0;
231
+ inset-inline: 0;
232
+ margin-inline: auto;
223
233
  }
224
234
 
225
235
  .toast-container[data-position="bottom-center"] {
226
236
  inset-block-end: 0;
227
- inset-inline-start: 50%;
228
- translate: -50% 0;
237
+ inset-inline: 0;
238
+ margin-inline: auto;
229
239
  }
230
240
 
231
241
 
@@ -235,18 +245,19 @@
235
245
 
236
246
  .toast {
237
247
  --_toast-accent: var(--color-info);
238
-
248
+ --_toast-fill: var(--color-info-fill);
249
+ --_toast-on: var(--color-info-on);
250
+ --_toast-bg: var(--color-info-subtle);
251
+ --_dir: 1;
239
252
  position: relative;
240
253
  overflow: hidden;
241
254
  display: flex;
242
255
  align-items: flex-start;
243
256
  gap: var(--space-3);
244
257
  padding: var(--space-4);
245
- padding-inline-start: calc(var(--space-4) + 3px);
246
- background: var(--color-surface-raised);
247
- border: var(--border-width) solid var(--color-border-subtle);
248
- border-radius: var(--radius-lg);
249
- box-shadow: var(--shadow-lg);
258
+ background: var(--_toast-bg);
259
+ border-inline-start: var(--border-width-thick) solid var(--_toast-accent);
260
+ border-radius: var(--radius-card);
250
261
  pointer-events: auto;
251
262
  inline-size: 100%;
252
263
 
@@ -254,22 +265,12 @@
254
265
  animation: toast-in var(--duration-normal) var(--ease-settle) both;
255
266
  }
256
267
 
257
- .toast[data-status="success"] { --_toast-accent: var(--color-success); }
258
- .toast[data-status="warning"] { --_toast-accent: var(--color-warning); }
259
- .toast[data-status="error"] { --_toast-accent: var(--color-error); }
260
- .toast[data-status="info"] { --_toast-accent: var(--color-info); }
268
+ .toast[data-status="success"] { --_toast-accent: var(--color-success); --_toast-fill: var(--color-success-fill); --_toast-on: var(--color-success-on); --_toast-bg: var(--color-success-subtle); }
269
+ .toast[data-status="warning"] { --_toast-accent: var(--color-warning); --_toast-fill: var(--color-warning-fill); --_toast-on: var(--color-warning-on); --_toast-bg: var(--color-warning-subtle); }
270
+ .toast[data-status="error"] { --_toast-accent: var(--color-error); --_toast-fill: var(--color-error-fill); --_toast-on: var(--color-error-on); --_toast-bg: var(--color-error-subtle); }
271
+ .toast[data-status="info"] { --_toast-accent: var(--color-info); --_toast-fill: var(--color-info-fill); --_toast-on: var(--color-info-on); --_toast-bg: var(--color-info-subtle); }
261
272
 
262
- /* Accent bar */
263
- .toast::before {
264
- content: "";
265
- position: absolute;
266
- inset-block-start: 0;
267
- inset-inline-start: 0;
268
- inline-size: 3px;
269
- block-size: 100%;
270
- background: var(--_toast-accent);
271
- border-radius: var(--radius-full) 0 0 var(--radius-full);
272
- }
273
+ .toast:dir(rtl) { --_dir: -1; }
273
274
 
274
275
  .toast__icon {
275
276
  flex-shrink: 0;
@@ -286,7 +287,7 @@
286
287
 
287
288
  .toast__content strong {
288
289
  display: block;
289
- font-weight: var(--weight-semibold);
290
+ font-weight: calc(700 + var(--_dark-weight));
290
291
  margin-block-end: var(--space-1);
291
292
  }
292
293
 
@@ -298,7 +299,7 @@
298
299
 
299
300
  .toast__close {
300
301
  --_btn-bg: transparent;
301
- --_btn-shadow: none;
302
+ --_btn-bg-hover: transparent;
302
303
 
303
304
  position: relative;
304
305
  flex-shrink: 0;
@@ -308,7 +309,6 @@
308
309
  inline-size: 1.5rem;
309
310
  block-size: 1.5rem;
310
311
  padding: 0;
311
- border-radius: var(--radius-sm);
312
312
  font-size: var(--font-size-base);
313
313
  color: var(--color-text-subtle);
314
314
  cursor: pointer;
@@ -336,15 +336,15 @@
336
336
  color: var(--_toast-accent);
337
337
  background: transparent;
338
338
  border: var(--border-width) solid var(--_toast-accent);
339
- border-radius: var(--radius-sm);
339
+ border-radius: var(--radius-control);
340
340
  cursor: pointer;
341
341
  text-decoration: none;
342
342
  transition: background-color var(--duration-fast) var(--ease-fluid);
343
343
  }
344
344
 
345
345
  .toast__action:hover {
346
- background: var(--_toast-accent);
347
- color: var(--white);
346
+ background: var(--_toast-fill);
347
+ color: var(--_toast-on);
348
348
  }
349
349
 
350
350
  /* Auto-dismiss progress bar */
@@ -373,50 +373,13 @@
373
373
  TOAST ANIMATIONS
374
374
  ======================================== */
375
375
 
376
+ /* Logical: the toast slides from and to the inline end (:dir sets --_dir). */
376
377
  @keyframes toast-in {
377
- from {
378
- opacity: 0;
379
- transform: translateY(-8px) scale(0.96);
380
- }
381
- to {
382
- opacity: 1;
383
- transform: translateY(0) scale(1);
384
- }
378
+ from { opacity: 0; translate: calc(var(--space-4) * var(--_dir)) 0; }
385
379
  }
386
380
 
387
381
  @keyframes toast-out {
388
- to {
389
- opacity: 0;
390
- transform: translateX(100%) scale(0.96);
391
- }
392
- }
393
-
394
-
395
- /* ========================================
396
- THEME-SPECIFIC STYLES
397
- ======================================== */
398
-
399
- /* Still: no animations */
400
- [data-motion="still"] .toast {
401
- animation: none;
402
- }
403
-
404
- /* Rapids: offset shadow */
405
- [data-motion="rapids"] .toast {
406
- box-shadow: var(--shadow-offset);
407
- }
408
-
409
- [data-motion="rapids"] .alert {
410
- border-inline-start-width: 4px;
411
- }
412
-
413
- /* Tsunami: asymmetric */
414
- [data-motion="tsunami"] .toast {
415
- border-radius: var(--radius-asymmetric, 0 24px 0 0);
416
- }
417
-
418
- [data-motion="tsunami"] .alert {
419
- border-radius: var(--radius-asymmetric, 0 24px 0 0);
382
+ to { opacity: 0; translate: calc(100% * var(--_dir)) 0; }
420
383
  }
421
384
 
422
385
 
@@ -437,10 +400,6 @@
437
400
  ======================================== */
438
401
 
439
402
  @media (prefers-reduced-motion: reduce) {
440
- .alert {
441
- transition: none;
442
- }
443
-
444
403
  .toast {
445
404
  animation: none;
446
405
  }
@@ -39,8 +39,8 @@
39
39
  inline-size: var(--_avatar-size);
40
40
  block-size: var(--_avatar-size);
41
41
  border-radius: var(--radius-full);
42
- background: color-mix(in oklch, var(--accent) 20%, var(--color-surface));
43
- color: var(--accent);
42
+ background: color-mix(in oklab, var(--accent) 20%, var(--color-surface));
43
+ color: var(--accent-ink);
44
44
  font-weight: var(--weight-semibold);
45
45
  font-size: calc(var(--_avatar-size) * 0.4);
46
46
  line-height: 1;
@@ -106,7 +106,7 @@
106
106
  inline-size: calc(var(--_avatar-size) * 0.3);
107
107
  block-size: calc(var(--_avatar-size) * 0.3);
108
108
  border-radius: var(--radius-full);
109
- border: 2px solid var(--color-background);
109
+ border: var(--border-width-thick) solid var(--color-background);
110
110
  background: var(--color-text-subtle);
111
111
  }
112
112
 
@@ -144,17 +144,13 @@
144
144
 
145
145
  .avatar-group .avatar {
146
146
  box-shadow: 0 0 0 2px var(--color-background);
147
- transition: transform var(--duration-fast) var(--ease-settle);
148
147
  }
149
148
 
150
149
  .avatar-group .avatar + .avatar {
151
150
  margin-inline-start: calc(var(--_avatar-size) * -0.3);
152
151
  }
153
152
 
154
- .avatar-group .avatar:hover {
155
- z-index: var(--z-raised);
156
- transform: scale(1.1);
157
- }
153
+ .avatar-group .avatar:hover { z-index: var(--z-raised); }
158
154
 
159
155
  /* Overflow counter: +5 more */
160
156
  .avatar-group__overflow {
@@ -176,17 +172,5 @@
176
172
  }
177
173
 
178
174
 
179
- /* ========================================
180
- THEME-SPECIFIC STYLES
181
- ======================================== */
182
-
183
- /* Tsunami: asymmetric corners on square */
184
- [data-motion="tsunami"] .avatar[data-shape="square"] {
185
- border-radius: var(--radius-asymmetric, 0 12px 0 0);
186
- }
187
175
 
188
- /* Rapids: hard shadow on group */
189
- [data-motion="rapids"] .avatar-group .avatar {
190
- box-shadow: 2px 2px 0 oklch(0 0 0 / 0.1), 0 0 0 2px var(--color-background);
191
- }
192
176
  }
@@ -21,23 +21,21 @@
21
21
  BASE BADGE
22
22
  ======================================== */
23
23
 
24
+ /* The label voice in a 1px box: square (--radius-control), transparent. */
24
25
  .badge {
25
26
  display: inline-flex;
26
27
  align-items: center;
27
28
  gap: var(--space-1);
28
- padding: var(--space-1) var(--space-3);
29
- font-size: var(--font-size-xs);
30
- font-weight: var(--weight-semibold);
31
- line-height: var(--leading-tight);
32
- letter-spacing: var(--tracking-wide);
29
+ padding: 0.35em 0.6em;
30
+ font: calc(600 + var(--_dark-weight)) var(--step--2) / 1.2 var(--font-body);
31
+ letter-spacing: var(--tracking-caps);
33
32
  text-transform: uppercase;
34
- border-radius: var(--radius-full);
33
+ border: var(--border-width) solid currentColor;
34
+ border-radius: var(--radius-control);
35
35
  white-space: nowrap;
36
36
  vertical-align: middle;
37
-
38
- /* Default: accent-tinted */
39
- color: var(--accent);
40
- background: var(--accent-subtle);
37
+ color: var(--color-text);
38
+ background: transparent;
41
39
  }
42
40
 
43
41
 
@@ -47,8 +45,9 @@
47
45
 
48
46
  /* Filled - solid accent background */
49
47
  .badge[data-variant="filled"] {
50
- color: var(--white);
48
+ color: var(--on-accent);
51
49
  background: var(--accent);
50
+ border-color: transparent;
52
51
  }
53
52
 
54
53
  /* Outline - border only */
@@ -61,6 +60,7 @@
61
60
  .badge[data-variant="muted"] {
62
61
  color: var(--color-text-muted);
63
62
  background: var(--color-surface);
63
+ border-color: transparent;
64
64
  }
65
65
 
66
66
 
@@ -69,6 +69,8 @@
69
69
  Semantic states for indicators
70
70
  ======================================== */
71
71
 
72
+ /* The status colours are text colours (4.5:1 on their own tint in light
73
+ and dark); filled badges use the status fill and its on-colour. */
72
74
  .badge[data-status="good"] {
73
75
  color: var(--color-success);
74
76
  background: var(--color-success-subtle);
@@ -89,25 +91,24 @@
89
91
  background: var(--color-info-subtle);
90
92
  }
91
93
 
92
- /* Status + filled combo */
93
94
  .badge[data-status="good"][data-variant="filled"] {
94
- color: var(--white);
95
- background: var(--color-success);
95
+ color: var(--color-success-on);
96
+ background: var(--color-success-fill);
96
97
  }
97
98
 
98
99
  .badge[data-status="warning"][data-variant="filled"] {
99
- color: var(--white);
100
- background: var(--color-warning);
100
+ color: var(--color-warning-on);
101
+ background: var(--color-warning-fill);
101
102
  }
102
103
 
103
104
  .badge[data-status="error"][data-variant="filled"] {
104
- color: var(--white);
105
- background: var(--color-error);
105
+ color: var(--color-error-on);
106
+ background: var(--color-error-fill);
106
107
  }
107
108
 
108
109
  .badge[data-status="info"][data-variant="filled"] {
109
- color: var(--white);
110
- background: var(--color-info);
110
+ color: var(--color-info-on);
111
+ background: var(--color-info-fill);
111
112
  }
112
113
 
113
114
 
@@ -116,14 +117,13 @@
116
117
  ======================================== */
117
118
 
118
119
  .badge[data-size="sm"] {
119
- padding: var(--space-0-5) var(--space-2);
120
- font-size: var(--font-size-2xs, 0.6875rem);
121
- letter-spacing: var(--tracking-wider);
120
+ padding: 0.2em 0.45em;
121
+ font-size: 0.6875rem;
122
122
  }
123
123
 
124
124
  .badge[data-size="lg"] {
125
- padding: var(--space-2) var(--space-4);
126
- font-size: var(--font-size-sm);
125
+ padding: 0.5em 0.8em;
126
+ font-size: var(--step--1);
127
127
  }
128
128
 
129
129
 
@@ -151,32 +151,9 @@
151
151
  min-inline-size: 1.5rem;
152
152
  justify-content: center;
153
153
  padding: var(--space-1);
154
- border-radius: var(--radius-full);
155
154
  font-variant-numeric: tabular-nums;
156
155
  }
157
156
 
158
157
 
159
- /* ========================================
160
- THEME-SPECIFIC STYLES
161
- ======================================== */
162
-
163
- /* Still: square badges */
164
- [data-motion="still"] .badge {
165
- border-radius: 0;
166
- letter-spacing: var(--tracking-wider);
167
- }
168
-
169
- /* Brutalist: hard edges, bold */
170
- [data-motion="brutalist"] .badge {
171
- border-radius: 0;
172
- text-transform: uppercase;
173
- font-weight: var(--weight-bold);
174
- border: 2px solid currentColor;
175
- background: transparent;
176
- }
177
158
 
178
- /* Tsunami: asymmetric corners */
179
- [data-motion="tsunami"] .badge {
180
- border-radius: var(--radius-asymmetric, 0 12px 0 0);
181
- }
182
159
  }