@adia-ai/web-components 0.7.3 → 0.7.5

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 (137) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/components/accordion/accordion.css +2 -2
  3. package/components/action-list/action-list.css +2 -2
  4. package/components/agent-artifact/agent-artifact.css +31 -31
  5. package/components/agent-feedback-bar/agent-feedback-bar.css +10 -10
  6. package/components/agent-questions/agent-questions.css +59 -57
  7. package/components/agent-reasoning/agent-reasoning.css +54 -54
  8. package/components/agent-suggestions/agent-suggestions.css +4 -4
  9. package/components/agent-trace/agent-trace.css +53 -53
  10. package/components/alert/alert.css +53 -53
  11. package/components/avatar/avatar.css +27 -27
  12. package/components/badge/badge.css +56 -53
  13. package/components/block/block.css +16 -16
  14. package/components/blockquote/blockquote.css +16 -16
  15. package/components/breadcrumb/breadcrumb.css +23 -23
  16. package/components/button/button.css +123 -101
  17. package/components/calendar-grid/calendar-grid.css +95 -92
  18. package/components/calendar-picker/calendar-picker.css +141 -139
  19. package/components/canvas/canvas.css +12 -12
  20. package/components/card/card.css +83 -83
  21. package/components/chart/chart.css +218 -218
  22. package/components/chart-legend/chart-legend.css +26 -26
  23. package/components/check/check.css +40 -40
  24. package/components/code/code.css +125 -125
  25. package/components/col/col.css +15 -15
  26. package/components/color-picker/color-picker.css +55 -55
  27. package/components/combobox/combobox.css +64 -62
  28. package/components/command/command.css +91 -91
  29. package/components/context-menu/context-menu.css +1 -1
  30. package/components/date-range-picker/date-range-picker.css +59 -59
  31. package/components/datetime-picker/datetime-picker.css +25 -25
  32. package/components/demo-toggle/demo-toggle.css +27 -27
  33. package/components/description-list/description-list.css +18 -18
  34. package/components/divider/divider.css +24 -24
  35. package/components/embed/embed.css +6 -6
  36. package/components/empty-state/empty-state.css +29 -29
  37. package/components/feed/feed.css +12 -12
  38. package/components/field/field.css +28 -28
  39. package/components/field/field.test.js +2 -2
  40. package/components/fields/fields.css +5 -5
  41. package/components/grid/grid.a2ui.json +10 -0
  42. package/components/grid/grid.css +23 -5
  43. package/components/grid/grid.d.ts +4 -0
  44. package/components/grid/grid.yaml +13 -0
  45. package/components/heatmap/heatmap.css +61 -61
  46. package/components/icon/icon.css +12 -12
  47. package/components/image/image.css +14 -14
  48. package/components/inline-edit/inline-edit.css +16 -16
  49. package/components/inline-message/inline-message.css +16 -16
  50. package/components/input/input.css +69 -66
  51. package/components/inspector/inspector.css +6 -6
  52. package/components/integration-card/integration-card.css +41 -41
  53. package/components/integration-card/integration-card.test.js +4 -4
  54. package/components/kbd/kbd.css +47 -40
  55. package/components/link/link.css +12 -12
  56. package/components/list/list.css +8 -8
  57. package/components/list-window/list-window.css +10 -10
  58. package/components/loading-overlay/loading-overlay.css +17 -18
  59. package/components/loading-overlay/loading-overlay.test.js +8 -8
  60. package/components/mark/mark.css +16 -16
  61. package/components/menu/menu.css +9 -9
  62. package/components/modal/modal.class.js +5 -9
  63. package/components/modal/modal.css +43 -43
  64. package/components/nav/nav.css +40 -40
  65. package/components/nav-group/nav-group.css +54 -54
  66. package/components/nav-item/nav-item.css +44 -44
  67. package/components/noodles/noodles.css +31 -31
  68. package/components/number-format/number-format.css +4 -4
  69. package/components/option-card/option-card.css +70 -70
  70. package/components/otp-input/otp-input.css +29 -29
  71. package/components/page/page.a2ui.json +1 -1
  72. package/components/page/page.css +27 -27
  73. package/components/page/page.d.ts +1 -1
  74. package/components/page/page.yaml +1 -1
  75. package/components/pagination/pagination.css +6 -6
  76. package/components/pane/pane.css +57 -57
  77. package/components/password-strength/password-strength.css +32 -32
  78. package/components/pipeline-status/pipeline-status.css +67 -67
  79. package/components/popover/popover.css +11 -11
  80. package/components/preview/preview.css +21 -21
  81. package/components/progress/progress.css +23 -23
  82. package/components/progress-row/progress-row.css +17 -17
  83. package/components/qr-code/qr-code.css +4 -4
  84. package/components/radio/radio.css +39 -39
  85. package/components/range/range.css +58 -55
  86. package/components/rating/rating.css +28 -28
  87. package/components/relative-time/relative-time.css +6 -6
  88. package/components/richtext/richtext.css +133 -133
  89. package/components/row/row.css +19 -19
  90. package/components/search/search.css +5 -5
  91. package/components/segment/segment.css +29 -24
  92. package/components/segmented/segmented.css +30 -25
  93. package/components/select/select.css +95 -93
  94. package/components/skeleton/skeleton.css +14 -14
  95. package/components/skip-nav/skip-nav.css +4 -4
  96. package/components/slider/slider.css +61 -61
  97. package/components/spinner/spinner.css +40 -40
  98. package/components/spinner/spinner.test.js +10 -12
  99. package/components/stack/stack.css +11 -11
  100. package/components/stat/stat.css +27 -27
  101. package/components/step-progress/step-progress.css +20 -20
  102. package/components/stepper/stepper.css +29 -29
  103. package/components/stream/stream.css +12 -12
  104. package/components/swatch/swatch.css +68 -68
  105. package/components/swiper/swiper.class.js +5 -12
  106. package/components/swiper/swiper.css +57 -57
  107. package/components/switch/switch.css +53 -53
  108. package/components/table/table.css +166 -163
  109. package/components/table-toolbar/table-toolbar.css +33 -33
  110. package/components/tabs/tabs.css +54 -51
  111. package/components/tag/tag.css +74 -71
  112. package/components/tag/tag.test.js +14 -14
  113. package/components/tags-input/tags-input.css +51 -49
  114. package/components/text/text.css +44 -44
  115. package/components/textarea/textarea.css +49 -46
  116. package/components/time-picker/time-picker.css +47 -47
  117. package/components/timeline/timeline.css +54 -54
  118. package/components/toast/toast.css +58 -58
  119. package/components/toc/toc.css +28 -28
  120. package/components/toggle-group/toggle-group.css +9 -6
  121. package/components/toggle-scheme/toggle-scheme.css +2 -2
  122. package/components/toolbar/toolbar.css +18 -18
  123. package/components/tooltip/tooltip.css +2 -2
  124. package/components/tour/tour.css +4 -4
  125. package/components/tree/tree.css +37 -37
  126. package/components/upload/upload.css +49 -49
  127. package/dist/host.min.css +1 -0
  128. package/dist/web-components.min.css +1 -1
  129. package/dist/web-components.min.js +2 -2
  130. package/package.json +1 -1
  131. package/styles/api/text.css +9 -2
  132. package/styles/foundation/space.css +19 -18
  133. package/styles/host.css +48 -0
  134. package/styles/prose.css +187 -173
  135. package/styles/type/scale.css +6 -0
  136. package/styles/typography.css +10 -5
  137. package/styles/verse.css +122 -0
@@ -2,49 +2,50 @@
2
2
  inside `@scope` don't match the scope root. Plain selectors outside work.
3
3
  See docs/BROWSER-COMPAT.md §3a. */
4
4
  input-ui[variant="ghost"]:hover {
5
- --input-bg-default: var(--a-bg-muted);
5
+ --input-bg: var(--a-bg-muted);
6
6
  }
7
7
  input-ui:not([disabled]) [slot="field"]:hover {
8
- background: var(--input-bg-hover, var(--input-bg-hover-default));
9
- border-color: var(--input-border-hover, var(--input-border-hover-default));
10
- color: var(--input-fg-hover, var(--input-fg-hover-default));
8
+ background: var(--input-bg-hover);
9
+ border-color: var(--input-border-hover);
10
+ color: var(--input-fg-hover);
11
11
  }
12
12
  input-ui:not([disabled]) [slot="field"]:hover [slot="prefix"],
13
13
  input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
14
- color: var(--input-affix-fg-hover, var(--input-affix-fg-hover-default));
14
+ color: var(--input-affix-fg-hover);
15
15
  }
16
16
 
17
17
  @scope (input-ui) {
18
18
  :where(:scope) {
19
19
  /* ── Tokens (wired to --a-ui-*) ── */
20
- --input-bg-default: var(--a-ui-bg);
21
- --input-fg-default: var(--a-ui-text);
22
- --input-border-default: var(--a-ui-border);
23
- --input-border-hover-default: var(--a-ui-border-hover);
24
- --input-focus-ring-default: var(--a-focus-ring);
25
- --input-focus-ring-invalid-default: var(--a-focus-ring-invalid);
26
- --input-radius-default: var(--a-radius);
27
- --input-height-default: var(--a-size);
28
- --input-px-default: var(--a-ui-px);
29
- --input-font-size-default: var(--a-ui-size);
30
- --input-placeholder-fg-default: var(--a-ui-text-placeholder);
31
- --input-affix-fg-default: var(--a-ui-text-placeholder);
32
- --input-field-gap-default: var(--a-space-1);
33
- --input-label-min-width-default: 8ch;
20
+ --input-bg: var(--a-ui-bg);
21
+ --input-fg: var(--a-ui-text);
22
+ --input-border: var(--a-ui-border);
23
+ --input-border-hover: var(--a-ui-border-hover);
24
+ --input-focus-ring: var(--a-focus-ring);
25
+ --input-focus-ring-invalid: var(--a-focus-ring-invalid);
26
+ --input-radius: var(--a-radius);
27
+ --input-height: var(--a-size);
28
+ --input-px: var(--a-ui-px);
29
+ --input-font-size: var(--a-ui-size);
30
+ --input-font-family: var(--a-font-family-ui);
31
+ --input-placeholder-fg: var(--a-ui-text-placeholder);
32
+ --input-affix-fg: var(--a-ui-text-placeholder);
33
+ --input-field-gap: var(--a-space-1);
34
+ --input-label-min-width: 8ch;
34
35
 
35
36
  /* ── Transitions ── */
36
- --input-duration-default: var(--a-duration-fast);
37
- --input-easing-default: var(--a-easing);
37
+ --input-duration: var(--a-duration-fast);
38
+ --input-easing: var(--a-easing);
38
39
 
39
40
  /* ── State: hover/focus ── */
40
- --input-bg-hover-default: var(--a-ui-bg-hover);
41
- --input-fg-hover-default: var(--a-ui-text-hover);
42
- --input-affix-fg-hover-default: var(--a-ui-text-subtle);
43
- --input-fg-focus-default: var(--a-ui-text-active);
41
+ --input-bg-hover: var(--a-ui-bg-hover);
42
+ --input-fg-hover: var(--a-ui-text-hover);
43
+ --input-affix-fg-hover: var(--a-ui-text-subtle);
44
+ --input-fg-focus: var(--a-ui-text-active);
44
45
 
45
46
  /* ── State: disabled ── */
46
- --input-bg-disabled-default: var(--a-ui-bg-disabled);
47
- --input-fg-disabled-default: var(--a-ui-text-disabled);
47
+ --input-bg-disabled: var(--a-ui-bg-disabled);
48
+ --input-fg-disabled: var(--a-ui-text-disabled);
48
49
  text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
49
50
  }
50
51
 
@@ -65,9 +66,9 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
65
66
  label wider than the floor grows past it. */
66
67
  [slot="label"] {
67
68
  flex-shrink: 0;
68
- min-width: var(--input-label-min-width, var(--input-label-min-width-default));
69
- color: var(--input-affix-fg, var(--input-affix-fg-default));
70
- font-size: var(--input-font-size, var(--input-font-size-default));
69
+ min-width: var(--input-label-min-width);
70
+ color: var(--input-affix-fg);
71
+ font-size: var(--input-font-size);
71
72
  user-select: none;
72
73
  pointer-events: none;
73
74
  }
@@ -76,15 +77,17 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
76
77
  [slot="field"] {
77
78
  display: flex;
78
79
  align-items: center;
79
- gap: var(--input-field-gap, var(--input-field-gap-default));
80
- min-height: var(--input-height, var(--input-height-default));
81
- padding: 0 var(--input-px, var(--input-px-default));
82
- border: 1px solid var(--input-border, var(--input-border-default));
83
- border-radius: var(--input-radius, var(--input-radius-default));
84
- background: var(--input-bg, var(--input-bg-default));
85
- color: var(--input-fg, var(--input-fg-default));
80
+ gap: var(--input-field-gap);
81
+ min-height: var(--input-height);
82
+ padding: 0 var(--input-px);
83
+ border: 1px solid var(--input-border);
84
+ border-radius: var(--input-radius);
85
+ background: var(--input-bg);
86
+ color: var(--input-fg);
86
87
  font: inherit;
87
- font-size: var(--input-font-size, var(--input-font-size-default));
88
+ /* font-family floor — see segment.css rationale. */
89
+ font-family: var(--input-font-family);
90
+ font-size: var(--input-font-size);
88
91
  /* line-height: 1.4 (not 1) so descender-bearing glyphs (g, j, p, q, y)
89
92
  have room inside [slot="text"]'s line box. With line-height: 1 the
90
93
  line box equals the em-square and descenders extend below it; the
@@ -96,22 +99,22 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
96
99
  /* Cover every property the hover / focus / invalid states change so
97
100
  the field doesn't half-snap (border slides, but bg/colour/ring snap). */
98
101
  transition:
99
- background var(--input-duration, var(--input-duration-default)) var(--input-easing, var(--input-easing-default)),
100
- border-color var(--input-duration, var(--input-duration-default)) var(--input-easing, var(--input-easing-default)),
101
- color var(--input-duration, var(--input-duration-default)) var(--input-easing, var(--input-easing-default)),
102
- box-shadow var(--input-duration, var(--input-duration-default)) var(--input-easing, var(--input-easing-default));
102
+ background var(--input-duration) var(--input-easing),
103
+ border-color var(--input-duration) var(--input-easing),
104
+ color var(--input-duration) var(--input-easing),
105
+ box-shadow var(--input-duration) var(--input-easing);
103
106
  }
104
107
  /* hover rules moved outside @scope — see Safari 17.x bug note at top. */
105
108
  :scope:not([disabled]):focus-within [slot="field"] {
106
109
  /* Canonical ring — consumes the L3 --input-focus-ring token
107
110
  which aliases --a-focus-ring. Border stays stable; the ring
108
111
  is the focus affordance (WCAG 2.2 SC 2.4.11/2.4.13). */
109
- box-shadow: var(--input-focus-ring, var(--input-focus-ring-default));
110
- color: var(--input-fg-focus, var(--input-fg-focus-default));
112
+ box-shadow: var(--input-focus-ring);
113
+ color: var(--input-fg-focus);
111
114
  }
112
115
  :scope[aria-invalid="true"]:not([disabled]):focus-within [slot="field"],
113
116
  :scope[error]:not([disabled]):focus-within [slot="field"] {
114
- box-shadow: var(--input-focus-ring-invalid, var(--input-focus-ring-invalid-default));
117
+ box-shadow: var(--input-focus-ring-invalid);
115
118
  }
116
119
 
117
120
  /* Text (contenteditable span) */
@@ -139,7 +142,7 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
139
142
  }
140
143
 
141
144
  input[slot="text"]::placeholder {
142
- color: var(--input-placeholder-fg, var(--input-placeholder-fg-default));
145
+ color: var(--input-placeholder-fg);
143
146
  }
144
147
 
145
148
  /* Placeholder (contenteditable only).
@@ -152,7 +155,7 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
152
155
  so the caret renders at the actual content-start where it belongs. */
153
156
  span[slot="text"][data-empty]::before {
154
157
  content: attr(data-placeholder);
155
- color: var(--input-placeholder-fg, var(--input-placeholder-fg-default));
158
+ color: var(--input-placeholder-fg);
156
159
  pointer-events: none;
157
160
  position: absolute;
158
161
  inset: 0;
@@ -171,7 +174,7 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
171
174
  font-weight: var(--a-weight-medium, 500);
172
175
  /* Reserve space for the absolutely-positioned controls column so the
173
176
  value never collides with the stepper buttons. */
174
- padding-inline-end: var(--input-controls-width, calc(var(--input-height, var(--input-height-default)) * 0.7));
177
+ padding-inline-end: var(--input-controls-width, calc(var(--input-height) * 0.7));
175
178
  }
176
179
 
177
180
  /* Suffix sits flush after the value in number mode (no auto margin so
@@ -182,7 +185,7 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
182
185
  suffix never collides with the stepper buttons. The padding moves
183
186
  from `[slot="text"]` to `[slot="suffix"]` when a suffix is present
184
187
  — only one element needs the reservation since they're adjacent. */
185
- margin-inline-end: var(--input-controls-width, calc(var(--input-height, var(--input-height-default)) * 0.7));
188
+ margin-inline-end: var(--input-controls-width, calc(var(--input-height) * 0.7));
186
189
  }
187
190
  [data-number]:has([slot="suffix"]) [slot="text"] {
188
191
  padding-inline-end: 0;
@@ -198,8 +201,8 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
198
201
  inset-inline-end: 0;
199
202
  display: grid;
200
203
  grid-template-rows: 1fr 1fr;
201
- border-inline-start: 1px solid var(--input-border, var(--input-border-default));
202
- width: var(--input-controls-width, calc(var(--input-height, var(--input-height-default)) * 0.7));
204
+ border-inline-start: 1px solid var(--input-border);
205
+ width: var(--input-controls-width, calc(var(--input-height) * 0.7));
203
206
  user-select: none;
204
207
  overflow: hidden;
205
208
  }
@@ -215,7 +218,7 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
215
218
  --button-height: 0;
216
219
  --button-radius: 0;
217
220
  --button-bg: transparent;
218
- --button-fg: var(--input-affix-fg, var(--input-affix-fg-default));
221
+ --button-fg: var(--input-affix-fg);
219
222
  --button-px: 0;
220
223
  min-width: 0;
221
224
  min-height: 0;
@@ -231,7 +234,7 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
231
234
  any value inherited from its parent button-ui. Tying it to
232
235
  --input-height keeps the caret proportional across sm/md/lg. */
233
236
  [data-number] [slot="controls"] icon-ui {
234
- --icon-size: calc(var(--input-height, var(--input-height-default)) * 0.4);
237
+ --icon-size: calc(var(--input-height) * 0.4);
235
238
  }
236
239
  [data-number] [slot="controls"] button-ui:hover {
237
240
  --button-bg: var(--a-ui-bg-hover);
@@ -248,11 +251,11 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
248
251
  inline-start border on the column + the bottom-border on the upper
249
252
  button. */
250
253
  [data-number] [slot="controls"] button-ui:first-child {
251
- border-bottom: 1px solid var(--input-border, var(--input-border-default));
252
- border-start-end-radius: calc(var(--input-radius, var(--input-radius-default)) - 1px);
254
+ border-bottom: 1px solid var(--input-border);
255
+ border-start-end-radius: calc(var(--input-radius) - 1px);
253
256
  }
254
257
  [data-number] [slot="controls"] button-ui:last-child {
255
- border-end-end-radius: calc(var(--input-radius, var(--input-radius-default)) - 1px);
258
+ border-end-end-radius: calc(var(--input-radius) - 1px);
256
259
  }
257
260
 
258
261
  /* Raw mode strips the chrome — also strip the controls column's
@@ -279,8 +282,8 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
279
282
  display: inline-flex;
280
283
  align-items: center;
281
284
  flex-shrink: 0;
282
- color: var(--input-affix-fg, var(--input-affix-fg-default));
283
- font-size: var(--input-font-size, var(--input-font-size-default));
285
+ color: var(--input-affix-fg);
286
+ font-size: var(--input-font-size);
284
287
  line-height: 1;
285
288
  user-select: none;
286
289
  pointer-events: none;
@@ -330,10 +333,10 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
330
333
  instead so the button visually matches the input's intrinsic size. */
331
334
  [slot="field"] > [slot="leading"] button-ui,
332
335
  [slot="field"] > [slot="trailing"] button-ui {
333
- --button-height: calc(var(--input-height, var(--input-height-default)) - 4px);
336
+ --button-height: calc(var(--input-height) - 4px);
334
337
  --button-bg: transparent;
335
338
  --button-border: transparent;
336
- --button-fg: var(--input-affix-fg, var(--input-affix-fg-default));
339
+ --button-fg: var(--input-affix-fg);
337
340
  --button-px: var(--a-space-1);
338
341
  }
339
342
 
@@ -348,13 +351,13 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
348
351
  absolutely positioned at inset-inline-end: 0; trailing sits in the
349
352
  flex flow.) Same pattern as [slot="suffix"] in number mode. */
350
353
  [data-number]:has(> [slot="trailing"]) > [slot="trailing"] {
351
- margin-inline-end: var(--input-controls-width, calc(var(--input-height, var(--input-height-default)) * 0.7));
354
+ margin-inline-end: var(--input-controls-width, calc(var(--input-height) * 0.7));
352
355
  }
353
356
 
354
357
  /* Disabled */
355
358
  :scope[disabled] [slot="field"] {
356
- background: var(--input-bg-disabled, var(--input-bg-disabled-default));
357
- color: var(--input-fg-disabled, var(--input-fg-disabled-default));
359
+ background: var(--input-bg-disabled);
360
+ color: var(--input-fg-disabled);
358
361
  cursor: not-allowed;
359
362
  }
360
363
 
@@ -371,9 +374,9 @@ input-ui:not([disabled]) [slot="field"]:hover [slot="suffix"] {
371
374
 
372
375
  /* Ghost variant */
373
376
  :scope[variant="ghost"] {
374
- --input-bg-default: transparent;
375
- --input-border-default: transparent;
376
- --input-border-hover-default: transparent;
377
+ --input-bg: transparent;
378
+ --input-border: transparent;
379
+ --input-border-hover: transparent;
377
380
  }
378
381
  /* :scope[variant="ghost"]:hover moved outside @scope — see Safari
379
382
  17.x bug note at top of file. */
@@ -1,16 +1,16 @@
1
1
  @scope (inspector-ui) {
2
2
  :where(:scope) {
3
- --inspector-pane-font-size-default: var(--a-ui-tiny);
4
- --inspector-border-default: 1px solid var(--a-border-subtle);
5
- --inspector-radius-default: var(--a-radius);
3
+ --inspector-pane-font-size: var(--a-ui-tiny);
4
+ --inspector-border: 1px solid var(--a-border-subtle);
5
+ --inspector-radius: var(--a-radius);
6
6
  }
7
7
 
8
8
  :scope {
9
9
  display: flex;
10
10
  flex-direction: column;
11
11
  overflow: hidden;
12
- border: var(--inspector-border, var(--inspector-border-default));
13
- border-radius: var(--inspector-radius, var(--inspector-radius-default));
12
+ border: var(--inspector-border);
13
+ border-radius: var(--inspector-radius);
14
14
  min-width: 0;
15
15
  }
16
16
 
@@ -26,6 +26,6 @@
26
26
  :scope tab-ui > code-ui {
27
27
  display: block;
28
28
  overflow: auto;
29
- font-size: var(--inspector-pane-font-size, var(--inspector-pane-font-size-default));
29
+ font-size: var(--inspector-pane-font-size);
30
30
  }
31
31
  }
@@ -1,32 +1,32 @@
1
1
  @scope (integration-card-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Layout ── */
4
- --integration-card-bg-default: var(--a-bg);
5
- --integration-card-border-default: 1px solid var(--a-border-subtle);
6
- --integration-card-radius-default: var(--a-radius-md);
7
- --integration-card-px-default: var(--a-space-4);
8
- --integration-card-py-default: var(--a-space-4);
9
- --integration-card-gap-default: var(--a-space-3);
4
+ --integration-card-bg: var(--a-bg);
5
+ --integration-card-border: 1px solid var(--a-border-subtle);
6
+ --integration-card-radius: var(--a-radius-md);
7
+ --integration-card-px: var(--a-space-4);
8
+ --integration-card-py: var(--a-space-4);
9
+ --integration-card-gap: var(--a-space-3);
10
10
 
11
11
  /* ── Inner rhythm ── */
12
- --integration-card-row-gap-default: var(--a-space-3);
13
- --integration-card-text-gap-default: var(--a-space-1);
12
+ --integration-card-row-gap: var(--a-space-3);
13
+ --integration-card-text-gap: var(--a-space-1);
14
14
 
15
15
  /* ── Logo ── */
16
- --integration-card-logo-size-default: var(--a-space-7);
17
- --integration-card-logo-radius-default: var(--a-radius-sm);
16
+ --integration-card-logo-size: var(--a-space-7);
17
+ --integration-card-logo-radius: var(--a-radius-sm);
18
18
 
19
19
  /* ── Typography ── */
20
- --integration-card-heading-fg-default: var(--a-fg-strong);
21
- --integration-card-heading-size-default: var(--a-ui-size);
22
- --integration-card-heading-weight-default: var(--a-weight-medium);
23
- --integration-card-description-fg-default: var(--a-fg-muted);
24
- --integration-card-description-size-default: var(--a-ui-sm);
25
- --integration-card-error-fg-default: var(--a-danger-text);
26
- --integration-card-error-size-default: var(--a-ui-sm);
20
+ --integration-card-heading-fg: var(--a-fg-strong);
21
+ --integration-card-heading-size: var(--a-ui-size);
22
+ --integration-card-heading-weight: var(--a-weight-medium);
23
+ --integration-card-description-fg: var(--a-fg-muted);
24
+ --integration-card-description-size: var(--a-ui-sm);
25
+ --integration-card-error-fg: var(--a-danger-text);
26
+ --integration-card-error-size: var(--a-ui-sm);
27
27
 
28
28
  /* ── States ── */
29
- --integration-card-disabled-opacity-default: 0.6;
29
+ --integration-card-disabled-opacity: 0.6;
30
30
  }
31
31
 
32
32
  /* ── Base — vertical stack: body row + (description) + (error) + footer ── */
@@ -34,27 +34,27 @@
34
34
  box-sizing: border-box;
35
35
  display: grid;
36
36
  grid-template-rows: auto 1fr auto;
37
- gap: var(--integration-card-gap, var(--integration-card-gap-default));
38
- padding: var(--integration-card-py, var(--integration-card-py-default)) var(--integration-card-px, var(--integration-card-px-default));
39
- background: var(--integration-card-bg, var(--integration-card-bg-default));
40
- border: var(--integration-card-border, var(--integration-card-border-default));
41
- border-radius: var(--integration-card-radius, var(--integration-card-radius-default));
37
+ gap: var(--integration-card-gap);
38
+ padding: var(--integration-card-py) var(--integration-card-px);
39
+ background: var(--integration-card-bg);
40
+ border: var(--integration-card-border);
41
+ border-radius: var(--integration-card-radius);
42
42
  width: stretch;
43
43
  min-width: 0;
44
44
  }
45
45
 
46
46
  /* ── Status-driven border tints ── */
47
47
  :scope[status="connected"] {
48
- --integration-card-border-default: 1px solid var(--a-success-border, var(--a-success-strong));
48
+ --integration-card-border: 1px solid var(--a-success-border, var(--a-success-strong));
49
49
  }
50
50
  :scope[status="error"] {
51
- --integration-card-border-default: 1px solid var(--a-danger-border, var(--a-danger-strong));
51
+ --integration-card-border: 1px solid var(--a-danger-border, var(--a-danger-strong));
52
52
  }
53
53
 
54
54
  /* ── Coming-soon + disabled → opacity reduction ── */
55
55
  :scope[status="coming-soon"],
56
56
  :scope[disabled] {
57
- opacity: var(--integration-card-disabled-opacity, var(--integration-card-disabled-opacity-default));
57
+ opacity: var(--integration-card-disabled-opacity);
58
58
  }
59
59
 
60
60
  /* ── Body row — logo | heading | status badge ── */
@@ -62,15 +62,15 @@
62
62
  display: grid;
63
63
  grid-template-columns: auto minmax(0, 1fr) auto;
64
64
  align-items: center;
65
- column-gap: var(--integration-card-row-gap, var(--integration-card-row-gap-default));
65
+ column-gap: var(--integration-card-row-gap);
66
66
  }
67
67
 
68
68
  /* ── Logo square ── */
69
69
  :scope > [data-integration-card-body] > [data-integration-card-logo] {
70
70
  grid-column: 1;
71
- inline-size: var(--integration-card-logo-size, var(--integration-card-logo-size-default));
72
- block-size: var(--integration-card-logo-size, var(--integration-card-logo-size-default));
73
- border-radius: var(--integration-card-logo-radius, var(--integration-card-logo-radius-default));
71
+ inline-size: var(--integration-card-logo-size);
72
+ block-size: var(--integration-card-logo-size);
73
+ border-radius: var(--integration-card-logo-radius);
74
74
  display: inline-flex;
75
75
  align-items: center;
76
76
  justify-content: center;
@@ -87,16 +87,16 @@
87
87
  display: block;
88
88
  }
89
89
  :scope [data-integration-card-logo] > icon-ui {
90
- --a-icon-size: calc(var(--integration-card-logo-size, var(--integration-card-logo-size-default)) - var(--a-space-1));
90
+ --a-icon-size: calc(var(--integration-card-logo-size) - var(--a-space-1));
91
91
  color: var(--a-fg-muted);
92
92
  }
93
93
 
94
94
  /* ── Heading (provider name) ── */
95
95
  :scope > [data-integration-card-body] > [data-integration-card-heading] {
96
96
  grid-column: 2;
97
- color: var(--integration-card-heading-fg, var(--integration-card-heading-fg-default));
98
- font-size: var(--integration-card-heading-size, var(--integration-card-heading-size-default));
99
- font-weight: var(--integration-card-heading-weight, var(--integration-card-heading-weight-default));
97
+ color: var(--integration-card-heading-fg);
98
+ font-size: var(--integration-card-heading-size);
99
+ font-weight: var(--integration-card-heading-weight);
100
100
  line-height: 1.3;
101
101
  min-width: 0;
102
102
  overflow: hidden;
@@ -116,8 +116,8 @@
116
116
  /* ── Description ── */
117
117
  :scope > [data-integration-card-description] {
118
118
  margin: 0;
119
- color: var(--integration-card-description-fg, var(--integration-card-description-fg-default));
120
- font-size: var(--integration-card-description-size, var(--integration-card-description-size-default));
119
+ color: var(--integration-card-description-fg);
120
+ font-size: var(--integration-card-description-size);
121
121
  line-height: 1.4;
122
122
  }
123
123
  :scope > [data-integration-card-description][hidden] {
@@ -129,16 +129,16 @@
129
129
  :scope > p:not([data-integration-card-description]):not([data-integration-card-error]),
130
130
  :scope > small:not([data-integration-card-error]) {
131
131
  margin: 0;
132
- color: var(--integration-card-description-fg, var(--integration-card-description-fg-default));
133
- font-size: var(--integration-card-description-size, var(--integration-card-description-size-default));
132
+ color: var(--integration-card-description-fg);
133
+ font-size: var(--integration-card-description-size);
134
134
  line-height: 1.4;
135
135
  }
136
136
 
137
137
  /* ── Error message ── */
138
138
  :scope > [data-integration-card-error] {
139
139
  margin: 0;
140
- color: var(--integration-card-error-fg, var(--integration-card-error-fg-default));
141
- font-size: var(--integration-card-error-size, var(--integration-card-error-size-default));
140
+ color: var(--integration-card-error-fg);
141
+ font-size: var(--integration-card-error-size);
142
142
  line-height: 1.4;
143
143
  }
144
144
  :scope > [data-integration-card-error][hidden] {
@@ -149,7 +149,7 @@
149
149
  :scope > [data-integration-card-footer] {
150
150
  display: flex;
151
151
  align-items: center;
152
- gap: var(--integration-card-row-gap, var(--integration-card-row-gap-default));
152
+ gap: var(--integration-card-row-gap);
153
153
  margin: 0;
154
154
  padding: 0;
155
155
  }
@@ -286,10 +286,10 @@ describe('integration-card-ui — CSS contract (source-grep)', () => {
286
286
 
287
287
  expect(CSS).toMatch(/@scope\s*\(\s*integration-card-ui\s*\)/);
288
288
  expect(CSS).toMatch(/:where\(:scope\)\s*\{/);
289
- // OD-5 sweep: token declarations use -default suffix per component-token-contract.md
290
- expect(CSS).toMatch(/--integration-card-bg-default:/);
291
- expect(CSS).toMatch(/--integration-card-border-default:/);
292
- expect(CSS).toMatch(/--integration-card-radius-default:/);
289
+ // Token declarations use the un-suffixed component-named tokens per component-token-contract.md
290
+ expect(CSS).toMatch(/--integration-card-bg:/);
291
+ expect(CSS).toMatch(/--integration-card-border:/);
292
+ expect(CSS).toMatch(/--integration-card-radius:/);
293
293
  });
294
294
 
295
295
  it('keeps status-driven border tint (status="connected") inside @scope', async () => {
@@ -1,33 +1,35 @@
1
1
  @scope (kbd-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Tokens ── */
4
- --kbd-bg-default: var(--a-bg-muted);
5
- --kbd-fg-default: var(--a-fg);
6
- --kbd-border-default: var(--a-border-subtle);
7
- --kbd-radius-default: var(--a-radius-sm);
8
- --kbd-font-default: var(--a-font-family-code);
4
+ --kbd-bg: var(--a-bg-muted);
5
+ --kbd-fg: var(--a-fg);
6
+ --kbd-border: var(--a-border-subtle);
7
+ --kbd-radius: var(--a-radius-sm);
8
+ --kbd-font: var(--a-font-family-code);
9
+ --kbd-px: var(--a-space-1);
10
+ --kbd-weight: var(--a-weight-medium);
9
11
 
10
- /* Size — defaults to md. Glyph is --a-ui-xs (12px) so md reads distinctly
11
- larger than sm (--a-ui-tiny 10px) inside its 20px cap previously both
12
- md and sm resolved to --a-ui-tiny, so the glyphs were identical. */
13
- --kbd-font-size-default: var(--a-ui-xs);
14
- --kbd-height-default: 1.25rem;
15
- --kbd-min-width-default: 1.25rem;
16
- --kbd-px-default: var(--a-space-1);
17
- --kbd-weight-default: var(--a-weight-medium);
12
+ /* Size tiers sm 10 / md 12 / lg 14 glyph ramp (--a-ui-tiny/xs/md).
13
+ md reads distinctly larger than sm inside the 20px cap; previously
14
+ md and sm both resolved to --a-ui-tiny so the glyphs were identical.
15
+ md is the default; the [size] rules below re-point the active token. */
16
+ --kbd-font-size-sm: var(--a-ui-tiny);
17
+ --kbd-font-size-md: var(--a-ui-xs);
18
+ --kbd-font-size-lg: var(--a-ui-md);
19
+ --kbd-font-size: var(--kbd-font-size-md);
18
20
 
19
- /* Size: sm */
20
- --kbd-font-size-sm-default: var(--a-ui-tiny);
21
- --kbd-height-sm-default: 1rem;
22
- --kbd-min-width-sm-default: 1rem;
21
+ --kbd-height-sm: 1rem;
22
+ --kbd-height-md: 1.25rem;
23
+ --kbd-height-lg: 1.5rem;
24
+ --kbd-height: var(--kbd-height-md);
25
+
26
+ --kbd-min-width-sm: 1rem;
27
+ --kbd-min-width-md: 1.25rem;
28
+ --kbd-min-width-lg: 1.5rem;
29
+ --kbd-min-width: var(--kbd-min-width-md);
23
30
 
24
- /* Size: lg — glyph --a-ui-md (14px), the top of the three-tier ramp
25
- (sm 10 / md 12 / lg 14). */
26
- --kbd-font-size-lg-default: var(--a-ui-md);
27
- --kbd-height-lg-default: 1.5rem;
28
- --kbd-min-width-lg-default: 1.5rem;
29
31
  text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
30
- }
32
+ }
31
33
 
32
34
  :scope {
33
35
  /* ── Base ── */
@@ -35,32 +37,37 @@
35
37
  display: inline-flex;
36
38
  align-items: center;
37
39
  justify-content: center;
38
- min-width: var(--kbd-min-width, var(--kbd-min-width-default));
39
- height: var(--kbd-height, var(--kbd-height-default));
40
- padding-inline: var(--kbd-px, var(--kbd-px-default));
41
- font-family: var(--kbd-font, var(--kbd-font-default));
42
- font-size: var(--kbd-font-size, var(--kbd-font-size-default));
43
- font-weight: var(--kbd-weight, var(--kbd-weight-default));
40
+ min-width: var(--kbd-min-width);
41
+ height: var(--kbd-height);
42
+ padding-inline: var(--kbd-px);
43
+ font-family: var(--kbd-font);
44
+ font-size: var(--kbd-font-size);
45
+ font-weight: var(--kbd-weight);
44
46
  line-height: 1;
45
- color: var(--kbd-fg, var(--kbd-fg-default));
46
- background: var(--kbd-bg, var(--kbd-bg-default));
47
- border: 1px solid var(--kbd-border, var(--kbd-border-default));
47
+ color: var(--kbd-fg);
48
+ background: var(--kbd-bg);
49
+ border: 1px solid var(--kbd-border);
48
50
  border-bottom-width: 2px;
49
- border-radius: var(--kbd-radius, var(--kbd-radius-default));
51
+ border-radius: var(--kbd-radius);
50
52
  vertical-align: middle;
51
53
  white-space: nowrap;
52
54
  user-select: none;
53
55
  }
54
56
 
55
- /* Sizes */
57
+ /* Sizes — re-point the active token to the matching tier. */
56
58
  :scope[size="sm"] {
57
- --kbd-font-size-default: var(--kbd-font-size-sm, var(--kbd-font-size-sm-default));
58
- --kbd-height-default: var(--kbd-height-sm, var(--kbd-height-sm-default));
59
- --kbd-min-width-default: var(--kbd-min-width-sm, var(--kbd-min-width-sm-default));
59
+ --kbd-font-size: var(--kbd-font-size-sm);
60
+ --kbd-height: var(--kbd-height-sm);
61
+ --kbd-min-width: var(--kbd-min-width-sm);
62
+ }
63
+ :scope[size="md"] {
64
+ --kbd-font-size: var(--kbd-font-size-md);
65
+ --kbd-height: var(--kbd-height-md);
66
+ --kbd-min-width: var(--kbd-min-width-md);
60
67
  }
61
68
  :scope[size="lg"] {
62
- --kbd-font-size-default: var(--kbd-font-size-lg, var(--kbd-font-size-lg-default));
63
- --kbd-height-default: var(--kbd-height-lg, var(--kbd-height-lg-default));
64
- --kbd-min-width-default: var(--kbd-min-width-lg, var(--kbd-min-width-lg-default));
69
+ --kbd-font-size: var(--kbd-font-size-lg);
70
+ --kbd-height: var(--kbd-height-lg);
71
+ --kbd-min-width: var(--kbd-min-width-lg);
65
72
  }
66
73
  }