@actioneer/ads 0.6.0 → 0.7.0

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 (112) hide show
  1. package/components/ai-elements/agent-trace.d.ts +2 -2
  2. package/components/ai-elements/agent-trace.js +163 -104
  3. package/components/ai-elements/chain-of-thought.d.ts +2 -2
  4. package/components/ai-elements/chain-of-thought.js +1 -1
  5. package/components/ai-elements/index.d.ts +0 -5
  6. package/components/ai-elements/inline-citation.js +1 -1
  7. package/components/alert.d.ts +6 -6
  8. package/components/alert.js +89 -53
  9. package/components/answer-sources.d.ts +2 -6
  10. package/components/answer-sources.js +58 -60
  11. package/components/answer.d.ts +5 -0
  12. package/components/answer.js +311 -271
  13. package/components/assistant-ui/composer-harness.js +15 -20
  14. package/components/assistant-ui/composer.d.ts +3 -1
  15. package/components/assistant-ui/composer.js +148 -144
  16. package/components/assistant-ui/index.d.ts +0 -3
  17. package/components/assistant-ui/thread-context.d.ts +3 -1
  18. package/components/assistant-ui/thread.js +50 -42
  19. package/components/avatar.js +42 -42
  20. package/components/badge.d.ts +5 -6
  21. package/components/badge.js +13 -76
  22. package/components/body-page-header.d.ts +15 -0
  23. package/components/body-page-header.js +24 -0
  24. package/components/brand-loader.d.ts +0 -3
  25. package/components/brand-loader.js +10 -32
  26. package/components/breadcrumbs.d.ts +0 -7
  27. package/components/breadcrumbs.js +54 -71
  28. package/components/button.d.ts +1 -1
  29. package/components/button.js +55 -49
  30. package/components/chart.js +298 -296
  31. package/components/chip.d.ts +13 -1
  32. package/components/chip.js +93 -80
  33. package/components/collection-header.d.ts +17 -0
  34. package/components/collection-header.js +31 -0
  35. package/components/connector-card.d.ts +6 -6
  36. package/components/connector-card.js +31 -32
  37. package/components/date-range-picker.d.ts +2 -1
  38. package/components/date-range-picker.js +158 -122
  39. package/components/drawer.d.ts +19 -3
  40. package/components/drawer.js +109 -100
  41. package/components/dropdown.d.ts +1 -2
  42. package/components/dropdown.js +88 -89
  43. package/components/field.js +39 -34
  44. package/components/file-dropzone.js +1 -1
  45. package/components/index.d.ts +4 -4
  46. package/components/index.js +499 -546
  47. package/components/infinite-canvas.js +24 -24
  48. package/components/input-field.d.ts +18 -3
  49. package/components/input-field.js +88 -72
  50. package/components/input.js +16 -15
  51. package/components/modal.d.ts +31 -3
  52. package/components/modal.js +243 -169
  53. package/components/number-field.js +45 -42
  54. package/components/page-body.d.ts +12 -0
  55. package/components/page-body.js +18 -0
  56. package/components/pagination.js +36 -36
  57. package/components/select.d.ts +21 -0
  58. package/components/select.js +189 -148
  59. package/components/setting-row.d.ts +6 -5
  60. package/components/setting-row.js +33 -32
  61. package/components/sidebar.d.ts +2 -0
  62. package/components/sidebar.js +165 -155
  63. package/components/skeleton.js +8 -7
  64. package/components/slider.js +1 -1
  65. package/components/surface-loader.d.ts +11 -0
  66. package/components/surface-loader.js +35 -0
  67. package/components/table.d.ts +16 -10
  68. package/components/table.js +426 -410
  69. package/components/tabs.d.ts +2 -0
  70. package/components/tabs.js +159 -294
  71. package/components/textarea.js +9 -9
  72. package/components/toast.d.ts +1 -1
  73. package/components/toast.js +181 -118
  74. package/components/tree.d.ts +5 -1
  75. package/components/tree.js +54 -49
  76. package/components/typography.d.ts +4 -4
  77. package/components/typography.js +13 -13
  78. package/components/ui/button.d.ts +1 -1
  79. package/components/ui/dialog.js +33 -33
  80. package/demo/components/add-to-artifact.js +6 -10
  81. package/lib/cn.js +11 -4
  82. package/lib/icons.d.ts +4 -0
  83. package/lib/icons.js +107 -106
  84. package/lib/interactive.d.ts +1 -1
  85. package/llms.txt +95 -152
  86. package/manifest.json +1628 -2729
  87. package/package.json +1 -2
  88. package/styles.css +347 -223
  89. package/theme.css +303 -177
  90. package/components/agent-icon.d.ts +0 -76
  91. package/components/agent-icon.js +0 -265
  92. package/components/ai-elements/queue.d.ts +0 -60
  93. package/components/ai-elements/queue.js +0 -193
  94. package/components/ai-elements/speech-input.d.ts +0 -16
  95. package/components/ai-elements/speech-input.js +0 -151
  96. package/components/ai-elements/task-progress.d.ts +0 -41
  97. package/components/ai-elements/task-progress.js +0 -224
  98. package/components/ai-elements/task.d.ts +0 -39
  99. package/components/ai-elements/task.js +0 -105
  100. package/components/ai-elements/voice.d.ts +0 -90
  101. package/components/ai-elements/voice.js +0 -496
  102. package/components/assistant-ui/follow-up-suggestions.d.ts +0 -11
  103. package/components/assistant-ui/follow-up-suggestions.js +0 -72
  104. package/components/assistant-ui/suggestions.d.ts +0 -7
  105. package/components/assistant-ui/suggestions.js +0 -19
  106. package/components/assistant-ui/voice.d.ts +0 -18
  107. package/components/link.d.ts +0 -14
  108. package/components/link.js +0 -72
  109. package/components/navbar.d.ts +0 -15
  110. package/components/navbar.js +0 -68
  111. package/components/pixel-icon.d.ts +0 -37
  112. package/components/pixel-icon.js +0 -859
package/styles.css CHANGED
@@ -39,7 +39,7 @@
39
39
  /*
40
40
  * ============================================================
41
41
  * ADS 1.0 — Design Tokens
42
- * Palette: Warm stone Studio neutrals + restrained green CTA
42
+ * Palette: soft neutral greys + product green
43
43
  * Typeface: Aribau Grotesk
44
44
  * ============================================================
45
45
  */
@@ -57,86 +57,160 @@
57
57
  --font-mono: "JetBrains Mono Variable", ui-monospace, SFMono-Regular,
58
58
  "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace;
59
59
 
60
- /* ---- Type scale ---- base = 15px (0.9375rem). Root stays 16px so the
61
- spacing grid is unaffected; only text sizes are anchored to 15px. */
62
- /* SIX sizes only — a deliberately small ladder (captions → display).
63
- Don't reintroduce 2xs/3xl/4xl or in-between steps; if a size feels
64
- missing, the answer is weight/color, not a new size. */
65
- --text-xs: 0.8125rem; /* 13px — the FLOOR: captions, secondary text, table cells, keycaps */
66
- --text-xs--line-height: 1.125rem;
67
- /* text-sm is aliased to text-xs (both 13px). The scale is intentionally
68
- 13 · 15 · 17 · 21 · 26 with no in-between tier — keeping the token
69
- pointed at 13px stops any stray `text-sm` from falling back to
70
- Tailwind's default 14px, which would land off the scale. */
71
- --text-sm: 0.8125rem;
72
- --text-sm--line-height: 1.125rem;
73
- --text-base: 0.9375rem; /* 15px — BASE body */
74
- --text-base--line-height: 1.375rem;
75
- --text-lg: 1.0625rem; /* 17px — emphasized body, section headings */
76
- --text-lg--line-height: 1.5rem;
77
- --text-xl: 1.3125rem; /* 21px — page titles */
78
- --text-xl--line-height: 1.75rem;
79
- --text-2xl: 1.625rem; /* 26px — display */
80
- --text-2xl--line-height: 2rem;
81
-
82
- /* ---- Warm ink ramp — a role-based 12-step light scale sampled from the
83
- Actioneer product UI. A restrained red/yellow bias gives canvases and
84
- fills an ivory/stone character instead of equal-channel grey. The light
85
- surface steps retain subtle spacing; the solid/text end is perceptually
86
- widened so adjacent swatches and UI roles stay distinct.
87
- Each step owns a role — 50/100 =
88
- backgrounds, 200/300/400 = interactive component fills, 500/600/700 =
89
- borders & separators, 800/850 = solid, 900/950 = accessible text. The
90
- `ink` name is retained as the stable ADS API. ---- */
91
- --color-ink-50: #fdfcf8; /* 1 · background */
92
- --color-ink-100: #f9f8f3; /* 2 · background */
93
- --color-ink-150: #f6f6f1; /* canvas */
94
- --color-ink-200: #f0efeb; /* 3 · interactive */
95
- --color-ink-300: #e8e7e2; /* 4 · interactive */
96
- --color-ink-400: #deded9; /* 5 · interactive */
97
- --color-ink-500: #d5d4cf; /* 6 · border */
98
- --color-ink-600: #c9c8c2; /* 7 · border */
99
- --color-ink-700: #b7b6b0; /* 8 · border */
100
- --color-ink-800: #8d8c86; /* 9 · solid */
101
- --color-ink-850: #70706a; /* 10 · solid */
102
- --color-ink-900: #444440; /* 11 · accessible text */
103
- --color-ink-950: #171714; /* 12 · accessible text */
60
+ /* ---- Type scale ---- five canonical steps: S · M · L · XL · 2XL.
61
+ Root stays 16px so spacing is unaffected. */
62
+ --text-s: 0.8125rem; /* 13px · captions, secondary text, table cells */
63
+ --text-s--line-height: 1.125rem; /* 18px */
64
+ --text-m: 0.9375rem; /* 15px · default body */
65
+ --text-m--line-height: 1.375rem; /* 22px */
66
+ --text-l: 1.1875rem; /* 19px · emphasized body, section headings */
67
+ --text-l--line-height: 1.625rem; /* 26px */
68
+ --text-xl: 1.5625rem; /* 25px · page titles */
69
+ --text-xl--line-height: 2rem; /* 32px */
70
+ --text-2xl: 1.9375rem; /* 31px · display */
71
+ --text-2xl--line-height: 2.375rem; /* 38px */
72
+
73
+ /* Compatibility aliases keep existing ADS consumers on the new scale. */
74
+ --text-xs: var(--text-s);
75
+ --text-xs--line-height: var(--text-s--line-height);
76
+ --text-sm: var(--text-s);
77
+ --text-sm--line-height: var(--text-s--line-height);
78
+ --text-base: var(--text-m);
79
+ --text-base--line-height: var(--text-m--line-height);
80
+ --text-lg: var(--text-l);
81
+ --text-lg--line-height: var(--text-l--line-height);
82
+
83
+ /* ---- Foundation palette ----
84
+ Canonical primitive names:
85
+ G1…G12 = Green · NG1…NG12 = Neutral Grey.
86
+ Each ramp progresses from light backgrounds and interactive fills through
87
+ supporting tones to solid colors and accessible text. Neutral UI borders
88
+ are intentionally restricted to NG3–NG5. ---- */
89
+ --color-g1: #f7f9f7;
90
+ --color-g2: #eef5f0;
91
+ --color-g3: #e2efe5;
92
+ --color-g4: #cce4d2;
93
+ --color-g5: #b4d8be;
94
+ --color-g6: #9bcbaa;
95
+ --color-g7: #7db78f;
96
+ --color-g8: #5c9c73;
97
+ --color-g9: #398457;
98
+ --color-g10: #2b7348;
99
+ --color-g11: #1f623b;
100
+ --color-g12: #183c28;
101
+
102
+ --color-ng1: #fafafa;
103
+ --color-ng2: #f6f6f6;
104
+ --color-ng3: #f1f1f1;
105
+ --color-ng4: #ececec;
106
+ --color-ng5: #e6e6e6;
107
+ --color-ng6: #dedede;
108
+ --color-ng7: #d4d4d4;
109
+ --color-ng8: #bdbdbd;
110
+ --color-ng9: #868686;
111
+ --color-ng10: #7c7b7b;
112
+ --color-ng11: #5e5d5d;
113
+ --color-ng12: #202020;
114
+
115
+ /* Deprecated Warm Grey names now resolve to Neutral Grey. Keep these
116
+ aliases so existing consumer utilities continue to render safely. */
117
+ --color-wg1: var(--color-ng1);
118
+ --color-wg2: var(--color-ng2);
119
+ --color-wg3: var(--color-ng3);
120
+ --color-wg4: var(--color-ng4);
121
+ --color-wg5: var(--color-ng5);
122
+ --color-wg6: var(--color-ng6);
123
+ --color-wg7: var(--color-ng7);
124
+ --color-wg8: var(--color-ng8);
125
+ --color-wg9: var(--color-ng9);
126
+ --color-wg10: var(--color-ng10);
127
+ --color-wg11: var(--color-ng11);
128
+ --color-wg12: var(--color-ng12);
129
+
130
+ --color-white: #ffffff;
131
+
132
+ /* Compatibility aliases preserve the existing ADS utility/API surface. */
133
+ --color-green-50: var(--color-g1);
134
+ --color-green-100: var(--color-g2);
135
+ --color-green-200: var(--color-g3);
136
+ --color-green-300: var(--color-g4);
137
+ --color-green-400: var(--color-g5);
138
+ --color-green-500: var(--color-g6);
139
+ --color-green-600: var(--color-g7);
140
+ --color-green-700: var(--color-g8);
141
+ --color-green-800: var(--color-g9);
142
+ --color-green-850: var(--color-g10);
143
+ --color-green-900: var(--color-g11);
144
+ --color-green-950: var(--color-g12);
145
+
146
+ --color-grey-50: var(--color-ng1);
147
+ --color-grey-100: var(--color-ng2);
148
+ --color-grey-200: var(--color-ng3);
149
+ --color-grey-300: var(--color-ng4);
150
+ --color-grey-400: var(--color-ng5);
151
+ --color-grey-500: var(--color-ng6);
152
+ --color-grey-600: var(--color-ng7);
153
+ --color-grey-700: var(--color-ng8);
154
+ --color-grey-800: var(--color-ng9);
155
+ --color-grey-850: var(--color-ng10);
156
+ --color-grey-900: var(--color-ng11);
157
+ --color-grey-950: var(--color-ng12);
158
+
159
+ --color-ink-50: var(--color-ng1);
160
+ --color-ink-100: var(--color-ng2);
161
+ --color-ink-200: var(--color-ng3);
162
+ --color-ink-300: var(--color-ng4);
163
+ --color-ink-400: var(--color-ng5);
164
+ --color-ink-500: var(--color-ng6);
165
+ --color-ink-600: var(--color-ng7);
166
+ --color-ink-700: var(--color-ng8);
167
+ --color-ink-800: var(--color-ng9);
168
+ --color-ink-850: var(--color-ng10);
169
+ --color-ink-900: var(--color-ng11);
170
+ --color-ink-950: var(--color-ng12);
104
171
 
105
172
  /* ---- Semantic accent ramps ---- */
106
- /* Success stays a semantic state color, never a product-primary hue. */
107
- --color-success-50: #ecfdf5;
108
- --color-success-100: #d1fae5;
109
- --color-success-500: #10b981;
110
- --color-success-600: #059669;
111
- --color-success-700: #047857;
173
+ /* Success uses the lichen lime family and stays status-only. The original
174
+ soft/base/deep anchors map to 50/500/600; 100 and 400 bridge the soft fill
175
+ and base, while 700 deepens the family enough for AA text on White. */
176
+ --color-success-50: #e4efcf;
177
+ --color-success-100: #d4e5b5;
178
+ --color-success-300: #c4dc9b;
179
+ --color-success-400: #b4d281;
180
+ --color-success-500: #a3c765;
181
+ --color-success-600: #6e8f30;
182
+ --color-success-700: #516923;
112
183
 
113
184
  --color-warning-50: #fffaeb;
114
185
  --color-warning-100: #fef0c7;
186
+ --color-warning-300: #f9d68f;
187
+ --color-warning-400: #f4bc57;
115
188
  --color-warning-500: #f79009;
116
189
  --color-warning-600: #dc6803;
117
190
  --color-warning-700: #b54708;
118
191
 
119
192
  --color-danger-50: #fef3f2;
120
193
  --color-danger-100: #fee4e2;
194
+ --color-danger-300: #f8bab5;
195
+ --color-danger-400: #f18f87;
121
196
  --color-danger-500: #f04438;
122
197
  --color-danger-600: #d92d20;
123
198
  --color-danger-700: #b42318;
124
199
 
125
200
  --color-info-50: #eff8ff;
126
201
  --color-info-100: #d1e9ff;
202
+ --color-info-300: #a7d3f8;
203
+ --color-info-400: #7dbdf1;
127
204
  --color-info-500: #2e90fa;
128
205
  --color-info-600: #1570ef;
129
206
  --color-info-700: #175cd3;
130
207
 
131
- /* ---- Data-viz accents ---- three small ramps for charts & illustration.
208
+ /* ---- Data-viz accents ---- two small ramps for charts & illustration.
132
209
  deep = text/lines · base = fills · soft = backgrounds. Separate from the
133
210
  semantic status ramps above; these carry data, not product identity. */
134
211
  --color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
135
212
  --color-cyan-base: #12b5a5;
136
213
  --color-cyan-deep: #0a7e82;
137
- --color-lime-soft: #e4efcf; /* Lichen lime — energetic pop from the mark */
138
- --color-lime-base: #a3c765;
139
- --color-lime-deep: #6e8f30;
140
214
  --color-amber-soft: #fce6c0; /* Amber — warm pop; highlights, "new" */
141
215
  --color-amber-base: #f3a72e;
142
216
  --color-amber-deep: #b57414;
@@ -144,18 +218,21 @@
144
218
  /* Demo logo indigo — source for artifact canvas wash. */
145
219
  --color-brand-mark: #2e1065;
146
220
 
147
- /* ---- Radii ---- FOUR restrained values, assigned by element scale.
148
- 2px = micro details; 4px = compact controls; 6px = standard controls;
149
- 8px = menus, cards, panels, and large surfaces. Repeated aliases keep the
150
- familiar Tailwind role names while capping every surface at 8px. */
221
+ /* ---- Radii ---- five canonical steps: XS · S · M · L · XL.
222
+ M (6px) is the default corner radius. */
151
223
  --radius-xs: 0.125rem; /* 2px · micro details */
152
- --radius-sm: 0.25rem; /* 4px · compact controls */
153
- --radius-md: 0.375rem; /* 6px · standard controls */
154
- --radius-lg: 0.5rem; /* 8px · menus and panels */
155
- --radius-xl: 0.5rem; /* 8px · cards and surfaces */
156
- --radius-2xl: 0.5rem; /* 8px · large surfaces */
157
- --radius-3xl: 0.5rem; /* 8px · capped compatibility alias */
158
- --radius-4xl: 0.5rem; /* 8px · capped compatibility alias */
224
+ --radius-s: 0.25rem; /* 4px · compact controls */
225
+ --radius-m: 0.375rem; /* 6px · default controls and surfaces */
226
+ --radius-l: 0.5rem; /* 8px · menus and cards */
227
+ --radius-xl: 0.75rem; /* 12px · large panels and feature surfaces */
228
+
229
+ /* Compatibility aliases preserve existing ADS utilities. */
230
+ --radius-sm: var(--radius-s);
231
+ --radius-md: var(--radius-m);
232
+ --radius-lg: var(--radius-l);
233
+ --radius-2xl: var(--radius-xl);
234
+ --radius-3xl: var(--radius-xl);
235
+ --radius-4xl: var(--radius-xl);
159
236
  /* Shape-only exception for avatars, icon buttons, progress tracks, chips,
160
237
  and badges. It is not part of the corner-radius scale. */
161
238
  --radius-full: 9999px;
@@ -165,32 +242,40 @@
165
242
  convention). */
166
243
  --radius-dot: 2px;
167
244
 
168
- /* ---- Elevation ---- ONE restrained Studio token.
169
- Delineate surfaces with fill color first; add this only to lift something
170
- actionable. A close contact shadow anchors the surface while the large
171
- negative spread keeps the ambient shadow soft, quiet, and borderless. */
172
- --shadow-elevation: 0 1px 2px rgb(23 23 20 / 0.05),
173
- 0 8px 20px -16px rgb(23 23 20 / 0.16);
245
+ /* ---- Elevation ---- Shopify-inspired 0–600 ladder, recolored with NG12.
246
+ Geometry and opacity increase together; static surfaces remain at 0. */
247
+ --shadow-0: none;
248
+ --shadow-100: 0 1px 0 0 rgb(32 32 32 / 0.07);
249
+ --shadow-200: 0 3px 1px -1px rgb(32 32 32 / 0.07);
250
+ --shadow-300: 0 4px 6px -2px rgb(32 32 32 / 0.2);
251
+ --shadow-400: 0 8px 16px -4px rgb(32 32 32 / 0.22);
252
+ --shadow-500: 0 12px 20px -8px rgb(32 32 32 / 0.24);
253
+ --shadow-600: 0 20px 20px -8px rgb(32 32 32 / 0.28);
254
+
255
+ /* Compatibility hook stays flat. Apply a numbered level only when the user
256
+ explicitly requests elevation for a named surface. */
257
+ --shadow-elevation: var(--shadow-0);
174
258
 
175
259
  /* Pinned-table-column smudges — whisper-soft directional casts shown only
176
260
  while content is hidden behind a sticky column (Table is scroll-aware).
177
- Deep negative spread keeps the edge feathered; the tint is warm ink. */
178
- --shadow-table-smudge-left: 8px 0 24px -14px rgb(23 23 20 / 0.05);
179
- --shadow-table-smudge-right: -8px 0 24px -14px rgb(23 23 20 / 0.05);
180
-
181
- /* ---- CTA inner glow ---- luminous inset highlight for primary buttons
182
- (adapted from the "AI button" Figma): a crisp top-edge catch plus a soft
183
- inner glow from the top and bottom, so a solid CTA reads as lit from within. */
184
- --inner-glow-cta: inset 0 1px 0 0 rgb(255 255 255 / 0.25),
185
- inset 0 10px 22px -10px rgb(255 255 255 / 0.28),
186
- inset 0 -10px 22px -10px rgb(255 255 255 / 0.16);
187
- /* Light-fill sibling — the same lit-from-within read for secondary/soft
188
- buttons (white catch reads on gray fills at higher opacity). */
189
- --inner-glow-fill: inset 0 1px 0 0 rgb(255 255 255 / 0.7),
190
- inset 0 8px 16px -8px rgb(255 255 255 / 0.45);
261
+ Deep negative spread keeps the edge feathered; the tint is neutral grey. */
262
+ --shadow-table-smudge-left: 8px 0 24px -14px rgb(32 32 32 / 0.05);
263
+ --shadow-table-smudge-right: -8px 0 24px -14px rgb(32 32 32 / 0.05);
264
+
265
+ /* ---- Button inset depth ---- Polaris-inspired stacked inner edges. The
266
+ lower contact line, quiet inner outline, and half-pixel top catch make
267
+ solid actions feel tactile without adding a decorative outer border. */
268
+ --inner-glow-cta: inset 0 -1px 0 1px rgb(32 32 32 / 0.22),
269
+ inset 0 0 0 1px rgb(32 32 32 / 0.12),
270
+ inset 0 0.5px 0 1.5px rgb(255 255 255 / 0.28);
271
+ /* Compatibility treatment for explicitly raised light fills. Its visible
272
+ edge is entirely inset, so it keeps a transparent outer border. */
273
+ --inner-glow-fill: inset 0 -1px 0 0 var(--border-primary),
274
+ inset 0 0 0 1px rgb(32 32 32 / 0.1),
275
+ inset 0 0.5px 0 1.5px rgb(255 255 255 / 0.86);
191
276
  /* Text fields — a whisper of inset depth so the writing surface reads
192
277
  recessed into the page (persists through hover/focus/invalid). */
193
- --inner-glow-field: inset 0 1px 2px 0 rgb(23 23 20 / 0.06);
278
+ --inner-glow-field: inset 0 1px 2px 0 rgb(32 32 32 / 0.06);
194
279
 
195
280
  /* ---- Layout ---- app-frame dimensions (Sidebar / Panel) */
196
281
  --sidebar-width: 15rem; /* 240px — primary nav rail */
@@ -199,7 +284,7 @@
199
284
  --sidebar-item: 2rem; /* 32px — collapsed rail hit target (square) */
200
285
  --sidebar-logo: 1.25rem; /* 20px — brand mark, centered in a --sidebar-item square */
201
286
  --sidebar-text-indent: 2.375rem; /* px-3 + icon size-4 + gap-2.5 — history rows align to nav-item text */
202
- --sidebar-navigation-text-size: var(--text-base); /* 15px — sidebar actions, items, history, and account text */
287
+ --sidebar-navigation-text-size: var(--text-m); /* 15px — sidebar actions, items, history, and account text */
203
288
  --sidebar-section-label-size: 0.8125rem; /* 13px — section and history labels */
204
289
  --panel-header-height: 2.75rem; /* 44px — Panel / toolbar header */
205
290
  --aside-width: 20rem; /* 320px — right-hand panel column */
@@ -213,10 +298,11 @@
213
298
  --thread-max-width: 44rem; /* chat column cap — readable prose measure, all panes */
214
299
  --thread-max-width-wide: 64rem; /* rich-content breakout cap (tables/charts/tool cards) on wide panes; prose keeps --thread-max-width */
215
300
  --composer-bg: var(--elevated); /* pure white composer surface */
216
- --composer-radius: var(--radius-2xl);
301
+ --composer-radius: var(--radius-xl);
217
302
  --composer-padding: 0.5rem;
218
- --composer-placeholder-max-h: calc(var(--text-base--line-height) * 2); /* rotating placeholder clamp — two lines of the input's own rhythm, so it can never overlap the accessory row */
303
+ --composer-placeholder-max-h: calc(var(--text-m--line-height) * 2); /* rotating placeholder clamp — two lines of the input's own rhythm, so it can never overlap the accessory row */
219
304
  --chat-texture-opacity: 0.06; /* welcome-state halftone wash */
305
+ --ask-hero-min-height: 30rem; /* keeps the empty-state prompt visually primary before recent work */
220
306
  }
221
307
 
222
308
  /*
@@ -255,7 +341,15 @@
255
341
  --color-background: var(--background);
256
342
  --color-foreground: var(--foreground);
257
343
 
258
- /* Text hierarchy — three accessible levels (all ≥ AA on --background) */
344
+ /* Contextual text hierarchies — three accessible levels per surface. */
345
+ --color-on-white-primary: var(--text-on-white-primary);
346
+ --color-on-white-secondary: var(--text-on-white-secondary);
347
+ --color-on-white-tertiary: var(--text-on-white-tertiary);
348
+ --color-on-warm-grey-primary: var(--text-on-warm-grey-primary);
349
+ --color-on-warm-grey-secondary: var(--text-on-warm-grey-secondary);
350
+ --color-on-warm-grey-tertiary: var(--text-on-warm-grey-tertiary);
351
+
352
+ /* Context-free compatibility aliases remain conservative. */
259
353
  --color-primary: var(--text-primary);
260
354
  --color-secondary: var(--text-secondary);
261
355
  --color-tertiary: var(--text-tertiary);
@@ -269,11 +363,15 @@
269
363
 
270
364
  --color-card: var(--card);
271
365
  --color-card-foreground: var(--card-foreground);
366
+ --color-specimen-stroke: var(--specimen-stroke);
272
367
 
273
368
  /* Primary CTA role — restrained Studio green, used sparingly. */
274
369
  --color-action-primary: var(--action-primary);
275
370
  --color-action-primary-foreground: var(--action-primary-foreground);
276
371
  --color-action-primary-hover: var(--action-primary-hover);
372
+ --color-action-primary-text: var(--action-primary-text);
373
+ --color-action-primary-soft: var(--action-primary-soft);
374
+ --color-field-focus: var(--field-focus);
277
375
 
278
376
  /* Compatibility action role — neutral ink, never a colored primary hue. */
279
377
  --color-brand: var(--brand);
@@ -281,27 +379,31 @@
281
379
  --color-brand-hover: var(--brand-hover);
282
380
  --color-brand-text: var(--brand-text);
283
381
 
284
- /* Quiet fill — secondary buttons, avatars, chips */
382
+ /* Quiet fill — avatars, chips, and disabled controls */
285
383
  --color-fill: var(--fill);
286
384
  --color-fill-foreground: var(--fill-foreground);
287
385
  --color-table-shell: var(--table-shell);
386
+ --color-table-stroke: var(--table-stroke);
387
+ --color-table-header-foreground: var(--table-header-foreground);
288
388
 
289
389
  --color-artifact-canvas: var(--artifact-canvas);
290
390
 
291
391
  --color-accent: var(--accent);
292
392
  --color-accent-foreground: var(--accent-foreground);
293
393
 
294
- /* success-700 on white = 5.48:1 (600 was 3.77:1, failed AA). */
394
+ /* Lichen success-700 clears AA on White and both success soft fills;
395
+ success-600 is reserved for non-text marks because its 3.73:1 contrast
396
+ on White does not clear body-text AA. */
295
397
  --color-success: var(--color-success-700);
296
- --color-success-foreground: #ffffff;
398
+ --color-success-foreground: var(--color-white);
297
399
  /* Amber-500 fill kept (it IS the caution signal); dark ink foreground
298
400
  instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1). */
299
401
  --color-warning: var(--color-warning-500);
300
- --color-warning-foreground: var(--color-ink-950);
402
+ --color-warning-foreground: var(--color-ng12);
301
403
  --color-danger: var(--color-danger-600);
302
- --color-danger-foreground: #ffffff;
404
+ --color-danger-foreground: var(--color-white);
303
405
  --color-info: var(--color-info-600);
304
- --color-info-foreground: #ffffff;
406
+ --color-info-foreground: var(--color-white);
305
407
 
306
408
  --color-border-primary: var(--border-primary);
307
409
  --color-border-secondary: var(--border-secondary);
@@ -309,6 +411,9 @@
309
411
  --color-border: var(--border);
310
412
  --color-border-strong: var(--border-strong);
311
413
  --color-input: var(--input);
414
+ --color-menu-stroke: var(--menu-stroke);
415
+ --color-toast-stroke: var(--toast-stroke);
416
+ --color-tree-stroke: var(--tree-stroke);
312
417
  --color-ring: var(--ring);
313
418
  --color-overlay: var(--overlay);
314
419
 
@@ -320,10 +425,10 @@
320
425
  * shadcn's grey/black defaults. The raw --sidebar-*/--popover values live in
321
426
  * :root below.
322
427
  */
323
- --color-primary-foreground: #ffffff;
324
- --color-secondary-foreground: #ffffff;
428
+ --color-primary-foreground: var(--color-white);
429
+ --color-secondary-foreground: var(--color-white);
325
430
  --color-destructive: var(--color-danger-600);
326
- --color-destructive-foreground: #ffffff;
431
+ --color-destructive-foreground: var(--color-white);
327
432
  --color-popover: var(--popover);
328
433
  --color-popover-foreground: var(--popover-foreground);
329
434
 
@@ -339,69 +444,79 @@
339
444
 
340
445
  /* ---- Theme (light only) ---- */
341
446
  :root {
342
- /* Every warm-neutral semantic token below points INTO the ink primitive scale.
343
- Only pure white (#ffffff) stays literal: it is a base surface, not a
344
- neutral scale step. */
345
- --background: var(--color-ink-100); /* step 2 · canvas */
346
- --foreground: var(--color-ink-950); /* step 12 */
347
-
348
- /* Text levels: primary ink-950, secondary ink-900, tertiary a tuned grey.
349
- All three clear AA (4.5:1) for body copy on every surface they land on.
350
- Tertiary is NOT an ink step: ink-850 (#70706a) falls below AA on muted
351
- but is used at 13px in 200+ places, so it is pinned to the
352
- lightest grey that still passes 4.5:1 on bg/card/surface/muted. */
353
- --text-primary: var(--color-ink-950); /* ~14.5:1 AAA (min surf) */
354
- --text-secondary: var(--color-ink-900); /* ~7.9:1 AAA (min surf) */
355
- --text-tertiary: #686863; /* ~4.52:1 AA (min surf) */
356
-
357
- --surface: var(--color-ink-200); /* step 3 · tinted canvas */
358
- --surface-foreground: var(--color-ink-950);
359
- --elevated: #ffffff; /* pure white base */
360
-
361
- --muted: var(--color-ink-300); /* step 4 */
362
- --muted-foreground: var(--color-ink-900);/* step 11 · readable UI text */
363
-
364
- --card: #ffffff; /* pure white base */
365
- --card-foreground: var(--color-ink-950);
447
+ /* Surfaces and achromatic text/actions point into NG; the primary CTA
448
+ points into G. */
449
+ --background: var(--color-ng2); /* step 2 · canvas */
450
+ --foreground: var(--color-ng12); /* step 12 */
451
+
452
+ /* Both surface contexts point directly into the approved NG text steps.
453
+ NG10 is the tertiary/de-emphasis step; it does not clear 4.5:1 for normal
454
+ body text on these surfaces, so reserve it for nonessential content. */
455
+ --text-on-white-primary: var(--color-ng12); /* 16.29:1 · AAA */
456
+ --text-on-white-secondary: var(--color-ng11); /* 6.56:1 · AA */
457
+ --text-on-white-tertiary: var(--color-ng10); /* 4.22:1 */
458
+ --text-on-warm-grey-primary: var(--color-ng12); /* legacy name · neutral canvas */
459
+ --text-on-warm-grey-secondary: var(--color-ng11); /* legacy name · neutral canvas */
460
+ --text-on-warm-grey-tertiary: var(--color-ng10); /* legacy name · neutral canvas */
461
+
462
+ /* Existing context-free utilities remain compatibility aliases. Their
463
+ tertiary value stays conservative across NG2–NG4 and White. */
464
+ --text-primary: var(--color-ng12); /* ~12.5:1 AAA (min surf) */
465
+ --text-secondary: var(--color-ng11); /* ~5.0:1 AA (min surf) */
466
+ --text-tertiary: #625f5c; /* ~4.53:1 AA (min surf) */
467
+
468
+ --surface: var(--color-ng3); /* step 3 · tinted canvas */
469
+ --surface-foreground: var(--color-ng12);
470
+ --elevated: var(--color-white); /* pure white base */
471
+
472
+ --muted: var(--color-ng4); /* step 4 */
473
+ --muted-foreground: var(--color-ng11); /* step 11 · readable UI text */
474
+
475
+ --card: var(--color-white); /* pure white base */
476
+ --card-foreground: var(--color-ng12);
366
477
 
367
478
  /* Studio green is deliberately isolated to the primary CTA role (roughly
368
479
  5–10% of a screen). Selection controls keep using neutral `brand` below,
369
480
  so tabs, switches, radios, and progress never inherit CTA color. */
370
- --action-primary: #2f7d5a;
371
- --action-primary-foreground: #ffffff;
372
- --action-primary-hover: #256749;
481
+ --action-primary: var(--color-g9);
482
+ --action-primary-foreground: var(--color-white);
483
+ --action-primary-hover: var(--color-g10);
484
+ --action-primary-text: var(--color-g11);
485
+ --action-primary-soft: var(--color-g3);
373
486
 
374
487
  /* Neutral action role. The `brand` name remains as a compatibility API,
375
488
  and shared selection/control states intentionally remain achromatic. */
376
- --brand: var(--color-ink-950); /* darkest action ink */
377
- --brand-foreground: #ffffff;
378
- --brand-hover: var(--color-ink-900); /* lighter hover lift */
379
- --brand-text: var(--color-ink-950); /* action text / links */
380
-
381
- /* Table interaction fills are pre-composited and opaque. Sticky edge cells
382
- therefore cover horizontally scrolled content while preserving the
383
- original quiet bg-card/40-over-muted row hover. */
384
- --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
385
- --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
386
-
387
- /* Quiet component fill. Ink step 3 is the first interactive-background
489
+ --brand: var(--color-ng12); /* darkest neutral action */
490
+ --brand-foreground: var(--color-white);
491
+ --brand-hover: var(--color-ng11); /* lighter hover lift */
492
+ --brand-text: var(--color-ng12); /* action text / links */
493
+
494
+ /* Interactive rows lift one step above the NG1 zebra band. */
495
+ --table-row-hover: var(--color-ng2);
496
+ --table-row-selected: var(--color-ng1);
497
+
498
+ /* Quiet component fill. NG3 is the first interactive-background
388
499
  step, so this remains visible on both white cards and the step-2 canvas. */
389
- --fill: var(--color-ink-200); /* step 3 · default component fill */
390
- --fill-foreground: var(--color-ink-950);
391
-
392
- --accent: var(--color-ink-400); /* step 5 · active / selected wash */
393
- --accent-foreground: var(--color-ink-950);
394
-
395
- /* Borders use consecutive ink steps 5–7. This avoids the old 3→5→7 jump:
396
- tertiary stays quiet but visible at 0.5px, secondary is the subtle
397
- border step, and primary is the default interactive-control edge. */
398
- --border-primary: var(--color-ink-600); /* step 7 · #c9c8c2 · strongest */
399
- --border-secondary: var(--color-ink-500); /* step 6 · #d5d4cf · default */
400
- --border-tertiary: var(--color-ink-400); /* step 5 · #deded9 · faintest */
500
+ --fill: var(--color-ng3); /* step 3 · default component fill */
501
+ --fill-foreground: var(--color-ng12);
502
+
503
+ --accent: var(--color-ng5); /* step 5 · active / selected wash */
504
+ --accent-foreground: var(--color-ng12);
505
+
506
+ /* Every neutral border stays within the consecutive NG3–NG5 range:
507
+ tertiary is the quietest 1px divider, secondary is the default hairline,
508
+ and primary is the strongest neutral edge. */
509
+ --border-primary: var(--color-ng5); /* step 5 · strongest */
510
+ --border-secondary: var(--color-ng4); /* step 4 · default */
511
+ --border-tertiary: var(--color-ng3); /* step 3 · faintest */
401
512
  /* Legacy aliases point into the scale so existing utilities keep resolving. */
402
513
  --border: var(--border-secondary); /* default hairline / separator */
403
514
  --border-strong: var(--border-primary); /* emphasized / hover / selected */
404
- --input: var(--border-primary); /* form-control edge */
515
+ --input: var(--color-ng4); /* form-control edge */
516
+ --menu-stroke: var(--color-ng4); /* dropdown edge + separator */
517
+ --toast-stroke: var(--color-ng4); /* toast card edge */
518
+ --tree-stroke: var(--color-ng4); /* tree connector rail + elbows */
519
+ --field-focus: var(--color-g8); /* subtle green focused-control edge */
405
520
 
406
521
  /* Ripple — the appearance wash that radiates from a floating surface's
407
522
  origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
@@ -409,29 +524,30 @@
409
524
  the `Ripple` component. */
410
525
  --ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
411
526
 
412
- /* Stroke width — ADS hairlines are 0.5px, not the Tailwind 1px default.
413
- The single-width border utilities are overridden to this token at the
414
- bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
415
- true hairline. Explicit `border-2`+ widths are unaffected. */
416
- --stroke-width: 0.5px;
417
- --ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
418
- --overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
419
-
420
- /* Functional / domain tokens — named for their RENDER role, pointing into
421
- the ink scale. Components pass these into non-CSS renderers (Recharts,
422
- React Flow, the Paper/WebGL texture) so no component carries a raw ink-*
423
- value. Same DS pattern as the data-viz --color-chart-* palette. */
527
+ /* Stroke width — every standard UI border is exactly 1px. */
528
+ --stroke-width: 1px;
529
+ --ring: color-mix(in srgb, var(--color-ng12) 50%, transparent); /* NG12 @ 50% */
530
+ --overlay: color-mix(in srgb, var(--color-ng12) 50%, transparent); /* NG12 @ 50% */
531
+
532
+ /* Functional / domain tokens — named for their render role, pointing into
533
+ the canonical NG palette. Components pass these into non-CSS renderers
534
+ (Recharts, React Flow, the Paper/WebGL texture) so no component carries a
535
+ raw primitive value. Same DS pattern as the data-viz palette. */
424
536
  --chart-axis: var(--border-tertiary); /* axis lines + de-emphasised marks */
425
- --chart-grid: var(--color-ink-200); /* quieter than axes, visible on white */
426
- --chart-track: var(--color-ink-200); /* funnel / progress track */
427
- --chart-context: var(--color-ink-500); /* de-emphasised context series */
537
+ --chart-grid: var(--color-ng3); /* quieter than axes, visible on white */
538
+ --chart-track: var(--color-ng3); /* funnel / progress track */
539
+ --chart-context: var(--color-ng6); /* de-emphasised context series */
540
+ --chart-active-bar-opacity: 0.68; /* hover lightens a bar while preserving its series hue */
428
541
  --canvas-edge: var(--border-secondary);/* infinite-canvas edges / connectors */
429
- --texture-ink: var(--color-ink-950); /* brand-texture / pixel-blast marks */
430
- --table-shell: var(--color-ink-200); /* recessed table tray (lighter than muted) */
431
- --table-scroll-hint: rgb(23 23 20 / 0.04); /* right-edge "more columns" wash */
432
- --surface-inverse: var(--color-ink-950); /* dark hero / inverse surface base */
433
- --surface-inverse-soft: var(--color-ink-900); /* dark hero gradient falloff */
434
- --artifact-canvas: color-mix(in srgb, var(--color-brand-mark) 7%, #ffffff);
542
+ --texture-ink: var(--color-ng12); /* brand-texture / pixel-blast marks */
543
+ --table-shell: var(--color-white); /* simplified single-surface table */
544
+ --table-stroke: var(--color-ng3); /* table outline + row separators */
545
+ --table-header-foreground: var(--color-ng10); /* secondary table heading text */
546
+ --specimen-stroke: var(--color-ng3); /* showcase preview + variant-group frames */
547
+ --table-scroll-hint: rgb(32 32 32 / 0.04); /* right-edge "more columns" wash */
548
+ --surface-inverse: var(--color-ng12); /* dark hero / inverse surface base */
549
+ --surface-inverse-soft: var(--color-ng11);/* dark hero gradient falloff */
550
+ --artifact-canvas: color-mix(in srgb, var(--color-brand-mark) 7%, var(--color-white));
435
551
 
436
552
  /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
437
553
  (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
@@ -452,9 +568,10 @@
452
568
 
453
569
  /*
454
570
  * ============================================================
455
- * Hairline strokes — ADS strokes are 0.5px, not 1px (principle 1).
571
+ * Standard strokes — ADS UI borders are 1px (principle 1).
456
572
  * Override Tailwind's single-width border utilities to the
457
573
  * --stroke-width token. Authored after `}
574
+ .border { border-width: var(--stroke-width); }
458
575
  .border-t { border-top-width: var(--stroke-width); }
459
576
  .border-r { border-right-width: var(--stroke-width); }
460
577
  .border-b { border-bottom-width: var(--stroke-width); }
@@ -476,6 +593,15 @@
476
593
  0% { opacity: 0.6; transform: scale(0.15); }
477
594
  100% { opacity: 0; transform: scale(1.08); }
478
595
  }
596
+
597
+ @keyframes ads-toast-progress {
598
+ from {
599
+ transform: scaleX(1);
600
+ }
601
+ to {
602
+ transform: scaleX(0);
603
+ }
604
+ }
479
605
  .ads-ripple {
480
606
  position: absolute;
481
607
  inset: 0;
@@ -499,12 +625,12 @@
499
625
  * `primary-foreground` companion (its base `--color-primary` is the ADS
500
626
  * text-hierarchy token, which collides with the generated `primary` color),
501
627
  * so the vendored shadcn button's icon rendered invisible (dark-on-dark) on
502
- * `bg-primary`. Define the two utilities explicitly against white.
628
+ * `bg-primary`. Define the two utilities explicitly against White.
503
629
  * ============================================================
504
630
  */
505
631
  @layer utilities {
506
- .text-primary-foreground { color: #ffffff; }
507
- .bg-primary-foreground { background-color: #ffffff; }
632
+ .text-primary-foreground { color: var(--color-white); }
633
+ .bg-primary-foreground { background-color: var(--color-white); }
508
634
  }
509
635
  /* ---- Base, keyframes & component helpers ---- */
510
636
  /* Hide scrollbars app-wide but keep scrollability. The demo UI is filled
@@ -521,6 +647,42 @@
521
647
  display: none;
522
648
  }
523
649
 
650
+ /* Ask landing: Hex's hierarchy translated into ADS tokens. The same quiet
651
+ texture spans the complete canvas; G2-G8 concentrate focus at the prompt. */
652
+ .ask-empty-state {
653
+ background-color: var(--color-white);
654
+ background-image: radial-gradient(
655
+ circle,
656
+ color-mix(in oklab, var(--color-g8) 22%, transparent) 0 0.75px,
657
+ transparent 0.9px
658
+ );
659
+ background-size: 12px 12px;
660
+ }
661
+
662
+ .ask-empty-hero-pattern {
663
+ background-image: radial-gradient(
664
+ ellipse at 50% 52%,
665
+ color-mix(in oklab, var(--color-g3) 88%, transparent) 0%,
666
+ color-mix(in oklab, var(--color-g2) 48%, transparent) 38%,
667
+ transparent 68%
668
+ );
669
+ }
670
+
671
+ .ask-empty-composer [data-slot="aui_composer-shell"] {
672
+ border-color: var(--color-ng4);
673
+ box-shadow: var(--shadow-200);
674
+ }
675
+
676
+ .ask-empty-composer:focus-within [data-slot="aui_composer-shell"] {
677
+ border-color: var(--color-g8);
678
+ box-shadow: 0 0 0 3px var(--color-g4), var(--shadow-300);
679
+ }
680
+
681
+ .ask-section-label {
682
+ font-size: 0.6875rem;
683
+ line-height: 1rem;
684
+ }
685
+
524
686
  /* Artifact widgets are positioned by GridStack; ADS cards own the visible
525
687
  surface while the library content wrapper only clips during interaction.
526
688
  The subtle elevation lives on the wrapper (not the inner card) because the
@@ -651,44 +813,6 @@
651
813
  }
652
814
  }
653
815
 
654
- /* BrandLoader (src/components/brand-loader.tsx): each cell of the growth mark
655
- flickers on like a neon tube — hard cuts (steps(1)): off → on with a
656
- stutter → hold → off — on a staggered loop. fill-mode backwards keeps a
657
- cell dark through its delay, so the mark builds up cell by cell. */
658
- @keyframes brand-flicker {
659
- 0% {
660
- opacity: 0;
661
- }
662
- 6% {
663
- opacity: 1;
664
- }
665
- 9% {
666
- opacity: 0.15;
667
- }
668
- 12% {
669
- opacity: 1;
670
- }
671
- 15% {
672
- opacity: 0.35;
673
- }
674
- 18%,
675
- 82% {
676
- opacity: 1;
677
- }
678
- 90%,
679
- 100% {
680
- opacity: 0;
681
- }
682
- }
683
- .brand-loader-cell {
684
- animation: brand-flicker 3.4s steps(1) infinite backwards;
685
- }
686
- @media (prefers-reduced-motion: reduce) {
687
- .brand-loader-cell {
688
- animation: none; /* static full-opacity mark */
689
- }
690
- }
691
-
692
816
  @layer base {
693
817
  * {
694
818
  border-color: var(--border);
@@ -817,8 +941,8 @@
817
941
  /*
818
942
  * Interactive border — a reusable primitive (see src/lib/interactive.ts).
819
943
  * Any bordered element opts in with `.ads-interactive` + a trigger class; the
820
- * border snaps to a solid 100% brand-black stroke on hover and focus — no
821
- * halo, no elevation, no pulse (a shadow on a form control reads as
944
+ * border uses its configured hover and active colors — no halo, no elevation,
945
+ * no pulse (a shadow on a form control reads as
822
946
  * actionable-surface elevation, which controls must not claim).
823
947
  * Behaviour stays tunable through the CSS custom properties.
824
948
  */
@@ -852,13 +976,13 @@
852
976
  box-shadow: var(--glow-inset);
853
977
  }
854
978
 
855
- /* Focus / focus-within: solid brand-black 1px stroke, no glow, no pulse.
979
+ /* Focus / focus-within: configured active stroke, no glow, no pulse.
856
980
  Kept plain so form fields read as "this is where I'm typing" without
857
981
  the heartbeat animation that came before. */
858
982
  .ads-interactive.ads-on-focus:focus:not(:disabled):not([aria-invalid="true"]),
859
983
  .ads-interactive.ads-on-focus:focus-visible:not(:disabled):not([aria-invalid="true"]),
860
984
  .ads-interactive.ads-on-within:focus-within:not([aria-invalid="true"]) {
861
- border-color: var(--brand);
985
+ border-color: var(--glow-border-active);
862
986
  box-shadow: var(--glow-inset);
863
987
  }
864
988
 
@@ -869,7 +993,7 @@
869
993
  /* Invalid state (form fields) */
870
994
  .ads-interactive[aria-invalid="true"] {
871
995
  border-color: var(--color-danger-600);
872
- box-shadow: 0 0 0 3px var(--color-danger-100);
996
+ box-shadow: none;
873
997
  }
874
998
  }
875
999
 
@@ -999,7 +1123,7 @@
999
1123
  position: absolute;
1000
1124
  inset-block: 0;
1001
1125
  left: 0;
1002
- border-left: 1px solid var(--border-strong);
1126
+ border-left: 1px solid var(--tree-stroke);
1003
1127
  }
1004
1128
  .ads-tree-rail:first-child::before,
1005
1129
  .ads-tree-branch:first-child::before {
@@ -1026,8 +1150,8 @@
1026
1150
  top: 0;
1027
1151
  height: var(--tree-elbow, 1.125rem);
1028
1152
  width: 1rem;
1029
- border-bottom: 1px solid var(--border-strong);
1030
- border-left: 1px solid var(--border-strong);
1153
+ border-bottom: 1px solid var(--tree-stroke);
1154
+ border-left: 1px solid var(--tree-stroke);
1031
1155
  border-bottom-left-radius: var(--radius-lg);
1032
1156
  }
1033
1157