@omni-design/components 0.11.0 → 0.13.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 (64) 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/OmniDesignProvider.esm.js +1 -1
  5. package/dist/OmniDesignProvider.esm.js.map +1 -1
  6. package/dist/OmniDesignProvider.js +1 -1
  7. package/dist/OmniDesignProvider.js.map +1 -1
  8. package/dist/index.esm.js +8 -3
  9. package/dist/index.esm.js.map +1 -1
  10. package/dist/index.js +8 -3
  11. package/dist/index.js.map +1 -1
  12. package/dist/types/components/BackgroundPicker.d.ts +1 -1
  13. package/dist/types/components/BrandIcon/BrandIcon.d.ts +20 -0
  14. package/dist/types/components/BrandIcon/index.d.ts +1 -0
  15. package/dist/types/components/Button/Button.d.ts +3 -1
  16. package/dist/types/components/ButtonGroup/ButtonGroup.d.ts +3 -2
  17. package/dist/types/components/Charts/tokens.d.ts +1 -1
  18. package/dist/types/components/Chip/Chip.d.ts +1 -1
  19. package/dist/types/components/Footer/Footer.d.ts +3 -1
  20. package/dist/types/components/Foundations/FoundationTopic.d.ts +4 -0
  21. package/dist/types/components/Foundations/HowToSlot.d.ts +16 -0
  22. package/dist/types/components/Foundations/TokenRoles.d.ts +19 -0
  23. package/dist/types/components/Foundations/TypographySummary.d.ts +2 -0
  24. package/dist/types/components/IconBadge/IconBadge.d.ts +1 -1
  25. package/dist/types/components/Loader/Loader.d.ts +66 -0
  26. package/dist/types/components/Loader/index.d.ts +1 -0
  27. package/dist/types/components/MiniSwatch/MiniSwatch.d.ts +7 -0
  28. package/dist/types/components/MiniSwatch/index.d.ts +1 -0
  29. package/dist/types/components/ShowcaseHeader.d.ts +5 -0
  30. package/dist/types/components/Swatch/Swatch.d.ts +14 -0
  31. package/dist/types/components/Swatch/index.d.ts +1 -0
  32. package/dist/types/components/Switch/Switch.d.ts +24 -8
  33. package/dist/types/components/Switch/index.d.ts +1 -1
  34. package/dist/types/components/TextField/TextField.d.ts +1 -1
  35. package/dist/types/components/Typography/Typography.d.ts +54 -1
  36. package/dist/types/components/Typography/index.d.ts +1 -1
  37. package/dist/types/components/_states.d.ts +1 -1
  38. package/dist/types/components/a11yPanel.d.ts +37 -0
  39. package/dist/types/components/index.d.ts +7 -1
  40. package/dist/types/docs/DocPanels.d.ts +25 -0
  41. package/dist/types/docs/components.d.ts +220 -0
  42. package/dist/types/docs/componentsData.d.ts +587 -0
  43. package/dist/types/docs/componentsForms.d.ts +597 -0
  44. package/dist/types/docs/componentsNav.d.ts +420 -0
  45. package/dist/types/docs/componentsOverlays.d.ts +379 -0
  46. package/dist/types/docs/componentsRest.d.ts +158 -0
  47. package/dist/types/docs/componentsSurfaces.d.ts +429 -0
  48. package/dist/types/docs/docsLink.d.ts +32 -0
  49. package/dist/types/docs/examples.d.ts +48 -0
  50. package/dist/types/docs/figmaHowTo.d.ts +28 -0
  51. package/dist/types/docs/figmaLinks.d.ts +58 -0
  52. package/dist/types/docs/foundations.d.ts +40 -0
  53. package/dist/types/docs/index.d.ts +5 -0
  54. package/docs/components.md +71 -55
  55. package/package.json +4 -2
  56. package/public/styles/Dark-Mode.css +12062 -13009
  57. package/public/styles/Light-Mode.css +11246 -12370
  58. package/public/styles/base.css +387 -182
  59. package/public/styles/core.css +569 -133
  60. package/public/styles/foundation.css +142 -53
  61. package/public/styles/styles.css +5 -5
  62. package/public/styles/theme.json +2 -2
  63. package/public/styles/typography-tokens.css +873 -96
  64. package/dist/types/theme/useThemeMode.d.ts +0 -4
@@ -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,20 +9,21 @@
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 */
56
- [data-platform="IOS-Mobile"][data-fonts] {
26
+ [data-device="IOS-Mobile"][data-fonts] {
57
27
  --Body-Font-Family: var(--Set-Font-Family-Body);
58
28
  --Header-Font-Family: var(--Set-Font-Family-Header);
59
29
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
@@ -63,7 +33,7 @@
63
33
  --Body-Semibold-Font-Weight: var(--Set-Font-Family-Body-Semibold-Weight);
64
34
  --Body-Bold-Font-Weight: var(--Set-Font-Family-Body-Bold-Weight);
65
35
  }
66
- [data-platform="IOS-Tablet"][data-fonts] {
36
+ [data-device="IOS-Tablet"][data-fonts] {
67
37
  --Body-Font-Family: var(--Set-Font-Family-Body);
68
38
  --Header-Font-Family: var(--Set-Font-Family-Header);
69
39
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
@@ -73,7 +43,7 @@
73
43
  --Body-Semibold-Font-Weight: var(--Set-Font-Family-Body-Semibold-Weight);
74
44
  --Body-Bold-Font-Weight: var(--Set-Font-Family-Body-Bold-Weight);
75
45
  }
76
- [data-platform="Android"][data-fonts] {
46
+ [data-device="Android"][data-fonts] {
77
47
  --Body-Font-Family: var(--Set-Font-Family-Body);
78
48
  --Header-Font-Family: var(--Set-Font-Family-Header);
79
49
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
@@ -84,7 +54,7 @@
84
54
  --Body-Bold-Font-Weight: var(--Set-Font-Family-Body-Bold-Weight);
85
55
  }
86
56
 
87
- [data-platform="IOS-Mobile"][data-fonts="Default"] {
57
+ [data-device="IOS-Mobile"][data-fonts="Default"] {
88
58
  --Body-Font-Family: "SF Pro";
89
59
  --Header-Font-Family: "SF Pro";
90
60
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
@@ -94,7 +64,7 @@
94
64
  --Body-Semibold-Font-Weight: var(--Set-Font-Family-Body-Semibold-Weight);
95
65
  --Body-Bold-Font-Weight: var(--Set-Font-Family-Body-Bold-Weight);
96
66
  }
97
- [data-platform="IOS-Tablet"][data-fonts="Default"] {
67
+ [data-device="IOS-Tablet"][data-fonts="Default"] {
98
68
  --Body-Font-Family: "SF Pro";
99
69
  --Header-Font-Family: "SF Pro";
100
70
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
@@ -104,7 +74,7 @@
104
74
  --Body-Semibold-Font-Weight: var(--Set-Font-Family-Body-Semibold-Weight);
105
75
  --Body-Bold-Font-Weight: var(--Set-Font-Family-Body-Bold-Weight);
106
76
  }
107
- [data-platform="Android"][data-fonts="Default"] {
77
+ [data-device="Android"][data-fonts="Default"] {
108
78
  --Body-Font-Family: "Roboto";
109
79
  --Header-Font-Family: "Roboto";
110
80
  --Header-Font-Weight: var(--Set-Font-Family-Header-Weight);
@@ -121,107 +91,433 @@
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-device 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 */
161
133
  --Font-Slant-Header: 0;
162
- --Font-Grade-Header: 0;
134
+ --Font-Grade-Header: 50;
135
+ --Font-Width-Header: 72;
163
136
  --Font-Roundness-Header: 0;
164
- --Font-Variation-Header: normal;
137
+ --Font-Optical-Size-Header: 96;
138
+ --Font-Variation-Header: "slnt" var(--Font-Slant-Header), "GRAD" var(--Font-Grade-Header), "wdth" var(--Font-Width-Header), "ROND" var(--Font-Roundness-Header), "opsz" var(--Font-Optical-Size-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-device] 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 */
220
- [data-platform="IOS-Mobile"] {
486
+ [data-device="IOS-Mobile"] {
221
487
  --Container-Padding: var(--Sizing-2);
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;
@@ -259,11 +555,41 @@
259
555
  }
260
556
 
261
557
  /* iOS Tablet */
262
- [data-platform="IOS-Tablet"] {
558
+ [data-device="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;
@@ -300,12 +626,121 @@
300
626
  --Button-Line-Height: 21px;
301
627
  }
302
628
 
303
- /* Android */
304
- [data-platform="Android"] {
629
+ /* Android, a block each.
630
+ Android-Tablet and Android-Mobile carry identical METRICS — Figma gives
631
+ both a 48px button and a 12px spacer — so these two blocks hold the same
632
+ values. They are written separately rather than sharing a selector list
633
+ because every other platform has a block of its own, and a reader checking
634
+ "is this platform covered" should find one answer in one shape. The two
635
+ exist as separate devices because TYPOGRAPHY differs between them. */
636
+ /* Android tablet */
637
+ [data-device="Android-Tablet"] {
638
+ --Container-Padding: var(--Sizing-2);
639
+ --Platform-Label: "Android";
640
+ --Button-Height: 48px;
641
+ --Min-Stack-Gap: 12px;
642
+ --Button-Highlight-Offset-x: 0px;
643
+ --Button-Highlight-Offset-y: 0px;
644
+ --Button-Highlight-Blur-Radius: 0px;
645
+ --Button-Highlight-Spread: 0px;
646
+ --Button-Lowlight-Offset-x: 0px;
647
+ --Button-Lowlight-Offset-y: 0px;
648
+ --Button-Lowlight-Blur-Radius: 0px;
649
+ --Button-Lowlight-Spread: 0px;
650
+ --Sm-Button-Highlight-Offset-x: 0px;
651
+ --Sm-Button-Highlight-Offset-y: 0px;
652
+ --Sm-Button-Highlight-Blur-Radius: 0px;
653
+ --Sm-Button-Highlight-Spread: 0px;
654
+ --Sm-Button-Lowlight-Offset-x: 0px;
655
+ --Sm-Button-Lowlight-Offset-y: 0px;
656
+ --Sm-Button-Lowlight-Blur-Radius: 0px;
657
+ --Sm-Button-Lowlight-Spread: 0px;
658
+ --Lg-Button-Highlight-Offset-x: 0px;
659
+ --Lg-Button-Highlight-Offset-y: 0px;
660
+ --Lg-Button-Highlight-Blur-Radius: 0px;
661
+ --Lg-Button-Highlight-Spread: 0px;
662
+ --Lg-Button-Lowlight-Offset-x: 0px;
663
+ --Lg-Button-Lowlight-Offset-y: 0px;
664
+ --Lg-Button-Lowlight-Blur-Radius: 0px;
665
+ --Lg-Button-Lowlight-Spread: 0px;
666
+ --Target: 48px;
667
+ --Platform-Spacer: 12px;
668
+ /* Floating overlays — the platform's chrome plus room for a shadow */
669
+ --SnackBar-Top: 112px;
670
+ --SnackBar-Bottom: 48px;
671
+ --Overlay-Clearance: 24px;
672
+ --Body-Font-Size: 16px;
673
+ --Body-Line-Height: 24px;
674
+ --Body-Letter-Spacing: .5px;
675
+ --Body-Paragraph-Spacing: 16px;
676
+ --H1-Font-Size: 36px;
677
+ --H1-Line-Height: 40px;
678
+ --H1-Letter-Spacing: -.5px;
679
+ --H1-Paragraph-Spacing: 20px;
680
+ --H2-Font-Size: 28px;
681
+ --H2-Line-Height: 36px;
682
+ --H2-Letter-Spacing: -.5px;
683
+ --H2-Paragraph-Spacing: 20px;
684
+ --H3-Font-Size: 24px;
685
+ --H3-Line-Height: 32px;
686
+ --H3-Letter-Spacing: 0px;
687
+ --H3-Paragraph-Spacing: 16px;
688
+ --H4-Font-Size: 20px;
689
+ --H4-Line-Height: 28px;
690
+ --H4-Letter-Spacing: 0px;
691
+ --H4-Paragraph-Spacing: 12px;
692
+ --H5-Font-Size: 18px;
693
+ --H5-Line-Height: 26px;
694
+ --H5-Letter-Spacing: 0px;
695
+ --H5-Paragraph-Spacing: 12px;
696
+ --H6-Font-Size: 16px;
697
+ --H6-Line-Height: 24px;
698
+ --H6-Letter-Spacing: .5px;
699
+ --H6-Paragraph-Spacing: 8px;
700
+ --Label-Font-Size: 13px;
701
+ --Label-Line-Height: 18px;
702
+ --Label-Letter-Spacing: 0px;
703
+ --Label-Paragraph-Spacing: 4px;
704
+ --Button-Font-Size: 16px;
705
+ --Button-Line-Height: 20px;
706
+ }
707
+
708
+ /* Android phone */
709
+ [data-device="Android-Mobile"] {
305
710
  --Container-Padding: var(--Sizing-2);
306
711
  --Platform-Label: "Android";
307
712
  --Button-Height: 48px;
308
713
  --Min-Stack-Gap: 12px;
714
+ --Button-Highlight-Offset-x: 0px;
715
+ --Button-Highlight-Offset-y: 0px;
716
+ --Button-Highlight-Blur-Radius: 0px;
717
+ --Button-Highlight-Spread: 0px;
718
+ --Button-Lowlight-Offset-x: 0px;
719
+ --Button-Lowlight-Offset-y: 0px;
720
+ --Button-Lowlight-Blur-Radius: 0px;
721
+ --Button-Lowlight-Spread: 0px;
722
+ --Sm-Button-Highlight-Offset-x: 0px;
723
+ --Sm-Button-Highlight-Offset-y: 0px;
724
+ --Sm-Button-Highlight-Blur-Radius: 0px;
725
+ --Sm-Button-Highlight-Spread: 0px;
726
+ --Sm-Button-Lowlight-Offset-x: 0px;
727
+ --Sm-Button-Lowlight-Offset-y: 0px;
728
+ --Sm-Button-Lowlight-Blur-Radius: 0px;
729
+ --Sm-Button-Lowlight-Spread: 0px;
730
+ --Lg-Button-Highlight-Offset-x: 0px;
731
+ --Lg-Button-Highlight-Offset-y: 0px;
732
+ --Lg-Button-Highlight-Blur-Radius: 0px;
733
+ --Lg-Button-Highlight-Spread: 0px;
734
+ --Lg-Button-Lowlight-Offset-x: 0px;
735
+ --Lg-Button-Lowlight-Offset-y: 0px;
736
+ --Lg-Button-Lowlight-Blur-Radius: 0px;
737
+ --Lg-Button-Lowlight-Spread: 0px;
738
+ --Target: 48px;
739
+ --Platform-Spacer: 12px;
740
+ /* Floating overlays — the platform's chrome plus room for a shadow */
741
+ --SnackBar-Top: 112px;
742
+ --SnackBar-Bottom: 48px;
743
+ --Overlay-Clearance: 24px;
309
744
  --Body-Font-Size: 16px;
310
745
  --Body-Line-Height: 24px;
311
746
  --Body-Letter-Spacing: .5px;
@@ -343,25 +778,26 @@
343
778
  }
344
779
 
345
780
  /* Decorative Font Application */
346
- /* Typography variants: Header uses body font by default, Decorative Header uses decorative font */
781
+ /* In decorative mode, eyebrows swap onto the Display face. Re-pointing the
782
+ face token is all it takes — every style wearing that face follows, because
783
+ each one's --<style>-Font-Family is relative to it. */
347
784
 
348
785
  [data-surface="Surface"] [data-decorative],
349
786
  [data-surface="Surface-Dim"] [data-decorative],
350
787
  [data-surface="Surface-Dimmest"] [data-decorative],
351
- [data-surface="Surface-Bright"] [data-decorative],
352
- [data-surface="Surface-Brightest"] [data-decorative] {
788
+ [data-surface="Surface-Bright"] [data-decorative] {
353
789
  --Font-Family-Header: var(--Set-Font-Family-Header);
354
790
  --Font-Family-Header-Weight: var(--Set-Font-Family-Header-Weight);
355
- --Font-Family-Overline: var(--Set-Font-Family-Decorative);
791
+ --Font-Family-Eyebrow: var(--Font-Family-Display);
356
792
  }
357
793
 
358
794
  /* Explicit decorative variants — always available regardless of mode */
359
795
  [data-typography="decorative-header"] {
360
- font-family: var(--Set-Font-Family-Header);
796
+ font-family: var(--Font-Family-Header);
361
797
  font-weight: var(--Set-Font-Family-Header-Weight);
362
798
  }
363
799
  [data-typography="decorative-overline"] {
364
- font-family: var(--Set-Font-Family-Decorative);
800
+ font-family: var(--Font-Family-Display);
365
801
  }
366
802
 
367
803
  /* Cognitive Accessibility Overrides */