@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
@@ -13,23 +13,23 @@
13
13
  @scope (preview-ui) {
14
14
  /* ── Block 1 — TOKENS ── */
15
15
  :where(:scope) {
16
- --preview-border-default: 1px solid var(--a-border-subtle);
17
- --preview-radius-default: var(--a-radius-lg);
18
- --preview-render-bg-default: var(--a-canvas-1);
19
- --preview-render-pad-default: var(--a-space-6);
20
- --preview-render-gap-default: var(--a-space-3);
16
+ --preview-border: 1px solid var(--a-border-subtle);
17
+ --preview-radius: var(--a-radius-lg);
18
+ --preview-render-bg: var(--a-canvas-1);
19
+ --preview-render-pad: var(--a-space-6);
20
+ --preview-render-gap: var(--a-space-3);
21
21
  /* split column floor — below this the grid wraps to a single column
22
22
  (responsive without container-type; see ADR note in css-patterns). */
23
- --preview-split-min-default: 20rem;
23
+ --preview-split-min: 20rem;
24
24
  }
25
25
 
26
26
  /* ── Block 2 — BASE ── */
27
27
  :scope {
28
28
  display: block;
29
- border: var(--preview-border, var(--preview-border-default));
30
- border-radius: var(--preview-radius, var(--preview-radius-default));
29
+ border: var(--preview-border);
30
+ border-radius: var(--preview-radius);
31
31
  overflow: hidden;
32
- background: var(--preview-render-bg, var(--preview-render-bg-default));
32
+ background: var(--preview-render-bg);
33
33
  }
34
34
 
35
35
  /* Render stage — wraps live demo nodes; flex row so multiple sibling
@@ -49,9 +49,9 @@
49
49
  display: flex;
50
50
  flex-direction: column;
51
51
  align-items: stretch;
52
- gap: var(--preview-render-gap, var(--preview-render-gap-default));
53
- padding: var(--preview-render-pad, var(--preview-render-pad-default));
54
- background: var(--preview-render-bg, var(--preview-render-bg-default));
52
+ gap: var(--preview-render-gap);
53
+ padding: var(--preview-render-pad);
54
+ background: var(--preview-render-bg);
55
55
  overflow-x: auto;
56
56
  }
57
57
  /* Lone text-flow atoms shouldn't span the whole stage — keep them
@@ -78,7 +78,7 @@
78
78
  /* Code pane — divider line between panes; flatten the nested code-ui
79
79
  chrome so the preview frame owns the outer border + radius. */
80
80
  [data-preview-code] {
81
- border-block-start: var(--preview-border, var(--preview-border-default));
81
+ border-block-start: var(--preview-border);
82
82
  min-width: 0; /* allow the code-ui to shrink in split grid */
83
83
  }
84
84
  [data-preview-code] code-ui {
@@ -91,7 +91,7 @@
91
91
  /* code-first — divider moves to the bottom of the (now-leading) code pane */
92
92
  :scope[code-first] [data-preview-code] {
93
93
  border-block-start: none;
94
- border-block-end: var(--preview-border, var(--preview-border-default));
94
+ border-block-end: var(--preview-border);
95
95
  }
96
96
 
97
97
  /* Stacked layout — render above code. This is the BASE behaviour (above), so
@@ -109,11 +109,11 @@
109
109
  reverts to the stacked top-border via the base rule above. */
110
110
  :scope[layout="split"] {
111
111
  display: grid;
112
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--preview-split-min, var(--preview-split-min-default))), 1fr));
112
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--preview-split-min)), 1fr));
113
113
  }
114
114
  :scope[layout="split"] [data-preview-code] {
115
115
  border-block-start: none;
116
- border-inline-start: var(--preview-border, var(--preview-border-default));
116
+ border-inline-start: var(--preview-border);
117
117
  /* Stretch code-ui to the grid row height — the render side is often
118
118
  taller, so a short snippet would otherwise leave an empty code surface
119
119
  below it (same fill as rows mode). */
@@ -129,7 +129,7 @@
129
129
  @media (max-width: 32rem) {
130
130
  :scope[layout="split"] [data-preview-code] {
131
131
  border-inline-start: none;
132
- border-block-start: var(--preview-border, var(--preview-border-default));
132
+ border-block-start: var(--preview-border);
133
133
  }
134
134
  }
135
135
 
@@ -147,7 +147,7 @@
147
147
  align-items: stretch;
148
148
  }
149
149
  :scope[rows] [data-preview-row] + [data-preview-row] {
150
- border-block-start: var(--preview-border, var(--preview-border-default));
150
+ border-block-start: var(--preview-border);
151
151
  }
152
152
  /* In rows mode the render/code panes butt horizontally — divider is the
153
153
  inline-start border on the code cell, not the stacked top-border. The
@@ -156,7 +156,7 @@
156
156
  leaving empty space below a short snippet. */
157
157
  :scope[rows] [data-preview-row] > [data-preview-code] {
158
158
  border-block-start: none;
159
- border-inline-start: var(--preview-border, var(--preview-border-default));
159
+ border-inline-start: var(--preview-border);
160
160
  display: grid;
161
161
  }
162
162
  :scope[rows] [data-preview-row] > [data-preview-code] code-ui {
@@ -187,7 +187,7 @@
187
187
  }
188
188
  :scope[rows] [data-preview-row] > [data-preview-code] {
189
189
  border-inline-start: none;
190
- border-block-start: var(--preview-border, var(--preview-border-default));
190
+ border-block-start: var(--preview-border);
191
191
  }
192
192
  }
193
193
  /* Content-driven fallback — a single row whose live sample is wider than the
@@ -198,6 +198,6 @@
198
198
  }
199
199
  :scope[rows] [data-preview-row][data-stack] > [data-preview-code] {
200
200
  border-inline-start: none;
201
- border-block-start: var(--preview-border, var(--preview-border-default));
201
+ border-block-start: var(--preview-border);
202
202
  }
203
203
  }
@@ -1,18 +1,18 @@
1
1
  @scope (progress-ui) {
2
2
  :where(:scope) {
3
3
  /* -- Tokens -- */
4
- --progress-track-default: var(--a-bg-muted);
5
- --progress-fill-default: var(--a-accent);
6
- --progress-height-default: 0.375rem;
7
- --progress-radius-default: var(--a-radius-full);
8
- --progress-duration-default: var(--a-duration);
9
- --progress-easing-default: var(--a-easing);
4
+ --progress-track: var(--a-bg-muted);
5
+ --progress-fill: var(--a-accent);
6
+ --progress-height: 0.375rem;
7
+ --progress-radius: var(--a-radius-full);
8
+ --progress-duration: var(--a-duration);
9
+ --progress-easing: var(--a-easing);
10
10
 
11
11
  /* -- Indeterminate motion -- */
12
- --progress-shimmer-duration-default: 1.5s;
13
- --progress-shimmer-easing-default: ease-in-out;
14
- --progress-spin-duration-default: 0.6s;
15
- --progress-spin-easing-default: linear;
12
+ --progress-shimmer-duration: 1.5s;
13
+ --progress-shimmer-easing: ease-in-out;
14
+ --progress-spin-duration: 0.6s;
15
+ --progress-spin-easing: linear;
16
16
  }
17
17
 
18
18
  :scope {
@@ -26,17 +26,17 @@
26
26
 
27
27
  [slot="track"] {
28
28
  width: 100%;
29
- height: var(--progress-height, var(--progress-height-default));
30
- border-radius: var(--progress-radius, var(--progress-radius-default));
31
- background: var(--progress-track, var(--progress-track-default));
29
+ height: var(--progress-height);
30
+ border-radius: var(--progress-radius);
31
+ background: var(--progress-track);
32
32
  overflow: hidden;
33
33
  }
34
34
 
35
35
  [slot="fill"] {
36
36
  height: 100%;
37
- border-radius: var(--progress-radius, var(--progress-radius-default));
38
- background: var(--progress-fill, var(--progress-fill-default));
39
- transition: width var(--progress-duration, var(--progress-duration-default)) var(--progress-easing, var(--progress-easing-default));
37
+ border-radius: var(--progress-radius);
38
+ background: var(--progress-fill);
39
+ transition: width var(--progress-duration) var(--progress-easing);
40
40
 
41
41
  /* Enter animation: paint the fill at 0 on first frame, then transition
42
42
  to the inline width set by JS — so a freshly-mounted determinate bar
@@ -53,12 +53,12 @@
53
53
  width: 100% !important;
54
54
  background: linear-gradient(
55
55
  90deg,
56
- var(--progress-track, var(--progress-track-default)) 0%,
57
- var(--progress-fill, var(--progress-fill-default)) 50%,
58
- var(--progress-track, var(--progress-track-default)) 100%
56
+ var(--progress-track) 0%,
57
+ var(--progress-fill) 50%,
58
+ var(--progress-track) 100%
59
59
  );
60
60
  background-size: 200% 100%;
61
- animation: progress-shimmer var(--progress-shimmer-duration, var(--progress-shimmer-duration-default)) var(--progress-shimmer-easing, var(--progress-shimmer-easing-default)) infinite;
61
+ animation: progress-shimmer var(--progress-shimmer-duration) var(--progress-shimmer-easing) infinite;
62
62
  }
63
63
 
64
64
  @keyframes progress-shimmer {
@@ -84,10 +84,10 @@
84
84
  display: block;
85
85
  width: 100%;
86
86
  height: 100%;
87
- border: 2px solid var(--progress-fill, var(--progress-fill-default));
87
+ border: 2px solid var(--progress-fill);
88
88
  border-top-color: transparent;
89
- border-radius: var(--progress-radius, var(--progress-radius-default));
90
- animation: progress-spin var(--progress-spin-duration, var(--progress-spin-duration-default)) var(--progress-spin-easing, var(--progress-spin-easing-default)) infinite;
89
+ border-radius: var(--progress-radius);
90
+ animation: progress-spin var(--progress-spin-duration) var(--progress-spin-easing) infinite;
91
91
  }
92
92
 
93
93
  @keyframes progress-spin {
@@ -3,15 +3,15 @@
3
3
  /* ── Tokens ── */
4
4
  /* Row-gap between the label/meta row and the bar. Bumped --a-space-1 →
5
5
  --a-space-2 so the bar isn't crammed under the label. (bug-42) */
6
- --progress-row-gap-default: var(--a-space-2);
7
- --progress-row-column-gap-default: var(--a-space-2);
8
- --progress-row-label-size-default: var(--a-ui-size);
9
- --progress-row-label-fg-default: var(--a-fg);
10
- --progress-row-meta-size-default: var(--a-ui-sm);
11
- --progress-row-meta-fg-default: var(--a-fg-muted);
6
+ --progress-row-gap: var(--a-space-2);
7
+ --progress-row-column-gap: var(--a-space-2);
8
+ --progress-row-label-size: var(--a-ui-size);
9
+ --progress-row-label-fg: var(--a-fg);
10
+ --progress-row-meta-size: var(--a-ui-sm);
11
+ --progress-row-meta-fg: var(--a-fg-muted);
12
12
 
13
13
  /* Fill color piped into nested progress-ui via its own token */
14
- --progress-row-fill-bg-default: var(--a-accent-bg);
14
+ --progress-row-fill-bg: var(--a-accent-bg);
15
15
  text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
16
16
  }
17
17
 
@@ -22,15 +22,15 @@
22
22
  grid-template-areas:
23
23
  "label meta"
24
24
  "bar bar";
25
- column-gap: var(--progress-row-column-gap, var(--progress-row-column-gap-default));
26
- row-gap: var(--progress-row-gap, var(--progress-row-gap-default));
25
+ column-gap: var(--progress-row-column-gap);
26
+ row-gap: var(--progress-row-gap);
27
27
  align-items: baseline;
28
28
  }
29
29
 
30
30
  [slot="label"] {
31
31
  grid-area: label;
32
- font-size: var(--progress-row-label-size, var(--progress-row-label-size-default));
33
- color: var(--progress-row-label-fg, var(--progress-row-label-fg-default));
32
+ font-size: var(--progress-row-label-size);
33
+ color: var(--progress-row-label-fg);
34
34
  line-height: 1.4;
35
35
  min-width: 0;
36
36
  overflow: hidden;
@@ -40,8 +40,8 @@
40
40
 
41
41
  [slot="meta"] {
42
42
  grid-area: meta;
43
- font-size: var(--progress-row-meta-size, var(--progress-row-meta-size-default));
44
- color: var(--progress-row-meta-fg, var(--progress-row-meta-fg-default));
43
+ font-size: var(--progress-row-meta-size);
44
+ color: var(--progress-row-meta-fg);
45
45
  font-variant-numeric: tabular-nums;
46
46
  justify-self: end;
47
47
  line-height: 1.4;
@@ -50,11 +50,11 @@
50
50
  progress-ui {
51
51
  grid-area: bar;
52
52
  /* Pipe our component token into the nested progress component's token */
53
- --progress-fill-bg: var(--progress-row-fill-bg, var(--progress-row-fill-bg-default));
53
+ --progress-fill-bg: var(--progress-row-fill-bg);
54
54
  }
55
55
 
56
56
  /* Variants — remap own tokens only; the nested progress inherits via --progress-row-fill-bg. */
57
- :scope[variant="success"] { --progress-row-fill-bg-default: var(--a-success-bg); }
58
- :scope[variant="warning"] { --progress-row-fill-bg-default: var(--a-warning-bg); }
59
- :scope[variant="danger"] { --progress-row-fill-bg-default: var(--a-danger-bg); }
57
+ :scope[variant="success"] { --progress-row-fill-bg: var(--a-success-bg); }
58
+ :scope[variant="warning"] { --progress-row-fill-bg: var(--a-warning-bg); }
59
+ :scope[variant="danger"] { --progress-row-fill-bg: var(--a-danger-bg); }
60
60
  }
@@ -4,8 +4,8 @@
4
4
 
5
5
  @scope (qr-code-ui) {
6
6
  :where(:scope) {
7
- --qr-code-fg-default: currentColor;
8
- --qr-code-bg-default: transparent;
7
+ --qr-code-fg: currentColor;
8
+ --qr-code-bg: transparent;
9
9
  }
10
10
 
11
11
  :scope {
@@ -14,8 +14,8 @@
14
14
  /* The SVG itself carries explicit width/height; this is a fallback
15
15
  for cases where the SVG hasn't stamped yet (empty value/matrix). */
16
16
  line-height: 0;
17
- color: var(--qr-code-fg, var(--qr-code-fg-default));
18
- background: var(--qr-code-bg, var(--qr-code-bg-default));
17
+ color: var(--qr-code-fg);
18
+ background: var(--qr-code-bg);
19
19
  }
20
20
 
21
21
  /* Display convention (ADR-0037): block-level by default; [inline] opts back to inline-level. */
@@ -3,53 +3,53 @@
3
3
  both fail inside `@scope`. Selectors moved out. See
4
4
  docs/BROWSER-COMPAT.md §3a. */
5
5
  radio-ui:not([disabled]):hover [slot="dot"] {
6
- border-color: var(--radio-border-hover, var(--radio-border-hover-default));
7
- background: var(--radio-bg-hover, var(--radio-bg-hover-default));
6
+ border-color: var(--radio-border-hover);
7
+ background: var(--radio-bg-hover);
8
8
  }
9
9
  radio-ui[checked]:not([disabled]):hover [slot="dot"] {
10
- background: var(--radio-bg-checked-hover, var(--radio-bg-checked-hover-default));
11
- border-color: var(--radio-bg-checked-hover, var(--radio-bg-checked-hover-default));
10
+ background: var(--radio-bg-checked-hover);
11
+ border-color: var(--radio-bg-checked-hover);
12
12
  }
13
13
  radio-ui[checked] [slot="dot"] {
14
- background: var(--radio-bg-checked, var(--radio-bg-checked-default));
15
- border-color: var(--radio-border-checked, var(--radio-border-checked-default));
14
+ background: var(--radio-bg-checked);
15
+ border-color: var(--radio-border-checked);
16
16
  }
17
17
  radio-ui[checked] [slot="dot"]::after {
18
- width: calc(var(--radio-size, var(--radio-size-default)) * 0.6);
19
- height: calc(var(--radio-size, var(--radio-size-default)) * 0.6);
18
+ width: calc(var(--radio-size) * 0.6);
19
+ height: calc(var(--radio-size) * 0.6);
20
20
  }
21
21
 
22
22
  @scope (radio-ui) {
23
23
  :where(:scope) {
24
24
  /* ── Layout ── (size scales with universal [size] attribute via --a-toggle-size) */
25
- --radio-size-default: var(--a-toggle-size);
26
- --radio-gap-default: var(--a-space-2);
27
- --radio-radius-default: var(--a-radius-full);
25
+ --radio-size: var(--a-toggle-size);
26
+ --radio-gap: var(--a-space-2);
27
+ --radio-radius: var(--a-radius-full);
28
28
 
29
29
  /* ── Colors ── */
30
- --radio-bg-default: var(--a-ui-bg);
31
- --radio-border-default: var(--a-ui-border);
32
- --radio-border-hover-default: var(--a-fg-subtle);
33
- --radio-bg-hover-default: var(--a-bg-muted);
30
+ --radio-bg: var(--a-ui-bg);
31
+ --radio-border: var(--a-ui-border);
32
+ --radio-border-hover: var(--a-fg-subtle);
33
+ --radio-bg-hover: var(--a-bg-muted);
34
34
 
35
35
  /* ── State: checked ── */
36
- --radio-bg-checked-default: var(--a-primary);
37
- --radio-border-checked-default: var(--a-primary);
38
- --radio-fg-checked-default: var(--a-chrome-light);
39
- --radio-bg-checked-hover-default: var(--a-primary-hover);
36
+ --radio-bg-checked: var(--a-primary);
37
+ --radio-border-checked: var(--a-primary);
38
+ --radio-fg-checked: var(--a-chrome-light);
39
+ --radio-bg-checked-hover: var(--a-primary-hover);
40
40
 
41
41
  /* ── State: disabled ── */
42
- --radio-fg-disabled-default: var(--a-ui-text-disabled);
42
+ --radio-fg-disabled: var(--a-ui-text-disabled);
43
43
 
44
44
  /* ── State: focus ── */
45
- --radio-focus-ring-default: var(--a-focus-ring);
45
+ --radio-focus-ring: var(--a-focus-ring);
46
46
 
47
47
  /* ── Typography ── */
48
- --radio-font-size-default: var(--a-ui-size);
48
+ --radio-font-size: var(--a-ui-size);
49
49
 
50
50
  /* ── Transition ── */
51
- --radio-duration-default: var(--a-duration-fast);
52
- --radio-easing-default: var(--a-easing);
51
+ --radio-duration: var(--a-duration-fast);
52
+ --radio-easing: var(--a-easing);
53
53
  text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
54
54
  }
55
55
 
@@ -58,28 +58,28 @@ radio-ui[checked] [slot="dot"]::after {
58
58
  box-sizing: border-box;
59
59
  display: inline-flex;
60
60
  align-items: center;
61
- gap: var(--radio-gap, var(--radio-gap-default));
61
+ gap: var(--radio-gap);
62
62
  cursor: pointer;
63
63
  user-select: none;
64
- font-size: var(--radio-font-size, var(--radio-font-size-default));
64
+ font-size: var(--radio-font-size);
65
65
  outline: none;
66
66
  }
67
- :scope[disabled] { cursor: not-allowed; color: var(--radio-fg-disabled, var(--radio-fg-disabled-default)); }
67
+ :scope[disabled] { cursor: not-allowed; color: var(--radio-fg-disabled); }
68
68
 
69
69
  /* Dot */
70
70
  [slot="dot"] {
71
71
  flex-shrink: 0;
72
- width: var(--radio-size, var(--radio-size-default));
73
- height: var(--radio-size, var(--radio-size-default));
74
- border: 1.5px solid var(--radio-border, var(--radio-border-default));
75
- border-radius: var(--radio-radius, var(--radio-radius-default));
76
- background: var(--radio-bg, var(--radio-bg-default));
72
+ width: var(--radio-size);
73
+ height: var(--radio-size);
74
+ border: 1.5px solid var(--radio-border);
75
+ border-radius: var(--radio-radius);
76
+ background: var(--radio-bg);
77
77
  display: inline-flex;
78
78
  align-items: center;
79
79
  justify-content: center;
80
80
  transition:
81
- background var(--radio-duration, var(--radio-duration-default)) var(--radio-easing, var(--radio-easing-default)),
82
- border-color var(--radio-duration, var(--radio-duration-default)) var(--radio-easing, var(--radio-easing-default));
81
+ background var(--radio-duration) var(--radio-easing),
82
+ border-color var(--radio-duration) var(--radio-easing);
83
83
  }
84
84
 
85
85
  /* Inner dot — scales from 0 to 40% when checked */
@@ -87,11 +87,11 @@ radio-ui[checked] [slot="dot"]::after {
87
87
  content: '';
88
88
  width: 0;
89
89
  height: 0;
90
- border-radius: var(--radio-radius, var(--radio-radius-default));
91
- background: var(--radio-fg-checked, var(--radio-fg-checked-default));
90
+ border-radius: var(--radio-radius);
91
+ background: var(--radio-fg-checked);
92
92
  transition:
93
- width var(--radio-duration, var(--radio-duration-default)) var(--radio-easing, var(--radio-easing-default)),
94
- height var(--radio-duration, var(--radio-duration-default)) var(--radio-easing, var(--radio-easing-default));
93
+ width var(--radio-duration) var(--radio-easing),
94
+ height var(--radio-duration) var(--radio-easing);
95
95
  }
96
96
 
97
97
  /* hover + [checked] rules moved outside @scope — see Safari 17.x bug note at top. */
@@ -100,7 +100,7 @@ radio-ui[checked] [slot="dot"]::after {
100
100
  :scope[label]::after { content: attr(label); }
101
101
 
102
102
  /* Focus */
103
- :scope:focus-visible [slot="dot"] { box-shadow: var(--radio-focus-ring, var(--radio-focus-ring-default)); }
103
+ :scope:focus-visible [slot="dot"] { box-shadow: var(--radio-focus-ring); }
104
104
 
105
105
  /* Size handled by universal [size] attribute system. */
106
106
  }
@@ -2,44 +2,45 @@
2
2
  doesn't match the scope root. Plain selector outside works. See
3
3
  docs/BROWSER-COMPAT.md §3a. */
4
4
  range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
5
- background: var(--range-fill-bg-hover, var(--range-fill-bg-hover-default));
5
+ background: var(--range-fill-bg-hover);
6
6
  }
7
7
 
8
8
  @scope (range-ui) {
9
9
  :where(:scope) {
10
10
  /* ── Tokens (wired to --a-ui-*) ── */
11
- --range-bg-default: var(--a-ui-bg);
12
- --range-fill-bg-default: var(--a-ui-bg);
13
- --range-fill-bg-hover-default: var(--a-ui-bg-hover);
14
- --range-fill-bg-active-default: var(--a-ui-bg-active);
15
- --range-fill-bg-disabled-default: var(--a-canvas-muted);
16
- --range-fill-fg-default: var(--a-fg);
17
- --range-fill-fg-disabled-default: var(--a-ui-text-disabled);
18
- --range-fill-label-fg-default: var(--a-ui-text-subtle);
19
- --range-border-default: var(--a-ui-border);
20
- --range-border-hover-default: var(--a-ui-border-hover);
21
- --range-border-dragging-default: var(--a-ui-border-active);
22
- --range-focus-ring-default: var(--a-focus-ring);
23
- --range-focus-ring-invalid-default: var(--a-focus-ring-invalid);
24
- --range-radius-default: var(--a-radius);
25
- --range-height-default: var(--a-size);
26
- --range-px-default: var(--a-ui-px);
27
- --range-font-size-default: var(--a-ui-size);
28
- --range-label-fg-default: var(--a-ui-text-placeholder);
29
- --range-value-fg-default: var(--a-ui-text);
30
- --range-value-weight-default: var(--a-weight-bold);
31
- --range-suffix-fg-default: var(--a-ui-text-placeholder);
32
- --range-fill-pct-default: 0%;
11
+ --range-bg: var(--a-ui-bg);
12
+ --range-fill-bg: var(--a-ui-bg);
13
+ --range-fill-bg-hover: var(--a-ui-bg-hover);
14
+ --range-fill-bg-active: var(--a-ui-bg-active);
15
+ --range-fill-bg-disabled: var(--a-canvas-muted);
16
+ --range-fill-fg: var(--a-fg);
17
+ --range-fill-fg-disabled: var(--a-ui-text-disabled);
18
+ --range-fill-label-fg: var(--a-ui-text-subtle);
19
+ --range-border: var(--a-ui-border);
20
+ --range-border-hover: var(--a-ui-border-hover);
21
+ --range-border-dragging: var(--a-ui-border-active);
22
+ --range-focus-ring: var(--a-focus-ring);
23
+ --range-focus-ring-invalid: var(--a-focus-ring-invalid);
24
+ --range-radius: var(--a-radius);
25
+ --range-height: var(--a-size);
26
+ --range-px: var(--a-ui-px);
27
+ --range-font-size: var(--a-ui-size);
28
+ --range-font-family: var(--a-font-family-ui);
29
+ --range-label-fg: var(--a-ui-text-placeholder);
30
+ --range-value-fg: var(--a-ui-text);
31
+ --range-value-weight: var(--a-weight-bold);
32
+ --range-suffix-fg: var(--a-ui-text-placeholder);
33
+ --range-fill-pct: 0%;
33
34
 
34
35
  /* ── Transitions ── */
35
- --range-duration-default: var(--a-duration-fast);
36
- --range-easing-default: var(--a-easing);
36
+ --range-duration: var(--a-duration-fast);
37
+ --range-easing: var(--a-easing);
37
38
 
38
39
  /* ── Layout ── */
39
- --range-layer-gap-default: var(--a-space-1);
40
+ --range-layer-gap: var(--a-space-1);
40
41
 
41
42
  /* ── Hover text ── */
42
- --range-label-fg-hover-default: var(--a-fg-subtle);
43
+ --range-label-fg-hover: var(--a-fg-subtle);
43
44
 
44
45
  text-align: start; /* §text-align-reset — blocks inheritance from centered ancestors */
45
46
  }
@@ -55,61 +56,63 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
55
56
  [slot="field"] {
56
57
  position: relative;
57
58
  display: block;
58
- min-height: var(--range-height, var(--range-height-default));
59
- border: 1px solid var(--range-border, var(--range-border-default));
60
- border-radius: var(--range-radius, var(--range-radius-default));
59
+ min-height: var(--range-height);
60
+ border: 1px solid var(--range-border);
61
+ border-radius: var(--range-radius);
61
62
  overflow: hidden;
62
- background: var(--range-bg, var(--range-bg-default));
63
+ background: var(--range-bg);
63
64
  font: inherit;
64
- font-size: var(--range-font-size, var(--range-font-size-default));
65
+ /* font-family floor — see segment.css rationale. */
66
+ font-family: var(--range-font-family);
67
+ font-size: var(--range-font-size);
65
68
  line-height: 1;
66
69
  transition:
67
- border-color var(--range-duration, var(--range-duration-default)) var(--range-easing, var(--range-easing-default)),
68
- background var(--range-duration, var(--range-duration-default)) var(--range-easing, var(--range-easing-default));
70
+ border-color var(--range-duration) var(--range-easing),
71
+ background var(--range-duration) var(--range-easing);
69
72
  user-select: none;
70
73
  touch-action: none;
71
74
  }
72
75
  [slot="field"]:hover {
73
- border-color: var(--range-border-hover, var(--range-border-hover-default));
76
+ border-color: var(--range-border-hover);
74
77
  }
75
78
  :scope:focus-visible { outline: none; }
76
79
  :scope:focus-visible [slot="field"] {
77
80
  /* Canonical ring via L3 token (see semantics.css FOCUS block). */
78
- box-shadow: var(--range-focus-ring, var(--range-focus-ring-default));
81
+ box-shadow: var(--range-focus-ring);
79
82
  }
80
83
  :scope[aria-invalid="true"]:focus-visible [slot="field"],
81
84
  :scope[error]:focus-visible [slot="field"] {
82
- box-shadow: var(--range-focus-ring-invalid, var(--range-focus-ring-invalid-default));
85
+ box-shadow: var(--range-focus-ring-invalid);
83
86
  }
84
87
 
85
88
  /* ── Dual-layer fill: identical layouts, overlay clipped to fill % ── */
86
89
  [slot="layer"] {
87
90
  display: flex;
88
91
  align-items: center;
89
- gap: var(--range-layer-gap, var(--range-layer-gap-default));
90
- min-height: var(--range-height, var(--range-height-default));
91
- padding: 0 var(--range-px, var(--range-px-default));
92
+ gap: var(--range-layer-gap);
93
+ min-height: var(--range-height);
94
+ padding: 0 var(--range-px);
92
95
  box-sizing: border-box;
93
96
  }
94
97
 
95
98
  [data-layer="fill"] {
96
99
  position: absolute;
97
100
  inset: 0;
98
- background: var(--range-fill-bg, var(--range-fill-bg-default));
99
- clip-path: inset(0 calc(100% - var(--range-fill-pct, var(--range-fill-pct-default))) 0 0);
101
+ background: var(--range-fill-bg);
102
+ clip-path: inset(0 calc(100% - var(--range-fill-pct)) 0 0);
100
103
  pointer-events: none;
101
- transition: clip-path var(--range-duration, var(--range-duration-default)) var(--range-easing, var(--range-easing-default));
104
+ transition: clip-path var(--range-duration) var(--range-easing);
102
105
  }
103
106
 
104
107
  /* Base layer text colors */
105
- [data-layer="base"] [slot="label"] { color: var(--range-label-fg, var(--range-label-fg-default)); }
106
- [data-layer="base"] [slot="value"] { color: var(--range-value-fg, var(--range-value-fg-default)); font-weight: var(--range-value-weight, var(--range-value-weight-default)); }
107
- [data-layer="base"] [slot="suffix"] { color: var(--range-suffix-fg, var(--range-suffix-fg-default)); }
108
+ [data-layer="base"] [slot="label"] { color: var(--range-label-fg); }
109
+ [data-layer="base"] [slot="value"] { color: var(--range-value-fg); font-weight: var(--range-value-weight); }
110
+ [data-layer="base"] [slot="suffix"] { color: var(--range-suffix-fg); }
108
111
 
109
112
  /* Fill layer text colors (what shows through the filled portion) */
110
- [data-layer="fill"] [slot="label"] { color: var(--range-fill-label-fg, var(--range-fill-label-fg-default)); }
111
- [data-layer="fill"] [slot="value"] { color: var(--range-fill-fg, var(--range-fill-fg-default)); font-weight: var(--range-value-weight, var(--range-value-weight-default)); }
112
- [data-layer="fill"] [slot="suffix"] { color: var(--range-fill-fg, var(--range-fill-fg-default)); opacity: 0.75; }
113
+ [data-layer="fill"] [slot="label"] { color: var(--range-fill-label-fg); }
114
+ [data-layer="fill"] [slot="value"] { color: var(--range-fill-fg); font-weight: var(--range-value-weight); }
115
+ [data-layer="fill"] [slot="suffix"] { color: var(--range-fill-fg); opacity: 0.75; }
113
116
 
114
117
  /* Shared layout rules */
115
118
  [slot="label"] {
@@ -128,32 +131,32 @@ range-ui:not([disabled]) [slot="field"]:hover [data-layer="fill"] {
128
131
  /* Hover / focus label brightening on base only */
129
132
  [slot="field"]:hover [data-layer="base"] [slot="label"],
130
133
  :scope:focus-visible [data-layer="base"] [slot="label"] {
131
- color: var(--range-label-fg-hover, var(--range-label-fg-hover-default));
134
+ color: var(--range-label-fg-hover);
132
135
  }
133
136
  [slot="field"]:hover [data-layer="base"] [slot="suffix"],
134
137
  :scope:focus-visible [data-layer="base"] [slot="suffix"] {
135
- color: var(--range-label-fg-hover, var(--range-label-fg-hover-default));
138
+ color: var(--range-label-fg-hover);
136
139
  }
137
140
 
138
141
  /* Hover-fill brighten moved outside @scope — see Safari 17.x bug note at top. */
139
142
 
140
143
  /* Dragging: deepest fill, sharper border, instant (no transition lag on the clip) */
141
144
  :scope[data-dragging] [slot="field"] {
142
- border-color: var(--range-border-dragging, var(--range-border-dragging-default));
145
+ border-color: var(--range-border-dragging);
143
146
  }
144
147
  :scope[data-dragging] [data-layer="fill"] {
145
- background: var(--range-fill-bg-active, var(--range-fill-bg-active-default));
148
+ background: var(--range-fill-bg-active);
146
149
  transition: none;
147
150
  }
148
151
 
149
152
  /* Disabled: muted fill + muted text */
150
153
  :scope[disabled] [data-layer="fill"] {
151
- background: var(--range-fill-bg-disabled, var(--range-fill-bg-disabled-default));
154
+ background: var(--range-fill-bg-disabled);
152
155
  }
153
156
  :scope[disabled] [data-layer="fill"] [slot="value"],
154
157
  :scope[disabled] [data-layer="fill"] [slot="suffix"],
155
158
  :scope[disabled] [data-layer="fill"] [slot="label"] {
156
- color: var(--range-fill-fg-disabled, var(--range-fill-fg-disabled-default));
159
+ color: var(--range-fill-fg-disabled);
157
160
  }
158
161
 
159
162
  /* Size handled by universal [size] attribute system. */