@adia-ai/web-components 0.6.47 → 0.6.49

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 (68) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/components/badge/badge.d.ts +14 -0
  3. package/components/button/button.a2ui.json +1 -4
  4. package/components/button/button.d.ts +1 -1
  5. package/components/button/button.yaml +0 -3
  6. package/components/calendar-grid/calendar-grid.a2ui.json +5 -0
  7. package/components/calendar-grid/calendar-grid.class.js +8 -1
  8. package/components/calendar-grid/calendar-grid.css +20 -11
  9. package/components/calendar-grid/calendar-grid.d.ts +2 -0
  10. package/components/calendar-grid/calendar-grid.yaml +8 -0
  11. package/components/calendar-picker/calendar-picker.css +19 -10
  12. package/components/card/card.a2ui.json +2 -5
  13. package/components/card/card.css +3 -1
  14. package/components/card/card.d.ts +2 -2
  15. package/components/card/card.yaml +2 -5
  16. package/components/date-range-picker/date-range-picker.class.js +9 -0
  17. package/components/date-range-picker/date-range-picker.css +10 -1
  18. package/components/field/field.test.js +7 -2
  19. package/components/heatmap/heatmap.a2ui.json +2 -0
  20. package/components/heatmap/heatmap.d.ts +1 -1
  21. package/components/heatmap/heatmap.yaml +2 -0
  22. package/components/index.js +1 -0
  23. package/components/preview/preview.a2ui.json +93 -0
  24. package/components/preview/preview.class.js +178 -0
  25. package/components/preview/preview.css +176 -0
  26. package/components/preview/preview.d.ts +24 -0
  27. package/components/preview/preview.js +22 -0
  28. package/components/preview/preview.yaml +100 -0
  29. package/components/progress/progress.a2ui.json +2 -7
  30. package/components/progress/progress.d.ts +2 -2
  31. package/components/progress/progress.yaml +3 -8
  32. package/components/progress-row/progress-row.a2ui.json +1 -3
  33. package/components/progress-row/progress-row.d.ts +1 -1
  34. package/components/progress-row/progress-row.yaml +0 -2
  35. package/components/select/select.a2ui.json +2 -4
  36. package/components/select/select.yaml +2 -2
  37. package/components/tabs/tabs.a2ui.json +1 -4
  38. package/components/tabs/tabs.d.ts +2 -2
  39. package/components/tabs/tabs.yaml +2 -2
  40. package/core/anchor.js +5 -1
  41. package/dist/web-components.min.css +1 -1
  42. package/dist/web-components.min.js +75 -73
  43. package/index.css +6 -6
  44. package/package.json +1 -1
  45. package/styles/README.md +71 -36
  46. package/styles/api/layout.css +19 -0
  47. package/styles/api/sizing.css +225 -0
  48. package/styles/api/text.css +106 -0
  49. package/styles/colors/semantics/aliases.css +32 -0
  50. package/styles/colors/semantics/buckets.css +64 -0
  51. package/styles/colors/semantics/core.css +317 -0
  52. package/styles/colors/semantics/data-viz.css +129 -0
  53. package/styles/colors/semantics/features.css +114 -0
  54. package/styles/colors/semantics.css +10 -619
  55. package/styles/components.css +1 -0
  56. package/styles/foundation/elevation.css +29 -0
  57. package/styles/foundation/index.css +11 -0
  58. package/styles/foundation/motion.css +10 -0
  59. package/styles/foundation/radius.css +27 -0
  60. package/styles/foundation/size.css +33 -0
  61. package/styles/foundation/space.css +47 -0
  62. package/styles/index.css +14 -0
  63. package/styles/resets.css +17 -25
  64. package/styles/tokens.css +16 -384
  65. package/styles/type/elements.css +225 -0
  66. package/styles/type/roles.css +419 -0
  67. package/styles/type/scale.css +89 -0
  68. package/styles/typography.css +11 -809
@@ -0,0 +1,225 @@
1
+ /* adia:element/type — Native HTML element defaults (the applied baseline).
2
+ table/lists/blockquote/hr/code/pre/dl/details/strong/em/small/mark/
3
+ del/ins/a/img — all via :where() (0,0,0) so component @scope always wins.
4
+ Moved verbatim out of typography.css (v0.6.48 foundation reorg, ADR-0035).
5
+ Phase B folds the element rules from resets.css in here too. */
6
+
7
+ /* ═══════════════════════════════════════════════════════════
8
+ NATIVE ELEMENT DEFAULTS — semantic HTML baseline.
9
+ Low specificity via :where() so component @scope always wins.
10
+
11
+ Block: table, lists, blockquote, hr, pre, dl, details
12
+ Inline: strong/b, em/i, small, mark, del, ins, code, a
13
+ Size: smaller, larger/large (custom inline elements)
14
+ Media: img
15
+ ═══════════════════════════════════════════════════════════ */
16
+
17
+ /* ── Tables ── */
18
+ :where(table) {
19
+ width: 100%;
20
+ border-collapse: collapse;
21
+ font-size: var(--a-body-size);
22
+ line-height: var(--a-body-leading);
23
+ }
24
+
25
+ :where(th) {
26
+ text-align: left;
27
+ font-size: var(--a-ui-sm);
28
+ font-weight: var(--a-weight-medium);
29
+ color: var(--a-fg-muted);
30
+ text-transform: uppercase;
31
+ letter-spacing: 0.06em;
32
+ padding: var(--a-space-2) var(--a-space-3);
33
+ border-bottom: 1px solid var(--a-border);
34
+ }
35
+
36
+ :where(td) {
37
+ padding: var(--a-space-2) var(--a-space-3);
38
+ border-bottom: 1px solid var(--a-border-subtle);
39
+ vertical-align: top;
40
+ }
41
+
42
+ :where(tr:hover td) {
43
+ background: var(--a-bg-muted);
44
+ }
45
+
46
+ /* ── Lists ── */
47
+ :where(ul, ol) {
48
+ padding-inline-start: 1.5em;
49
+ margin-block: 0.5em;
50
+ font-size: var(--a-body-size);
51
+ line-height: var(--a-body-leading);
52
+ color: var(--a-fg);
53
+ }
54
+
55
+ :where(li) {
56
+ margin-block: 0.25em;
57
+ }
58
+
59
+ :where(li::marker) {
60
+ color: var(--a-fg-muted);
61
+ }
62
+
63
+ /* ── Blockquote ── */
64
+ :where(blockquote) {
65
+ margin: 1em 0;
66
+ padding: var(--a-space-3) var(--a-space-4);
67
+ border-inline-start: 3px solid var(--a-border);
68
+ color: var(--a-fg-subtle);
69
+ font-style: italic;
70
+ }
71
+
72
+ :where(blockquote p) {
73
+ margin: 0;
74
+ }
75
+
76
+ /* ── Horizontal rule ── */
77
+ :where(hr) {
78
+ border: none;
79
+ border-top: 1px solid var(--a-border-subtle);
80
+ margin-block: var(--a-space-4);
81
+ }
82
+
83
+ /* ── Code (inline + block) ── */
84
+ :where(code) {
85
+ font-family: var(--a-code-family);
86
+ font-size: 0.9em;
87
+ background: var(--a-bg-muted);
88
+ padding: 0.125em 0.375em;
89
+ border-radius: var(--a-radius-sm);
90
+ color: var(--a-fg);
91
+ }
92
+
93
+ :where(pre) {
94
+ font-family: var(--a-code-family);
95
+ font-size: var(--a-code-size);
96
+ line-height: var(--a-code-leading);
97
+ background: var(--a-bg-muted);
98
+ padding: var(--a-space-4);
99
+ border-radius: var(--a-radius-md);
100
+ overflow-x: auto;
101
+ margin-block: var(--a-space-3);
102
+ }
103
+
104
+ :where(pre code) {
105
+ background: none;
106
+ padding: 0;
107
+ border-radius: 0;
108
+ font-size: inherit;
109
+ }
110
+
111
+ /* ── Definition lists ── */
112
+ :where(dt) {
113
+ font-weight: var(--a-weight-semibold);
114
+ margin-block-start: 0.75em;
115
+ }
116
+
117
+ :where(dd) {
118
+ margin-inline-start: 1.5em;
119
+ color: var(--a-fg-subtle);
120
+ }
121
+
122
+ /* ── Details/Summary ── */
123
+ :where(summary) {
124
+ cursor: pointer;
125
+ font-weight: var(--a-weight-medium);
126
+ }
127
+
128
+ :where(details[open] summary) {
129
+ margin-block-end: 0.5em;
130
+ }
131
+
132
+ /* ── Strong / Bold ──
133
+ Semibold (600), not bold (700) — bold is the heading weight.
134
+ Color bumps to --a-fg-strong for contrast against body text. */
135
+ :where(strong, b) {
136
+ font-weight: var(--a-weight-semibold);
137
+ color: var(--a-fg-strong);
138
+ }
139
+
140
+ /* ── Emphasis ── */
141
+ :where(em, i) {
142
+ font-style: italic;
143
+ }
144
+
145
+ /* ── Small — de-emphasis in size and color ── */
146
+ :where(small) {
147
+ font-size: 0.875em;
148
+ color: var(--a-fg-subtle);
149
+ }
150
+
151
+ /* ── Mark — system highlight tokens ── */
152
+ :where(mark) {
153
+ background: var(--a-highlight);
154
+ color: var(--a-highlight-text);
155
+ padding-inline: 0.125em;
156
+ border-radius: 0.125em;
157
+ }
158
+
159
+ /* ── Deleted / Inserted — editorial change tracking ── */
160
+ :where(del) {
161
+ text-decoration: line-through;
162
+ color: var(--a-fg-muted);
163
+ }
164
+
165
+ :where(ins) {
166
+ text-decoration: underline;
167
+ text-decoration-style: dotted;
168
+ text-underline-offset: 0.15em;
169
+ }
170
+
171
+ /* ── Links ── */
172
+ :where(a) {
173
+ color: var(--a-link);
174
+ text-decoration: none;
175
+ }
176
+
177
+ :where(a:hover) {
178
+ color: var(--a-link-hover);
179
+ text-decoration: underline;
180
+ text-underline-offset: 2px;
181
+ }
182
+
183
+ :where(a:visited) {
184
+ color: var(--a-link-visited);
185
+ }
186
+
187
+ /* ── Size wrappers — custom inline elements for relative sizing ── */
188
+ :where(smaller) {
189
+ font-size: 0.875em;
190
+ }
191
+
192
+ :where(larger, large) {
193
+ font-size: 1.125em;
194
+ }
195
+
196
+ /* ── Images ── */
197
+ :where(img) {
198
+ max-width: 100%;
199
+ height: auto;
200
+ border-radius: var(--a-radius-md);
201
+ }
202
+
203
+ /* ── Native element typography consolidated from resets.css ──
204
+ (v0.6.48 reorg, ADR-0035). These are (0,0,1)/(0,1,1) and only compete
205
+ with the :where() (0,0,0) defaults above, so specificity decides — the
206
+ relocation from late (resets) to here (early) is winner-preserving. */
207
+ h1,
208
+ h2,
209
+ h3,
210
+ h4,
211
+ h5,
212
+ h6 {
213
+ text-wrap: balance;
214
+ line-height: 1.1;
215
+ }
216
+
217
+ p,
218
+ li,
219
+ figcaption {
220
+ text-wrap: pretty;
221
+ }
222
+
223
+ a:not([class]) {
224
+ text-underline-offset: 0.12em;
225
+ }
@@ -0,0 +1,419 @@
1
+ /* adia:role/type — The 13 typographic roles (L3) + their application.
2
+ Role tokens (--a-<role>-*), the h1-h6 :where() defaults, and the
3
+ [variant="<role>"] attribute that applies a role to any element.
4
+ Moved verbatim out of typography.css (v0.6.48 foundation reorg,
5
+ ADR-0035). NOTE: [variant] rules are grouped here (ahead of
6
+ type/elements.css) — safe because [variant] is (0,1,0) and native
7
+ element defaults are :where() (0,0,0); specificity decides, not order. */
8
+
9
+ :root {
10
+ /* ═══════════════════════════════════════════════════════════
11
+ L3 ROLES — 13 roles across 6 jobs
12
+ Each role: family, weight, size, leading, tracking, case, color,
13
+ margin-block-start, margin-block-end
14
+ ═══════════════════════════════════════════════════════════ */
15
+
16
+ /* ──────────────────────────────────────
17
+ ANNOUNCE — declare what this is
18
+ ────────────────────────────────────── */
19
+
20
+ /* display — hero headlines, one per page, largest expression */
21
+ --a-display-family: var(--a-font-family-display);
22
+ --a-display-weight: var(--a-weight-bold);
23
+ --a-display-sm: clamp(22px, 20px + 1vw, 31px);
24
+ --a-display-md: clamp(29px, 24px + 1.5vw, 39px);
25
+ --a-display-lg: clamp(37px, 31px + 2vw, 52px);
26
+ --a-display-size: var(--a-display-sm);
27
+ --a-display-leading: var(--a-font-leading-tight);
28
+ --a-display-tracking: var(--a-font-tracking-tight);
29
+ --a-display-case: normal;
30
+ --a-display-color: var(--a-fg-strong);
31
+ --a-display-mbs: 0;
32
+ --a-display-mbe: 0.3em;
33
+
34
+ /* title — page/article canonical name, restrained vs display */
35
+ --a-title-family: var(--a-font-family-display);
36
+ --a-title-weight: var(--a-weight-bold);
37
+ --a-title-sm: clamp(20px, 18px + 0.375vw, 28px);
38
+ --a-title-md: clamp(24px, 20px + 0.5vw, 32px);
39
+ --a-title-lg: clamp(28px, 24px + 1vw, 36px);
40
+ --a-title-size: var(--a-title-sm);
41
+ --a-title-leading: var(--a-font-leading-snug);
42
+ --a-title-tracking: var(--a-font-tracking-snug);
43
+ --a-title-case: normal;
44
+ --a-title-color: var(--a-fg-strong);
45
+ --a-title-mbs: 0;
46
+ --a-title-mbe: 0.4em;
47
+
48
+ /* heading — h2-equivalent, primary content division */
49
+ --a-heading-family: var(--a-font-family-heading);
50
+ --a-heading-weight: var(--a-weight-bold);
51
+ --a-heading-sm: 16px;
52
+ --a-heading-md: 17px;
53
+ --a-heading-lg: 18px;
54
+ --a-heading-size: var(--a-heading-sm);
55
+ --a-heading-leading: var(--a-font-leading-snug);
56
+ --a-heading-tracking: var(--a-font-tracking-normal);
57
+ --a-heading-case: normal;
58
+ --a-heading-color: var(--a-fg-strong);
59
+ --a-heading-mbs: 1.5em;
60
+ --a-heading-mbe: 0.5em;
61
+
62
+ /* ──────────────────────────────────────
63
+ ORIENT — tell the reader where they are
64
+ ────────────────────────────────────── */
65
+
66
+ /* kicker — short label above a title (eyebrow/overline) */
67
+ --a-kicker-family: var(--a-font-family-ui);
68
+ --a-kicker-weight: var(--a-weight-semibold);
69
+ --a-kicker-sm: 11px;
70
+ --a-kicker-md: 12px;
71
+ --a-kicker-lg: 13px;
72
+ --a-kicker-size: var(--a-kicker-md);
73
+ --a-kicker-leading: var(--a-font-leading-normal);
74
+ --a-kicker-tracking: var(--a-font-tracking-wider);
75
+ --a-kicker-case: uppercase;
76
+ --a-kicker-color: var(--a-fg-muted);
77
+ --a-kicker-mbs: 0;
78
+ --a-kicker-mbe: 0.5em;
79
+
80
+ /* label — UI labels, form fields, badges, tabs */
81
+ --a-label-family: var(--a-font-family-ui);
82
+ --a-label-weight: var(--a-weight-medium);
83
+ --a-label-sm: 11px;
84
+ --a-label-md: 12px;
85
+ --a-label-lg: 13px;
86
+ --a-label-size: var(--a-label-md);
87
+ --a-label-leading: var(--a-font-leading-normal);
88
+ --a-label-tracking: var(--a-font-tracking-wide);
89
+ --a-label-case: normal;
90
+ --a-label-color: var(--a-fg);
91
+ --a-label-mbs: 0;
92
+ --a-label-mbe: 0.25em;
93
+
94
+ /* caption — figure captions, metadata, timestamps */
95
+ --a-caption-family: var(--a-font-family-text);
96
+ --a-caption-weight: var(--a-weight-normal);
97
+ --a-caption-sm: 13px;
98
+ --a-caption-md: 14px;
99
+ --a-caption-lg: 15px;
100
+ --a-caption-size: var(--a-caption-md);
101
+ --a-caption-leading: var(--a-font-leading-relaxed);
102
+ --a-caption-tracking: var(--a-font-tracking-wide);
103
+ --a-caption-case: normal;
104
+ --a-caption-color: var(--a-fg-subtle);
105
+ --a-caption-mbs: 0.5em;
106
+ --a-caption-mbe: 0;
107
+
108
+ /* ──────────────────────────────────────
109
+ ENTICE — pull the reader in
110
+ ────────────────────────────────────── */
111
+
112
+ /* deck — summary sentence(s) below a title */
113
+ --a-deck-family: var(--a-font-family-sans);
114
+ --a-deck-weight: var(--a-weight-normal);
115
+ --a-deck-sm: 17px;
116
+ --a-deck-md: 18px;
117
+ --a-deck-lg: 20px;
118
+ --a-deck-size: var(--a-deck-md);
119
+ --a-deck-leading: var(--a-font-leading-relaxed);
120
+ --a-deck-tracking: var(--a-font-tracking-normal);
121
+ --a-deck-case: normal;
122
+ --a-deck-color: var(--a-fg-subtle);
123
+ --a-deck-mbs: 0;
124
+ --a-deck-mbe: 1.5em;
125
+
126
+ /* ──────────────────────────────────────
127
+ DIVIDE — break flow into chunks
128
+ ────────────────────────────────────── */
129
+
130
+ /* section — h2/h3, major division within content */
131
+ --a-section-family: var(--a-font-family-heading);
132
+ --a-section-weight: var(--a-weight-semibold);
133
+ --a-section-sm: 16px;
134
+ --a-section-md: 17px;
135
+ --a-section-lg: 19px;
136
+ --a-section-size: var(--a-section-sm);
137
+ --a-section-leading: var(--a-font-leading-normal);
138
+ --a-section-tracking: var(--a-font-tracking-normal);
139
+ --a-section-case: normal;
140
+ --a-section-color: var(--a-fg-strong);
141
+ --a-section-mbs: 2em;
142
+ --a-section-mbe: 0.5em;
143
+
144
+ /* subsection — h3/h4, minor division */
145
+ --a-subsection-family: var(--a-font-family-heading);
146
+ --a-subsection-weight: var(--a-weight-semibold);
147
+ --a-subsection-sm: 15px;
148
+ --a-subsection-md: 16px;
149
+ --a-subsection-lg: 17px;
150
+ --a-subsection-size: var(--a-subsection-md);
151
+ --a-subsection-leading: var(--a-font-leading-normal);
152
+ --a-subsection-tracking: var(--a-font-tracking-normal);
153
+ --a-subsection-case: normal;
154
+ --a-subsection-color: var(--a-fg-strong);
155
+ --a-subsection-mbs: 1.5em;
156
+ --a-subsection-mbe: 0.5em;
157
+
158
+ /* ──────────────────────────────────────
159
+ IDENTIFY — name a thing in place
160
+ ────────────────────────────────────── */
161
+
162
+ /* metric — KPI numerals, dashboard stats, large data values */
163
+ --a-metric-family: var(--a-font-family-display);
164
+ --a-metric-weight: var(--a-weight-thin);
165
+ --a-metric-sm: clamp(24px, 22px + 1vw, 34px);
166
+ --a-metric-md: clamp(32px, 28px + 1.5vw, 48px);
167
+ --a-metric-lg: clamp(44px, 38px + 2vw, 64px);
168
+ --a-metric-size: var(--a-metric-md);
169
+ --a-metric-leading: var(--a-font-leading-tight);
170
+ --a-metric-tracking: var(--a-font-tracking-tight);
171
+ --a-metric-case: normal;
172
+ --a-metric-color: var(--a-fg-strong);
173
+ --a-metric-mbs: 0;
174
+ --a-metric-mbe: 0;
175
+ --a-metric-figures: lining;
176
+ --a-metric-spacing: tabular;
177
+
178
+ /* ──────────────────────────────────────
179
+ ACT — invite interaction
180
+ ────────────────────────────────────── */
181
+
182
+ /* UI / action — button text, link text, control labels, CTA microcopy
183
+ Sizes defined in tokens.css as --a-ui-size-* */
184
+ --a-ui-family: var(--a-font-family-ui);
185
+ --a-ui-weight: var(--a-weight-medium);
186
+ --a-ui-tiny: 10px;
187
+ --a-ui-2xs: 11px;
188
+ --a-ui-xs: 12px;
189
+ --a-ui-sm: 13px;
190
+ --a-ui-md: 14px;
191
+ --a-ui-lg: 15px;
192
+ --a-ui-size: var(--a-ui-md);
193
+ --a-ui-leading: 1;
194
+ --a-ui-line-height: var(--a-body-leading); /* §230-bundle (v0.5.9): alias for prose-style line-height inside UI body copy (e.g. alert message text). 1.5 by default. Closes the alert.css orphaned reference. */
195
+ --a-ui-tracking: var(--a-font-tracking-normal);
196
+ --a-ui-case: normal;
197
+ --a-ui-color: inherit;
198
+ --a-ui-px: var(--a-space-2);
199
+ --a-ui-py: var(--a-space-2);
200
+ --a-ui-mbs: 0;
201
+ --a-ui-mbe: 0;
202
+
203
+ /* ──────────────────────────────────────
204
+ TEXT — running content
205
+ ────────────────────────────────────── */
206
+
207
+ /* body — default running text */
208
+ --a-body-family: var(--a-font-family-text);
209
+ --a-body-weight: var(--a-weight-normal);
210
+ --a-body-sm: 14px;
211
+ --a-body-md: 15px;
212
+ --a-body-lg: 16px;
213
+ --a-body-size: var(--a-body-md);
214
+ --a-body-leading: var(--a-font-leading-loose);
215
+ --a-body-tracking: var(--a-font-tracking-normal);
216
+ --a-body-case: normal;
217
+ --a-body-color: var(--a-fg);
218
+ --a-body-mbs: 0;
219
+ --a-body-mbe: 1em;
220
+ --a-body-max-width: 65ch;
221
+
222
+ /* code — inline and block code */
223
+ --a-code-family: var(--a-font-family-code);
224
+ --a-code-weight: var(--a-weight-normal);
225
+ --a-code-sm: 13px;
226
+ --a-code-md: 14px;
227
+ --a-code-lg: 15px;
228
+ --a-code-size: var(--a-code-md);
229
+ --a-code-leading: var(--a-font-leading-relaxed);
230
+ --a-code-tracking: var(--a-font-tracking-normal);
231
+ --a-code-case: normal;
232
+ --a-code-color: var(--a-fg);
233
+ --a-code-mbs: 0;
234
+ --a-code-mbe: 0;
235
+
236
+ /* ═══════════════════════════════════════════════════════════
237
+ MODE OVERRIDES — REGISTER (voice) control.
238
+
239
+ [prose] is ORTHOGONAL to [size]:
240
+ • [prose] shifts the sm/md/lg VALUES (bigger at every tier)
241
+ and changes the DEFAULT tier pick to -md for all roles.
242
+ • [size] on containers shifts which tier is active.
243
+
244
+ Neither [prose] nor [size] should be set globally on <body>.
245
+ Both scope to containers — a page can have a compact sidebar
246
+ + expressive hero + standard body.
247
+ ═══════════════════════════════════════════════════════════ */
248
+ }
249
+
250
+ /* ═══════════════════════════════════════════════════════════
251
+ VARIANT ATTRIBUTE — applies typography roles to any element.
252
+
253
+ h1-h6 provide semantic meaning, variant provides visual style.
254
+ Works on any element, not just text-ui.
255
+
256
+ <h1 variant="display">Hero</h1>
257
+ <h4 variant="heading">Section</h4>
258
+ <p>Metadata</p>
259
+ <span variant="kicker">Category</span>
260
+ ═══════════════════════════════════════════════════════════ */
261
+
262
+ /* ── h1–h6 defaults — sensible roles, zero specificity so [variant] wins ── */
263
+ :where(h1) {
264
+ font-family: var(--a-title-family);
265
+ font-weight: var(--a-title-weight);
266
+ font-size: var(--a-title-size);
267
+ line-height: var(--a-title-leading);
268
+ letter-spacing: var(--a-title-tracking);
269
+ color: var(--a-title-color);
270
+ }
271
+ :where(h2) {
272
+ font-family: var(--a-heading-family);
273
+ font-weight: var(--a-heading-weight);
274
+ font-size: var(--a-heading-size);
275
+ line-height: var(--a-heading-leading);
276
+ letter-spacing: var(--a-heading-tracking);
277
+ color: var(--a-heading-color);
278
+ }
279
+ :where(h3) {
280
+ font-family: var(--a-section-family);
281
+ font-weight: var(--a-section-weight);
282
+ font-size: var(--a-section-size);
283
+ line-height: var(--a-section-leading);
284
+ letter-spacing: var(--a-section-tracking);
285
+ color: var(--a-section-color);
286
+ }
287
+ :where(h4) {
288
+ font-family: var(--a-subsection-family);
289
+ font-weight: var(--a-subsection-weight);
290
+ font-size: var(--a-subsection-size);
291
+ line-height: var(--a-subsection-leading);
292
+ letter-spacing: var(--a-subsection-tracking);
293
+ color: var(--a-subsection-color);
294
+ }
295
+ :where(h5) {
296
+ font-family: var(--a-caption-family);
297
+ font-weight: var(--a-caption-weight);
298
+ font-size: var(--a-caption-size);
299
+ line-height: var(--a-caption-leading);
300
+ letter-spacing: var(--a-caption-tracking);
301
+ color: var(--a-caption-color);
302
+ }
303
+ :where(h6) {
304
+ font-family: var(--a-label-family);
305
+ font-weight: var(--a-label-weight);
306
+ font-size: var(--a-label-size);
307
+ line-height: var(--a-label-leading);
308
+ letter-spacing: var(--a-label-tracking);
309
+ color: var(--a-label-color);
310
+ }
311
+
312
+ [variant="display"] {
313
+ font-family: var(--a-display-family);
314
+ font-weight: var(--a-display-weight);
315
+ font-size: var(--a-display-size);
316
+ line-height: var(--a-display-leading);
317
+ letter-spacing: var(--a-display-tracking);
318
+ text-transform: var(--a-display-case);
319
+ color: var(--a-display-color);
320
+ }
321
+ [variant="title"] {
322
+ font-family: var(--a-title-family);
323
+ font-weight: var(--a-title-weight);
324
+ font-size: var(--a-title-size);
325
+ line-height: var(--a-title-leading);
326
+ letter-spacing: var(--a-title-tracking);
327
+ text-transform: var(--a-title-case);
328
+ color: var(--a-title-color);
329
+ }
330
+ [variant="heading"] {
331
+ font-family: var(--a-heading-family);
332
+ font-weight: var(--a-heading-weight);
333
+ font-size: var(--a-heading-size);
334
+ line-height: var(--a-heading-leading);
335
+ letter-spacing: var(--a-heading-tracking);
336
+ text-transform: var(--a-heading-case);
337
+ color: var(--a-heading-color);
338
+ }
339
+ [variant="section"] {
340
+ font-family: var(--a-section-family);
341
+ font-weight: var(--a-section-weight);
342
+ font-size: var(--a-section-size);
343
+ line-height: var(--a-section-leading);
344
+ letter-spacing: var(--a-section-tracking);
345
+ text-transform: var(--a-section-case);
346
+ color: var(--a-section-color);
347
+ }
348
+ [variant="subsection"] {
349
+ font-family: var(--a-subsection-family);
350
+ font-weight: var(--a-subsection-weight);
351
+ font-size: var(--a-subsection-size);
352
+ line-height: var(--a-subsection-leading);
353
+ letter-spacing: var(--a-subsection-tracking);
354
+ text-transform: var(--a-subsection-case);
355
+ color: var(--a-subsection-color);
356
+ }
357
+ [variant="body"] {
358
+ font-family: var(--a-body-family);
359
+ font-weight: var(--a-body-weight);
360
+ font-size: var(--a-body-size);
361
+ line-height: var(--a-body-leading);
362
+ letter-spacing: var(--a-body-tracking);
363
+ text-transform: var(--a-body-case);
364
+ color: var(--a-fg);
365
+ }
366
+ [variant="caption"] {
367
+ font-family: var(--a-caption-family);
368
+ font-weight: var(--a-caption-weight);
369
+ font-size: var(--a-caption-size);
370
+ line-height: var(--a-caption-leading);
371
+ letter-spacing: var(--a-caption-tracking);
372
+ text-transform: var(--a-caption-case);
373
+ color: var(--a-caption-color);
374
+ }
375
+ [variant="label"] {
376
+ font-family: var(--a-label-family);
377
+ font-weight: var(--a-label-weight);
378
+ font-size: var(--a-label-size);
379
+ line-height: var(--a-label-leading);
380
+ letter-spacing: var(--a-label-tracking);
381
+ text-transform: var(--a-label-case);
382
+ color: var(--a-label-color);
383
+ }
384
+ [variant="kicker"] {
385
+ font-family: var(--a-kicker-family);
386
+ font-weight: var(--a-kicker-weight);
387
+ font-size: var(--a-kicker-size);
388
+ line-height: var(--a-kicker-leading);
389
+ letter-spacing: var(--a-kicker-tracking);
390
+ text-transform: uppercase;
391
+ color: var(--a-kicker-color);
392
+ }
393
+ [variant="deck"] {
394
+ font-family: var(--a-deck-family);
395
+ font-weight: var(--a-deck-weight);
396
+ font-size: var(--a-deck-size);
397
+ line-height: var(--a-deck-leading);
398
+ letter-spacing: var(--a-deck-tracking);
399
+ text-transform: var(--a-deck-case);
400
+ color: var(--a-deck-color);
401
+ }
402
+ [variant="metric"] {
403
+ font-family: var(--a-metric-family);
404
+ font-weight: var(--a-metric-weight);
405
+ font-size: var(--a-metric-size);
406
+ line-height: var(--a-metric-leading);
407
+ letter-spacing: var(--a-metric-tracking);
408
+ text-transform: var(--a-metric-case);
409
+ color: var(--a-metric-color);
410
+ }
411
+ [variant="code"] {
412
+ font-family: var(--a-code-family);
413
+ font-weight: var(--a-code-weight);
414
+ font-size: var(--a-code-size);
415
+ line-height: var(--a-code-leading);
416
+ letter-spacing: var(--a-code-tracking);
417
+ text-transform: var(--a-code-case);
418
+ color: var(--a-code-color);
419
+ }