@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
@@ -52,812 +52,14 @@
52
52
  L1 Primitives → L2 Semantics → L3 Roles → L4 Components
53
53
  ═══════════════════════════════════════════════════════════════ */
54
54
 
55
- @import "./fonts.css";
56
-
57
- :root {
58
- /* ═══════════════════════════════════════════════════════════
59
- L1 PRIMITIVES raw values, no intent
60
- ═══════════════════════════════════════════════════════════ */
61
-
62
- /* ── Font families ── */
63
-
64
- /*--a-font-family-sans: var(--a-font-gt-standard);*/
65
- /*--a-font-family-mono: var(--a-font-gt-standard-mono);*/
66
- /*--a-font-family-sans: var(--a-font-neu-montreal-sans);*/
67
- /*--a-font-family-mono: var(--a-font-neu-montreal-mono);*/
68
- --a-font-family-display: var(--a-font-family-sans);
69
- --a-font-family-text: var(--a-font-family-sans);
70
- --a-font-family-heading: var(--a-font-family-sans);
71
- --a-font-family-ui: var(--a-font-family-sans);
72
- --a-font-family-code: var(--a-font-family-mono);
73
- --a-font-family-control: var(--a-font-family-mono);
74
- --a-font-family: var(--a-font-family-sans);
75
- --a-font-family-text: var(--a-font-family-sans);
76
-
77
- /* ── Type scale ──
78
- Ratio: ~1.25 (major third) with dramatic hero jump.
79
- Base: 0.875rem (14px).
80
- Spec ref: hero 72px (weight 300), stat values 28px, section labels 13px,
81
- overline 11px, body 14px, caption 12px. */
82
- /* UI type scale now defined as --a-ui-size-* in tokens.css */
83
-
84
- /* Content sizes live in role tokens below:
85
- --a-body-size, --a-heading-size, --a-display-size, etc.
86
- No flat --a-font-xs/sm/md/lg scale — use role tokens directly. */
87
-
88
- /* ── Font weight — single canonical scale ──
89
- Conventional weights: thin=100, light=300, normal=400, medium=500,
90
- semibold=600, bold=700. Fonts must provide these axes or fall back
91
- gracefully. Earlier --a-font-weight-* aliases were REMOVED in v0.5.0;
92
- use --a-weight-* directly. (v0.5.8 §230 closed 3 consumer references
93
- that still pointed at the removed family per FEEDBACK-20 §1.) */
94
- --a-weight-thin: 100;
95
- --a-weight-light: 300;
96
- --a-weight-normal: 400;
97
- --a-weight-medium: 500;
98
- --a-weight-semibold: 600;
99
- --a-weight-bold: 700;
100
- --a-weight: var(--a-weight-normal);
101
-
102
- /* ── Line height ── */
103
- --a-leading-none: 1; /* hero numbers — no extra space at display scale */
104
- --a-leading-tight: 1.2; /* headings, large text */
105
- --a-leading-snug: 1.3; /* labels, compact UI text */
106
- --a-leading-normal: 1.5; /* body text, readable paragraphs */
107
-
108
- /* ── Letter spacing ── */
109
- --a-tracking-tighter: -0.02em; /* hero/display numbers */
110
- --a-tracking-tight: -0.01em; /* stat values, large text */
111
- --a-tracking-normal: 0; /* body text */
112
- --a-tracking-wide: 0.04em; /* stat units, small uppercase */
113
- --a-tracking-wider: 0.06em; /* section labels, overlines */
114
-
115
- /* ── Leading curve (tightens as size grows) ── */
116
- --a-font-leading-tight: 1.05;
117
- --a-font-leading-snug: 1.2;
118
- --a-font-leading-normal: 1.35;
119
- --a-font-leading-relaxed: 1.5;
120
- --a-font-leading-loose: 1.6;
121
-
122
- /* ── Tracking curve (negative at display, positive at caption) ── */
123
- --a-font-tracking-tight: -0.03em;
124
- --a-font-tracking-snug: -0.015em;
125
- --a-font-tracking-normal: 0;
126
- --a-font-tracking-wide: 0.04em;
127
- --a-font-tracking-wider: 0.06em;
128
-
129
- /* ═══════════════════════════════════════════════════════════
130
- L2 SEMANTIC — intent tokens referencing primitives
131
- ═══════════════════════════════════════════════════════════ */
132
-
133
- /* ── Families by intent ── */
134
- --a-font-family-heading: var(--a-font-family-display);
135
- --a-font-family-body: var(--a-font-family-text);
136
- --a-font-family-ui: var(--a-font-family-text);
137
- --a-font-family-editorial: var(--a-font-family-sans);
138
-
139
- /* ═══════════════════════════════════════════════════════════
140
- L3 ROLES — 13 roles across 6 jobs
141
- Each role: family, weight, size, leading, tracking, case, color,
142
- margin-block-start, margin-block-end
143
- ═══════════════════════════════════════════════════════════ */
144
-
145
- /* ──────────────────────────────────────
146
- ANNOUNCE — declare what this is
147
- ────────────────────────────────────── */
148
-
149
- /* display — hero headlines, one per page, largest expression */
150
- --a-display-family: var(--a-font-family-display);
151
- --a-display-weight: var(--a-weight-bold);
152
- --a-display-sm: clamp(22px, 20px + 1vw, 31px);
153
- --a-display-md: clamp(29px, 24px + 1.5vw, 39px);
154
- --a-display-lg: clamp(37px, 31px + 2vw, 52px);
155
- --a-display-size: var(--a-display-sm);
156
- --a-display-leading: var(--a-font-leading-tight);
157
- --a-display-tracking: var(--a-font-tracking-tight);
158
- --a-display-case: normal;
159
- --a-display-color: var(--a-fg-strong);
160
- --a-display-mbs: 0;
161
- --a-display-mbe: 0.3em;
162
-
163
- /* title — page/article canonical name, restrained vs display */
164
- --a-title-family: var(--a-font-family-display);
165
- --a-title-weight: var(--a-weight-bold);
166
- --a-title-sm: clamp(20px, 18px + 0.375vw, 28px);
167
- --a-title-md: clamp(24px, 20px + 0.5vw, 32px);
168
- --a-title-lg: clamp(28px, 24px + 1vw, 36px);
169
- --a-title-size: var(--a-title-sm);
170
- --a-title-leading: var(--a-font-leading-snug);
171
- --a-title-tracking: var(--a-font-tracking-snug);
172
- --a-title-case: normal;
173
- --a-title-color: var(--a-fg-strong);
174
- --a-title-mbs: 0;
175
- --a-title-mbe: 0.4em;
176
-
177
- /* heading — h2-equivalent, primary content division */
178
- --a-heading-family: var(--a-font-family-heading);
179
- --a-heading-weight: var(--a-weight-bold);
180
- --a-heading-sm: 16px;
181
- --a-heading-md: 17px;
182
- --a-heading-lg: 18px;
183
- --a-heading-size: var(--a-heading-sm);
184
- --a-heading-leading: var(--a-font-leading-snug);
185
- --a-heading-tracking: var(--a-font-tracking-normal);
186
- --a-heading-case: normal;
187
- --a-heading-color: var(--a-fg-strong);
188
- --a-heading-mbs: 1.5em;
189
- --a-heading-mbe: 0.5em;
190
-
191
- /* ──────────────────────────────────────
192
- ORIENT — tell the reader where they are
193
- ────────────────────────────────────── */
194
-
195
- /* kicker — short label above a title (eyebrow/overline) */
196
- --a-kicker-family: var(--a-font-family-ui);
197
- --a-kicker-weight: var(--a-weight-semibold);
198
- --a-kicker-sm: 11px;
199
- --a-kicker-md: 12px;
200
- --a-kicker-lg: 13px;
201
- --a-kicker-size: var(--a-kicker-md);
202
- --a-kicker-leading: var(--a-font-leading-normal);
203
- --a-kicker-tracking: var(--a-font-tracking-wider);
204
- --a-kicker-case: uppercase;
205
- --a-kicker-color: var(--a-fg-muted);
206
- --a-kicker-mbs: 0;
207
- --a-kicker-mbe: 0.5em;
208
-
209
- /* label — UI labels, form fields, badges, tabs */
210
- --a-label-family: var(--a-font-family-ui);
211
- --a-label-weight: var(--a-weight-medium);
212
- --a-label-sm: 11px;
213
- --a-label-md: 12px;
214
- --a-label-lg: 13px;
215
- --a-label-size: var(--a-label-md);
216
- --a-label-leading: var(--a-font-leading-normal);
217
- --a-label-tracking: var(--a-font-tracking-wide);
218
- --a-label-case: normal;
219
- --a-label-color: var(--a-fg);
220
- --a-label-mbs: 0;
221
- --a-label-mbe: 0.25em;
222
-
223
- /* caption — figure captions, metadata, timestamps */
224
- --a-caption-family: var(--a-font-family-text);
225
- --a-caption-weight: var(--a-weight-normal);
226
- --a-caption-sm: 13px;
227
- --a-caption-md: 14px;
228
- --a-caption-lg: 15px;
229
- --a-caption-size: var(--a-caption-md);
230
- --a-caption-leading: var(--a-font-leading-relaxed);
231
- --a-caption-tracking: var(--a-font-tracking-wide);
232
- --a-caption-case: normal;
233
- --a-caption-color: var(--a-fg-subtle);
234
- --a-caption-mbs: 0.5em;
235
- --a-caption-mbe: 0;
236
-
237
- /* ──────────────────────────────────────
238
- ENTICE — pull the reader in
239
- ────────────────────────────────────── */
240
-
241
- /* deck — summary sentence(s) below a title */
242
- --a-deck-family: var(--a-font-family-sans);
243
- --a-deck-weight: var(--a-weight-normal);
244
- --a-deck-sm: 17px;
245
- --a-deck-md: 18px;
246
- --a-deck-lg: 20px;
247
- --a-deck-size: var(--a-deck-md);
248
- --a-deck-leading: var(--a-font-leading-relaxed);
249
- --a-deck-tracking: var(--a-font-tracking-normal);
250
- --a-deck-case: normal;
251
- --a-deck-color: var(--a-fg-subtle);
252
- --a-deck-mbs: 0;
253
- --a-deck-mbe: 1.5em;
254
-
255
- /* ──────────────────────────────────────
256
- DIVIDE — break flow into chunks
257
- ────────────────────────────────────── */
258
-
259
- /* section — h2/h3, major division within content */
260
- --a-section-family: var(--a-font-family-heading);
261
- --a-section-weight: var(--a-weight-semibold);
262
- --a-section-sm: 16px;
263
- --a-section-md: 17px;
264
- --a-section-lg: 19px;
265
- --a-section-size: var(--a-section-sm);
266
- --a-section-leading: var(--a-font-leading-normal);
267
- --a-section-tracking: var(--a-font-tracking-normal);
268
- --a-section-case: normal;
269
- --a-section-color: var(--a-fg-strong);
270
- --a-section-mbs: 2em;
271
- --a-section-mbe: 0.5em;
272
-
273
- /* subsection — h3/h4, minor division */
274
- --a-subsection-family: var(--a-font-family-heading);
275
- --a-subsection-weight: var(--a-weight-semibold);
276
- --a-subsection-sm: 15px;
277
- --a-subsection-md: 16px;
278
- --a-subsection-lg: 17px;
279
- --a-subsection-size: var(--a-subsection-md);
280
- --a-subsection-leading: var(--a-font-leading-normal);
281
- --a-subsection-tracking: var(--a-font-tracking-normal);
282
- --a-subsection-case: normal;
283
- --a-subsection-color: var(--a-fg-strong);
284
- --a-subsection-mbs: 1.5em;
285
- --a-subsection-mbe: 0.5em;
286
-
287
- /* ──────────────────────────────────────
288
- IDENTIFY — name a thing in place
289
- ────────────────────────────────────── */
290
-
291
- /* metric — KPI numerals, dashboard stats, large data values */
292
- --a-metric-family: var(--a-font-family-display);
293
- --a-metric-weight: var(--a-weight-thin);
294
- --a-metric-sm: clamp(24px, 22px + 1vw, 34px);
295
- --a-metric-md: clamp(32px, 28px + 1.5vw, 48px);
296
- --a-metric-lg: clamp(44px, 38px + 2vw, 64px);
297
- --a-metric-size: var(--a-metric-md);
298
- --a-metric-leading: var(--a-font-leading-tight);
299
- --a-metric-tracking: var(--a-font-tracking-tight);
300
- --a-metric-case: normal;
301
- --a-metric-color: var(--a-fg-strong);
302
- --a-metric-mbs: 0;
303
- --a-metric-mbe: 0;
304
- --a-metric-figures: lining;
305
- --a-metric-spacing: tabular;
306
-
307
- /* ──────────────────────────────────────
308
- ACT — invite interaction
309
- ────────────────────────────────────── */
310
-
311
- /* UI / action — button text, link text, control labels, CTA microcopy
312
- Sizes defined in tokens.css as --a-ui-size-* */
313
- --a-ui-family: var(--a-font-family-ui);
314
- --a-ui-weight: var(--a-weight-medium);
315
- --a-ui-tiny: 10px;
316
- --a-ui-2xs: 11px;
317
- --a-ui-xs: 12px;
318
- --a-ui-sm: 13px;
319
- --a-ui-md: 14px;
320
- --a-ui-lg: 15px;
321
- --a-ui-size: var(--a-ui-md);
322
- --a-ui-leading: 1;
323
- --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. */
324
- --a-ui-tracking: var(--a-font-tracking-normal);
325
- --a-ui-case: normal;
326
- --a-ui-color: inherit;
327
- --a-ui-px: var(--a-space-2);
328
- --a-ui-py: var(--a-space-2);
329
- --a-ui-mbs: 0;
330
- --a-ui-mbe: 0;
331
-
332
- /* ──────────────────────────────────────
333
- TEXT — running content
334
- ────────────────────────────────────── */
335
-
336
- /* body — default running text */
337
- --a-body-family: var(--a-font-family-text);
338
- --a-body-weight: var(--a-weight-normal);
339
- --a-body-sm: 14px;
340
- --a-body-md: 15px;
341
- --a-body-lg: 16px;
342
- --a-body-size: var(--a-body-md);
343
- --a-body-leading: var(--a-font-leading-loose);
344
- --a-body-tracking: var(--a-font-tracking-normal);
345
- --a-body-case: normal;
346
- --a-body-color: var(--a-fg);
347
- --a-body-mbs: 0;
348
- --a-body-mbe: 1em;
349
- --a-body-max-width: 65ch;
350
-
351
- /* code — inline and block code */
352
- --a-code-family: var(--a-font-family-code);
353
- --a-code-weight: var(--a-weight-normal);
354
- --a-code-sm: 13px;
355
- --a-code-md: 14px;
356
- --a-code-lg: 15px;
357
- --a-code-size: var(--a-code-md);
358
- --a-code-leading: var(--a-font-leading-relaxed);
359
- --a-code-tracking: var(--a-font-tracking-normal);
360
- --a-code-case: normal;
361
- --a-code-color: var(--a-fg);
362
- --a-code-mbs: 0;
363
- --a-code-mbe: 0;
364
-
365
- /* ═══════════════════════════════════════════════════════════
366
- MODE OVERRIDES — REGISTER (voice) control.
367
-
368
- [prose] is ORTHOGONAL to [size]:
369
- • [prose] shifts the sm/md/lg VALUES (bigger at every tier)
370
- and changes the DEFAULT tier pick to -md for all roles.
371
- • [size] on containers shifts which tier is active.
372
-
373
- Neither [prose] nor [size] should be set globally on <body>.
374
- Both scope to containers — a page can have a compact sidebar
375
- + expressive hero + standard body.
376
- ═══════════════════════════════════════════════════════════ */
377
- }
378
-
379
-
380
- /* ═══════════════════════════════════════════════════════════
381
- VARIANT ATTRIBUTE — applies typography roles to any element.
382
-
383
- h1-h6 provide semantic meaning, variant provides visual style.
384
- Works on any element, not just text-ui.
385
-
386
- <h1 variant="display">Hero</h1>
387
- <h4 variant="heading">Section</h4>
388
- <p>Metadata</p>
389
- <span variant="kicker">Category</span>
390
- ═══════════════════════════════════════════════════════════ */
391
-
392
- /* ── h1–h6 defaults — sensible roles, zero specificity so [variant] wins ── */
393
- :where(h1) {
394
- font-family: var(--a-title-family);
395
- font-weight: var(--a-title-weight);
396
- font-size: var(--a-title-size);
397
- line-height: var(--a-title-leading);
398
- letter-spacing: var(--a-title-tracking);
399
- color: var(--a-title-color);
400
- }
401
- :where(h2) {
402
- font-family: var(--a-heading-family);
403
- font-weight: var(--a-heading-weight);
404
- font-size: var(--a-heading-size);
405
- line-height: var(--a-heading-leading);
406
- letter-spacing: var(--a-heading-tracking);
407
- color: var(--a-heading-color);
408
- }
409
- :where(h3) {
410
- font-family: var(--a-section-family);
411
- font-weight: var(--a-section-weight);
412
- font-size: var(--a-section-size);
413
- line-height: var(--a-section-leading);
414
- letter-spacing: var(--a-section-tracking);
415
- color: var(--a-section-color);
416
- }
417
- :where(h4) {
418
- font-family: var(--a-subsection-family);
419
- font-weight: var(--a-subsection-weight);
420
- font-size: var(--a-subsection-size);
421
- line-height: var(--a-subsection-leading);
422
- letter-spacing: var(--a-subsection-tracking);
423
- color: var(--a-subsection-color);
424
- }
425
- :where(h5) {
426
- font-family: var(--a-caption-family);
427
- font-weight: var(--a-caption-weight);
428
- font-size: var(--a-caption-size);
429
- line-height: var(--a-caption-leading);
430
- letter-spacing: var(--a-caption-tracking);
431
- color: var(--a-caption-color);
432
- }
433
- :where(h6) {
434
- font-family: var(--a-label-family);
435
- font-weight: var(--a-label-weight);
436
- font-size: var(--a-label-size);
437
- line-height: var(--a-label-leading);
438
- letter-spacing: var(--a-label-tracking);
439
- color: var(--a-label-color);
440
- }
441
-
442
- /* ═══════════════════════════════════════════════════════════
443
- NATIVE ELEMENT DEFAULTS — semantic HTML baseline.
444
- Low specificity via :where() so component @scope always wins.
445
-
446
- Block: table, lists, blockquote, hr, pre, dl, details
447
- Inline: strong/b, em/i, small, mark, del, ins, code, a
448
- Size: smaller, larger/large (custom inline elements)
449
- Media: img
450
- ═══════════════════════════════════════════════════════════ */
451
-
452
- /* ── Tables ── */
453
- :where(table) {
454
- width: 100%;
455
- border-collapse: collapse;
456
- font-size: var(--a-body-size);
457
- line-height: var(--a-body-leading);
458
- }
459
-
460
- :where(th) {
461
- text-align: left;
462
- font-size: var(--a-ui-sm);
463
- font-weight: var(--a-weight-medium);
464
- color: var(--a-fg-muted);
465
- text-transform: uppercase;
466
- letter-spacing: 0.06em;
467
- padding: var(--a-space-2) var(--a-space-3);
468
- border-bottom: 1px solid var(--a-border);
469
- }
470
-
471
- :where(td) {
472
- padding: var(--a-space-2) var(--a-space-3);
473
- border-bottom: 1px solid var(--a-border-subtle);
474
- vertical-align: top;
475
- }
476
-
477
- :where(tr:hover td) {
478
- background: var(--a-bg-muted);
479
- }
480
-
481
- /* ── Lists ── */
482
- :where(ul, ol) {
483
- padding-inline-start: 1.5em;
484
- margin-block: 0.5em;
485
- font-size: var(--a-body-size);
486
- line-height: var(--a-body-leading);
487
- color: var(--a-fg);
488
- }
489
-
490
- :where(li) {
491
- margin-block: 0.25em;
492
- }
493
-
494
- :where(li::marker) {
495
- color: var(--a-fg-muted);
496
- }
497
-
498
- /* ── Blockquote ── */
499
- :where(blockquote) {
500
- margin: 1em 0;
501
- padding: var(--a-space-3) var(--a-space-4);
502
- border-inline-start: 3px solid var(--a-border);
503
- color: var(--a-fg-subtle);
504
- font-style: italic;
505
- }
506
-
507
- :where(blockquote p) {
508
- margin: 0;
509
- }
510
-
511
- /* ── Horizontal rule ── */
512
- :where(hr) {
513
- border: none;
514
- border-top: 1px solid var(--a-border-subtle);
515
- margin-block: var(--a-space-4);
516
- }
517
-
518
- /* ── Code (inline + block) ── */
519
- :where(code) {
520
- font-family: var(--a-code-family);
521
- font-size: 0.9em;
522
- background: var(--a-bg-muted);
523
- padding: 0.125em 0.375em;
524
- border-radius: var(--a-radius-sm);
525
- color: var(--a-fg);
526
- }
527
-
528
- :where(pre) {
529
- font-family: var(--a-code-family);
530
- font-size: var(--a-code-size);
531
- line-height: var(--a-code-leading);
532
- background: var(--a-bg-muted);
533
- padding: var(--a-space-4);
534
- border-radius: var(--a-radius-md);
535
- overflow-x: auto;
536
- margin-block: var(--a-space-3);
537
- }
538
-
539
- :where(pre code) {
540
- background: none;
541
- padding: 0;
542
- border-radius: 0;
543
- font-size: inherit;
544
- }
545
-
546
- /* ── Definition lists ── */
547
- :where(dt) {
548
- font-weight: var(--a-weight-semibold);
549
- margin-block-start: 0.75em;
550
- }
551
-
552
- :where(dd) {
553
- margin-inline-start: 1.5em;
554
- color: var(--a-fg-subtle);
555
- }
556
-
557
- /* ── Details/Summary ── */
558
- :where(summary) {
559
- cursor: pointer;
560
- font-weight: var(--a-weight-medium);
561
- }
562
-
563
- :where(details[open] summary) {
564
- margin-block-end: 0.5em;
565
- }
566
-
567
- /* ── Strong / Bold ──
568
- Semibold (600), not bold (700) — bold is the heading weight.
569
- Color bumps to --a-fg-strong for contrast against body text. */
570
- :where(strong, b) {
571
- font-weight: var(--a-weight-semibold);
572
- color: var(--a-fg-strong);
573
- }
574
-
575
- /* ── Emphasis ── */
576
- :where(em, i) {
577
- font-style: italic;
578
- }
579
-
580
- /* ── Small — de-emphasis in size and color ── */
581
- :where(small) {
582
- font-size: 0.875em;
583
- color: var(--a-fg-subtle);
584
- }
585
-
586
- /* ── Mark — system highlight tokens ── */
587
- :where(mark) {
588
- background: var(--a-highlight);
589
- color: var(--a-highlight-text);
590
- padding-inline: 0.125em;
591
- border-radius: 0.125em;
592
- }
593
-
594
- /* ── Deleted / Inserted — editorial change tracking ── */
595
- :where(del) {
596
- text-decoration: line-through;
597
- color: var(--a-fg-muted);
598
- }
599
-
600
- :where(ins) {
601
- text-decoration: underline;
602
- text-decoration-style: dotted;
603
- text-underline-offset: 0.15em;
604
- }
605
-
606
- /* ── Links ── */
607
- :where(a) {
608
- color: var(--a-link);
609
- text-decoration: none;
610
- }
611
-
612
- :where(a:hover) {
613
- color: var(--a-link-hover);
614
- text-decoration: underline;
615
- text-underline-offset: 2px;
616
- }
617
-
618
- :where(a:visited) {
619
- color: var(--a-link-visited);
620
- }
621
-
622
- /* ── Size wrappers — custom inline elements for relative sizing ── */
623
- :where(smaller) {
624
- font-size: 0.875em;
625
- }
626
-
627
- :where(larger, large) {
628
- font-size: 1.125em;
629
- }
630
-
631
- /* ── Images ── */
632
- :where(img) {
633
- max-width: 100%;
634
- height: auto;
635
- border-radius: var(--a-radius-md);
636
- }
637
-
638
- [variant="display"] {
639
- font-family: var(--a-display-family);
640
- font-weight: var(--a-display-weight);
641
- font-size: var(--a-display-size);
642
- line-height: var(--a-display-leading);
643
- letter-spacing: var(--a-display-tracking);
644
- text-transform: var(--a-display-case);
645
- color: var(--a-display-color);
646
- }
647
- [variant="title"] {
648
- font-family: var(--a-title-family);
649
- font-weight: var(--a-title-weight);
650
- font-size: var(--a-title-size);
651
- line-height: var(--a-title-leading);
652
- letter-spacing: var(--a-title-tracking);
653
- text-transform: var(--a-title-case);
654
- color: var(--a-title-color);
655
- }
656
- [variant="heading"] {
657
- font-family: var(--a-heading-family);
658
- font-weight: var(--a-heading-weight);
659
- font-size: var(--a-heading-size);
660
- line-height: var(--a-heading-leading);
661
- letter-spacing: var(--a-heading-tracking);
662
- text-transform: var(--a-heading-case);
663
- color: var(--a-heading-color);
664
- }
665
- [variant="section"] {
666
- font-family: var(--a-section-family);
667
- font-weight: var(--a-section-weight);
668
- font-size: var(--a-section-size);
669
- line-height: var(--a-section-leading);
670
- letter-spacing: var(--a-section-tracking);
671
- text-transform: var(--a-section-case);
672
- color: var(--a-section-color);
673
- }
674
- [variant="subsection"] {
675
- font-family: var(--a-subsection-family);
676
- font-weight: var(--a-subsection-weight);
677
- font-size: var(--a-subsection-size);
678
- line-height: var(--a-subsection-leading);
679
- letter-spacing: var(--a-subsection-tracking);
680
- text-transform: var(--a-subsection-case);
681
- color: var(--a-subsection-color);
682
- }
683
- [variant="body"] {
684
- font-family: var(--a-body-family);
685
- font-weight: var(--a-body-weight);
686
- font-size: var(--a-body-size);
687
- line-height: var(--a-body-leading);
688
- letter-spacing: var(--a-body-tracking);
689
- text-transform: var(--a-body-case);
690
- color: var(--a-fg);
691
- }
692
- [variant="caption"] {
693
- font-family: var(--a-caption-family);
694
- font-weight: var(--a-caption-weight);
695
- font-size: var(--a-caption-size);
696
- line-height: var(--a-caption-leading);
697
- letter-spacing: var(--a-caption-tracking);
698
- text-transform: var(--a-caption-case);
699
- color: var(--a-caption-color);
700
- }
701
- [variant="label"] {
702
- font-family: var(--a-label-family);
703
- font-weight: var(--a-label-weight);
704
- font-size: var(--a-label-size);
705
- line-height: var(--a-label-leading);
706
- letter-spacing: var(--a-label-tracking);
707
- text-transform: var(--a-label-case);
708
- color: var(--a-label-color);
709
- }
710
- [variant="kicker"] {
711
- font-family: var(--a-kicker-family);
712
- font-weight: var(--a-kicker-weight);
713
- font-size: var(--a-kicker-size);
714
- line-height: var(--a-kicker-leading);
715
- letter-spacing: var(--a-kicker-tracking);
716
- text-transform: uppercase;
717
- color: var(--a-kicker-color);
718
- }
719
- [variant="deck"] {
720
- font-family: var(--a-deck-family);
721
- font-weight: var(--a-deck-weight);
722
- font-size: var(--a-deck-size);
723
- line-height: var(--a-deck-leading);
724
- letter-spacing: var(--a-deck-tracking);
725
- text-transform: var(--a-deck-case);
726
- color: var(--a-deck-color);
727
- }
728
- [variant="metric"] {
729
- font-family: var(--a-metric-family);
730
- font-weight: var(--a-metric-weight);
731
- font-size: var(--a-metric-size);
732
- line-height: var(--a-metric-leading);
733
- letter-spacing: var(--a-metric-tracking);
734
- text-transform: var(--a-metric-case);
735
- color: var(--a-metric-color);
736
- }
737
- [variant="code"] {
738
- font-family: var(--a-code-family);
739
- font-weight: var(--a-code-weight);
740
- font-size: var(--a-code-size);
741
- line-height: var(--a-code-leading);
742
- letter-spacing: var(--a-code-tracking);
743
- text-transform: var(--a-code-case);
744
- color: var(--a-code-color);
745
- }
746
-
747
- /* ═══════════════════════════════════════════════════════════
748
- GLOBAL PRESENTATIONAL ATTRIBUTES
749
- Work on any element. Attribute-driven, not class-based.
750
-
751
- NOTE: These have lower specificity than @scope component CSS.
752
- Using [weight="bold"] on a component like <text-ui> will be
753
- overridden by the component's own font-weight rule. Use these
754
- on plain elements (<span>, <p>, <div>) or choose the right
755
- [variant] instead.
756
- ═══════════════════════════════════════════════════════════ */
757
-
758
- /* Text alignment */
759
- [text-align="left"] {
760
- text-align: left;
761
- }
762
- [text-align="center"] {
763
- text-align: center;
764
- }
765
- [text-align="right"] {
766
- text-align: right;
767
- }
768
-
769
- /* Font weight — six steps matching --a-weight-* tokens */
770
- [weight="thin"] {
771
- --a-weight: var(--a-weight-thin);
772
- font-weight: var(--a-weight);
773
- } /* 100 — hairline, display only */
774
- [weight="light"] {
775
- --a-weight: var(--a-weight-light);
776
- font-weight: var(--a-weight);
777
- } /* 300 — light UI emphasis */
778
- [weight="normal"] {
779
- --a-weight: var(--a-weight-normal);
780
- font-weight: var(--a-weight);
781
- } /* 400 */
782
- [weight="medium"] {
783
- --a-weight: var(--a-weight-medium);
784
- font-weight: var(--a-weight);
785
- } /* 500 */
786
- [weight="semibold"] {
787
- --a-weight: var(--a-weight-semibold);
788
- font-weight: var(--a-weight);
789
- } /* 600 */
790
- [weight="bold"] {
791
- --a-weight: var(--a-weight-bold);
792
- font-weight: var(--a-weight);
793
- } /* 700 */
794
-
795
- /* Text color */
796
- [color] {
797
- color: var(--a-fg);
798
- }
799
- [color="text"] {
800
- --a-fg: var(--a-canvas-text);
801
- }
802
- [color="text-strong"] {
803
- --a-fg: var(--a-fg-strong);
804
- }
805
- [color="subtle"] {
806
- --a-fg: var(--a-fg-subtle);
807
- }
808
- [color="muted"] {
809
- --a-fg: var(--a-fg-muted);
810
- }
811
- [color="accent"] {
812
- --a-fg: var(--a-accent);
813
- }
814
- [color="success"] {
815
- --a-fg: var(--a-success);
816
- }
817
- [color="warning"] {
818
- --a-fg: var(--a-warning);
819
- }
820
- [color="danger"] {
821
- --a-fg: var(--a-danger);
822
- }
823
- [color="info"] {
824
- --a-fg: var(--a-info);
825
- }
826
-
827
- /* Text transform */
828
- [transform="uppercase"] {
829
- text-transform: uppercase;
830
- letter-spacing: 0.04em;
831
- }
832
- [transform="lowercase"] {
833
- text-transform: lowercase;
834
- }
835
- [transform="capitalize"] {
836
- text-transform: capitalize;
837
- }
838
- [transform="none"] {
839
- text-transform: none;
840
- }
841
-
842
- /* Truncation */
843
- [truncate] {
844
- overflow: hidden;
845
- text-overflow: ellipsis;
846
- white-space: nowrap;
847
- }
848
-
849
- /* Visibility */
850
- [hidden] {
851
- display: none !important;
852
- }
853
-
854
- [nomargin] {
855
- margin: 0;
856
- }
857
-
858
- /* Flex grow — fills remaining space in a flex parent.
859
- Works on any element (col-ui, row-ui, input-ui, etc.) */
860
- [grow] {
861
- flex: 1;
862
- min-width: 0;
863
- }
55
+ /* adia:barrel/typography — COMPAT BARREL (public entry; standalone-linked).
56
+ The type system is now split by layer under type/{scale,roles,elements}.css,
57
+ and the presentational attribute API that had drifted in here moved to
58
+ api/{text,layout}.css (v0.6.48 foundation reorg, ADR-0035). The imports
59
+ below reproduce the historical cascade order exactly. */
60
+
61
+ @import "./type/scale.css"; /* L1/L2 — families, weights, leading, tracking */
62
+ @import "./type/roles.css"; /* L3 — 13 roles + h1-h6 + [variant] */
63
+ @import "./type/elements.css"; /* native element defaults */
64
+ @import "./api/text.css"; /* [text-align][weight][color][transform][truncate] */
65
+ @import "./api/layout.css"; /* [hidden][nomargin][grow] */