@actioneer/ads 0.5.9 → 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 (116) 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 +11 -14
  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 +1 -8
  27. package/components/breadcrumbs.js +65 -78
  28. package/components/button.d.ts +1 -1
  29. package/components/button.js +55 -49
  30. package/components/card.js +19 -18
  31. package/components/chart.js +526 -503
  32. package/components/chip.d.ts +13 -1
  33. package/components/chip.js +93 -80
  34. package/components/collection-header.d.ts +17 -0
  35. package/components/collection-header.js +31 -0
  36. package/components/connector-card.d.ts +6 -6
  37. package/components/connector-card.js +31 -32
  38. package/components/date-range-picker.d.ts +26 -0
  39. package/components/date-range-picker.js +223 -0
  40. package/components/drawer.d.ts +19 -3
  41. package/components/drawer.js +143 -116
  42. package/components/dropdown.d.ts +1 -2
  43. package/components/dropdown.js +88 -89
  44. package/components/field.js +39 -34
  45. package/components/file-dropzone.js +1 -1
  46. package/components/index.d.ts +5 -4
  47. package/components/index.js +501 -546
  48. package/components/infinite-canvas.js +24 -24
  49. package/components/input-field.d.ts +18 -3
  50. package/components/input-field.js +88 -72
  51. package/components/input.js +16 -15
  52. package/components/modal.d.ts +31 -3
  53. package/components/modal.js +243 -169
  54. package/components/number-field.js +45 -42
  55. package/components/page-body.d.ts +12 -0
  56. package/components/page-body.js +18 -0
  57. package/components/pagination.js +36 -36
  58. package/components/panel.js +31 -28
  59. package/components/select.d.ts +21 -0
  60. package/components/select.js +189 -148
  61. package/components/setting-row.d.ts +6 -5
  62. package/components/setting-row.js +33 -32
  63. package/components/sidebar.d.ts +2 -0
  64. package/components/sidebar.js +165 -155
  65. package/components/skeleton.js +8 -7
  66. package/components/slider.js +1 -1
  67. package/components/surface-loader.d.ts +11 -0
  68. package/components/surface-loader.js +35 -0
  69. package/components/table.d.ts +16 -10
  70. package/components/table.js +426 -410
  71. package/components/tabs.d.ts +2 -0
  72. package/components/tabs.js +159 -294
  73. package/components/textarea.js +9 -9
  74. package/components/toast.d.ts +1 -1
  75. package/components/toast.js +181 -118
  76. package/components/tree.d.ts +5 -1
  77. package/components/tree.js +96 -63
  78. package/components/typography.d.ts +4 -4
  79. package/components/typography.js +13 -13
  80. package/components/ui/button.d.ts +1 -1
  81. package/components/ui/dialog.js +33 -33
  82. package/components/viz-charts.js +186 -183
  83. package/demo/components/add-to-artifact.js +8 -10
  84. package/fonts.css +2 -0
  85. package/lib/cn.js +11 -4
  86. package/lib/icons.d.ts +4 -0
  87. package/lib/icons.js +107 -106
  88. package/lib/interactive.d.ts +1 -1
  89. package/llms.txt +115 -152
  90. package/manifest.json +13730 -1084
  91. package/package.json +4 -2
  92. package/styles.css +365 -225
  93. package/theme.css +315 -176
  94. package/components/agent-icon.d.ts +0 -76
  95. package/components/agent-icon.js +0 -265
  96. package/components/ai-elements/queue.d.ts +0 -60
  97. package/components/ai-elements/queue.js +0 -193
  98. package/components/ai-elements/speech-input.d.ts +0 -16
  99. package/components/ai-elements/speech-input.js +0 -151
  100. package/components/ai-elements/task-progress.d.ts +0 -41
  101. package/components/ai-elements/task-progress.js +0 -224
  102. package/components/ai-elements/task.d.ts +0 -39
  103. package/components/ai-elements/task.js +0 -105
  104. package/components/ai-elements/voice.d.ts +0 -90
  105. package/components/ai-elements/voice.js +0 -496
  106. package/components/assistant-ui/follow-up-suggestions.d.ts +0 -11
  107. package/components/assistant-ui/follow-up-suggestions.js +0 -72
  108. package/components/assistant-ui/suggestions.d.ts +0 -7
  109. package/components/assistant-ui/suggestions.js +0 -19
  110. package/components/assistant-ui/voice.d.ts +0 -18
  111. package/components/link.d.ts +0 -14
  112. package/components/link.js +0 -72
  113. package/components/navbar.d.ts +0 -15
  114. package/components/navbar.js +0 -68
  115. package/components/pixel-icon.d.ts +0 -37
  116. package/components/pixel-icon.js +0 -859
package/theme.css CHANGED
@@ -8,7 +8,8 @@
8
8
  /*
9
9
  * ============================================================
10
10
  * ADS 1.0 — Design Tokens
11
- * Palette: Ink neutrals · Typeface: Aribau Grotesk
11
+ * Palette: soft neutral greys + product green
12
+ * Typeface: Aribau Grotesk
12
13
  * ============================================================
13
14
  */
14
15
  @theme {
@@ -19,91 +20,166 @@
19
20
  --font-sans: "Aribau Grotesk", ui-sans-serif, system-ui, -apple-system,
20
21
  "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
21
22
 
22
- /* Source code only (CodeBlock, inline Code). ADS ships no mono webfont —
23
- this resolves to the reader's platform mono, which is what a developer
24
- already reads code in. Never use it for UI copy or data. */
25
- --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
26
- "Liberation Mono", "Courier New", monospace;
27
-
28
- /* ---- Type scale ---- base = 15px (0.9375rem). Root stays 16px so the
29
- spacing grid is unaffected; only text sizes are anchored to 15px. */
30
- /* SIX sizes only — a deliberately small ladder (captions → display).
31
- Don't reintroduce 2xs/3xl/4xl or in-between steps; if a size feels
32
- missing, the answer is weight/color, not a new size. */
33
- --text-xs: 0.8125rem; /* 13px — the FLOOR: captions, secondary text, table cells, keycaps */
34
- --text-xs--line-height: 1.125rem;
35
- /* text-sm is aliased to text-xs (both 13px). The scale is intentionally
36
- 13 · 15 · 17 · 21 · 26 with no in-between tier — keeping the token
37
- pointed at 13px stops any stray `text-sm` from falling back to
38
- Tailwind's default 14px, which would land off the scale. */
39
- --text-sm: 0.8125rem;
40
- --text-sm--line-height: 1.125rem;
41
- --text-base: 0.9375rem; /* 15px — BASE body */
42
- --text-base--line-height: 1.375rem;
43
- --text-lg: 1.0625rem; /* 17px — emphasized body, section headings */
44
- --text-lg--line-height: 1.5rem;
45
- --text-xl: 1.3125rem; /* 21px — page titles */
46
- --text-xl--line-height: 1.75rem;
47
- --text-2xl: 1.625rem; /* 26px — display */
48
- --text-2xl--line-height: 2rem;
49
-
50
- /* ---- Neutral ramp — a role-based neutral Gray 12-step light scale. Every
51
- channel is equal, so the product stays neutral with no Sand/Sage cast.
52
- The light surface steps retain subtle spacing; the solid/text end is
53
- perceptually widened so adjacent swatches and UI roles stay distinct.
54
- Each step owns a role — 50/100 =
55
- backgrounds, 200/300/400 = interactive component fills, 500/600/700 =
56
- borders & separators, 800/850 = solid, 900/950 = accessible text. The
57
- `ink` name is retained as the stable ADS API. ---- */
58
- --color-ink-50: #fcfcfc; /* 1 · background */
59
- --color-ink-100: #f9f9f9; /* 2 · background */
60
- --color-ink-150: #f5f5f5; /* canvas */
61
- --color-ink-200: #f0f0f0; /* 3 · interactive */
62
- --color-ink-300: #e8e8e8; /* 4 · interactive */
63
- --color-ink-400: #e0e0e0; /* 5 · interactive */
64
- --color-ink-500: #d9d9d9; /* 6 · border */
65
- --color-ink-600: #cecece; /* 7 · border */
66
- --color-ink-700: #bbbbbb; /* 8 · border */
67
- --color-ink-800: #8d8d8d; /* 9 · solid */
68
- --color-ink-850: #737373; /* 10 · solid */
69
- --color-ink-900: #555555; /* 11 · accessible text */
70
- --color-ink-950: #202020; /* 12 · accessible text */
23
+ /* Source code only (CodeBlock, inline Code). JetBrains Mono is bundled so
24
+ code renders consistently across platforms. Never use it for UI copy or
25
+ ordinary data. */
26
+ --font-mono: "JetBrains Mono Variable", ui-monospace, SFMono-Regular,
27
+ "SF Mono", Menlo, Consolas, "Liberation Mono", "Courier New", monospace;
28
+
29
+ /* ---- Type scale ---- five canonical steps: S · M · L · XL · 2XL.
30
+ Root stays 16px so spacing is unaffected. */
31
+ --text-s: 0.8125rem; /* 13px · captions, secondary text, table cells */
32
+ --text-s--line-height: 1.125rem; /* 18px */
33
+ --text-m: 0.9375rem; /* 15px · default body */
34
+ --text-m--line-height: 1.375rem; /* 22px */
35
+ --text-l: 1.1875rem; /* 19px · emphasized body, section headings */
36
+ --text-l--line-height: 1.625rem; /* 26px */
37
+ --text-xl: 1.5625rem; /* 25px · page titles */
38
+ --text-xl--line-height: 2rem; /* 32px */
39
+ --text-2xl: 1.9375rem; /* 31px · display */
40
+ --text-2xl--line-height: 2.375rem; /* 38px */
41
+
42
+ /* Compatibility aliases keep existing ADS consumers on the new scale. */
43
+ --text-xs: var(--text-s);
44
+ --text-xs--line-height: var(--text-s--line-height);
45
+ --text-sm: var(--text-s);
46
+ --text-sm--line-height: var(--text-s--line-height);
47
+ --text-base: var(--text-m);
48
+ --text-base--line-height: var(--text-m--line-height);
49
+ --text-lg: var(--text-l);
50
+ --text-lg--line-height: var(--text-l--line-height);
51
+
52
+ /* ---- Foundation palette ----
53
+ Canonical primitive names:
54
+ G1…G12 = Green · NG1…NG12 = Neutral Grey.
55
+ Each ramp progresses from light backgrounds and interactive fills through
56
+ supporting tones to solid colors and accessible text. Neutral UI borders
57
+ are intentionally restricted to NG3–NG5. ---- */
58
+ --color-g1: #f7f9f7;
59
+ --color-g2: #eef5f0;
60
+ --color-g3: #e2efe5;
61
+ --color-g4: #cce4d2;
62
+ --color-g5: #b4d8be;
63
+ --color-g6: #9bcbaa;
64
+ --color-g7: #7db78f;
65
+ --color-g8: #5c9c73;
66
+ --color-g9: #398457;
67
+ --color-g10: #2b7348;
68
+ --color-g11: #1f623b;
69
+ --color-g12: #183c28;
70
+
71
+ --color-ng1: #fafafa;
72
+ --color-ng2: #f6f6f6;
73
+ --color-ng3: #f1f1f1;
74
+ --color-ng4: #ececec;
75
+ --color-ng5: #e6e6e6;
76
+ --color-ng6: #dedede;
77
+ --color-ng7: #d4d4d4;
78
+ --color-ng8: #bdbdbd;
79
+ --color-ng9: #868686;
80
+ --color-ng10: #7c7b7b;
81
+ --color-ng11: #5e5d5d;
82
+ --color-ng12: #202020;
83
+
84
+ /* Deprecated Warm Grey names now resolve to Neutral Grey. Keep these
85
+ aliases so existing consumer utilities continue to render safely. */
86
+ --color-wg1: var(--color-ng1);
87
+ --color-wg2: var(--color-ng2);
88
+ --color-wg3: var(--color-ng3);
89
+ --color-wg4: var(--color-ng4);
90
+ --color-wg5: var(--color-ng5);
91
+ --color-wg6: var(--color-ng6);
92
+ --color-wg7: var(--color-ng7);
93
+ --color-wg8: var(--color-ng8);
94
+ --color-wg9: var(--color-ng9);
95
+ --color-wg10: var(--color-ng10);
96
+ --color-wg11: var(--color-ng11);
97
+ --color-wg12: var(--color-ng12);
98
+
99
+ --color-white: #ffffff;
100
+
101
+ /* Compatibility aliases preserve the existing ADS utility/API surface. */
102
+ --color-green-50: var(--color-g1);
103
+ --color-green-100: var(--color-g2);
104
+ --color-green-200: var(--color-g3);
105
+ --color-green-300: var(--color-g4);
106
+ --color-green-400: var(--color-g5);
107
+ --color-green-500: var(--color-g6);
108
+ --color-green-600: var(--color-g7);
109
+ --color-green-700: var(--color-g8);
110
+ --color-green-800: var(--color-g9);
111
+ --color-green-850: var(--color-g10);
112
+ --color-green-900: var(--color-g11);
113
+ --color-green-950: var(--color-g12);
114
+
115
+ --color-grey-50: var(--color-ng1);
116
+ --color-grey-100: var(--color-ng2);
117
+ --color-grey-200: var(--color-ng3);
118
+ --color-grey-300: var(--color-ng4);
119
+ --color-grey-400: var(--color-ng5);
120
+ --color-grey-500: var(--color-ng6);
121
+ --color-grey-600: var(--color-ng7);
122
+ --color-grey-700: var(--color-ng8);
123
+ --color-grey-800: var(--color-ng9);
124
+ --color-grey-850: var(--color-ng10);
125
+ --color-grey-900: var(--color-ng11);
126
+ --color-grey-950: var(--color-ng12);
127
+
128
+ --color-ink-50: var(--color-ng1);
129
+ --color-ink-100: var(--color-ng2);
130
+ --color-ink-200: var(--color-ng3);
131
+ --color-ink-300: var(--color-ng4);
132
+ --color-ink-400: var(--color-ng5);
133
+ --color-ink-500: var(--color-ng6);
134
+ --color-ink-600: var(--color-ng7);
135
+ --color-ink-700: var(--color-ng8);
136
+ --color-ink-800: var(--color-ng9);
137
+ --color-ink-850: var(--color-ng10);
138
+ --color-ink-900: var(--color-ng11);
139
+ --color-ink-950: var(--color-ng12);
71
140
 
72
141
  /* ---- Semantic accent ramps ---- */
73
- /* Success stays a semantic state color, never a product-primary hue. */
74
- --color-success-50: #ecfdf5;
75
- --color-success-100: #d1fae5;
76
- --color-success-500: #10b981;
77
- --color-success-600: #059669;
78
- --color-success-700: #047857;
142
+ /* Success uses the lichen lime family and stays status-only. The original
143
+ soft/base/deep anchors map to 50/500/600; 100 and 400 bridge the soft fill
144
+ and base, while 700 deepens the family enough for AA text on White. */
145
+ --color-success-50: #e4efcf;
146
+ --color-success-100: #d4e5b5;
147
+ --color-success-300: #c4dc9b;
148
+ --color-success-400: #b4d281;
149
+ --color-success-500: #a3c765;
150
+ --color-success-600: #6e8f30;
151
+ --color-success-700: #516923;
79
152
 
80
153
  --color-warning-50: #fffaeb;
81
154
  --color-warning-100: #fef0c7;
155
+ --color-warning-300: #f9d68f;
156
+ --color-warning-400: #f4bc57;
82
157
  --color-warning-500: #f79009;
83
158
  --color-warning-600: #dc6803;
84
159
  --color-warning-700: #b54708;
85
160
 
86
161
  --color-danger-50: #fef3f2;
87
162
  --color-danger-100: #fee4e2;
163
+ --color-danger-300: #f8bab5;
164
+ --color-danger-400: #f18f87;
88
165
  --color-danger-500: #f04438;
89
166
  --color-danger-600: #d92d20;
90
167
  --color-danger-700: #b42318;
91
168
 
92
169
  --color-info-50: #eff8ff;
93
170
  --color-info-100: #d1e9ff;
171
+ --color-info-300: #a7d3f8;
172
+ --color-info-400: #7dbdf1;
94
173
  --color-info-500: #2e90fa;
95
174
  --color-info-600: #1570ef;
96
175
  --color-info-700: #175cd3;
97
176
 
98
- /* ---- Data-viz accents ---- three small ramps for charts & illustration.
177
+ /* ---- Data-viz accents ---- two small ramps for charts & illustration.
99
178
  deep = text/lines · base = fills · soft = backgrounds. Separate from the
100
179
  semantic status ramps above; these carry data, not product identity. */
101
180
  --color-cyan-soft: #c7efe9; /* Cyan — vivid cool contrast; 2nd series, links */
102
181
  --color-cyan-base: #12b5a5;
103
182
  --color-cyan-deep: #0a7e82;
104
- --color-lime-soft: #e4efcf; /* Lichen lime — energetic pop from the mark */
105
- --color-lime-base: #a3c765;
106
- --color-lime-deep: #6e8f30;
107
183
  --color-amber-soft: #fce6c0; /* Amber — warm pop; highlights, "new" */
108
184
  --color-amber-base: #f3a72e;
109
185
  --color-amber-deep: #b57414;
@@ -111,18 +187,21 @@
111
187
  /* Demo logo indigo — source for artifact canvas wash. */
112
188
  --color-brand-mark: #2e1065;
113
189
 
114
- /* ---- Radii ---- FOUR values, assigned by element scale and role.
115
- 2px = micro details; 4px = compact controls; 8px = standard controls
116
- and floating UI; 16px = cards and large surfaces. The repeated aliases
117
- keep the familiar Tailwind role names while capping surfaces at 16px. */
190
+ /* ---- Radii ---- five canonical steps: XS · S · M · L · XL.
191
+ M (6px) is the default corner radius. */
118
192
  --radius-xs: 0.125rem; /* 2px · micro details */
119
- --radius-sm: 0.25rem; /* 4px · compact controls */
120
- --radius-md: 0.5rem; /* 8px · standard controls */
121
- --radius-lg: 0.5rem; /* 8px · menus and panels */
122
- --radius-xl: 1rem; /* 16px · cards and surfaces */
123
- --radius-2xl: 1rem; /* 16px · large surfaces */
124
- --radius-3xl: 1rem; /* 16px · capped compatibility alias */
125
- --radius-4xl: 1rem; /* 16px · capped compatibility alias */
193
+ --radius-s: 0.25rem; /* 4px · compact controls */
194
+ --radius-m: 0.375rem; /* 6px · default controls and surfaces */
195
+ --radius-l: 0.5rem; /* 8px · menus and cards */
196
+ --radius-xl: 0.75rem; /* 12px · large panels and feature surfaces */
197
+
198
+ /* Compatibility aliases preserve existing ADS utilities. */
199
+ --radius-sm: var(--radius-s);
200
+ --radius-md: var(--radius-m);
201
+ --radius-lg: var(--radius-l);
202
+ --radius-2xl: var(--radius-xl);
203
+ --radius-3xl: var(--radius-xl);
204
+ --radius-4xl: var(--radius-xl);
126
205
  /* Shape-only exception for avatars, icon buttons, progress tracks, chips,
127
206
  and badges. It is not part of the corner-radius scale. */
128
207
  --radius-full: 9999px;
@@ -132,30 +211,37 @@
132
211
  convention). */
133
212
  --radius-dot: 2px;
134
213
 
135
- /* ---- Elevation ---- ONE soft token (Claude-panel style).
136
- Delineate surfaces with fill color first; add this to gently lift them.
137
- The ambient drop sits close (y4, blur16) at low opacity and uses neutral
138
- ink — never a cool slate tint that would reintroduce a color cast. */
139
- --shadow-elevation: 0 0 0 1px rgb(32 32 32 / 0.03),
140
- 0 1px 2px 0 rgb(32 32 32 / 0.04),
141
- 0 4px 16px -6px rgb(32 32 32 / 0.06);
214
+ /* ---- Elevation ---- Shopify-inspired 0–600 ladder, recolored with NG12.
215
+ Geometry and opacity increase together; static surfaces remain at 0. */
216
+ --shadow-0: none;
217
+ --shadow-100: 0 1px 0 0 rgb(32 32 32 / 0.07);
218
+ --shadow-200: 0 3px 1px -1px rgb(32 32 32 / 0.07);
219
+ --shadow-300: 0 4px 6px -2px rgb(32 32 32 / 0.2);
220
+ --shadow-400: 0 8px 16px -4px rgb(32 32 32 / 0.22);
221
+ --shadow-500: 0 12px 20px -8px rgb(32 32 32 / 0.24);
222
+ --shadow-600: 0 20px 20px -8px rgb(32 32 32 / 0.28);
223
+
224
+ /* Compatibility hook stays flat. Apply a numbered level only when the user
225
+ explicitly requests elevation for a named surface. */
226
+ --shadow-elevation: var(--shadow-0);
142
227
 
143
228
  /* Pinned-table-column smudges — whisper-soft directional casts shown only
144
229
  while content is hidden behind a sticky column (Table is scroll-aware).
145
- Deep negative spread keeps the edge feathered; the tint is neutral ink. */
230
+ Deep negative spread keeps the edge feathered; the tint is neutral grey. */
146
231
  --shadow-table-smudge-left: 8px 0 24px -14px rgb(32 32 32 / 0.05);
147
232
  --shadow-table-smudge-right: -8px 0 24px -14px rgb(32 32 32 / 0.05);
148
233
 
149
- /* ---- CTA inner glow ---- luminous inset highlight for primary buttons
150
- (adapted from the "AI button" Figma): a crisp top-edge catch plus a soft
151
- inner glow from the top and bottom, so a solid CTA reads as lit from within. */
152
- --inner-glow-cta: inset 0 1px 0 0 rgb(255 255 255 / 0.25),
153
- inset 0 10px 22px -10px rgb(255 255 255 / 0.28),
154
- inset 0 -10px 22px -10px rgb(255 255 255 / 0.16);
155
- /* Light-fill sibling — the same lit-from-within read for secondary/soft
156
- buttons (white catch reads on gray fills at higher opacity). */
157
- --inner-glow-fill: inset 0 1px 0 0 rgb(255 255 255 / 0.7),
158
- inset 0 8px 16px -8px rgb(255 255 255 / 0.45);
234
+ /* ---- Button inset depth ---- Polaris-inspired stacked inner edges. The
235
+ lower contact line, quiet inner outline, and half-pixel top catch make
236
+ solid actions feel tactile without adding a decorative outer border. */
237
+ --inner-glow-cta: inset 0 -1px 0 1px rgb(32 32 32 / 0.22),
238
+ inset 0 0 0 1px rgb(32 32 32 / 0.12),
239
+ inset 0 0.5px 0 1.5px rgb(255 255 255 / 0.28);
240
+ /* Compatibility treatment for explicitly raised light fills. Its visible
241
+ edge is entirely inset, so it keeps a transparent outer border. */
242
+ --inner-glow-fill: inset 0 -1px 0 0 var(--border-primary),
243
+ inset 0 0 0 1px rgb(32 32 32 / 0.1),
244
+ inset 0 0.5px 0 1.5px rgb(255 255 255 / 0.86);
159
245
  /* Text fields — a whisper of inset depth so the writing surface reads
160
246
  recessed into the page (persists through hover/focus/invalid). */
161
247
  --inner-glow-field: inset 0 1px 2px 0 rgb(32 32 32 / 0.06);
@@ -167,7 +253,7 @@
167
253
  --sidebar-item: 2rem; /* 32px — collapsed rail hit target (square) */
168
254
  --sidebar-logo: 1.25rem; /* 20px — brand mark, centered in a --sidebar-item square */
169
255
  --sidebar-text-indent: 2.375rem; /* px-3 + icon size-4 + gap-2.5 — history rows align to nav-item text */
170
- --sidebar-navigation-text-size: var(--text-base); /* 15px — sidebar actions, items, history, and account text */
256
+ --sidebar-navigation-text-size: var(--text-m); /* 15px — sidebar actions, items, history, and account text */
171
257
  --sidebar-section-label-size: 0.8125rem; /* 13px — section and history labels */
172
258
  --panel-header-height: 2.75rem; /* 44px — Panel / toolbar header */
173
259
  --aside-width: 20rem; /* 320px — right-hand panel column */
@@ -181,10 +267,11 @@
181
267
  --thread-max-width: 44rem; /* chat column cap — readable prose measure, all panes */
182
268
  --thread-max-width-wide: 64rem; /* rich-content breakout cap (tables/charts/tool cards) on wide panes; prose keeps --thread-max-width */
183
269
  --composer-bg: var(--elevated); /* pure white composer surface */
184
- --composer-radius: var(--radius-2xl);
270
+ --composer-radius: var(--radius-xl);
185
271
  --composer-padding: 0.5rem;
186
- --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 */
272
+ --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 */
187
273
  --chat-texture-opacity: 0.06; /* welcome-state halftone wash */
274
+ --ask-hero-min-height: 30rem; /* keeps the empty-state prompt visually primary before recent work */
188
275
  }
189
276
 
190
277
  /*
@@ -223,7 +310,15 @@
223
310
  --color-background: var(--background);
224
311
  --color-foreground: var(--foreground);
225
312
 
226
- /* Text hierarchy — three accessible levels (all ≥ AA on --background) */
313
+ /* Contextual text hierarchies — three accessible levels per surface. */
314
+ --color-on-white-primary: var(--text-on-white-primary);
315
+ --color-on-white-secondary: var(--text-on-white-secondary);
316
+ --color-on-white-tertiary: var(--text-on-white-tertiary);
317
+ --color-on-warm-grey-primary: var(--text-on-warm-grey-primary);
318
+ --color-on-warm-grey-secondary: var(--text-on-warm-grey-secondary);
319
+ --color-on-warm-grey-tertiary: var(--text-on-warm-grey-tertiary);
320
+
321
+ /* Context-free compatibility aliases remain conservative. */
227
322
  --color-primary: var(--text-primary);
228
323
  --color-secondary: var(--text-secondary);
229
324
  --color-tertiary: var(--text-tertiary);
@@ -237,6 +332,15 @@
237
332
 
238
333
  --color-card: var(--card);
239
334
  --color-card-foreground: var(--card-foreground);
335
+ --color-specimen-stroke: var(--specimen-stroke);
336
+
337
+ /* Primary CTA role — restrained Studio green, used sparingly. */
338
+ --color-action-primary: var(--action-primary);
339
+ --color-action-primary-foreground: var(--action-primary-foreground);
340
+ --color-action-primary-hover: var(--action-primary-hover);
341
+ --color-action-primary-text: var(--action-primary-text);
342
+ --color-action-primary-soft: var(--action-primary-soft);
343
+ --color-field-focus: var(--field-focus);
240
344
 
241
345
  /* Compatibility action role — neutral ink, never a colored primary hue. */
242
346
  --color-brand: var(--brand);
@@ -244,27 +348,31 @@
244
348
  --color-brand-hover: var(--brand-hover);
245
349
  --color-brand-text: var(--brand-text);
246
350
 
247
- /* Quiet fill — secondary buttons, avatars, chips */
351
+ /* Quiet fill — avatars, chips, and disabled controls */
248
352
  --color-fill: var(--fill);
249
353
  --color-fill-foreground: var(--fill-foreground);
250
354
  --color-table-shell: var(--table-shell);
355
+ --color-table-stroke: var(--table-stroke);
356
+ --color-table-header-foreground: var(--table-header-foreground);
251
357
 
252
358
  --color-artifact-canvas: var(--artifact-canvas);
253
359
 
254
360
  --color-accent: var(--accent);
255
361
  --color-accent-foreground: var(--accent-foreground);
256
362
 
257
- /* success-700 on white = 5.48:1 (600 was 3.77:1, failed AA). */
363
+ /* Lichen success-700 clears AA on White and both success soft fills;
364
+ success-600 is reserved for non-text marks because its 3.73:1 contrast
365
+ on White does not clear body-text AA. */
258
366
  --color-success: var(--color-success-700);
259
- --color-success-foreground: #ffffff;
367
+ --color-success-foreground: var(--color-white);
260
368
  /* Amber-500 fill kept (it IS the caution signal); dark ink foreground
261
369
  instead of white = 6.94:1 (white on amber was 2.35:1, failed even 3:1). */
262
370
  --color-warning: var(--color-warning-500);
263
- --color-warning-foreground: var(--color-ink-950);
371
+ --color-warning-foreground: var(--color-ng12);
264
372
  --color-danger: var(--color-danger-600);
265
- --color-danger-foreground: #ffffff;
373
+ --color-danger-foreground: var(--color-white);
266
374
  --color-info: var(--color-info-600);
267
- --color-info-foreground: #ffffff;
375
+ --color-info-foreground: var(--color-white);
268
376
 
269
377
  --color-border-primary: var(--border-primary);
270
378
  --color-border-secondary: var(--border-secondary);
@@ -272,6 +380,9 @@
272
380
  --color-border: var(--border);
273
381
  --color-border-strong: var(--border-strong);
274
382
  --color-input: var(--input);
383
+ --color-menu-stroke: var(--menu-stroke);
384
+ --color-toast-stroke: var(--toast-stroke);
385
+ --color-tree-stroke: var(--tree-stroke);
275
386
  --color-ring: var(--ring);
276
387
  --color-overlay: var(--overlay);
277
388
 
@@ -283,10 +394,10 @@
283
394
  * shadcn's grey/black defaults. The raw --sidebar-*/--popover values live in
284
395
  * :root below.
285
396
  */
286
- --color-primary-foreground: #ffffff;
287
- --color-secondary-foreground: #ffffff;
397
+ --color-primary-foreground: var(--color-white);
398
+ --color-secondary-foreground: var(--color-white);
288
399
  --color-destructive: var(--color-danger-600);
289
- --color-destructive-foreground: #ffffff;
400
+ --color-destructive-foreground: var(--color-white);
290
401
  --color-popover: var(--popover);
291
402
  --color-popover-foreground: var(--popover-foreground);
292
403
 
@@ -302,62 +413,79 @@
302
413
 
303
414
  /* ---- Theme (light only) ---- */
304
415
  :root {
305
- /* Every neutral semantic token below points INTO the ink primitive scale.
306
- Only pure white (#ffffff) stays literal: it is a base surface, not a
307
- neutral scale step. */
308
- --background: var(--color-ink-100); /* step 2 · canvas */
309
- --foreground: var(--color-ink-950); /* step 12 */
310
-
311
- /* Text levels: primary ink-950, secondary ink-900, tertiary a tuned grey.
312
- All three clear AA (4.5:1) for body copy on every surface they land on.
313
- Tertiary is NOT an ink step: ink-800 (#8d8d8d) was AA-large only (2.7:1
314
- on muted) but is used at 13px in 200+ places, so it is pinned to the
315
- lightest grey that still passes 4.5:1 on bg/card/surface/muted. */
316
- --text-primary: var(--color-ink-950); /* ~16:1 AAA */
317
- --text-secondary: var(--color-ink-900); /* ~7.1:1 AAA */
318
- --text-tertiary: #686868; /* ~4.55:1 AA (min surf) */
319
-
320
- --surface: var(--color-ink-200); /* step 3 · tinted canvas */
321
- --surface-foreground: var(--color-ink-950);
322
- --elevated: #ffffff; /* pure white base */
323
-
324
- --muted: var(--color-ink-300); /* step 4 */
325
- --muted-foreground: var(--color-ink-900);/* step 11 · readable UI text */
326
-
327
- --card: #ffffff; /* pure white base */
328
- --card-foreground: var(--color-ink-950);
416
+ /* Surfaces and achromatic text/actions point into NG; the primary CTA
417
+ points into G. */
418
+ --background: var(--color-ng2); /* step 2 · canvas */
419
+ --foreground: var(--color-ng12); /* step 12 */
420
+
421
+ /* Both surface contexts point directly into the approved NG text steps.
422
+ NG10 is the tertiary/de-emphasis step; it does not clear 4.5:1 for normal
423
+ body text on these surfaces, so reserve it for nonessential content. */
424
+ --text-on-white-primary: var(--color-ng12); /* 16.29:1 · AAA */
425
+ --text-on-white-secondary: var(--color-ng11); /* 6.56:1 · AA */
426
+ --text-on-white-tertiary: var(--color-ng10); /* 4.22:1 */
427
+ --text-on-warm-grey-primary: var(--color-ng12); /* legacy name · neutral canvas */
428
+ --text-on-warm-grey-secondary: var(--color-ng11); /* legacy name · neutral canvas */
429
+ --text-on-warm-grey-tertiary: var(--color-ng10); /* legacy name · neutral canvas */
430
+
431
+ /* Existing context-free utilities remain compatibility aliases. Their
432
+ tertiary value stays conservative across NG2–NG4 and White. */
433
+ --text-primary: var(--color-ng12); /* ~12.5:1 AAA (min surf) */
434
+ --text-secondary: var(--color-ng11); /* ~5.0:1 AA (min surf) */
435
+ --text-tertiary: #625f5c; /* ~4.53:1 AA (min surf) */
436
+
437
+ --surface: var(--color-ng3); /* step 3 · tinted canvas */
438
+ --surface-foreground: var(--color-ng12);
439
+ --elevated: var(--color-white); /* pure white base */
440
+
441
+ --muted: var(--color-ng4); /* step 4 */
442
+ --muted-foreground: var(--color-ng11); /* step 11 · readable UI text */
443
+
444
+ --card: var(--color-white); /* pure white base */
445
+ --card-foreground: var(--color-ng12);
446
+
447
+ /* Studio green is deliberately isolated to the primary CTA role (roughly
448
+ 5–10% of a screen). Selection controls keep using neutral `brand` below,
449
+ so tabs, switches, radios, and progress never inherit CTA color. */
450
+ --action-primary: var(--color-g9);
451
+ --action-primary-foreground: var(--color-white);
452
+ --action-primary-hover: var(--color-g10);
453
+ --action-primary-text: var(--color-g11);
454
+ --action-primary-soft: var(--color-g3);
329
455
 
330
456
  /* Neutral action role. The `brand` name remains as a compatibility API,
331
- but the product has no colored primary palette. */
332
- --brand: var(--color-ink-950); /* darkest action ink */
333
- --brand-foreground: #ffffff;
334
- --brand-hover: var(--color-ink-900); /* lighter hover lift */
335
- --brand-text: var(--color-ink-950); /* action text / links */
336
-
337
- /* Table interaction fills are pre-composited and opaque. Sticky edge cells
338
- therefore cover horizontally scrolled content while preserving the
339
- original quiet bg-card/40-over-muted row hover. */
340
- --table-row-hover: color-mix(in srgb, var(--card) 40%, var(--muted));
341
- --table-row-selected: color-mix(in srgb, var(--card) 10%, var(--muted));
342
-
343
- /* Quiet component fill. Radix step 3 is the first interactive-background
457
+ and shared selection/control states intentionally remain achromatic. */
458
+ --brand: var(--color-ng12); /* darkest neutral action */
459
+ --brand-foreground: var(--color-white);
460
+ --brand-hover: var(--color-ng11); /* lighter hover lift */
461
+ --brand-text: var(--color-ng12); /* action text / links */
462
+
463
+ /* Interactive rows lift one step above the NG1 zebra band. */
464
+ --table-row-hover: var(--color-ng2);
465
+ --table-row-selected: var(--color-ng1);
466
+
467
+ /* Quiet component fill. NG3 is the first interactive-background
344
468
  step, so this remains visible on both white cards and the step-2 canvas. */
345
- --fill: var(--color-ink-200); /* step 3 · default component fill */
346
- --fill-foreground: var(--color-ink-950);
347
-
348
- --accent: var(--color-ink-400); /* step 5 · active / selected wash */
349
- --accent-foreground: var(--color-ink-950);
350
-
351
- /* Borders use consecutive Radix steps 5–7. This avoids the old 3→5→7 jump:
352
- tertiary stays quiet but visible at 0.5px, secondary is the Radix subtle
353
- border step, and primary is the default interactive-control edge. */
354
- --border-primary: var(--color-ink-600); /* step 7 · #cecece · strongest */
355
- --border-secondary: var(--color-ink-500); /* step 6 · #d9d9d9 · default */
356
- --border-tertiary: var(--color-ink-400); /* step 5 · #e0e0e0 · faintest */
469
+ --fill: var(--color-ng3); /* step 3 · default component fill */
470
+ --fill-foreground: var(--color-ng12);
471
+
472
+ --accent: var(--color-ng5); /* step 5 · active / selected wash */
473
+ --accent-foreground: var(--color-ng12);
474
+
475
+ /* Every neutral border stays within the consecutive NG3–NG5 range:
476
+ tertiary is the quietest 1px divider, secondary is the default hairline,
477
+ and primary is the strongest neutral edge. */
478
+ --border-primary: var(--color-ng5); /* step 5 · strongest */
479
+ --border-secondary: var(--color-ng4); /* step 4 · default */
480
+ --border-tertiary: var(--color-ng3); /* step 3 · faintest */
357
481
  /* Legacy aliases point into the scale so existing utilities keep resolving. */
358
482
  --border: var(--border-secondary); /* default hairline / separator */
359
483
  --border-strong: var(--border-primary); /* emphasized / hover / selected */
360
- --input: var(--border-primary); /* form-control edge */
484
+ --input: var(--color-ng4); /* form-control edge */
485
+ --menu-stroke: var(--color-ng4); /* dropdown edge + separator */
486
+ --toast-stroke: var(--color-ng4); /* toast card edge */
487
+ --tree-stroke: var(--color-ng4); /* tree connector rail + elbows */
488
+ --field-focus: var(--color-g8); /* subtle green focused-control edge */
361
489
 
362
490
  /* Ripple — the appearance wash that radiates from a floating surface's
363
491
  origin corner as it opens (Dropdown/Popover/Select/Modal…). A soft ink
@@ -365,29 +493,30 @@
365
493
  the `Ripple` component. */
366
494
  --ripple-tint: color-mix(in srgb, var(--brand) 20%, transparent);
367
495
 
368
- /* Stroke width — ADS hairlines are 0.5px, not the Tailwind 1px default.
369
- The single-width border utilities are overridden to this token at the
370
- bottom of this file, so every `border`/`border-t|r|b|l|x|y` reads as a
371
- true hairline. Explicit `border-2`+ widths are unaffected. */
372
- --stroke-width: 0.5px;
373
- --ring: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink @ 50% */
374
- --overlay: color-mix(in srgb, var(--color-ink-950) 50%, transparent); /* ink-950 @ 50% */
375
-
376
- /* Functional / domain tokens — named for their RENDER role, pointing into
377
- the ink scale. Components pass these into non-CSS renderers (Recharts,
378
- React Flow, the Paper/WebGL texture) so no component carries a raw ink-*
379
- value. Same DS pattern as the data-viz --color-chart-* palette. */
496
+ /* Stroke width — every standard UI border is exactly 1px. */
497
+ --stroke-width: 1px;
498
+ --ring: color-mix(in srgb, var(--color-ng12) 50%, transparent); /* NG12 @ 50% */
499
+ --overlay: color-mix(in srgb, var(--color-ng12) 50%, transparent); /* NG12 @ 50% */
500
+
501
+ /* Functional / domain tokens — named for their render role, pointing into
502
+ the canonical NG palette. Components pass these into non-CSS renderers
503
+ (Recharts, React Flow, the Paper/WebGL texture) so no component carries a
504
+ raw primitive value. Same DS pattern as the data-viz palette. */
380
505
  --chart-axis: var(--border-tertiary); /* axis lines + de-emphasised marks */
381
- --chart-grid: var(--color-ink-200); /* quieter than axes, visible on white */
382
- --chart-track: var(--color-ink-200); /* funnel / progress track */
383
- --chart-context: var(--color-ink-500); /* de-emphasised context series */
506
+ --chart-grid: var(--color-ng3); /* quieter than axes, visible on white */
507
+ --chart-track: var(--color-ng3); /* funnel / progress track */
508
+ --chart-context: var(--color-ng6); /* de-emphasised context series */
509
+ --chart-active-bar-opacity: 0.68; /* hover lightens a bar while preserving its series hue */
384
510
  --canvas-edge: var(--border-secondary);/* infinite-canvas edges / connectors */
385
- --texture-ink: var(--color-ink-950); /* brand-texture / pixel-blast marks */
386
- --table-shell: var(--color-ink-200); /* recessed table tray (lighter than muted) */
511
+ --texture-ink: var(--color-ng12); /* brand-texture / pixel-blast marks */
512
+ --table-shell: var(--color-white); /* simplified single-surface table */
513
+ --table-stroke: var(--color-ng3); /* table outline + row separators */
514
+ --table-header-foreground: var(--color-ng10); /* secondary table heading text */
515
+ --specimen-stroke: var(--color-ng3); /* showcase preview + variant-group frames */
387
516
  --table-scroll-hint: rgb(32 32 32 / 0.04); /* right-edge "more columns" wash */
388
- --surface-inverse: var(--color-ink-950); /* dark hero / inverse surface base */
389
- --surface-inverse-soft: var(--color-ink-900); /* dark hero gradient falloff */
390
- --artifact-canvas: color-mix(in srgb, var(--color-brand-mark) 7%, #ffffff);
517
+ --surface-inverse: var(--color-ng12); /* dark hero / inverse surface base */
518
+ --surface-inverse-soft: var(--color-ng11);/* dark hero gradient falloff */
519
+ --artifact-canvas: color-mix(in srgb, var(--color-brand-mark) 7%, var(--color-white));
391
520
 
392
521
  /* shadcn-compat raw surfaces — so a downstream shadcn Sidebar / Popover
393
522
  (or an inline `var(--sidebar)` / `var(--popover)`) resolves to the ADS
@@ -408,9 +537,10 @@
408
537
 
409
538
  /*
410
539
  * ============================================================
411
- * Hairline strokes — ADS strokes are 0.5px, not 1px (principle 1).
540
+ * Standard strokes — ADS UI borders are 1px (principle 1).
412
541
  * Override Tailwind's single-width border utilities to the
413
542
  * --stroke-width token. Authored after `}
543
+ .border { border-width: var(--stroke-width); }
414
544
  .border-t { border-top-width: var(--stroke-width); }
415
545
  .border-r { border-right-width: var(--stroke-width); }
416
546
  .border-b { border-bottom-width: var(--stroke-width); }
@@ -432,6 +562,15 @@
432
562
  0% { opacity: 0.6; transform: scale(0.15); }
433
563
  100% { opacity: 0; transform: scale(1.08); }
434
564
  }
565
+
566
+ @keyframes ads-toast-progress {
567
+ from {
568
+ transform: scaleX(1);
569
+ }
570
+ to {
571
+ transform: scaleX(0);
572
+ }
573
+ }
435
574
  .ads-ripple {
436
575
  position: absolute;
437
576
  inset: 0;
@@ -455,10 +594,10 @@
455
594
  * `primary-foreground` companion (its base `--color-primary` is the ADS
456
595
  * text-hierarchy token, which collides with the generated `primary` color),
457
596
  * so the vendored shadcn button's icon rendered invisible (dark-on-dark) on
458
- * `bg-primary`. Define the two utilities explicitly against white.
597
+ * `bg-primary`. Define the two utilities explicitly against White.
459
598
  * ============================================================
460
599
  */
461
600
  @layer utilities {
462
- .text-primary-foreground { color: #ffffff; }
463
- .bg-primary-foreground { background-color: #ffffff; }
601
+ .text-primary-foreground { color: var(--color-white); }
602
+ .bg-primary-foreground { background-color: var(--color-white); }
464
603
  }