@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
@@ -1,34 +1,34 @@
1
1
  @scope (breadcrumb-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Layout ── */
4
- --breadcrumb-gap-default: var(--a-space-1);
5
- --breadcrumb-max-width-default: 12rem;
4
+ --breadcrumb-gap: var(--a-space-1);
5
+ --breadcrumb-max-width: 12rem;
6
6
 
7
7
  /* ── Typography ── */
8
- --breadcrumb-font-size-default: var(--a-ui-size);
9
- --breadcrumb-current-weight-default: var(--a-weight-medium);
8
+ --breadcrumb-font-size: var(--a-ui-size);
9
+ --breadcrumb-current-weight: var(--a-weight-medium);
10
10
 
11
11
  /* ── Colors ── */
12
- --breadcrumb-fg-default: var(--a-fg-subtle);
13
- --breadcrumb-fg-hover-default: var(--a-fg);
14
- --breadcrumb-separator-fg-default: var(--a-fg-muted);
15
- --breadcrumb-current-fg-default: var(--a-fg-strong);
12
+ --breadcrumb-fg: var(--a-fg-subtle);
13
+ --breadcrumb-fg-hover: var(--a-fg);
14
+ --breadcrumb-separator-fg: var(--a-fg-muted);
15
+ --breadcrumb-current-fg: var(--a-fg-strong);
16
16
 
17
17
  /* ── Transition ── */
18
- --breadcrumb-duration-default: var(--a-duration-fast);
19
- --breadcrumb-easing-default: var(--a-easing);
18
+ --breadcrumb-duration: var(--a-duration-fast);
19
+ --breadcrumb-easing: var(--a-easing);
20
20
 
21
21
  /* ── Link ── */
22
- --breadcrumb-link-radius-default: var(--a-radius-sm);
23
- --breadcrumb-link-focus-ring-default: var(--a-focus-ring);
22
+ --breadcrumb-link-radius: var(--a-radius-sm);
23
+ --breadcrumb-link-focus-ring: var(--a-focus-ring);
24
24
  }
25
25
 
26
26
  :scope {
27
27
  box-sizing: border-box;
28
28
  display: flex;
29
29
  align-items: center;
30
- gap: var(--breadcrumb-gap, var(--breadcrumb-gap-default));
31
- font-size: var(--breadcrumb-font-size, var(--breadcrumb-font-size-default));
30
+ gap: var(--breadcrumb-gap);
31
+ font-size: var(--breadcrumb-font-size);
32
32
  }
33
33
 
34
34
  /* Display convention (ADR-0037): block-level by default; [inline] opts back to inline-level. */
@@ -36,7 +36,7 @@
36
36
 
37
37
  /* Separator — standalone span, never inside <a> */
38
38
  [data-sep] {
39
- color: var(--breadcrumb-separator-fg, var(--breadcrumb-separator-fg-default));
39
+ color: var(--breadcrumb-separator-fg);
40
40
  flex-shrink: 0;
41
41
  pointer-events: none;
42
42
  user-select: none;
@@ -49,32 +49,32 @@
49
49
  overflow: hidden;
50
50
  text-overflow: ellipsis;
51
51
  white-space: nowrap;
52
- max-width: var(--breadcrumb-max-width, var(--breadcrumb-max-width-default));
53
- color: var(--breadcrumb-fg, var(--breadcrumb-fg-default));
52
+ max-width: var(--breadcrumb-max-width);
53
+ color: var(--breadcrumb-fg);
54
54
  }
55
55
 
56
56
  /* Links */
57
57
  a[data-item] {
58
58
  text-decoration: none;
59
- border-radius: var(--breadcrumb-link-radius, var(--breadcrumb-link-radius-default));
60
- transition: color var(--breadcrumb-duration, var(--breadcrumb-duration-default)) var(--breadcrumb-easing, var(--breadcrumb-easing-default));
59
+ border-radius: var(--breadcrumb-link-radius);
60
+ transition: color var(--breadcrumb-duration) var(--breadcrumb-easing);
61
61
  }
62
62
 
63
63
  a[data-item]:hover {
64
- color: var(--breadcrumb-fg-hover, var(--breadcrumb-fg-hover-default));
64
+ color: var(--breadcrumb-fg-hover);
65
65
  text-decoration: underline;
66
66
  text-underline-offset: 2px;
67
67
  }
68
68
 
69
69
  a[data-item]:focus-visible {
70
70
  outline: none;
71
- box-shadow: var(--breadcrumb-link-focus-ring, var(--breadcrumb-link-focus-ring-default));
71
+ box-shadow: var(--breadcrumb-link-focus-ring);
72
72
  }
73
73
 
74
74
  /* Current (last item) */
75
75
  [data-item][aria-current] {
76
- color: var(--breadcrumb-current-fg, var(--breadcrumb-current-fg-default));
77
- font-weight: var(--breadcrumb-current-weight, var(--breadcrumb-current-weight-default));
76
+ color: var(--breadcrumb-current-fg);
77
+ font-weight: var(--breadcrumb-current-weight);
78
78
  pointer-events: none;
79
79
  text-decoration: none;
80
80
  }
@@ -6,80 +6,79 @@ button-ui:active { transform: scale(0.97); }
6
6
 
7
7
  button-ui:not([disabled]):hover,
8
8
  button-ui[variant="primary"]:not([disabled]):hover {
9
- --button-bg-default: var(--button-bg-hover, var(--button-bg-hover-default));
10
- --button-fg-default: var(--button-fg-hover, var(--button-fg-hover-default));
11
- --button-border-default: var(--button-border-hover, var(--button-border-hover-default));
9
+ --button-bg: var(--button-bg-hover);
10
+ --button-fg: var(--button-fg-hover);
11
+ --button-border: var(--button-border-hover);
12
12
  }
13
13
  button-ui[variant="ghost"]:not([disabled]):hover {
14
- --button-bg-default: var(--button-bg-ghost-hover, var(--button-bg-ghost-hover-default));
15
- --button-fg-default: var(--button-fg-ghost-hover, var(--button-fg-ghost-hover-default));
16
- --button-border-default: var(--button-border-ghost-hover, var(--button-border-ghost-hover-default));
14
+ --button-bg: var(--button-bg-ghost-hover);
15
+ --button-fg: var(--button-fg-ghost-hover);
16
+ --button-border: var(--button-border-ghost-hover);
17
17
  }
18
18
  button-ui[variant="outline"]:not([disabled]):hover {
19
- --button-fg-default: var(--button-fg-hover, var(--button-fg-hover-default));
20
- --button-border-default: var(--button-border-hover, var(--button-border-hover-default));
19
+ --button-fg: var(--button-fg-hover);
20
+ --button-border: var(--button-border-hover);
21
21
  }
22
22
  button-ui[color="danger"]:not([disabled]):hover {
23
- --button-bg-default: var(--button-bg-hover, var(--button-bg-hover-default));
24
- --button-fg-default: var(--button-fg-hover, var(--button-fg-hover-default));
25
- --button-border-default: var(--button-border-hover, var(--button-border-hover-default));
23
+ --button-bg: var(--button-bg-hover);
24
+ --button-fg: var(--button-fg-hover);
25
+ --button-border: var(--button-border-hover);
26
26
  }
27
27
 
28
28
  @scope (button-ui) {
29
29
  :where(:scope) {
30
- /* OD-5 token-shadowing fix: `-default` suffix on internal-target
31
- tokens so the un-suffixed name (--button-bg / --button-fg /
32
- --button-border) is reserved as a consumer-extension point.
33
- Use sites read `var(--name, var(--name-default))` so a
34
- surface-ancestor declaration of --button-bg can win over the
35
- button's own state/variant cascade. Spec: docs/specs/genui-css-channel.md OD-5. */
36
- --button-bg-default: var(--a-ui-bg);
37
- --button-fg-default: var(--a-ui-text);
38
- --button-border-default: transparent;
39
- --button-height-default: var(--a-size);
40
- --button-px-default: var(--a-ui-px);
41
- --button-radius-default: var(--a-radius);
42
- --button-font-size-default: var(--a-ui-size);
43
- --button-font-weight-default: var(--a-ui-weight);
44
- --button-gap-default: var(--a-space-1);
45
- --button-bg-hover-default: var(--a-ui-bg-hover);
46
- --button-fg-hover-default: var(--a-ui-text-hover);
47
- --button-border-hover-default: transparent;
48
- --button-bg-primary-default: var(--a-primary);
49
- --button-fg-primary-default: var(--a-chrome-light);
50
- --button-bg-outline-default: transparent;
51
- --button-fg-outline-default: var(--a-fg);
52
- --button-border-outline-default: var(--a-ui-border);
53
- --button-bg-ghost-default: transparent;
54
- --button-fg-ghost-default: var(--a-fg-subtle);
55
- --button-fg-ghost-hover-default: var(--a-fg-strong);
56
- --button-bg-ghost-hover-default: var(--a-bg-hover);
57
- --button-border-ghost-default: transparent;
58
- --button-border-ghost-hover-default: transparent;
59
- --button-bg-danger-default: var(--a-danger);
60
- --button-fg-danger-default: var(--a-danger-fg);
61
- --button-bg-hover-danger-default: var(--a-danger);
62
- --button-bg-disabled-default: var(--a-ui-bg-disabled);
63
- --button-fg-disabled-default: var(--a-ui-text-disabled);
64
- --button-border-disabled-default: transparent;
30
+ /* Component tokens — the un-suffixed `--button-*` names ARE the
31
+ component's tokens; variants/states re-point them below. Consumers
32
+ override per-element (`button-ui { --button-bg: }` or inline) or
33
+ via `@layer overrides`. See docs/specs/component-token-contract.md. */
34
+ --button-bg: var(--a-ui-bg);
35
+ --button-fg: var(--a-ui-text);
36
+ --button-border: transparent;
37
+ --button-height: var(--a-size);
38
+ --button-px: var(--a-ui-px);
39
+ --button-radius: var(--a-radius);
40
+ --button-font-size: var(--a-ui-size);
41
+ --button-font-weight: var(--a-ui-weight);
42
+ --button-font-family: var(--a-font-family-ui);
43
+ --button-gap: var(--a-space-1);
44
+ --button-bg-hover: var(--a-ui-bg-hover);
45
+ --button-fg-hover: var(--a-ui-text-hover);
46
+ --button-border-hover: transparent;
47
+ --button-bg-primary: var(--a-primary);
48
+ --button-fg-primary: var(--a-chrome-light);
49
+ --button-bg-outline: transparent;
50
+ --button-fg-outline: var(--a-fg);
51
+ --button-border-outline: var(--a-ui-border);
52
+ --button-bg-ghost: transparent;
53
+ --button-fg-ghost: var(--a-fg-subtle);
54
+ --button-fg-ghost-hover: var(--a-fg-strong);
55
+ --button-bg-ghost-hover: var(--a-bg-hover);
56
+ --button-border-ghost: transparent;
57
+ --button-border-ghost-hover: transparent;
58
+ --button-bg-danger: var(--a-danger);
59
+ --button-fg-danger: var(--a-chrome-light); /* white on the saturated fill — see color rules */
60
+ --button-bg-hover-danger: var(--a-danger);
61
+ --button-bg-disabled: var(--a-ui-bg-disabled);
62
+ --button-fg-disabled: var(--a-ui-text-disabled);
63
+ --button-border-disabled: transparent;
65
64
 
66
65
  /* ── Transition ── */
67
- --button-duration-default: var(--a-duration-fast);
68
- --button-easing-default: var(--a-easing);
66
+ --button-duration: var(--a-duration-fast);
67
+ --button-easing: var(--a-easing);
69
68
 
70
69
  /* ── State ── */
71
- --button-focus-ring-default: var(--a-focus-ring);
70
+ --button-focus-ring: var(--a-focus-ring);
72
71
 
73
72
  /* ── Trailing slot ── */
74
- --button-trailing-font-size-default: var(--a-ui-sm);
73
+ --button-trailing-font-size: var(--a-ui-sm);
75
74
  /* kbd-pill tracks the button's OWN text color (currentColor) so it reads
76
75
  on any variant fill — on a primary button the fixed --a-fg-muted gray
77
76
  was nearly invisible against the white label. Border is a translucent
78
77
  slice of the same color so the pill outline adapts too. */
79
- --button-trailing-fg-default: currentColor;
80
- --button-trailing-border-default: color-mix(in oklab, currentColor 28%, transparent);
81
- --button-trailing-radius-default: var(--a-radius-sm);
82
- --button-trailing-px-default: var(--a-space-0-5);
78
+ --button-trailing-fg: currentColor;
79
+ --button-trailing-border: color-mix(in oklab, currentColor 28%, transparent);
80
+ --button-trailing-radius: var(--a-radius-sm);
81
+ --button-trailing-px: var(--a-space-0-5);
83
82
  }
84
83
 
85
84
  :scope {
@@ -87,27 +86,29 @@ button-ui[color="danger"]:not([disabled]):hover {
87
86
  display: flex;
88
87
  align-items: center;
89
88
  justify-content: center;
90
- gap: var(--button-gap, var(--button-gap-default));
91
- min-width: var(--button-height, var(--button-height-default)); /* keep button at least as wide as it is tall */
92
- min-height: var(--button-height, var(--button-height-default));
89
+ gap: var(--button-gap);
90
+ min-width: var(--button-height); /* keep button at least as wide as it is tall */
91
+ min-height: var(--button-height);
93
92
  overflow: hidden;
94
- padding-inline: var(--button-px, var(--button-px-default));
95
- border: 1px solid var(--button-border, var(--button-border-default));
96
- border-radius: var(--button-radius, var(--button-radius-default));
97
- background: var(--button-bg, var(--button-bg-default));
98
- color: var(--button-fg, var(--button-fg-default));
93
+ padding-inline: var(--button-px);
94
+ border: 1px solid var(--button-border);
95
+ border-radius: var(--button-radius);
96
+ background: var(--button-bg);
97
+ color: var(--button-fg);
99
98
  font: inherit;
100
- font-size: var(--button-font-size, var(--button-font-size-default));
101
- font-weight: var(--button-font-weight, var(--button-font-weight-default));
99
+ /* font-family floor — see segment.css rationale. */
100
+ font-family: var(--button-font-family);
101
+ font-size: var(--button-font-size);
102
+ font-weight: var(--button-font-weight);
102
103
  line-height: 1;
103
104
  cursor: pointer;
104
105
  user-select: none;
105
106
  transition:
106
- background var(--button-duration, var(--button-duration-default)) var(--button-easing, var(--button-easing-default)),
107
- border-color var(--button-duration, var(--button-duration-default)) var(--button-easing, var(--button-easing-default)),
108
- color var(--button-duration, var(--button-duration-default)) var(--button-easing, var(--button-easing-default)),
109
- opacity var(--button-duration, var(--button-duration-default)) var(--button-easing, var(--button-easing-default)),
110
- transform var(--button-duration, var(--button-duration-default)) var(--button-easing, var(--button-easing-default));
107
+ background var(--button-duration) var(--button-easing),
108
+ border-color var(--button-duration) var(--button-easing),
109
+ color var(--button-duration) var(--button-easing),
110
+ opacity var(--button-duration) var(--button-easing),
111
+ transform var(--button-duration) var(--button-easing);
111
112
  white-space: nowrap;
112
113
  }
113
114
  :scope[text]::after {
@@ -140,38 +141,36 @@ button-ui[color="danger"]:not([disabled]):hover {
140
141
  [slot="trailing"] {
141
142
  order: 99;
142
143
  margin-inline-start: auto;
143
- font-size: var(--button-trailing-font-size, var(--button-trailing-font-size-default));
144
- color: var(--button-trailing-fg, var(--button-trailing-fg-default));
144
+ font-size: var(--button-trailing-font-size);
145
+ color: var(--button-trailing-fg);
145
146
  font-family: inherit;
146
- border: 1px solid var(--button-trailing-border, var(--button-trailing-border-default));
147
- border-radius: var(--button-trailing-radius, var(--button-trailing-radius-default));
148
- padding: 0 var(--button-trailing-px, var(--button-trailing-px-default));
147
+ border: 1px solid var(--button-trailing-border);
148
+ border-radius: var(--button-trailing-radius);
149
+ padding: 0 var(--button-trailing-px);
149
150
  line-height: 1;
150
151
  }
151
152
 
152
153
  /* :scope:active moved outside @scope — see Safari 17.x bug note at top. */
153
- :scope:focus-visible { outline: none; box-shadow: var(--button-focus-ring, var(--button-focus-ring-default)); }
154
+ :scope:focus-visible { outline: none; box-shadow: var(--button-focus-ring); }
154
155
 
155
156
  /* ── Variants (rest state) ──
156
- State/variant blocks override the `-default` (the fallback for
157
- when no consumer extension is set). Consumer override of the
158
- un-suffixed name (--button-bg etc.) wins at the use site via
159
- `var(--button-bg, var(--button-bg-default))`. */
157
+ Variant/state blocks re-point the component tokens (--button-bg etc.);
158
+ the base layout in :scope stays untouched. */
160
159
  :scope[variant="primary"] {
161
- --button-bg-default: var(--button-bg-primary, var(--button-bg-primary-default));
162
- --button-fg-default: var(--button-fg-primary, var(--button-fg-primary-default));
160
+ --button-bg: var(--button-bg-primary);
161
+ --button-fg: var(--button-fg-primary);
163
162
  }
164
163
 
165
164
  :scope[variant="outline"] {
166
- --button-bg-default: var(--button-bg-outline, var(--button-bg-outline-default));
167
- --button-fg-default: var(--button-fg-outline, var(--button-fg-outline-default));
168
- --button-border-default: var(--button-border-outline, var(--button-border-outline-default));
165
+ --button-bg: var(--button-bg-outline);
166
+ --button-fg: var(--button-fg-outline);
167
+ --button-border: var(--button-border-outline);
169
168
  }
170
169
 
171
170
  :scope[variant="ghost"] {
172
- --button-bg-default: var(--button-bg-ghost, var(--button-bg-ghost-default));
173
- --button-fg-default: var(--button-fg-ghost, var(--button-fg-ghost-default));
174
- --button-border-default: var(--button-border-ghost, var(--button-border-ghost-default));
171
+ --button-bg: var(--button-bg-ghost);
172
+ --button-fg: var(--button-fg-ghost);
173
+ --button-border: var(--button-border-ghost);
175
174
  }
176
175
 
177
176
  /* ── Color (semantic axis) ──
@@ -180,30 +179,53 @@ button-ui[color="danger"]:not([disabled]):hover {
180
179
  vs `<button-ui variant="outline" color="danger">`.
181
180
  `variant="danger"` is a deprecated alias migrated to color via JS. */
182
181
  :scope[color="danger"] {
183
- --button-bg-default: var(--button-bg-danger, var(--button-bg-danger-default));
184
- --button-fg-default: var(--button-fg-danger, var(--button-fg-danger-default));
182
+ --button-bg: var(--button-bg-danger);
183
+ --button-fg: var(--button-fg-danger);
185
184
  }
186
185
  :scope[color="success"] {
187
186
  /* Consume the L3 `-bg` alias, not the L2 `-strong` step. Currently
188
187
  resolves identically (both = `-50`), but consuming `-bg` future-
189
188
  proofs if the surface-step ever redirects (as -warning-bg did
190
- in v0.6.36 to fix muddy contrast). */
191
- --button-bg-default: var(--a-success-bg);
192
- --button-fg-default: var(--a-success-fg);
189
+ in v0.6.36 to fix muddy contrast).
190
+ Text is --a-chrome-light (white) on the saturated fill, like primary
191
+ (--button-fg-primary). --a-success-fg is success-COLORED text — near
192
+ invisible on the fill (feedback_text_on_accent_disc). Warning is the
193
+ exception: its --a-warning-bg fill is light, so it keeps dark -fg. */
194
+ --button-bg: var(--a-success-bg);
195
+ --button-fg: var(--a-chrome-light);
193
196
  }
194
197
  :scope[color="info"] {
195
- --button-bg-default: var(--a-info-bg);
196
- --button-fg-default: var(--a-info-fg);
198
+ --button-bg: var(--a-info-bg);
199
+ --button-fg: var(--a-chrome-light);
197
200
  }
198
201
  :scope[color="warning"] {
199
202
  /* `--a-warning-bg` (bright amber, scheme-independent) not
200
203
  `-strong` (mid-tone). The pair `-strong` + `-fg` gives muddy
201
204
  brown-on-brown — the L3 `-bg` is the canonical solid-warning
202
205
  surface paired with `-fg` (dark text). */
203
- --button-bg-default: var(--a-warning-bg);
204
- --button-fg-default: var(--a-warning-fg);
206
+ --button-bg: var(--a-warning-bg);
207
+ --button-fg: var(--a-warning-fg);
205
208
  }
206
209
 
210
+ /* ── Color × non-solid variants ──
211
+ The [color] rules above set a SOLID fill — that's the default rendering
212
+ (bare `color="danger"`). But with variant="outline"/"ghost" the button
213
+ must COMPOSE, not fill. These combined selectors (specificity 0,3,0) beat
214
+ the 0,2,0 [color] rules regardless of source order, restoring a transparent
215
+ fill + colored text (+ colored border for outline). Without them,
216
+ `variant="outline" color="success"` renders as a solid green pill — the
217
+ demo's "Approve" button (button.examples.html:50). --a-X-text is the
218
+ family-colored text designed to read on a neutral page surface; -border is
219
+ the L3 colored border alias. */
220
+ :scope[variant="outline"][color="danger"] { --button-bg: transparent; --button-fg: var(--a-danger-text); --button-border: var(--a-danger-border); }
221
+ :scope[variant="outline"][color="info"] { --button-bg: transparent; --button-fg: var(--a-info-text); --button-border: var(--a-info-border); }
222
+ :scope[variant="outline"][color="success"] { --button-bg: transparent; --button-fg: var(--a-success-text); --button-border: var(--a-success-border); }
223
+ :scope[variant="outline"][color="warning"] { --button-bg: transparent; --button-fg: var(--a-warning-text); --button-border: var(--a-warning-border); }
224
+ :scope[variant="ghost"][color="danger"] { --button-bg: transparent; --button-fg: var(--a-danger-text); }
225
+ :scope[variant="ghost"][color="info"] { --button-bg: transparent; --button-fg: var(--a-info-text); }
226
+ :scope[variant="ghost"][color="success"] { --button-bg: transparent; --button-fg: var(--a-success-text); }
227
+ :scope[variant="ghost"][color="warning"] { --button-bg: transparent; --button-fg: var(--a-warning-text); }
228
+
207
229
  /* Hover rules moved outside @scope — see Safari 17.x bug note at
208
230
  top of file. */
209
231
 
@@ -216,16 +238,16 @@ button-ui[color="danger"]:not([disabled]):hover {
216
238
 
217
239
  /* Disabled */
218
240
  :scope[disabled] {
219
- --button-bg-default: var(--button-bg-disabled, var(--button-bg-disabled-default));
220
- --button-fg-default: var(--button-fg-disabled, var(--button-fg-disabled-default));
221
- --button-border-default: var(--button-border-disabled, var(--button-border-disabled-default));
241
+ --button-bg: var(--button-bg-disabled);
242
+ --button-fg: var(--button-fg-disabled);
243
+ --button-border: var(--button-border-disabled);
222
244
  pointer-events: none;
223
245
  cursor: not-allowed;
224
246
  }
225
247
 
226
248
  /* Icon-only (no text) */
227
249
  :scope:not([text]), :scope[text=""] {
228
- --button-px-default: 0;
229
- width: var(--button-height, var(--button-height-default));
250
+ --button-px: 0;
251
+ width: var(--button-height);
230
252
  }
231
253
  }