@omni-design/components 0.10.0 → 0.12.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 (53) hide show
  1. package/.claude/commands/ScanComponents.md +1 -1
  2. package/.claude/commands/ShareComponent.md +1 -1
  3. package/CLAUDE.md +5 -3
  4. package/dist/index.esm.js +3 -3
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/index.js +3 -3
  7. package/dist/index.js.map +1 -1
  8. package/dist/types/components/Avatar/AvatarGlyph.d.ts +5 -0
  9. package/dist/types/components/Avatar/index.d.ts +1 -0
  10. package/dist/types/components/Button/Button.d.ts +3 -1
  11. package/dist/types/components/ButtonGroup/ButtonGroup.d.ts +3 -2
  12. package/dist/types/components/Chip/Chip.d.ts +1 -1
  13. package/dist/types/components/Icon/Icon.d.ts +4 -0
  14. package/dist/types/components/IconBadge/IconBadge.d.ts +1 -1
  15. package/dist/types/components/Loader/Loader.d.ts +66 -0
  16. package/dist/types/components/Loader/index.d.ts +1 -0
  17. package/dist/types/components/MiniSwatch/MiniSwatch.d.ts +7 -0
  18. package/dist/types/components/MiniSwatch/index.d.ts +1 -0
  19. package/dist/types/components/Pagination/Pagination.d.ts +3 -1
  20. package/dist/types/components/Radio/Radio.d.ts +6 -2
  21. package/dist/types/components/Rating/Rating.d.ts +3 -1
  22. package/dist/types/components/Slider/Slider.d.ts +9 -3
  23. package/dist/types/components/Stepper/Stepper.d.ts +3 -1
  24. package/dist/types/components/Swatch/Swatch.d.ts +14 -0
  25. package/dist/types/components/Swatch/index.d.ts +1 -0
  26. package/dist/types/components/Switch/Switch.d.ts +24 -8
  27. package/dist/types/components/Switch/index.d.ts +1 -1
  28. package/dist/types/components/Tabs/Tabs.d.ts +17 -1
  29. package/dist/types/components/ToggleButton/index.d.ts +1 -1
  30. package/dist/types/components/ToggleButtonGroup/ToggleButtonGroup.d.ts +26 -42
  31. package/dist/types/components/index.d.ts +5 -0
  32. package/dist/types/docs/DocPanels.d.ts +39 -0
  33. package/dist/types/docs/components.d.ts +212 -0
  34. package/dist/types/docs/componentsData.d.ts +587 -0
  35. package/dist/types/docs/componentsForms.d.ts +597 -0
  36. package/dist/types/docs/componentsNav.d.ts +420 -0
  37. package/dist/types/docs/componentsOverlays.d.ts +379 -0
  38. package/dist/types/docs/componentsRest.d.ts +158 -0
  39. package/dist/types/docs/componentsSurfaces.d.ts +339 -0
  40. package/dist/types/docs/docsLink.d.ts +32 -0
  41. package/dist/types/docs/examples.d.ts +37 -0
  42. package/dist/types/docs/foundations.d.ts +28 -0
  43. package/dist/types/docs/index.d.ts +5 -0
  44. package/docs/components.md +71 -55
  45. package/package.json +1 -1
  46. package/public/styles/Dark-Mode.css +12056 -13009
  47. package/public/styles/Light-Mode.css +11240 -12370
  48. package/public/styles/base.css +364 -182
  49. package/public/styles/core.css +480 -123
  50. package/public/styles/foundation.css +124 -53
  51. package/public/styles/styles.css +5 -5
  52. package/public/styles/theme.json +2 -2
  53. package/public/styles/typography-tokens.css +686 -158
@@ -1,38 +1,7 @@
1
- /* ============================================================================
2
- * core.css — STATIC: lib-owned, do not regenerate per design system.
3
- * Platform-aware font overrides referencing brand tokens via var().
4
- * Edit by hand; do NOT overwrite from studio exports.
5
- * ============================================================================ */
6
-
7
- /* Any region that carries data-surface paints from the surface tokens it
8
- exposes. This is the "data-surface is the only way to change a region's
9
- background" contract — a consumer just sets data-surface="…" and the
10
- region paints itself. No more inline `background: var(--Background)` on
11
- every section wrapper. */
12
- [data-surface] {
13
- background: var(--Background);
14
- color: var(--Text);
15
- }
16
-
17
- /* NO bare-element appearance rule here, deliberately.
18
- *
19
- * This previously read `body, section { background; color }` so the app root
20
- * would paint without a wrapper. Two problems:
21
- *
22
- * 1. `section` matches at ANY depth, so every <section> in a consumer's app
23
- * got painted whether or not they opted in — including sections they had
24
- * styled themselves, and sections inside a region whose surface they had
25
- * already chosen.
26
- * 2. Painting <body> on import is the exact thing the design system contract
27
- * forbids: loading the CSS into an existing app silently changed its
28
- * background and text colour.
29
- *
30
- * The opt-in already exists and is one attribute. The [data-surface] rule above
31
- * covers it, so a consumer writes:
32
- *
33
- * <body data-surface="Surface">
34
- *
35
- * and gets the same paint, by asking for it. See "Page setup" in CLAUDE.md. */
1
+ @import url('https://fonts.googleapis.com/css2?family=Google+Sans+Flex:GRAD,ROND,opsz,slnt,wdth,wght@0..100,0..100,6..144,-10..0,25..151,1..1000&display=swap');
2
+ @import url('https://fonts.googleapis.com/css2?family=Raleway:wght@400&display=swap');
3
+ @import url('https://fonts.googleapis.com/css2?family=Google+Sans+Flex:wght@640&display=swap');
4
+ @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap');
36
5
 
37
6
  :root {
38
7
  --Body-Font-Family: var(--Set-Font-Family-Body);
@@ -40,16 +9,17 @@
40
9
  --Header-Font-Family: var(--Set-Font-Family-Header);
41
10
  --Font-Family-Header: var(--Set-Font-Family-Header);
42
11
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
12
+ --Header-Text-Transform: var(--Set-Header-Text-Transform, none);
13
+ --Header-Letter-Spacing: var(--Set-Header-Letter-Spacing, 0em);
43
14
  --Decorative-Font-Family: var(--Set-Font-Family-Decorative);
44
15
  --Decorative-Font-Weight: var(--Set-Font-Family-Decorative-Weight);
16
+ --Decorative-Text-Transform: var(--Set-Decorative-Text-Transform, none);
17
+ --Decorative-Letter-Spacing: var(--Set-Decorative-Letter-Spacing, 0em);
45
18
  --Body-Font-Weight: var(--Set-Font-Family-Body-Weight);
46
19
  --Body-Semibold-Font-Weight: var(--Set-Font-Family-Body-Semibold-Weight);
47
20
  --Body-Bold-Font-Weight: var(--Set-Font-Family-Body-Bold-Weight);
48
21
  --Cognitive-Multiplier: 1;
49
- --Dropshadow-Color: 20, 20, 20; /* fallback */
50
- /* Effect-Level-0 through Effect-Level-5 now live in base.css alongside
51
- the other component tokens. --Dropshadow-Color is still overridden
52
- per-theme in Light/Dark-Mode.css. */
22
+ --Dropshadow-Color: 20, 20, 20; /* fallback; overridden per-theme in Light/Dark-Mode.css */
53
23
  }
54
24
 
55
25
  /* Platform Font Overrides */
@@ -121,99 +91,395 @@
121
91
  --Platform-Label: "Desktop";
122
92
  --Button-Height: 32px;
123
93
  --Min-Button-Width: 80px;
124
- --Set-Font-Family-Header: 'Prata', serif;
125
- --Set-Font-Family-Header-Weight: 200;
126
- --Set-Font-Family-Decorative: 'Permanent Marker', sans-serif;
127
- --Set-Font-Family-Body: 'Roboto', sans-serif;
94
+ --Set-Font-Family-Header: 'Google Sans Flex', sans-serif;
95
+ --Set-Font-Family-Header-Weight: 640;
96
+ --Set-Header-Text-Transform: none;
97
+ --Set-Header-Letter-Spacing: -0.01em;
98
+ /* The four faces. Display is the expressive pick, Eyebrow is the OS UI stack
99
+ unless a design overrides it, Header is always the Flex face. */
100
+ --Set-Font-Family-Display: 'Raleway', sans-serif;
101
+ --Set-Font-Family-Eyebrow: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
102
+ /* Kept so designs saved before the four faces still resolve. */
103
+ --Set-Font-Family-Decorative: 'Raleway', sans-serif;
104
+ --Set-Font-Family-Decorative-Weight: 400;
105
+ --Set-Decorative-Text-Transform: none;
106
+ --Set-Decorative-Letter-Spacing: 0em;
107
+ --Set-Font-Family-Body: 'Poppins', sans-serif;
128
108
  --Set-Font-Family-Body-Weight: 400;
129
109
  --Set-Font-Family-Body-Semibold-Weight: 600;
130
110
  --Set-Font-Family-Body-Bold-Weight: 700;
131
-
132
- /* ── The four faces ───────────────────────────────────────────────────────
133
- Display is the expressive face, Header the heading face, Eyebrow the
134
- eyebrow/overline face, Body everything else. A studio export overrides
135
- the --Set-* inputs; the --Font-Family-* tokens below are what components
136
- read. The defaults here keep this design system rendering exactly as it
137
- did before the faces existed: Display followed Header, Eyebrow followed
138
- Decorative. A design system generated by the studio ships its own values
139
- — its Eyebrow default is the OS UI stack, not Decorative. */
140
- --Set-Font-Family-Display: var(--Set-Font-Family-Decorative);
141
- --Set-Font-Family-Eyebrow: var(--Set-Font-Family-Decorative);
142
-
143
- --Font-Family-Display: var(--Set-Font-Family-Display, var(--Set-Font-Family-Header));
144
- --Font-Family-Eyebrow: var(--Set-Font-Family-Eyebrow, var(--Decorative-Font-Family));
111
+ --Body-Font-Size: 16px;
112
+ --Body-Letter-Spacing: 0;
113
+ --Body-Line-Height: 24px;
114
+ --Body-Paragraph-Spacing: 16px;
115
+ /* Per-style ramp — generated from the same type scale that produces
116
+ typography-tokens.css, so a consumer that never sets data-platform gets
117
+ the identical Desktop values. Editing sizes here is wrong; edit
118
+ src/utils/typeScale.ts. */
119
+ /* Faces */
120
+ --Font-Family-Display: var(--Set-Font-Family-Display, var(--Platform-Font-Families-Decorative, var(--Set-Font-Family-Decorative)));
121
+ --Font-Family-Header: var(--Platform-Font-Families-Header, var(--Set-Font-Family-Header));
122
+ --Font-Family-Eyebrow: var(--Set-Font-Family-Eyebrow, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);
123
+ --Font-Family-Body: var(--Platform-Font-Families-Body, var(--Set-Font-Family-Body));
145
124
 
146
125
  /* Face weights */
147
- --Font-Weight-Display: var(--Set-Font-Family-Decorative-Weight, 400);
148
- --Font-Weight-Header: var(--Set-Font-Family-Header-Weight);
149
- --Font-Weight-Eyebrow: 600;
150
- --Font-Weight-Body: var(--Set-Font-Family-Body-Weight);
126
+ --Font-Weight-Display: 400;
127
+ --Font-Weight-Header: 640;
128
+ --Font-Weight-Eyebrow: 400;
129
+ --Font-Weight-Body: 400;
130
+ --Header-Clamped-Weight: 640;
151
131
 
152
- /* ── Variable-font axes — Header face only ────────────────────────────────
153
- Neutral defaults: this design system's header face is static, so the
154
- composed value is `normal` and nothing is applied. A design system on a
155
- variable face (Google Sans Flex and friends) overrides BOTH the axis
156
- tokens and the composed value — the studio always emits the pair.
157
- wght is deliberately absent: font-weight already carries it, and
158
- declaring it twice lets the two disagree. */
159
- --Font-Width-Header: 100;
160
- --Font-Optical-Size-Header: 16;
132
+ /* Variable-font axes */
133
+ --Font-Grade-Header: 50;
161
134
  --Font-Slant-Header: 0;
162
- --Font-Grade-Header: 0;
163
135
  --Font-Roundness-Header: 0;
164
- --Font-Variation-Header: normal;
136
+ --Font-Optical-Size-Header: 96;
137
+ --Font-Width-Header: 72;
138
+ --Font-Variation-Header: "GRAD" var(--Font-Grade-Header), "slnt" var(--Font-Slant-Header), "ROND" var(--Font-Roundness-Header), "opsz" var(--Font-Optical-Size-Header), "wdth" var(--Font-Width-Header);
165
139
 
166
- /* ── Display ramp ─────────────────────────────────────────────────────────
167
- Large and Medium belong in a header or hero area; Small is the step sized
168
- to sit inside a component. Mirrors the Desktop ramp in
169
- typography-tokens.css so display styles resolve without data-platform. */
170
- --Display-Large-Font-Size: 48px;
171
- --Display-Large-Font-Weight: 600;
172
- --Display-Large-Line-Height: 48px;
173
- --Display-Large-Letter-Spacing: 0px;
174
- --Display-Medium-Font-Size: 45px;
175
- --Display-Medium-Font-Weight: 600;
176
- --Display-Medium-Line-Height: 45px;
177
- --Display-Medium-Letter-Spacing: 0px;
178
- --Display-Small-Font-Size: 42px;
179
- --Display-Small-Font-Weight: 600;
180
- --Display-Small-Line-Height: 42px;
181
- --Display-Small-Letter-Spacing: 0px;
140
+ /* Display — Large and Medium belong in Header or Hero areas. Small is the one sized to sit inside a component — a card title, a stat, a pull quote. */
141
+ --Display-Large-Font-Family: var(--Font-Family-Display);
142
+ --Display-Large-Font-Size: 72px;
143
+ --Display-Large-Font-Weight: var(--Font-Weight-Display);
144
+ --Display-Large-Line-Height: 88px;
145
+ --Display-Large-Letter-Spacing: 0em;
146
+ --Display-Large-Text-Transform: none;
147
+ --Display-Medium-Font-Family: var(--Font-Family-Display);
148
+ --Display-Medium-Font-Size: 60px;
149
+ --Display-Medium-Font-Weight: var(--Font-Weight-Display);
150
+ --Display-Medium-Line-Height: 76px;
151
+ --Display-Medium-Letter-Spacing: 0em;
152
+ --Display-Medium-Text-Transform: none;
153
+ --Display-Small-Font-Family: var(--Font-Family-Display);
154
+ --Display-Small-Font-Size: 48px;
155
+ --Display-Small-Font-Weight: var(--Font-Weight-Display);
156
+ --Display-Small-Line-Height: 60px;
157
+ --Display-Small-Letter-Spacing: 0em;
158
+ --Display-Small-Text-Transform: none;
159
+ --Alt-Display-Large-Font-Family: var(--Font-Family-Display);
160
+ --Alt-Display-Large-Font-Size: 72px;
161
+ --Alt-Display-Large-Font-Weight: 900;
162
+ --Alt-Display-Large-Line-Height: 88px;
163
+ --Alt-Display-Large-Letter-Spacing: 0em;
164
+ --Alt-Display-Large-Text-Transform: none;
165
+ --Alt-Display-Medium-Font-Family: var(--Font-Family-Display);
166
+ --Alt-Display-Medium-Font-Size: 60px;
167
+ --Alt-Display-Medium-Font-Weight: 900;
168
+ --Alt-Display-Medium-Line-Height: 76px;
169
+ --Alt-Display-Medium-Letter-Spacing: 0em;
170
+ --Alt-Display-Medium-Text-Transform: none;
171
+ --Alt-Display-Small-Font-Family: var(--Font-Family-Display);
172
+ --Alt-Display-Small-Font-Size: 48px;
173
+ --Alt-Display-Small-Font-Weight: 900;
174
+ --Alt-Display-Small-Line-Height: 60px;
175
+ --Alt-Display-Small-Letter-Spacing: 0em;
176
+ --Alt-Display-Small-Text-Transform: none;
182
177
 
183
- --Body-Font-Size: 16px;
184
- --Body-Letter-Spacing: 0;
185
- --Body-Line-Height: 24px;
186
- --Body-Paragraph-Spacing: 16px;
187
- --H1-Font-Size: 40px;
188
- --H1-Line-Height: 40px;
189
- --H1-Letter-Spacing: -1px;
190
- --H1-Paragraph-Spacing: 32px;
191
- --H2-Font-Size: 32px;
192
- --H2-Line-Height: 40px;
193
- --H2-Letter-Spacing: -1px;
194
- --H2-Paragraph-Spacing: 24px;
195
- --H3-Font-Size: 28px;
196
- --H3-Line-Height: 36px;
197
- --H3-Letter-Spacing: -.5px;
198
- --H3-Paragraph-Spacing: 20px;
199
- --H4-Font-Size: 24px;
200
- --H4-Line-Height: 32px;
201
- --H4-Letter-Spacing: -.5px;
202
- --H4-Paragraph-Spacing: 16px;
203
- --H5-Font-Size: 20px;
204
- --H5-Line-Height: 28px;
205
- --H5-Letter-Spacing: 0px;
206
- --H5-Paragraph-Spacing: 12px;
207
- --H6-Font-Size: 18px;
208
- --H6-Line-Height: 26px;
209
- --H6-Letter-Spacing: 0px;
210
- --H6-Paragraph-Spacing: 12px;
178
+ /* Header */
179
+ --H1-Font-Family: var(--Font-Family-Header);
180
+ --H1-Font-Size: 48px;
181
+ --H1-Font-Weight: var(--Font-Weight-Header);
182
+ --H1-Line-Height: 56px;
183
+ --H1-Letter-Spacing: -0.0217em;
184
+ --H1-Text-Transform: none;
185
+ --H2-Font-Family: var(--Font-Family-Header);
186
+ --H2-Font-Size: 40px;
187
+ --H2-Font-Weight: var(--Font-Weight-Header);
188
+ --H2-Line-Height: 48px;
189
+ --H2-Letter-Spacing: -0.0163em;
190
+ --H2-Text-Transform: none;
191
+ --H3-Font-Family: var(--Font-Family-Header);
192
+ --H3-Font-Size: 32px;
193
+ --H3-Font-Weight: var(--Font-Weight-Header);
194
+ --H3-Line-Height: 40px;
195
+ --H3-Letter-Spacing: -0.011em;
196
+ --H3-Text-Transform: none;
197
+ --H4-Font-Family: var(--Font-Family-Header);
198
+ --H4-Font-Size: 24px;
199
+ --H4-Font-Weight: var(--Header-Clamped-Weight);
200
+ --H4-Line-Height: 32px;
201
+ --H4-Letter-Spacing: -0.0057em;
202
+ --H4-Text-Transform: none;
203
+ --H5-Font-Family: var(--Font-Family-Header);
204
+ --H5-Font-Size: 20px;
205
+ --H5-Font-Weight: var(--Header-Clamped-Weight);
206
+ --H5-Line-Height: 28px;
207
+ --H5-Letter-Spacing: -0.003em;
208
+ --H5-Text-Transform: none;
209
+ --H6-Font-Family: var(--Font-Family-Header);
210
+ --H6-Font-Size: 18px;
211
+ --H6-Font-Weight: var(--Header-Clamped-Weight);
212
+ --H6-Line-Height: 24px;
213
+ --H6-Letter-Spacing: -0.0017em;
214
+ --H6-Text-Transform: none;
215
+
216
+ /* Subtitle */
217
+ --Subtitle-Small-Font-Family: var(--Font-Family-Body);
218
+ --Subtitle-Small-Font-Size: 14px;
219
+ --Subtitle-Small-Font-Weight: 700;
220
+ --Subtitle-Small-Line-Height: 21px;
221
+ --Subtitle-Small-Letter-Spacing: 0em;
222
+ --Subtitle-Small-Text-Transform: none;
223
+ --Subtitle-Medium-Font-Family: var(--Font-Family-Body);
224
+ --Subtitle-Medium-Font-Size: 16px;
225
+ --Subtitle-Medium-Font-Weight: 700;
226
+ --Subtitle-Medium-Line-Height: 24px;
227
+ --Subtitle-Medium-Letter-Spacing: 0em;
228
+ --Subtitle-Medium-Text-Transform: none;
229
+ --Subtitle-Large-Font-Family: var(--Font-Family-Body);
230
+ --Subtitle-Large-Font-Size: 18px;
231
+ --Subtitle-Large-Font-Weight: 700;
232
+ --Subtitle-Large-Line-Height: 27px;
233
+ --Subtitle-Large-Letter-Spacing: 0em;
234
+ --Subtitle-Large-Text-Transform: none;
235
+
236
+ /* Body */
237
+ --Body-Small-Font-Family: var(--Font-Family-Body);
238
+ --Body-Small-Font-Size: 14px;
239
+ --Body-Small-Font-Weight: var(--Font-Weight-Body);
240
+ --Body-Small-Line-Height: 21px;
241
+ --Body-Small-Letter-Spacing: 0em;
242
+ --Body-Small-Text-Transform: none;
243
+ --Body-Small-Semibold-Font-Weight: 600;
244
+ --Body-Medium-Font-Family: var(--Font-Family-Body);
245
+ --Body-Medium-Font-Size: 16px;
246
+ --Body-Medium-Font-Weight: var(--Font-Weight-Body);
247
+ --Body-Medium-Line-Height: 24px;
248
+ --Body-Medium-Letter-Spacing: 0em;
249
+ --Body-Medium-Text-Transform: none;
250
+ --Body-Medium-Semibold-Font-Weight: 600;
251
+ --Body-Large-Font-Family: var(--Font-Family-Body);
252
+ --Body-Large-Font-Size: 18px;
253
+ --Body-Large-Font-Weight: var(--Font-Weight-Body);
254
+ --Body-Large-Line-Height: 27px;
255
+ --Body-Large-Letter-Spacing: 0em;
256
+ --Body-Large-Text-Transform: none;
257
+ --Body-Large-Semibold-Font-Weight: 600;
258
+
259
+ /* Caption */
260
+ --Caption-Small-Font-Family: var(--Font-Family-Body);
261
+ --Caption-Small-Font-Size: 12px;
262
+ --Caption-Small-Font-Weight: 500;
263
+ --Caption-Small-Line-Height: 18px;
264
+ --Caption-Small-Letter-Spacing: 0.0083em;
265
+ --Caption-Small-Text-Transform: none;
266
+ --Caption-Small-Bold-Font-Weight: 700;
267
+ --Caption-Small-Paragraph-Spacing: 24px;
268
+ --Caption-Font-Family: var(--Font-Family-Body);
269
+ --Caption-Font-Size: 14px;
270
+ --Caption-Font-Weight: 500;
271
+ --Caption-Line-Height: 21px;
272
+ --Caption-Letter-Spacing: 0.0071em;
273
+ --Caption-Text-Transform: none;
274
+ --Caption-Bold-Font-Weight: 700;
275
+ --Caption-Paragraph-Spacing: 28px;
276
+ --Caption-Large-Font-Family: var(--Font-Family-Body);
277
+ --Caption-Large-Font-Size: 16px;
278
+ --Caption-Large-Font-Weight: 500;
279
+ --Caption-Large-Line-Height: 24px;
280
+ --Caption-Large-Letter-Spacing: 0.0063em;
281
+ --Caption-Large-Text-Transform: none;
282
+ --Caption-Large-Bold-Font-Weight: 700;
283
+ --Caption-Large-Paragraph-Spacing: 32px;
284
+
285
+ /* Label */
286
+ --Label-ExtraSmall-Font-Family: var(--Font-Family-Body);
287
+ --Label-ExtraSmall-Font-Size: 11px;
288
+ --Label-ExtraSmall-Font-Weight: 600;
289
+ --Label-ExtraSmall-Line-Height: 16.5px;
290
+ --Label-ExtraSmall-Letter-Spacing: 0.0455em;
291
+ --Label-ExtraSmall-Text-Transform: none;
292
+ --Label-Small-Font-Family: var(--Font-Family-Body);
293
+ --Label-Small-Font-Size: 12.5px;
294
+ --Label-Small-Font-Weight: 600;
295
+ --Label-Small-Line-Height: 18.75px;
296
+ --Label-Small-Letter-Spacing: 0.02em;
297
+ --Label-Small-Text-Transform: none;
298
+ --Label-Small-All-Caps-Font-Family: var(--Font-Family-Body);
299
+ --Label-Small-All-Caps-Font-Size: 12.5px;
300
+ --Label-Small-All-Caps-Font-Weight: 600;
301
+ --Label-Small-All-Caps-Line-Height: 18.75px;
302
+ --Label-Small-All-Caps-Letter-Spacing: 0.02em;
303
+ --Label-Small-All-Caps-Text-Transform: uppercase;
304
+ --Label-Medium-Font-Family: var(--Font-Family-Body);
305
+ --Label-Medium-Font-Size: 16px;
306
+ --Label-Medium-Font-Weight: 600;
307
+ --Label-Medium-Line-Height: 24px;
308
+ --Label-Medium-Letter-Spacing: 0em;
309
+ --Label-Medium-Text-Transform: none;
310
+ --Label-Medium-All-Caps-Font-Family: var(--Font-Family-Body);
311
+ --Label-Medium-All-Caps-Font-Size: 16px;
312
+ --Label-Medium-All-Caps-Font-Weight: 600;
313
+ --Label-Medium-All-Caps-Line-Height: 24px;
314
+ --Label-Medium-All-Caps-Letter-Spacing: 0em;
315
+ --Label-Medium-All-Caps-Text-Transform: uppercase;
316
+ --Label-Large-Font-Family: var(--Font-Family-Body);
317
+ --Label-Large-Font-Size: 18px;
318
+ --Label-Large-Font-Weight: 600;
319
+ --Label-Large-Line-Height: 27px;
320
+ --Label-Large-Letter-Spacing: 0em;
321
+ --Label-Large-Text-Transform: none;
322
+ --Label-Large-All-Caps-Font-Family: var(--Font-Family-Body);
323
+ --Label-Large-All-Caps-Font-Size: 18px;
324
+ --Label-Large-All-Caps-Font-Weight: 600;
325
+ --Label-Large-All-Caps-Line-Height: 27px;
326
+ --Label-Large-All-Caps-Letter-Spacing: 0em;
327
+ --Label-Large-All-Caps-Text-Transform: uppercase;
328
+
329
+ /* Mobile-Nav-Label */
330
+ --Mobile-Nav-Label-Font-Family: var(--Font-Family-Body);
331
+ --Mobile-Nav-Label-Font-Size: 11px;
332
+ --Mobile-Nav-Label-Font-Weight: 600;
333
+ --Mobile-Nav-Label-Line-Height: 16.5px;
334
+ --Mobile-Nav-Label-Letter-Spacing: 0.0455em;
335
+ --Mobile-Nav-Label-Text-Transform: none;
336
+
337
+ /* Legal */
338
+ --Legal-Font-Family: var(--Font-Family-Body);
339
+ --Legal-Font-Size: 10px;
340
+ --Legal-Font-Weight: 400;
341
+ --Legal-Line-Height: 15px;
342
+ --Legal-Letter-Spacing: 0em;
343
+ --Legal-Text-Transform: none;
344
+ --Legal-Semibold-Font-Weight: 600;
345
+ --Legal-Paragraph-Spacing: 20px;
346
+
347
+ /* Eyebrow — Eyebrow label — uppercase and tracked. Sits above a heading. */
348
+ --Eyebrow-Small-Font-Size: 12px;
349
+ --Eyebrow-Small-Font-Weight: 600;
350
+ --Eyebrow-Small-Line-Height: 18px;
351
+ --Eyebrow-Small-Letter-Spacing: 0.06em;
352
+ --Eyebrow-Small-Text-Transform: uppercase;
353
+ --Overline-Small-Font-Size: var(--Eyebrow-Small-Font-Size);
354
+ --Overline-Small-Font-Weight: var(--Eyebrow-Small-Font-Weight);
355
+ --Overline-Small-Line-Height: var(--Eyebrow-Small-Line-Height);
356
+ --Overline-Small-Letter-Spacing: var(--Eyebrow-Small-Letter-Spacing);
357
+ --Overline-Small-Text-Transform: var(--Eyebrow-Small-Text-Transform);
358
+ --Eyebrow-Medium-Font-Size: 16px;
359
+ --Eyebrow-Medium-Font-Weight: 600;
360
+ --Eyebrow-Medium-Line-Height: 24px;
361
+ --Eyebrow-Medium-Letter-Spacing: 0.05em;
362
+ --Eyebrow-Medium-Text-Transform: uppercase;
363
+ --Overline-Medium-Font-Size: var(--Eyebrow-Medium-Font-Size);
364
+ --Overline-Medium-Font-Weight: var(--Eyebrow-Medium-Font-Weight);
365
+ --Overline-Medium-Line-Height: var(--Eyebrow-Medium-Line-Height);
366
+ --Overline-Medium-Letter-Spacing: var(--Eyebrow-Medium-Letter-Spacing);
367
+ --Overline-Medium-Text-Transform: var(--Eyebrow-Medium-Text-Transform);
368
+ --Eyebrow-Large-Font-Size: 18px;
369
+ --Eyebrow-Large-Font-Weight: 600;
370
+ --Eyebrow-Large-Line-Height: 27px;
371
+ --Eyebrow-Large-Letter-Spacing: 0.04em;
372
+ --Eyebrow-Large-Text-Transform: uppercase;
373
+ --Overline-Large-Font-Size: var(--Eyebrow-Large-Font-Size);
374
+ --Overline-Large-Font-Weight: var(--Eyebrow-Large-Font-Weight);
375
+ --Overline-Large-Line-Height: var(--Eyebrow-Large-Line-Height);
376
+ --Overline-Large-Letter-Spacing: var(--Eyebrow-Large-Letter-Spacing);
377
+ --Overline-Large-Text-Transform: var(--Eyebrow-Large-Text-Transform);
378
+
379
+ /* Number */
380
+ --Number-Small-Font-Family: var(--Font-Family-Body);
381
+ --Number-Small-Font-Size: 16px;
382
+ --Number-Small-Font-Weight: 700;
383
+ --Number-Small-Line-Height: 16px;
384
+ --Number-Small-Letter-Spacing: 0em;
385
+ --Number-Small-Text-Transform: none;
386
+ --Number-Medium-Font-Family: var(--Font-Family-Body);
387
+ --Number-Medium-Font-Size: 28px;
388
+ --Number-Medium-Font-Weight: 700;
389
+ --Number-Medium-Line-Height: 28px;
390
+ --Number-Medium-Letter-Spacing: 0em;
391
+ --Number-Medium-Text-Transform: none;
392
+ --Number-Large-Font-Family: var(--Font-Family-Body);
393
+ --Number-Large-Font-Size: 36px;
394
+ --Number-Large-Font-Weight: 700;
395
+ --Number-Large-Line-Height: 36px;
396
+ --Number-Large-Letter-Spacing: 0em;
397
+ --Number-Large-Text-Transform: none;
398
+
399
+ /* Button */
400
+ --Button-ExtraSmall-Font-Family: var(--Font-Family-Body);
401
+ --Button-ExtraSmall-Font-Size: 11px;
402
+ --Button-ExtraSmall-Font-Weight: 600;
403
+ --Button-ExtraSmall-Line-Height: 11px;
404
+ --Button-ExtraSmall-Letter-Spacing: 0em;
405
+ --Button-ExtraSmall-Text-Transform: none;
406
+ --Button-Small-Font-Family: var(--Font-Family-Body);
407
+ --Button-Small-Font-Size: 14px;
408
+ --Button-Small-Font-Weight: 600;
409
+ --Button-Small-Line-Height: 14px;
410
+ --Button-Small-Letter-Spacing: 0em;
411
+ --Button-Small-Text-Transform: none;
412
+ --Button-Medium-Font-Family: var(--Font-Family-Body);
413
+ --Button-Medium-Font-Size: 16px;
414
+ --Button-Medium-Font-Weight: 600;
415
+ --Button-Medium-Line-Height: 16px;
416
+ --Button-Medium-Letter-Spacing: 0em;
417
+ --Button-Medium-Text-Transform: none;
418
+ --Button-Standard-Font-Size: var(--Button-Medium-Font-Size);
419
+ --Button-Standard-Font-Weight: var(--Button-Medium-Font-Weight);
420
+ --Button-Standard-Line-Height: var(--Button-Medium-Line-Height);
421
+ --Button-Standard-Letter-Spacing: var(--Button-Medium-Letter-Spacing);
422
+ --Button-Large-Font-Family: var(--Font-Family-Body);
423
+ --Button-Large-Font-Size: 24px;
424
+ --Button-Large-Font-Weight: 600;
425
+ --Button-Large-Line-Height: 24px;
426
+ --Button-Large-Letter-Spacing: 0em;
427
+ --Button-Large-Text-Transform: none;
428
+
429
+ /* Badge */
430
+ --Badge-Font-Family: var(--Font-Family-Body);
431
+ --Badge-Font-Size: 11px;
432
+ --Badge-Font-Weight: 600;
433
+ --Badge-Line-Height: 12px;
434
+ --Badge-Letter-Spacing: 0em;
435
+ --Badge-Text-Transform: none;
211
436
  --Label-Font-Size: 14px;
212
437
  --Label-Line-Height: 20px;
213
438
  --Label-Letter-Spacing: 0px;
214
439
  --Label-Paragraph-Spacing: 4px;
215
440
  --Button-Font-Size: 16px;
216
441
  --Button-Line-Height: 20px;
442
+ /* Bevel geometry for ALL THREE sizes — derived from THIS platform's button
443
+ heights, which is why it lives beside them rather than in foundation.css.
444
+ Each [data-platform] block below re-emits all three for its own heights.
445
+ It used to re-emit the MEDIUM set only, so a small or large button wore
446
+ Desktop's bevel on every platform. */
447
+ --Button-Highlight-Offset-x: 0px;
448
+ --Button-Highlight-Offset-y: 0px;
449
+ --Button-Highlight-Blur-Radius: 0px;
450
+ --Button-Highlight-Spread: 0px;
451
+ --Button-Lowlight-Offset-x: 0px;
452
+ --Button-Lowlight-Offset-y: 0px;
453
+ --Button-Lowlight-Blur-Radius: 0px;
454
+ --Button-Lowlight-Spread: 0px;
455
+ --Sm-Button-Highlight-Offset-x: 0px;
456
+ --Sm-Button-Highlight-Offset-y: 0px;
457
+ --Sm-Button-Highlight-Blur-Radius: 0px;
458
+ --Sm-Button-Highlight-Spread: 0px;
459
+ --Sm-Button-Lowlight-Offset-x: 0px;
460
+ --Sm-Button-Lowlight-Offset-y: 0px;
461
+ --Sm-Button-Lowlight-Blur-Radius: 0px;
462
+ --Sm-Button-Lowlight-Spread: 0px;
463
+ --Lg-Button-Highlight-Offset-x: 0px;
464
+ --Lg-Button-Highlight-Offset-y: 0px;
465
+ --Lg-Button-Highlight-Blur-Radius: 0px;
466
+ --Lg-Button-Highlight-Spread: 0px;
467
+ --Lg-Button-Lowlight-Offset-x: 0px;
468
+ --Lg-Button-Lowlight-Offset-y: 0px;
469
+ --Lg-Button-Lowlight-Blur-Radius: 0px;
470
+ --Lg-Button-Lowlight-Spread: 0px;
471
+ /* Hit target. The SMALL button keeps its visual size on every platform; the
472
+ lib wraps it in a box that grows to --Target using --Platform-Spacer, so
473
+ the button looks identical while the tappable area meets the platform
474
+ minimum. */
475
+ --Target: 24px;
476
+ --Platform-Spacer: 4px;
477
+ /* Floating overlays. Desktop reserves no system chrome, so these are the
478
+ clearance alone — stated rather than left to fall back, because an unset
479
+ custom property paints nothing and reports nothing. */
480
+ --SnackBar-Top: 24px;
481
+ --SnackBar-Bottom: 24px;
482
+ --Overlay-Clearance: 24px;
217
483
  }
218
484
 
219
485
  /* iOS Mobile */
@@ -222,6 +488,36 @@
222
488
  --Platform-Label: "IOS-Mobile";
223
489
  --Button-Height: 44px;
224
490
  --Min-Stack-Gap: 10px;
491
+ --Button-Highlight-Offset-x: 0px;
492
+ --Button-Highlight-Offset-y: 0px;
493
+ --Button-Highlight-Blur-Radius: 0px;
494
+ --Button-Highlight-Spread: 0px;
495
+ --Button-Lowlight-Offset-x: 0px;
496
+ --Button-Lowlight-Offset-y: 0px;
497
+ --Button-Lowlight-Blur-Radius: 0px;
498
+ --Button-Lowlight-Spread: 0px;
499
+ --Sm-Button-Highlight-Offset-x: 0px;
500
+ --Sm-Button-Highlight-Offset-y: 0px;
501
+ --Sm-Button-Highlight-Blur-Radius: 0px;
502
+ --Sm-Button-Highlight-Spread: 0px;
503
+ --Sm-Button-Lowlight-Offset-x: 0px;
504
+ --Sm-Button-Lowlight-Offset-y: 0px;
505
+ --Sm-Button-Lowlight-Blur-Radius: 0px;
506
+ --Sm-Button-Lowlight-Spread: 0px;
507
+ --Lg-Button-Highlight-Offset-x: 0px;
508
+ --Lg-Button-Highlight-Offset-y: 0px;
509
+ --Lg-Button-Highlight-Blur-Radius: 0px;
510
+ --Lg-Button-Highlight-Spread: 0px;
511
+ --Lg-Button-Lowlight-Offset-x: 0px;
512
+ --Lg-Button-Lowlight-Offset-y: 0px;
513
+ --Lg-Button-Lowlight-Blur-Radius: 0px;
514
+ --Lg-Button-Lowlight-Spread: 0px;
515
+ --Target: 44px;
516
+ --Platform-Spacer: 10px;
517
+ /* Floating overlays — the platform's chrome plus room for a shadow */
518
+ --SnackBar-Top: 98px;
519
+ --SnackBar-Bottom: 58px;
520
+ --Overlay-Clearance: 24px;
225
521
  --Body-Font-Size: 16px;
226
522
  --Body-Letter-Spacing: -.5px;
227
523
  --Body-Line-Height: 24px;
@@ -262,8 +558,38 @@
262
558
  [data-platform="IOS-Tablet"] {
263
559
  --Container-Padding: var(--Sizing-3);
264
560
  --Platform-Label: "IOS-Tablet";
265
- --Button-Height: 48px;
561
+ --Button-Height: 44px;
266
562
  --Min-Stack-Gap: 10px;
563
+ --Button-Highlight-Offset-x: 0px;
564
+ --Button-Highlight-Offset-y: 0px;
565
+ --Button-Highlight-Blur-Radius: 0px;
566
+ --Button-Highlight-Spread: 0px;
567
+ --Button-Lowlight-Offset-x: 0px;
568
+ --Button-Lowlight-Offset-y: 0px;
569
+ --Button-Lowlight-Blur-Radius: 0px;
570
+ --Button-Lowlight-Spread: 0px;
571
+ --Sm-Button-Highlight-Offset-x: 0px;
572
+ --Sm-Button-Highlight-Offset-y: 0px;
573
+ --Sm-Button-Highlight-Blur-Radius: 0px;
574
+ --Sm-Button-Highlight-Spread: 0px;
575
+ --Sm-Button-Lowlight-Offset-x: 0px;
576
+ --Sm-Button-Lowlight-Offset-y: 0px;
577
+ --Sm-Button-Lowlight-Blur-Radius: 0px;
578
+ --Sm-Button-Lowlight-Spread: 0px;
579
+ --Lg-Button-Highlight-Offset-x: 0px;
580
+ --Lg-Button-Highlight-Offset-y: 0px;
581
+ --Lg-Button-Highlight-Blur-Radius: 0px;
582
+ --Lg-Button-Highlight-Spread: 0px;
583
+ --Lg-Button-Lowlight-Offset-x: 0px;
584
+ --Lg-Button-Lowlight-Offset-y: 0px;
585
+ --Lg-Button-Lowlight-Blur-Radius: 0px;
586
+ --Lg-Button-Lowlight-Spread: 0px;
587
+ --Target: 44px;
588
+ --Platform-Spacer: 10px;
589
+ /* Floating overlays — the platform's chrome plus room for a shadow */
590
+ --SnackBar-Top: 98px;
591
+ --SnackBar-Bottom: 44px;
592
+ --Overlay-Clearance: 24px;
267
593
  --Body-Font-Size: 17px;
268
594
  --Body-Letter-Spacing: -.5px;
269
595
  --Body-Line-Height: 25.5px;
@@ -306,6 +632,36 @@
306
632
  --Platform-Label: "Android";
307
633
  --Button-Height: 48px;
308
634
  --Min-Stack-Gap: 12px;
635
+ --Button-Highlight-Offset-x: 0px;
636
+ --Button-Highlight-Offset-y: 0px;
637
+ --Button-Highlight-Blur-Radius: 0px;
638
+ --Button-Highlight-Spread: 0px;
639
+ --Button-Lowlight-Offset-x: 0px;
640
+ --Button-Lowlight-Offset-y: 0px;
641
+ --Button-Lowlight-Blur-Radius: 0px;
642
+ --Button-Lowlight-Spread: 0px;
643
+ --Sm-Button-Highlight-Offset-x: 0px;
644
+ --Sm-Button-Highlight-Offset-y: 0px;
645
+ --Sm-Button-Highlight-Blur-Radius: 0px;
646
+ --Sm-Button-Highlight-Spread: 0px;
647
+ --Sm-Button-Lowlight-Offset-x: 0px;
648
+ --Sm-Button-Lowlight-Offset-y: 0px;
649
+ --Sm-Button-Lowlight-Blur-Radius: 0px;
650
+ --Sm-Button-Lowlight-Spread: 0px;
651
+ --Lg-Button-Highlight-Offset-x: 0px;
652
+ --Lg-Button-Highlight-Offset-y: 0px;
653
+ --Lg-Button-Highlight-Blur-Radius: 0px;
654
+ --Lg-Button-Highlight-Spread: 0px;
655
+ --Lg-Button-Lowlight-Offset-x: 0px;
656
+ --Lg-Button-Lowlight-Offset-y: 0px;
657
+ --Lg-Button-Lowlight-Blur-Radius: 0px;
658
+ --Lg-Button-Lowlight-Spread: 0px;
659
+ --Target: 48px;
660
+ --Platform-Spacer: 12px;
661
+ /* Floating overlays — the platform's chrome plus room for a shadow */
662
+ --SnackBar-Top: 112px;
663
+ --SnackBar-Bottom: 48px;
664
+ --Overlay-Clearance: 24px;
309
665
  --Body-Font-Size: 16px;
310
666
  --Body-Line-Height: 24px;
311
667
  --Body-Letter-Spacing: .5px;
@@ -343,25 +699,26 @@
343
699
  }
344
700
 
345
701
  /* Decorative Font Application */
346
- /* Typography variants: Header uses body font by default, Decorative Header uses decorative font */
702
+ /* In decorative mode, eyebrows swap onto the Display face. Re-pointing the
703
+ face token is all it takes — every style wearing that face follows, because
704
+ each one's --<style>-Font-Family is relative to it. */
347
705
 
348
706
  [data-surface="Surface"] [data-decorative],
349
707
  [data-surface="Surface-Dim"] [data-decorative],
350
708
  [data-surface="Surface-Dimmest"] [data-decorative],
351
- [data-surface="Surface-Bright"] [data-decorative],
352
- [data-surface="Surface-Brightest"] [data-decorative] {
709
+ [data-surface="Surface-Bright"] [data-decorative] {
353
710
  --Font-Family-Header: var(--Set-Font-Family-Header);
354
711
  --Font-Family-Header-Weight: var(--Set-Font-Family-Header-Weight);
355
- --Font-Family-Overline: var(--Set-Font-Family-Decorative);
712
+ --Font-Family-Eyebrow: var(--Font-Family-Display);
356
713
  }
357
714
 
358
715
  /* Explicit decorative variants — always available regardless of mode */
359
716
  [data-typography="decorative-header"] {
360
- font-family: var(--Set-Font-Family-Header);
717
+ font-family: var(--Font-Family-Header);
361
718
  font-weight: var(--Set-Font-Family-Header-Weight);
362
719
  }
363
720
  [data-typography="decorative-overline"] {
364
- font-family: var(--Set-Font-Family-Decorative);
721
+ font-family: var(--Font-Family-Display);
365
722
  }
366
723
 
367
724
  /* Cognitive Accessibility Overrides */