@agno-hq/chat-react 0.1.0 → 0.3.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.
package/dist/styles.css CHANGED
@@ -1,126 +1,188 @@
1
1
  /*
2
- * agno-chat-react styles aligned with the Agno OS design system.
3
- * Brand accent #ff4017, near-black #111113 surfaces, zinc greys, white-alpha
4
- * borders, Inter + DM Mono. Import once: `import 'agno-chat-react/styles.css'`.
2
+ * @agno-hq/chat-react — design tokens.
5
3
  *
6
- * Dark by default; add the `agno-light` class on a wrapper for light mode.
4
+ * Lifted from `agno-os/src/globals.css` so the components render with the same
5
+ * palette, radii and shadows as the AgentOS chat. Import this file alone
6
+ * (`@agno-hq/chat-react/tokens.css`) to keep the palette while supplying your own
7
+ * component CSS; `styles.css` already contains it.
8
+ *
9
+ * Declared on :root as well as the embed classes, so you can retheme globally
10
+ * or per-embed:
11
+ *
12
+ * :root { --color-brand-brand: 99, 102, 241; --agno-radius-lg: 1.25rem; }
13
+ *
14
+ * Dark by default; add `agno-light` on the embed for light mode (`agno-dark`
15
+ * also works if you toggle both explicitly).
7
16
  */
8
17
 
9
- @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=DM+Mono:wght@400;500&display=swap');
18
+ /* ─────────────────────────────────────────────────────────────────────────
19
+ Design tokens — Agno OS
20
+ ───────────────────────────────────────────────────────────────────────── */
10
21
 
22
+ :root,
11
23
  .agno-root,
12
- .agno-root * {
13
- box-sizing: border-box;
24
+ .agno-launcher {
25
+ /* Radii (agno-os: --radius-rounded-*) */
26
+ --agno-radius-xs: 0.25rem;
27
+ --agno-radius-sm: 0.5rem;
28
+ --agno-radius-md: 0.625rem;
29
+ --agno-radius-lg: 0.75rem;
30
+ --agno-radius-xl: 1rem;
31
+ --agno-radius-full: 9999px;
32
+
33
+ /* Brand + semantic colours are theme-independent in Agno OS */
34
+ --color-brand-brand: 255, 64, 23;
35
+ --color-brand-accent: 235, 110, 82;
36
+ --color-positive: 34, 197, 94;
37
+ --color-destructive: 229, 57, 53;
38
+
39
+ /* Dark theme (agno-os `.dark`) */
40
+ --color-primary: 255, 255, 255;
41
+ --color-primary-accent: 24, 24, 27;
42
+ --color-muted: 161, 161, 170;
43
+ --color-background: 17, 17, 19;
44
+ --color-background-secondary: 39, 39, 42;
45
+ --color-border-default: 255, 255, 255, 0.2;
46
+ --color-border-selected: 255, 255, 255, 0.75;
47
+
48
+ --agno-shadow-border: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 1px 2px -1px rgba(0, 0, 0, 0.4),
49
+ 0 2px 4px 0 rgba(0, 0, 0, 0.3);
50
+ --agno-shadow-panel: 0 0 0 1px rgba(0, 0, 0, 0.3), 0 12px 32px -8px rgba(0, 0, 0, 0.6);
51
+
52
+ /* Semantic aliases used throughout this stylesheet. */
53
+ --agno-primary: rgb(var(--color-primary));
54
+ --agno-accent: rgb(var(--color-primary-accent));
55
+ --agno-muted: rgb(var(--color-muted));
56
+ --agno-bg: rgb(var(--color-background));
57
+ --agno-secondary: rgb(var(--color-background-secondary));
58
+ --agno-secondary-soft: rgba(var(--color-background-secondary), 0.5);
59
+ --agno-border: rgba(var(--color-border-default));
60
+ --agno-border-selected: rgba(var(--color-border-selected));
61
+ --agno-brand: rgb(var(--color-brand-brand));
62
+ --agno-brand-soft: rgba(var(--color-brand-brand), 0.14);
63
+ --agno-positive: rgb(var(--color-positive));
64
+ --agno-destructive: rgb(var(--color-destructive));
65
+ /* Agno OS layers subtle primary tints instead of extra greys. */
66
+ --agno-tint: rgba(var(--color-primary), 0.05);
67
+ --agno-tint-strong: rgba(var(--color-primary), 0.1);
68
+
69
+ /* Back-compat aliases (previous releases exposed these names). */
70
+ --agno-text: var(--agno-primary);
71
+ --agno-surface: var(--agno-bg);
72
+ --agno-surface-2: var(--agno-secondary);
73
+ --agno-error: var(--agno-destructive);
74
+ --agno-radius: var(--agno-radius-md);
75
+ --agno-primary-bg: var(--agno-primary);
76
+ --agno-primary-fg: var(--agno-accent);
77
+
78
+ /* Typography — repoint these to self-hosted faces to skip fonts.css. */
79
+ --agno-font: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
80
+ --agno-font-mono: 'DM Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
14
81
  }
15
82
 
16
- .agno-root {
17
- /* Agno OS dark tokens */
18
- --agno-bg: #111113;
19
- --agno-surface: #18181b;
20
- --agno-surface-2: #27272a;
21
- --agno-border: rgba(255, 255, 255, 0.1);
22
- --agno-border-strong: rgba(255, 255, 255, 0.2);
23
- --agno-text: #fafafa;
24
- --agno-muted: #a1a1aa;
25
-
26
- /* Signature brand colour, used as the accent. */
27
- --agno-brand: #ff4017;
28
- --agno-brand-soft: rgba(255, 64, 23, 0.14);
29
- --agno-accent: var(--agno-brand);
30
-
31
- /* Monochrome primary action (Agno uses inverse, not brand, for buttons). */
32
- --agno-primary-bg: #fafafa;
33
- --agno-primary-fg: #111113;
34
-
35
- --agno-user: rgba(255, 255, 255, 0.06);
36
- --agno-positive: #22c55e;
37
- --agno-error: #e53935;
83
+ /* Light theme (agno-os `:root`) */
84
+ .agno-light,
85
+ .agno-root.agno-light,
86
+ .agno-launcher.agno-light {
87
+ --color-primary: 24, 24, 27;
88
+ --color-primary-accent: 255, 255, 255;
89
+ --color-muted: 113, 113, 122;
90
+ --color-background: 255, 255, 255;
91
+ --color-background-secondary: 244, 244, 245;
92
+ --color-border-default: 24, 24, 27, 0.1;
93
+ --color-border-selected: 24, 24, 27, 0.5;
38
94
 
39
- --agno-radius-sm: 0.5rem;
40
- --agno-radius: 0.625rem;
41
- --agno-radius-lg: 0.75rem;
95
+ --agno-shadow-border: 0 0 0 1px rgba(0, 0, 0, 0.06), 0 1px 2px -1px rgba(0, 0, 0, 0.06),
96
+ 0 2px 4px 0 rgba(0, 0, 0, 0.04);
97
+ --agno-shadow-panel: 0 0 0 1px rgba(0, 0, 0, 0.06), 0 12px 32px -8px rgba(0, 0, 0, 0.18);
98
+ }
42
99
 
100
+ /* Explicit dark, for apps that toggle both classes. */
101
+ .agno-dark,
102
+ .agno-root.agno-dark,
103
+ .agno-launcher.agno-dark {
104
+ --color-primary: 255, 255, 255;
105
+ --color-primary-accent: 24, 24, 27;
106
+ --color-muted: 161, 161, 170;
107
+ --color-background: 17, 17, 19;
108
+ --color-background-secondary: 39, 39, 42;
109
+ --color-border-default: 255, 255, 255, 0.2;
110
+ --color-border-selected: 255, 255, 255, 0.75;
111
+ }
112
+
113
+ /*
114
+ * @agno-hq/chat-react — component styles, following the Agno OS design system.
115
+ *
116
+ * Every colour, radius, shadow and font here comes from a token in
117
+ * `tokens.css`; `styles.css` ships the two concatenated, so import that unless
118
+ * you are supplying your own tokens. Webfonts are a separate opt-in file
119
+ * (`fonts.css`) — this sheet makes no third-party request.
120
+ *
121
+ * Each class below is also addressable from the `classNames` prop on the
122
+ * components, so Tailwind (or anything else) layers on top of these rules
123
+ * rather than replacing them.
124
+ */
125
+
126
+ .agno-root,
127
+ .agno-root *,
128
+ .agno-launcher,
129
+ .agno-launcher * {
130
+ box-sizing: border-box;
131
+ }
132
+
133
+
134
+ .agno-root {
43
135
  display: flex;
44
136
  flex-direction: column;
45
137
  background: var(--agno-bg);
46
- color: var(--agno-text);
138
+ color: var(--agno-primary);
47
139
  border: 1px solid var(--agno-border);
48
140
  border-radius: var(--agno-radius-lg);
49
141
  overflow: hidden;
50
- font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
51
- font-size: 14px;
52
- line-height: 1.55;
142
+ font-family: var(--agno-font);
143
+ font-size: 0.875rem;
144
+ font-weight: 400;
145
+ line-height: 21px;
146
+ letter-spacing: -0.02em;
53
147
  -webkit-font-smoothing: antialiased;
54
148
  -moz-osx-font-smoothing: grayscale;
55
149
  }
56
150
 
57
- .agno-root.agno-light {
58
- --agno-bg: #ffffff;
59
- --agno-surface: #ffffff;
60
- --agno-surface-2: #f4f4f5;
61
- --agno-border: rgba(24, 24, 27, 0.1);
62
- --agno-border-strong: rgba(24, 24, 27, 0.5);
63
- --agno-text: #18181b;
64
- --agno-muted: #71717a;
65
- --agno-brand-soft: rgba(255, 64, 23, 0.1);
66
- --agno-primary-bg: #18181b;
67
- --agno-primary-fg: #ffffff;
68
- --agno-user: #f4f4f5;
151
+
152
+ /* Type scale — Agno OS `Paragraph` sizes. */
153
+ .agno-text-body {
154
+ font-size: 0.875rem;
155
+ line-height: 21px;
156
+ letter-spacing: -0.02em;
157
+ }
158
+ .agno-text-xsmall {
159
+ font-size: 0.75rem;
160
+ line-height: 1.0625rem;
161
+ letter-spacing: -0.02em;
162
+ }
163
+ .agno-text-label,
164
+ .agno-mono {
165
+ font-family: var(--agno-font-mono);
166
+ font-size: 0.75rem;
167
+ line-height: 1rem;
168
+ letter-spacing: 0.02em;
69
169
  }
70
170
 
71
- /* Scrollbars — thin, like Agno OS. */
72
171
  .agno-root ::-webkit-scrollbar {
73
172
  width: 6px;
74
173
  height: 6px;
75
174
  }
76
175
  .agno-root ::-webkit-scrollbar-thumb {
77
- background: var(--agno-border-strong);
78
- border-radius: 9999px;
176
+ background: var(--agno-tint-strong);
177
+ border-radius: var(--agno-radius-full);
79
178
  }
80
179
  .agno-root ::-webkit-scrollbar-track {
81
180
  background: transparent;
82
181
  }
83
182
 
84
- /* Header */
85
- .agno-header {
86
- display: flex;
87
- align-items: center;
88
- justify-content: space-between;
89
- gap: 12px;
90
- padding: 12px 16px;
91
- border-bottom: 1px solid var(--agno-border);
92
- background: var(--agno-bg);
93
- }
94
- .agno-header__brand {
95
- display: flex;
96
- align-items: center;
97
- gap: 10px;
98
- }
99
- .agno-header__title {
100
- font-weight: 600;
101
- font-size: 13px;
102
- text-transform: uppercase;
103
- letter-spacing: 0.08em;
104
- }
105
- /* Agno brand mark — orange rounded square with the "A". */
106
- .agno-logo {
107
- display: grid;
108
- place-items: center;
109
- width: 24px;
110
- height: 24px;
111
- border-radius: 7px;
112
- background: var(--agno-brand);
113
- color: #fff;
114
- font-weight: 700;
115
- font-size: 14px;
116
- line-height: 1;
117
- box-shadow: 0 0 16px rgba(255, 64, 23, 0.45);
118
- }
119
- .agno-header__controls {
120
- display: flex;
121
- align-items: center;
122
- gap: 8px;
123
- }
183
+ /* ─────────────────────────────────────────────────────────────────────────
184
+ Shell: sidebars, chat column
185
+ ───────────────────────────────────────────────────────────────────────── */
124
186
 
125
187
  .agno-main {
126
188
  display: flex;
@@ -129,26 +191,26 @@
129
191
  }
130
192
 
131
193
  .agno-sidebar {
132
- width: 300px;
194
+ width: 316px;
133
195
  border-left: 1px solid var(--agno-border);
134
196
  background: var(--agno-bg);
135
- padding: 12px;
197
+ padding: 16px;
136
198
  overflow: auto;
137
199
  }
138
200
  .agno-sidebar--left {
139
201
  border-left: none;
140
202
  border-right: 1px solid var(--agno-border);
141
- width: 248px;
203
+ width: 260px;
142
204
  }
143
205
  .agno-sidebar__title {
144
- font-size: 11px;
206
+ font-family: var(--agno-font-mono);
207
+ font-size: 0.75rem;
208
+ letter-spacing: 0.02em;
145
209
  text-transform: uppercase;
146
- letter-spacing: 0.06em;
147
210
  color: var(--agno-muted);
148
- margin-bottom: 10px;
211
+ margin-bottom: 12px;
149
212
  }
150
213
 
151
- /* Chat surface */
152
214
  .agno-chat {
153
215
  display: flex;
154
216
  flex-direction: column;
@@ -157,105 +219,93 @@
157
219
  min-height: 0;
158
220
  }
159
221
 
222
+ /* ─────────────────────────────────────────────────────────────────────────
223
+ Transcript
224
+ ───────────────────────────────────────────────────────────────────────── */
225
+
160
226
  .agno-list {
161
227
  flex: 1;
162
228
  overflow-y: auto;
163
- padding: 20px;
229
+ padding: 24px 24px 8px;
230
+ }
231
+ /* Agno OS centres the conversation in an 800px column. */
232
+ .agno-list__inner {
233
+ width: 100%;
234
+ max-width: 800px;
235
+ margin: 0 auto;
164
236
  display: flex;
165
237
  flex-direction: column;
166
- gap: 18px;
238
+ gap: 36px;
167
239
  }
168
240
  .agno-list__empty {
169
- margin: auto;
170
- color: var(--agno-muted);
241
+ height: 100%;
242
+ display: grid;
243
+ place-items: center;
171
244
  text-align: center;
172
- max-width: 360px;
245
+ color: var(--agno-muted);
173
246
  }
174
247
 
175
- /* Messages */
176
248
  .agno-msg {
177
249
  display: flex;
178
- gap: 12px;
179
250
  align-items: flex-start;
180
- }
181
- .agno-msg--user {
182
- flex-direction: row-reverse;
251
+ gap: 16px;
183
252
  }
184
253
  .agno-msg__avatar {
185
- flex: 0 0 30px;
186
- width: 30px;
187
- height: 30px;
188
- border-radius: 8px;
254
+ flex: 0 0 24px;
255
+ width: 24px;
256
+ height: 24px;
257
+ border-radius: 6px;
189
258
  display: grid;
190
259
  place-items: center;
191
- background: var(--agno-surface-2);
192
- border: 1px solid var(--agno-border);
193
- font-size: 15px;
260
+ overflow: hidden;
261
+ }
262
+ .agno-msg__avatar svg {
263
+ display: block;
264
+ }
265
+ .agno-msg--user .agno-msg__avatar {
266
+ background: var(--agno-secondary);
267
+ color: var(--agno-primary);
268
+ border-radius: var(--agno-radius-sm);
269
+ font-size: 10px;
270
+ line-height: 1;
271
+ font-weight: 500;
272
+ letter-spacing: 0;
194
273
  }
195
- .agno-msg--agent .agno-msg__avatar {
274
+ .agno-msg--team .agno-msg__avatar {
196
275
  background: var(--agno-brand);
197
- border-color: transparent;
198
276
  color: #fff;
199
- font-weight: 700;
200
- box-shadow: 0 0 14px rgba(255, 64, 23, 0.4);
277
+ padding: 4px;
201
278
  }
202
279
  .agno-msg__body {
203
- max-width: 80%;
204
- display: flex;
205
- flex-direction: column;
206
- gap: 8px;
207
- }
208
- /* Agent body spans the column so tool/step cards keep a stable width as
209
- content streams in (no horizontal jitter). */
210
- .agno-msg--agent .agno-msg__body {
211
280
  flex: 1;
212
- max-width: 100%;
213
281
  min-width: 0;
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 12px;
285
+ color: var(--agno-primary);
214
286
  }
215
- .agno-msg--user .agno-msg__body {
216
- align-items: flex-end;
217
- }
218
- /* Agent replies render as plain text (Agno OS style), not a card. */
287
+ /* Agent and user messages are both plain text in Agno OS — no bubbles. */
219
288
  .agno-msg__content {
220
- padding: 2px 0;
221
289
  word-break: break-word;
222
290
  }
223
- /* User messages sit in a rounded bubble. */
224
- .agno-msg--user .agno-msg__content {
225
- background: var(--agno-user);
226
- border: 1px solid var(--agno-border);
227
- border-radius: var(--agno-radius);
228
- padding: 10px 14px;
229
- }
230
- .agno-msg__content--empty {
231
- min-height: 20px;
232
- }
233
291
  .agno-msg__error {
234
- color: var(--agno-error);
235
- font-size: 13px;
292
+ color: var(--agno-destructive);
293
+ word-break: break-word;
236
294
  }
237
-
238
- /* Inline "what it's doing" indicator, shown in the agent bubble before content. */
239
295
  .agno-msg__activity {
240
296
  display: flex;
241
297
  align-items: center;
242
- gap: 9px;
298
+ gap: 8px;
299
+ min-height: 28px;
243
300
  color: var(--agno-muted);
244
- font-size: 13px;
245
- padding: 4px 0;
246
301
  }
247
- .agno-msg__activity-label {
248
- letter-spacing: 0.01em;
249
- }
250
-
251
- /* Streaming caret — brand accent */
252
302
  .agno-msg__caret {
253
303
  display: inline-block;
254
- width: 7px;
304
+ width: 6px;
255
305
  height: 14px;
256
306
  margin-left: 2px;
257
307
  vertical-align: text-bottom;
258
- background: var(--agno-brand);
308
+ background: var(--agno-primary);
259
309
  border-radius: 1px;
260
310
  animation: agno-blink 1s steps(2, start) infinite;
261
311
  }
@@ -265,7 +315,10 @@
265
315
  }
266
316
  }
267
317
 
268
- /* Markdown */
318
+ /* ─────────────────────────────────────────────────────────────────────────
319
+ Markdown
320
+ ───────────────────────────────────────────────────────────────────────── */
321
+
269
322
  .agno-md > :first-child {
270
323
  margin-top: 0;
271
324
  }
@@ -273,230 +326,844 @@
273
326
  margin-bottom: 0;
274
327
  }
275
328
  .agno-md-p {
276
- margin: 6px 0;
329
+ margin: 8px 0;
277
330
  }
278
331
  .agno-md-heading {
279
- margin: 12px 0 6px;
280
- line-height: 1.3;
281
- letter-spacing: -0.01em;
332
+ margin: 16px 0 8px;
333
+ font-weight: 500;
334
+ line-height: normal;
282
335
  }
283
336
  .agno-md-list {
284
- margin: 6px 0;
337
+ margin: 8px 0;
285
338
  padding-left: 20px;
286
339
  }
287
340
  .agno-md-code {
288
- background: var(--agno-surface-2);
341
+ background: var(--agno-tint);
289
342
  padding: 1px 5px;
290
- border-radius: 5px;
291
- font-size: 0.88em;
292
- font-family: 'DM Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
293
- }
294
- .agno-md-pre {
295
- background: var(--agno-surface-2);
343
+ border-radius: var(--agno-radius-xs);
344
+ font-family: var(--agno-font-mono);
345
+ font-size: 0.75rem;
346
+ letter-spacing: -0.015em;
347
+ }
348
+ /* Fenced code: a header bar (language, copy) over a numbered, highlighted body. */
349
+ .agno-md-code-block {
350
+ margin: 8px 0;
296
351
  border: 1px solid var(--agno-border);
352
+ border-radius: var(--agno-radius-md);
353
+ background: var(--agno-secondary-soft);
354
+ overflow: hidden;
355
+ }
356
+ .agno-md-code-head {
357
+ display: flex;
358
+ align-items: center;
359
+ justify-content: space-between;
360
+ gap: 8px;
361
+ padding: 6px 8px 6px 14px;
362
+ border-bottom: 1px solid var(--agno-border);
363
+ }
364
+ .agno-md-code-lang {
365
+ font-family: var(--agno-font-mono);
366
+ font-size: 0.75rem;
367
+ color: var(--agno-muted);
368
+ letter-spacing: -0.01em;
369
+ }
370
+ .agno-md-copy {
371
+ display: grid;
372
+ place-items: center;
373
+ width: 26px;
374
+ height: 26px;
375
+ padding: 0;
376
+ border: 0;
297
377
  border-radius: var(--agno-radius-sm);
378
+ background: transparent;
379
+ color: var(--agno-muted);
380
+ cursor: pointer;
381
+ transition: color 0.15s ease, background-color 0.15s ease;
382
+ }
383
+ .agno-md-copy:hover,
384
+ .agno-md-copy:focus-visible {
385
+ color: var(--agno-primary);
386
+ background: var(--agno-tint);
387
+ }
388
+ .agno-md-copy.is-copied {
389
+ color: var(--agno-positive);
390
+ }
391
+
392
+ .agno-md-pre {
393
+ margin: 0;
298
394
  padding: 12px 14px;
395
+ max-height: var(--agno-code-max-height, 32rem);
396
+ overflow: auto;
397
+ font-family: var(--agno-font-mono);
398
+ font-size: 0.75rem;
399
+ line-height: 1.5rem;
400
+ letter-spacing: -0.02em;
401
+ }
402
+ /* Line numbers are counters, so they neither select nor copy. */
403
+ .agno-md-pre code {
404
+ counter-reset: line;
405
+ }
406
+ .agno-md-line {
407
+ counter-increment: line;
408
+ }
409
+ .agno-md-line::before {
410
+ content: counter(line);
411
+ display: inline-block;
412
+ width: var(--agno-code-gutter, 2ch);
413
+ margin-right: 1.25rem;
414
+ text-align: right;
415
+ color: var(--agno-muted);
416
+ user-select: none;
417
+ }
418
+ /* Tokens carry both themes; the theme class picks one, like every other colour. */
419
+ .agno-md-line span {
420
+ color: var(--shiki-dark);
421
+ }
422
+ .agno-light .agno-md-line span {
423
+ color: var(--shiki-light);
424
+ }
425
+ .agno-dark .agno-md-line span {
426
+ color: var(--shiki-dark);
427
+ }
428
+
429
+ .agno-md a {
430
+ color: var(--agno-primary);
431
+ text-underline-offset: 2px;
432
+ }
433
+ .agno-md-quote {
434
+ margin: 8px 0;
435
+ padding-left: 12px;
436
+ border-left: 2px solid var(--agno-border);
437
+ color: var(--agno-muted);
438
+ }
439
+ .agno-md-rule {
440
+ margin: 16px 0;
441
+ border: none;
442
+ border-top: 1px solid var(--agno-border);
443
+ }
444
+ .agno-md-img {
445
+ max-width: 100%;
446
+ border-radius: var(--agno-radius-md);
447
+ }
448
+ /* Wide tables scroll in place — the transcript column never widens. */
449
+ .agno-md-table-wrap {
450
+ margin: 8px 0;
299
451
  overflow-x: auto;
300
- font-size: 12.5px;
301
- font-family: 'DM Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
452
+ border: 1px solid var(--agno-border);
453
+ border-radius: var(--agno-radius-md);
454
+ }
455
+ .agno-md-table {
456
+ width: 100%;
457
+ border-collapse: collapse;
458
+ font-size: 0.8125rem;
459
+ }
460
+ .agno-md-table th,
461
+ .agno-md-table td {
462
+ padding: 6px 10px;
463
+ text-align: left;
464
+ vertical-align: top;
465
+ }
466
+ .agno-md-table th {
467
+ background: var(--agno-secondary-soft);
468
+ font-weight: 500;
469
+ white-space: nowrap;
470
+ }
471
+ .agno-md-table tr + tr td {
472
+ border-top: 1px solid var(--agno-border);
302
473
  }
474
+ /* GFM task lists: the checkbox replaces the bullet. */
475
+ .agno-md-list li:has(> input[type='checkbox']) {
476
+ list-style: none;
477
+ margin-left: -20px;
478
+ }
479
+ .agno-md-list li input[type='checkbox'] {
480
+ margin-right: 6px;
481
+ accent-color: var(--agno-brand);
482
+ }
483
+
484
+ /* ─────────────────────────────────────────────────────────────────────────
485
+ Tool calls — pill triggers, detail panel underneath
486
+ ───────────────────────────────────────────────────────────────────────── */
303
487
 
304
- /* Tool calls */
305
488
  .agno-tools {
306
489
  display: flex;
307
490
  flex-direction: column;
308
- gap: 6px;
309
- }
310
- .agno-tool {
311
- border: 1px solid var(--agno-border);
312
- border-radius: var(--agno-radius-sm);
313
- background: var(--agno-surface);
314
- overflow: hidden;
315
- }
316
- .agno-tool--running {
317
- border-color: rgba(255, 64, 23, 0.35);
491
+ gap: 8px;
318
492
  }
319
- .agno-tool__head {
320
- width: 100%;
493
+ .agno-tools__row {
321
494
  display: flex;
495
+ flex-wrap: wrap;
322
496
  align-items: center;
323
497
  gap: 8px;
324
- padding: 8px 11px;
325
- background: none;
498
+ }
499
+ .agno-tool {
500
+ display: inline-flex;
501
+ align-items: center;
502
+ gap: 6px;
503
+ padding: 2px 8px;
326
504
  border: none;
327
- color: inherit;
505
+ border-radius: var(--agno-radius-sm);
506
+ background: var(--agno-tint);
507
+ color: var(--agno-primary);
328
508
  cursor: pointer;
329
- font: inherit;
330
- text-align: left;
509
+ font-family: var(--agno-font-mono);
510
+ font-size: 0.75rem;
511
+ line-height: 1.125rem;
512
+ letter-spacing: 0.02em;
513
+ text-transform: uppercase;
514
+ transition: background 0.12s ease;
331
515
  }
332
- .agno-tool__icon {
333
- font-size: 12px;
334
- opacity: 0.7;
516
+ .agno-tool:hover {
517
+ background: var(--agno-tint-strong);
335
518
  }
336
- .agno-tool__name {
337
- font-weight: 500;
338
- font-family: 'DM Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
339
- font-size: 13px;
340
- }
341
- .agno-tool__status {
342
- font-size: 10.5px;
343
- padding: 1px 8px;
344
- border-radius: 999px;
345
- background: var(--agno-surface-2);
519
+ .agno-tool.is-open {
520
+ background: var(--agno-tint-strong);
521
+ }
522
+ .agno-tool__spinner {
346
523
  color: var(--agno-muted);
347
- text-transform: lowercase;
348
- letter-spacing: 0.02em;
349
524
  }
350
- .agno-tool__status--running {
351
- color: var(--agno-brand);
352
- background: var(--agno-brand-soft);
525
+ .agno-spin {
526
+ animation: agno-spin 1s linear infinite;
353
527
  }
354
- .agno-tool__status--done {
355
- color: var(--agno-positive);
528
+ @keyframes agno-spin {
529
+ to {
530
+ transform: rotate(360deg);
531
+ }
532
+ }
533
+ .agno-tool__icon {
534
+ color: var(--agno-muted);
356
535
  }
357
- .agno-tool__status--error {
358
- color: var(--agno-error);
536
+ .agno-tool--error {
537
+ color: var(--agno-destructive);
359
538
  }
360
- .agno-tool__status--paused {
539
+ .agno-tool--paused .agno-tool__icon {
361
540
  color: var(--agno-brand);
362
541
  }
363
- .agno-tool__chev {
364
- margin-left: auto;
365
- font-size: 9px;
366
- color: var(--agno-muted);
367
- }
368
- .agno-tool__body {
369
- padding: 10px 11px;
370
- border-top: 1px solid var(--agno-border);
542
+
543
+ .agno-tool-detail {
371
544
  display: flex;
372
545
  flex-direction: column;
546
+ gap: 12px;
547
+ padding: 12px;
548
+ border-radius: var(--agno-radius-md);
549
+ background: var(--agno-secondary-soft);
550
+ }
551
+ .agno-tool-detail__head {
552
+ display: flex;
553
+ align-items: center;
554
+ justify-content: space-between;
373
555
  gap: 8px;
374
556
  }
375
- .agno-tool__label {
376
- font-size: 10.5px;
557
+ .agno-tool-detail__meta {
558
+ margin-left: auto;
559
+ }
560
+ .agno-tool-detail__name {
561
+ font-family: var(--agno-font-mono);
562
+ font-size: 0.75rem;
563
+ letter-spacing: 0.02em;
564
+ text-transform: uppercase;
565
+ }
566
+ .agno-tool-detail__status {
567
+ color: var(--agno-muted);
568
+ font-family: var(--agno-font-mono);
569
+ font-size: 0.75rem;
570
+ letter-spacing: 0.02em;
377
571
  text-transform: uppercase;
378
- letter-spacing: 0.05em;
572
+ }
573
+ .agno-tool-detail__status--done {
574
+ color: var(--agno-positive);
575
+ }
576
+ .agno-tool-detail__status--error {
577
+ color: var(--agno-destructive);
578
+ }
579
+ .agno-tool-detail__status--paused,
580
+ .agno-tool-detail__status--running {
581
+ color: var(--agno-brand);
582
+ }
583
+ .agno-tool-detail__label {
379
584
  color: var(--agno-muted);
380
- margin-bottom: 4px;
585
+ font-family: var(--agno-font-mono);
586
+ font-size: 0.75rem;
587
+ letter-spacing: 0.02em;
588
+ text-transform: uppercase;
589
+ margin-bottom: 6px;
381
590
  }
382
- .agno-tool__pre {
591
+ .agno-tool-detail__pre {
383
592
  margin: 0;
384
- background: var(--agno-surface-2);
385
- border-radius: 6px;
386
- padding: 9px;
593
+ padding: 10px;
594
+ border-radius: var(--agno-radius-sm);
595
+ background: var(--agno-bg);
387
596
  overflow-x: auto;
388
- font-size: 12px;
389
- font-family: 'DM Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
597
+ font-family: var(--agno-font-mono);
598
+ font-size: 0.75rem;
599
+ line-height: 1.125rem;
600
+ letter-spacing: -0.02em;
601
+ white-space: pre-wrap;
602
+ word-break: break-word;
390
603
  }
391
604
 
392
- /* Reasoning + citations */
393
- .agno-reasoning,
394
- .agno-citations {
395
- border: 1px solid var(--agno-border);
396
- border-radius: var(--agno-radius-sm);
397
- background: var(--agno-surface);
398
- }
399
- .agno-reasoning__toggle,
400
- .agno-citations__toggle {
401
- width: 100%;
605
+ /* ─────────────────────────────────────────────────────────────────────────
606
+ Collapsible panels: reasoning, tool calls
607
+ ───────────────────────────────────────────────────────────────────────── */
608
+
609
+ .agno-disclosure__toggle {
402
610
  display: flex;
403
611
  align-items: center;
404
- gap: 7px;
405
- padding: 8px 11px;
612
+ gap: 8px;
613
+ padding: 0;
406
614
  background: none;
407
615
  border: none;
408
616
  color: var(--agno-muted);
409
617
  cursor: pointer;
410
618
  font: inherit;
411
- font-size: 13px;
619
+ text-align: left;
412
620
  }
413
- .agno-reasoning__chev,
414
- .agno-citations__chev {
415
- margin-left: auto;
416
- font-size: 9px;
621
+ .agno-disclosure__toggle:hover {
622
+ color: var(--agno-primary);
417
623
  }
418
- .agno-reasoning__list {
419
- margin: 0;
420
- padding: 4px 12px 12px 28px;
624
+ .agno-disclosure__chev {
625
+ flex: 0 0 16px;
626
+ transition: transform 0.2s ease;
627
+ }
628
+ .agno-disclosure__toggle[aria-expanded='true'] .agno-disclosure__chev {
629
+ transform: rotate(180deg);
630
+ }
631
+
632
+ .agno-reasoning {
421
633
  display: flex;
422
634
  flex-direction: column;
423
- gap: 10px;
635
+ gap: 12px;
424
636
  }
425
- .agno-reasoning__step {
637
+ /* Timeline — a continuous rule down the centre of the icon column. */
638
+ .agno-timeline {
426
639
  position: relative;
640
+ isolation: isolate;
641
+ margin: 0;
642
+ padding: 0 0 0 24px;
643
+ list-style: none;
644
+ display: flex;
645
+ flex-direction: column;
646
+ gap: 16px;
427
647
  }
428
- .agno-reasoning__step::before {
648
+ .agno-timeline::before {
429
649
  content: '';
430
650
  position: absolute;
431
- left: -16px;
432
- top: 6px;
433
- width: 6px;
434
- height: 6px;
435
- border-radius: 50%;
436
- background: var(--agno-brand);
651
+ left: 8px;
652
+ top: 10px;
653
+ bottom: 10px;
654
+ width: 1px;
655
+ background: var(--agno-border);
437
656
  }
438
- .agno-reasoning__title {
439
- font-weight: 600;
657
+ .agno-timeline__item {
658
+ position: relative;
659
+ }
660
+ .agno-timeline__item::before {
661
+ content: '';
662
+ position: absolute;
663
+ left: -20px;
664
+ top: 7px;
665
+ width: 7px;
666
+ height: 7px;
667
+ border-radius: var(--agno-radius-full);
668
+ background: var(--agno-muted);
669
+ box-shadow: 0 0 0 4px var(--agno-bg);
670
+ }
671
+ .agno-reasoning__title {
672
+ font-weight: 500;
440
673
  }
441
674
  .agno-reasoning__text {
442
- color: var(--agno-text);
675
+ color: var(--agno-primary);
443
676
  }
444
677
  .agno-reasoning__meta {
445
- font-size: 12px;
446
678
  color: var(--agno-muted);
679
+ font-size: 0.75rem;
680
+ line-height: 1.0625rem;
447
681
  }
448
682
 
449
- .agno-citations__body {
450
- padding: 4px 11px 11px;
683
+ /* Behind the scenes — one trigger over the whole run timeline. */
684
+ .agno-bts {
451
685
  display: flex;
452
686
  flex-direction: column;
453
- gap: 9px;
687
+ gap: 12px;
688
+ }
689
+ .agno-bts__toggle {
690
+ display: flex;
691
+ align-items: center;
692
+ gap: 8px;
693
+ width: fit-content;
694
+ max-width: 100%;
695
+ padding: 0;
696
+ background: none;
697
+ border: none;
698
+ color: var(--agno-muted);
699
+ cursor: pointer;
700
+ font: inherit;
701
+ letter-spacing: -0.02em;
702
+ text-align: left;
703
+ }
704
+ .agno-bts__toggle:hover {
705
+ color: var(--agno-primary);
706
+ }
707
+ /* Loader and chevron share a cell: the loader shows while streaming, and the
708
+ chevron takes over on hover — as in AgentOS. */
709
+ .agno-bts__marker {
710
+ display: grid;
711
+ place-items: center;
712
+ flex: 0 0 16px;
713
+ width: 16px;
714
+ height: 16px;
715
+ }
716
+ .agno-bts__marker > * {
717
+ grid-column: 1;
718
+ grid-row: 1;
719
+ transition: opacity 0.2s ease, transform 0.2s ease;
720
+ }
721
+ .agno-bts--streaming .agno-bts__chev {
722
+ opacity: 0;
454
723
  }
455
- .agno-citations__name {
456
- font-weight: 600;
457
- font-size: 12px;
724
+ .agno-bts--streaming .agno-bts__toggle:hover .agno-bts__chev {
725
+ opacity: 1;
458
726
  }
459
- .agno-citations__snippet {
460
- font-size: 12px;
727
+ .agno-bts--streaming .agno-bts__toggle:hover .agno-loader {
728
+ opacity: 0;
729
+ }
730
+ .agno-bts__toggle[aria-expanded='true'] .agno-bts__chev {
731
+ transform: rotate(180deg);
732
+ }
733
+ .agno-bts__label-text {
734
+ overflow: hidden;
735
+ text-overflow: ellipsis;
736
+ white-space: nowrap;
737
+ }
738
+ .agno-bts__label {
461
739
  color: var(--agno-muted);
740
+ font-size: 0.75rem;
741
+ line-height: 1.0625rem;
462
742
  }
463
- .agno-citations__url {
464
- font-size: 12px;
465
- color: var(--agno-brand);
743
+ /* One step line: label, truncated preview, marker on the right. */
744
+ .agno-bts__step {
745
+ display: flex;
746
+ align-items: center;
747
+ gap: 8px;
748
+ width: 100%;
749
+ min-width: 0;
750
+ padding: 0;
751
+ color: var(--agno-muted);
752
+ font-size: 0.75rem;
753
+ line-height: 1.0625rem;
754
+ letter-spacing: -0.02em;
755
+ text-align: left;
756
+ }
757
+ .agno-bts__step--button {
758
+ background: none;
759
+ border: none;
760
+ cursor: pointer;
761
+ font-family: inherit;
762
+ }
763
+ .agno-bts__step--button:hover .agno-bts__step-label {
764
+ color: var(--agno-primary);
765
+ }
766
+ .agno-bts__step-label {
767
+ flex-shrink: 0;
768
+ white-space: nowrap;
769
+ }
770
+ .agno-bts__preview {
771
+ flex: 1;
772
+ min-width: 0;
773
+ overflow: hidden;
774
+ text-overflow: ellipsis;
775
+ white-space: nowrap;
776
+ color: var(--agno-muted);
777
+ }
778
+ .agno-bts__detail {
779
+ margin-left: auto;
780
+ flex-shrink: 0;
781
+ }
782
+ .agno-bts__step-marker {
783
+ margin-left: auto;
784
+ display: grid;
785
+ place-items: center;
786
+ flex: 0 0 14px;
787
+ width: 14px;
788
+ height: 14px;
789
+ }
790
+ .agno-bts__step-marker > * {
791
+ grid-column: 1;
792
+ grid-row: 1;
793
+ transition: opacity 0.2s ease, transform 0.2s ease;
794
+ }
795
+ /* While a step runs the loader shows; hovering reveals the chevron. */
796
+ .agno-bts__step-marker .agno-loader + .agno-bts__chev {
797
+ opacity: 0;
798
+ }
799
+ .agno-bts__step--button:hover .agno-bts__step-marker .agno-bts__chev {
800
+ opacity: 1;
801
+ }
802
+ .agno-bts__step--button:hover .agno-bts__step-marker .agno-loader {
803
+ opacity: 0;
804
+ }
805
+ .agno-bts__step--button[aria-expanded='true'] .agno-bts__chev {
806
+ transform: rotate(180deg);
807
+ }
808
+ .agno-bts__step-body {
809
+ display: flex;
810
+ flex-direction: column;
811
+ gap: 8px;
812
+ padding-top: 4px;
813
+ }
814
+ .agno-bts__name {
815
+ color: var(--agno-primary);
816
+ font-weight: 500;
817
+ }
818
+ .agno-bts__content {
819
+ color: var(--agno-primary);
820
+ }
821
+
822
+ /* Timeline rows with an icon column (the line runs behind the icons). */
823
+ .agno-timeline--icons {
824
+ padding-left: 0;
825
+ }
826
+ /* A single step needs no connecting rule. */
827
+ .agno-timeline--icons:has(> :only-child)::before {
828
+ display: none;
829
+ }
830
+ .agno-timeline__row {
831
+ position: relative;
832
+ display: flex;
833
+ align-items: flex-start;
834
+ gap: 8px;
835
+ }
836
+ .agno-timeline__icon {
837
+ position: relative;
838
+ z-index: 1;
839
+ display: grid;
840
+ place-items: center;
841
+ flex: 0 0 16px;
842
+ width: 16px;
843
+ height: 20px;
844
+ color: var(--agno-muted);
845
+ background: var(--agno-bg);
846
+ }
847
+ .agno-timeline__content {
848
+ flex: 1;
849
+ min-width: 0;
850
+ margin-top: 2px;
851
+ display: flex;
852
+ flex-direction: column;
853
+ gap: 8px;
854
+ }
855
+
856
+ /* ─────────────────────────────────────────────────────────────────────────
857
+ Sources — the cards under an answer
858
+ ───────────────────────────────────────────────────────────────────────── */
859
+
860
+ .agno-sources {
861
+ display: flex;
862
+ flex-direction: column;
863
+ gap: 8px;
864
+ }
865
+ .agno-sources__head {
866
+ color: var(--agno-muted);
867
+ font-family: var(--agno-font-mono);
868
+ font-size: 0.75rem;
869
+ letter-spacing: 0.02em;
870
+ text-transform: uppercase;
871
+ }
872
+ /* Cards are sized by their title and wrap into as many per row as fit. */
873
+ .agno-sources__grid {
874
+ display: flex;
875
+ flex-wrap: wrap;
876
+ gap: 8px;
877
+ }
878
+ .agno-sources__more {
879
+ align-self: flex-start;
880
+ padding: 0;
881
+ background: none;
882
+ border: none;
883
+ color: var(--agno-muted);
884
+ cursor: pointer;
885
+ font: inherit;
886
+ font-size: 0.75rem;
887
+ }
888
+ .agno-sources__more:hover {
889
+ color: var(--agno-primary);
890
+ }
891
+
892
+ .agno-source {
893
+ display: flex;
894
+ align-items: center;
895
+ gap: 8px;
896
+ min-width: 0;
897
+ max-width: min(100%, 320px);
898
+ padding: 8px 12px;
899
+ border: 1px solid transparent;
900
+ border-radius: var(--agno-radius-md);
901
+ background: var(--agno-secondary-soft);
902
+ color: inherit;
903
+ text-decoration: none;
904
+ transition: border-color 0.15s ease, background 0.15s ease;
905
+ }
906
+ a.agno-source:hover {
907
+ border-color: var(--agno-border);
908
+ background: var(--agno-secondary);
909
+ }
910
+ .agno-source__title {
911
+ min-width: 0;
912
+ overflow: hidden;
913
+ text-overflow: ellipsis;
914
+ white-space: nowrap;
915
+ font-size: 0.8125rem;
916
+ font-weight: 500;
917
+ line-height: 1.125rem;
918
+ }
919
+
920
+ /* ─────────────────────────────────────────────────────────────────────────
921
+ Follow-ups — "Related questions" under the latest answer
922
+ ───────────────────────────────────────────────────────────────────────── */
923
+
924
+ .agno-followups {
925
+ display: flex;
926
+ flex-direction: column;
927
+ gap: 8px;
928
+ min-width: 0;
929
+ }
930
+ .agno-followups__head {
931
+ color: var(--agno-muted);
932
+ font-size: 0.8125rem;
933
+ line-height: 1.25rem;
934
+ }
935
+ /* One bordered box, rows divided by hairlines — reads as a list of questions
936
+ rather than a row of chips, so long prompts have the full width. */
937
+ .agno-followups__list {
938
+ display: flex;
939
+ flex-direction: column;
940
+ border: 1px solid var(--agno-border);
941
+ border-radius: var(--agno-radius-lg);
942
+ background: var(--agno-secondary-soft);
943
+ overflow: hidden;
944
+ }
945
+ .agno-followup {
946
+ display: flex;
947
+ align-items: center;
948
+ width: 100%;
949
+ min-width: 0;
950
+ margin: 0;
951
+ padding: 10px 14px;
952
+ border: 0;
953
+ border-top: 1px solid var(--agno-border);
954
+ background: none;
955
+ color: var(--agno-primary);
956
+ font-family: inherit;
957
+ font-size: 0.875rem;
958
+ line-height: 1.375rem;
959
+ letter-spacing: -0.01em;
960
+ text-align: left;
961
+ cursor: pointer;
962
+ transition: background 0.15s ease;
963
+ }
964
+ .agno-followup:first-child {
965
+ border-top: 0;
966
+ }
967
+ .agno-followup:hover:not(:disabled),
968
+ .agno-followup:focus-visible {
969
+ background: var(--agno-tint);
970
+ outline: none;
971
+ }
972
+ .agno-followup:disabled {
973
+ opacity: 0.5;
974
+ cursor: not-allowed;
975
+ }
976
+ /* Clamped to `--agno-followup-lines` (set per button from the `lines` prop),
977
+ one by default: a prompt that wraps reads like an answer, not a question to
978
+ ask. The full text is on the button's `title`. */
979
+ .agno-followup__text {
980
+ flex: 1;
981
+ min-width: 0;
982
+ display: -webkit-box;
983
+ -webkit-box-orient: vertical;
984
+ -webkit-line-clamp: var(--agno-followup-lines, 1);
985
+ line-clamp: var(--agno-followup-lines, 1);
986
+ overflow: hidden;
987
+ overflow-wrap: anywhere;
988
+ }
989
+ /* Pinned above the dock by `<ChatWindow>`: same 800px column and inner
990
+ padding as the quick prompts, so the box lines up with the input. */
991
+ .agno-followups--dock {
992
+ width: 100%;
993
+ max-width: calc(800px + 48px);
994
+ margin: 0 auto;
995
+ padding: 0 32px 8px;
996
+ box-sizing: border-box;
997
+ }
998
+
999
+ /* ─────────────────────────────────────────────────────────────────────────
1000
+ Link previews — the card body, shared by source cards and hover cards
1001
+ ───────────────────────────────────────────────────────────────────────── */
1002
+
1003
+ .agno-preview {
1004
+ min-width: 0;
1005
+ display: flex;
1006
+ flex-direction: column;
1007
+ gap: 2px;
1008
+ }
1009
+ .agno-preview__site {
1010
+ display: flex;
1011
+ align-items: center;
1012
+ gap: 6px;
1013
+ min-width: 0;
1014
+ color: var(--agno-muted);
1015
+ font-size: 0.6875rem;
1016
+ line-height: 1rem;
1017
+ }
1018
+ .agno-preview__host {
1019
+ overflow: hidden;
1020
+ text-overflow: ellipsis;
1021
+ white-space: nowrap;
1022
+ }
1023
+ .agno-preview__title {
1024
+ font-size: 0.8125rem;
1025
+ font-weight: 500;
1026
+ line-height: 1.125rem;
1027
+ /* Two lines, then ellipsis — titles vary wildly and the cards are a grid. */
1028
+ display: -webkit-box;
1029
+ -webkit-line-clamp: 2;
1030
+ -webkit-box-orient: vertical;
1031
+ overflow: hidden;
1032
+ }
1033
+ .agno-preview__desc {
1034
+ color: var(--agno-muted);
1035
+ font-size: 0.75rem;
1036
+ line-height: 1.0625rem;
1037
+ display: -webkit-box;
1038
+ -webkit-line-clamp: 3;
1039
+ -webkit-box-orient: vertical;
1040
+ overflow: hidden;
1041
+ }
1042
+ .agno-preview__image {
1043
+ margin-top: 6px;
1044
+ width: 100%;
1045
+ aspect-ratio: 1.91;
1046
+ object-fit: cover;
1047
+ border-radius: var(--agno-radius-sm);
1048
+ }
1049
+ .agno-preview[data-loading='true'] .agno-preview__title {
1050
+ opacity: 0.6;
1051
+ }
1052
+
1053
+ .agno-favicon {
1054
+ flex: 0 0 14px;
1055
+ width: 14px;
1056
+ height: 14px;
1057
+ border-radius: var(--agno-radius-xs);
1058
+ object-fit: contain;
1059
+ }
1060
+ .agno-favicon--glyph {
1061
+ display: grid;
1062
+ place-items: center;
1063
+ color: var(--agno-muted);
1064
+ }
1065
+
1066
+ /* ─────────────────────────────────────────────────────────────────────────
1067
+ Inline citation markers + the hover card
1068
+ ───────────────────────────────────────────────────────────────────────── */
1069
+
1070
+ .agno-hover {
1071
+ /* The card is portalled to <body>, so this only has to hold the trigger. */
1072
+ display: inline;
1073
+ }
1074
+ .agno-cite {
1075
+ display: inline-grid;
1076
+ place-items: center;
1077
+ min-width: 16px;
1078
+ height: 16px;
1079
+ margin: 0 1px 0 2px;
1080
+ padding: 0 4px;
1081
+ border-radius: var(--agno-radius-full);
1082
+ background: var(--agno-tint);
1083
+ color: var(--agno-muted);
1084
+ font-size: 0.625rem;
1085
+ font-variant-numeric: tabular-nums;
1086
+ line-height: 1;
466
1087
  text-decoration: none;
1088
+ vertical-align: 2px;
1089
+ transition: background 0.15s ease, color 0.15s ease;
1090
+ }
1091
+ .agno-md a.agno-cite {
1092
+ color: var(--agno-muted);
1093
+ }
1094
+ .agno-cite:hover,
1095
+ .agno-cite:focus-visible {
1096
+ background: var(--agno-tint-strong);
1097
+ color: var(--agno-primary);
467
1098
  }
468
1099
 
469
- /* Workflow steps */
1100
+ .agno-hovercard {
1101
+ position: fixed;
1102
+ z-index: 2147483000;
1103
+ padding: 12px;
1104
+ border: 1px solid var(--agno-border);
1105
+ border-radius: var(--agno-radius-lg);
1106
+ background: var(--agno-bg);
1107
+ box-shadow: var(--agno-shadow-panel);
1108
+ color: var(--agno-primary);
1109
+ font-family: var(--agno-font);
1110
+ animation: agno-hovercard-in 0.12s ease-out;
1111
+ }
1112
+ /* Positioned by its top edge either way; anchoring above means lifting the
1113
+ card by its own height, which only CSS knows. */
1114
+ .agno-hovercard--top {
1115
+ transform: translateY(-100%);
1116
+ }
1117
+ @keyframes agno-hovercard-in {
1118
+ from {
1119
+ opacity: 0;
1120
+ }
1121
+ to {
1122
+ opacity: 1;
1123
+ }
1124
+ }
1125
+ @media (prefers-reduced-motion: reduce) {
1126
+ .agno-hovercard {
1127
+ animation: none;
1128
+ }
1129
+ }
1130
+
1131
+ /* ─────────────────────────────────────────────────────────────────────────
1132
+ Workflow steps + member responses
1133
+ ───────────────────────────────────────────────────────────────────────── */
1134
+
470
1135
  .agno-steps,
471
1136
  .agno-members {
472
1137
  display: flex;
473
1138
  flex-direction: column;
474
- gap: 6px;
1139
+ gap: 8px;
475
1140
  }
476
1141
  .agno-steps__title,
477
1142
  .agno-members__title {
478
- font-size: 11px;
479
- text-transform: uppercase;
480
- letter-spacing: 0.05em;
481
1143
  color: var(--agno-muted);
1144
+ font-family: var(--agno-font-mono);
1145
+ font-size: 0.75rem;
1146
+ letter-spacing: 0.02em;
1147
+ text-transform: uppercase;
482
1148
  }
483
1149
  .agno-steps__list {
484
1150
  display: flex;
485
1151
  flex-direction: column;
486
- position: relative;
1152
+ gap: 6px;
487
1153
  }
488
- .agno-step {
489
- border: 1px solid var(--agno-border);
490
- border-radius: var(--agno-radius-sm);
491
- background: var(--agno-surface);
492
- margin-bottom: 4px;
1154
+ .agno-step,
1155
+ .agno-member {
1156
+ border-radius: var(--agno-radius-md);
1157
+ background: var(--agno-secondary-soft);
1158
+ overflow: hidden;
493
1159
  }
494
- .agno-step__head {
1160
+ .agno-step__head,
1161
+ .agno-member__head {
495
1162
  width: 100%;
496
1163
  display: flex;
497
1164
  align-items: center;
498
- gap: 9px;
499
- padding: 8px 11px;
1165
+ gap: 8px;
1166
+ padding: 10px 12px;
500
1167
  background: none;
501
1168
  border: none;
502
1169
  color: inherit;
@@ -505,79 +1172,53 @@
505
1172
  text-align: left;
506
1173
  }
507
1174
  .agno-step__icon {
1175
+ flex: 0 0 18px;
508
1176
  width: 18px;
509
1177
  height: 18px;
510
- flex: 0 0 18px;
511
- border-radius: 50%;
1178
+ border-radius: var(--agno-radius-full);
512
1179
  display: grid;
513
1180
  place-items: center;
514
1181
  font-size: 11px;
515
- background: var(--agno-surface-2);
1182
+ background: var(--agno-tint);
516
1183
  color: var(--agno-muted);
517
1184
  }
518
1185
  .agno-step__icon--completed {
519
- background: rgba(34, 197, 94, 0.15);
1186
+ background: rgba(var(--color-positive), 0.15);
520
1187
  color: var(--agno-positive);
521
1188
  }
522
1189
  .agno-step__icon--running {
523
1190
  background: var(--agno-brand-soft);
524
1191
  color: var(--agno-brand);
525
- animation: agno-pulse 1.4s ease-in-out infinite;
526
1192
  }
527
1193
  .agno-step__icon--error {
528
- background: rgba(229, 57, 53, 0.15);
529
- color: var(--agno-error);
530
- }
531
- @keyframes agno-pulse {
532
- 0%, 100% {
533
- opacity: 1;
534
- }
535
- 50% {
536
- opacity: 0.4;
537
- }
1194
+ background: rgba(var(--color-destructive), 0.15);
1195
+ color: var(--agno-destructive);
538
1196
  }
539
- .agno-step__name {
1197
+ .agno-step__name,
1198
+ .agno-member__name {
540
1199
  font-weight: 500;
541
- font-size: 13px;
542
1200
  }
543
- .agno-step__chev {
1201
+ .agno-step__chev,
1202
+ .agno-member__chev {
544
1203
  margin-left: auto;
545
- font-size: 9px;
546
1204
  color: var(--agno-muted);
1205
+ transition: transform 0.2s ease;
1206
+ }
1207
+ .agno-step__head[aria-expanded='true'] .agno-step__chev,
1208
+ .agno-member__head[aria-expanded='true'] .agno-member__chev {
1209
+ transform: rotate(180deg);
547
1210
  }
548
1211
  .agno-step__body {
549
- padding: 0 11px 11px 38px;
550
- font-size: 13px;
1212
+ padding: 0 12px 12px 38px;
551
1213
  }
552
1214
  .agno-step__error {
553
- color: var(--agno-error);
554
- }
555
-
556
- /* Member / executor responses */
557
- .agno-member {
558
- border: 1px solid var(--agno-border);
559
- border-radius: var(--agno-radius-sm);
560
- background: var(--agno-surface);
561
- overflow: hidden;
562
- }
563
- .agno-member__head {
564
- width: 100%;
565
- display: flex;
566
- align-items: center;
567
- gap: 8px;
568
- padding: 8px 11px;
569
- background: none;
570
- border: none;
571
- color: inherit;
572
- cursor: pointer;
573
- font: inherit;
574
- text-align: left;
1215
+ color: var(--agno-destructive);
575
1216
  }
576
1217
  .agno-member__dot {
1218
+ flex: 0 0 8px;
577
1219
  width: 8px;
578
1220
  height: 8px;
579
- flex: 0 0 8px;
580
- border-radius: 50%;
1221
+ border-radius: var(--agno-radius-full);
581
1222
  background: var(--agno-muted);
582
1223
  }
583
1224
  .agno-member__dot--running {
@@ -588,36 +1229,35 @@
588
1229
  background: var(--agno-positive);
589
1230
  }
590
1231
  .agno-member__dot--error {
591
- background: var(--agno-error);
1232
+ background: var(--agno-destructive);
592
1233
  }
593
- .agno-member__name {
594
- font-weight: 600;
595
- font-size: 13px;
1234
+ @keyframes agno-pulse {
1235
+ 0%,
1236
+ 100% {
1237
+ opacity: 1;
1238
+ }
1239
+ 50% {
1240
+ opacity: 0.4;
1241
+ }
596
1242
  }
597
1243
  .agno-member__kind {
598
- font-size: 10.5px;
599
1244
  color: var(--agno-muted);
1245
+ font-family: var(--agno-font-mono);
1246
+ font-size: 0.75rem;
1247
+ letter-spacing: 0.02em;
600
1248
  text-transform: uppercase;
601
- letter-spacing: 0.04em;
602
- }
603
- .agno-member__chev {
604
- margin-left: auto;
605
- font-size: 9px;
606
- color: var(--agno-muted);
607
1249
  }
608
1250
  .agno-member__body {
609
- padding: 0 11px 11px;
610
- border-top: 1px solid var(--agno-border);
1251
+ padding: 0 12px 12px;
611
1252
  display: flex;
612
1253
  flex-direction: column;
613
- gap: 8px;
614
- padding-top: 10px;
615
- }
616
- .agno-member__content {
617
- font-size: 13.5px;
1254
+ gap: 12px;
618
1255
  }
619
1256
 
620
- /* Media */
1257
+ /* ─────────────────────────────────────────────────────────────────────────
1258
+ Media
1259
+ ───────────────────────────────────────────────────────────────────────── */
1260
+
621
1261
  .agno-media {
622
1262
  display: flex;
623
1263
  flex-wrap: wrap;
@@ -626,63 +1266,219 @@
626
1266
  .agno-media__img,
627
1267
  .agno-media__video {
628
1268
  max-width: 100%;
629
- border-radius: var(--agno-radius-sm);
1269
+ border-radius: var(--agno-radius-md);
630
1270
  border: 1px solid var(--agno-border);
631
1271
  }
632
1272
  .agno-media__audio {
633
1273
  width: 100%;
634
1274
  }
635
1275
 
636
- /* Status indicator */
1276
+ /* ─────────────────────────────────────────────────────────────────────────
1277
+ Status + loader (ported from agno-os DiagonalGridLoader)
1278
+ ───────────────────────────────────────────────────────────────────────── */
1279
+
637
1280
  .agno-status {
638
1281
  display: flex;
639
1282
  align-items: center;
640
- gap: 9px;
1283
+ gap: 8px;
641
1284
  color: var(--agno-muted);
642
- font-size: 13px;
643
- padding-left: 42px;
644
- }
645
- .agno-status__dots {
646
- display: inline-flex;
647
- gap: 3px;
648
- }
649
- .agno-status__dots span {
650
- width: 6px;
651
- height: 6px;
652
- border-radius: 50%;
653
- background: var(--agno-brand);
654
- animation: agno-bounce 1.2s infinite ease-in-out;
1285
+ padding-left: 40px;
655
1286
  }
656
- .agno-status__dots span:nth-child(2) {
657
- animation-delay: 0.15s;
1287
+
1288
+ .agno-loader {
1289
+ display: grid;
1290
+ place-items: center;
1291
+ flex-shrink: 0;
1292
+ width: 14px;
1293
+ height: 14px;
1294
+ color: currentColor;
658
1295
  }
659
- .agno-status__dots span:nth-child(3) {
660
- animation-delay: 0.3s;
1296
+
1297
+ /* Grid loader — copied from agno-os DiagonalGridLoader.css */
1298
+ .agno-loader__dot {
1299
+ color: currentColor;
1300
+ box-shadow:
1301
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1302
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1303
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1304
+ var(--gap) 0 0 0px,
1305
+ calc(2 * var(--gap)) 0 0 0px,
1306
+ calc(3 * var(--gap)) 0 0 0px,
1307
+ var(--gap) var(--gap) 0 0px,
1308
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1309
+ calc(3 * var(--gap)) var(--gap) 0 0px;
1310
+ transform: translateX(calc(-2 * var(--gap)));
1311
+ animation: agno-grid-loader 2s infinite linear;
661
1312
  }
662
- @keyframes agno-bounce {
663
- 0%, 60%, 100% {
664
- transform: translateY(0);
665
- opacity: 0.5;
1313
+
1314
+ @keyframes agno-grid-loader {
1315
+ 0% {
1316
+ box-shadow:
1317
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1318
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1319
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1320
+ var(--gap) 0 0 0px,
1321
+ calc(2 * var(--gap)) 0 0 0px,
1322
+ calc(3 * var(--gap)) 0 0 0px,
1323
+ var(--gap) var(--gap) 0 0px,
1324
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1325
+ calc(3 * var(--gap)) var(--gap) 0 0px;
666
1326
  }
667
- 30% {
668
- transform: translateY(-4px);
669
- opacity: 1;
1327
+
1328
+ 12.5% {
1329
+ box-shadow:
1330
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1331
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1332
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px
1333
+ color-mix(in srgb, currentColor 20%, transparent),
1334
+ var(--gap) 0 0 0px color-mix(in srgb, currentColor 20%, transparent),
1335
+ calc(2 * var(--gap)) 0 0 0px,
1336
+ calc(3 * var(--gap)) 0 0 0px
1337
+ color-mix(in srgb, currentColor 20%, transparent),
1338
+ var(--gap) var(--gap) 0 0px,
1339
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1340
+ calc(3 * var(--gap)) var(--gap) 0 0px;
1341
+ }
1342
+
1343
+ 25% {
1344
+ box-shadow:
1345
+ var(--gap) calc(-1 * var(--gap)) 0 0px
1346
+ color-mix(in srgb, currentColor 20%, transparent),
1347
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1348
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px
1349
+ color-mix(in srgb, currentColor 20%, transparent),
1350
+ var(--gap) 0 0 0px,
1351
+ calc(2 * var(--gap)) 0 0 0px,
1352
+ calc(3 * var(--gap)) 0 0 0px,
1353
+ var(--gap) var(--gap) 0 0px,
1354
+ calc(2 * var(--gap)) var(--gap) 0 0px
1355
+ color-mix(in srgb, currentColor 20%, transparent),
1356
+ calc(3 * var(--gap)) var(--gap) 0 0px;
670
1357
  }
1358
+
1359
+ 37.5% {
1360
+ box-shadow:
1361
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1362
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px
1363
+ color-mix(in srgb, currentColor 20%, transparent),
1364
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1365
+ var(--gap) 0 0 0px,
1366
+ calc(2 * var(--gap)) 0 0 0px,
1367
+ calc(3 * var(--gap)) 0 0 0px,
1368
+ var(--gap) var(--gap) 0 0px
1369
+ color-mix(in srgb, currentColor 20%, transparent),
1370
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1371
+ calc(3 * var(--gap)) var(--gap) 0 0px;
1372
+ }
1373
+
1374
+ 50% {
1375
+ box-shadow:
1376
+ var(--gap) calc(-1 * var(--gap)) 0 0px
1377
+ color-mix(in srgb, currentColor 20%, transparent),
1378
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px
1379
+ color-mix(in srgb, currentColor 20%, transparent),
1380
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1381
+ var(--gap) 0 0 0px,
1382
+ calc(2 * var(--gap)) 0 0 0px,
1383
+ calc(3 * var(--gap)) 0 0 0px,
1384
+ var(--gap) var(--gap) 0 0px,
1385
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1386
+ calc(3 * var(--gap)) var(--gap) 0 0px
1387
+ color-mix(in srgb, currentColor 20%, transparent);
1388
+ }
1389
+
1390
+ 62.5% {
1391
+ box-shadow:
1392
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1393
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1394
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1395
+ var(--gap) 0 0 0px color-mix(in srgb, currentColor 20%, transparent),
1396
+ calc(2 * var(--gap)) 0 0 0px,
1397
+ calc(3 * var(--gap)) 0 0 0px,
1398
+ var(--gap) var(--gap) 0 0px,
1399
+ calc(2 * var(--gap)) var(--gap) 0 0px
1400
+ color-mix(in srgb, currentColor 20%, transparent),
1401
+ calc(3 * var(--gap)) var(--gap) 0 0px
1402
+ color-mix(in srgb, currentColor 20%, transparent);
1403
+ }
1404
+
1405
+ 75% {
1406
+ box-shadow:
1407
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1408
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px
1409
+ color-mix(in srgb, currentColor 20%, transparent),
1410
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1411
+ var(--gap) 0 0 0px,
1412
+ calc(2 * var(--gap)) 0 0 0px,
1413
+ calc(3 * var(--gap)) 0 0 0px
1414
+ color-mix(in srgb, currentColor 20%, transparent),
1415
+ var(--gap) var(--gap) 0 0px,
1416
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1417
+ calc(3 * var(--gap)) var(--gap) 0 0px
1418
+ color-mix(in srgb, currentColor 20%, transparent);
1419
+ }
1420
+
1421
+ 87.5% {
1422
+ box-shadow:
1423
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1424
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px
1425
+ color-mix(in srgb, currentColor 20%, transparent),
1426
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1427
+ var(--gap) 0 0 0px,
1428
+ calc(2 * var(--gap)) 0 0 0px
1429
+ color-mix(in srgb, currentColor 20%, transparent),
1430
+ calc(3 * var(--gap)) 0 0 0px,
1431
+ var(--gap) var(--gap) 0 0px
1432
+ color-mix(in srgb, currentColor 20%, transparent),
1433
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1434
+ calc(3 * var(--gap)) var(--gap) 0 0px;
1435
+ }
1436
+
1437
+ 100% {
1438
+ box-shadow:
1439
+ var(--gap) calc(-1 * var(--gap)) 0 0px,
1440
+ calc(2 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1441
+ calc(3 * var(--gap)) calc(-1 * var(--gap)) 0 0px,
1442
+ var(--gap) 0 0 0px,
1443
+ calc(2 * var(--gap)) 0 0 0px,
1444
+ calc(3 * var(--gap)) 0 0 0px,
1445
+ var(--gap) var(--gap) 0 0px,
1446
+ calc(2 * var(--gap)) var(--gap) 0 0px,
1447
+ calc(3 * var(--gap)) var(--gap) 0 0px;
1448
+ }
1449
+ }
1450
+
1451
+ /* Loader sizing — agno-os sets these inline; the defaults match its `default` size. */
1452
+ .agno-loader__dot {
1453
+ --dot-size: 2px;
1454
+ --gap: 6px;
1455
+ width: 2px;
1456
+ height: 2px;
1457
+ aspect-ratio: 1;
1458
+ border-radius: 0.5px;
671
1459
  }
672
1460
 
673
- /* Human-in-the-loop — Agno OS style cards */
1461
+ /* ─────────────────────────────────────────────────────────────────────────
1462
+ Human in the loop
1463
+ ───────────────────────────────────────────────────────────────────────── */
1464
+
674
1465
  .agno-hitl {
675
1466
  display: flex;
676
1467
  flex-direction: column;
677
- gap: 10px;
678
- max-width: 360px;
1468
+ gap: 12px;
1469
+ width: 100%;
1470
+ max-width: 800px;
1471
+ margin: 0 auto;
679
1472
  }
680
1473
  .agno-hitl__title {
681
1474
  display: flex;
682
1475
  align-items: center;
683
- gap: 7px;
684
- font-weight: 600;
685
- font-size: 13px;
1476
+ gap: 8px;
1477
+ color: var(--agno-muted);
1478
+ font-family: var(--agno-font-mono);
1479
+ font-size: 0.75rem;
1480
+ letter-spacing: 0.02em;
1481
+ text-transform: uppercase;
686
1482
  }
687
1483
  .agno-hitl__actions {
688
1484
  display: flex;
@@ -694,9 +1490,8 @@
694
1490
  flex-direction: column;
695
1491
  gap: 12px;
696
1492
  padding: 12px;
697
- background: var(--agno-surface-2);
698
- border: 1px solid var(--agno-border);
699
- border-radius: var(--agno-radius);
1493
+ border-radius: var(--agno-radius-md);
1494
+ background: var(--agno-secondary-soft);
700
1495
  }
701
1496
  .agno-hitl-card__head {
702
1497
  display: flex;
@@ -707,48 +1502,41 @@
707
1502
  .agno-hitl-card__tool {
708
1503
  display: flex;
709
1504
  align-items: center;
710
- gap: 7px;
711
- font-family: 'DM Mono', ui-monospace, monospace;
712
- font-size: 12px;
713
- text-transform: uppercase;
714
- letter-spacing: 0.03em;
1505
+ gap: 8px;
715
1506
  color: var(--agno-muted);
716
- }
717
- .agno-hitl-card__icon {
718
- font-size: 13px;
1507
+ font-family: var(--agno-font-mono);
1508
+ font-size: 0.75rem;
1509
+ letter-spacing: 0.02em;
1510
+ text-transform: uppercase;
719
1511
  }
720
1512
  .agno-hitl-card__choices {
721
1513
  display: flex;
722
1514
  gap: 6px;
723
1515
  }
724
1516
  .agno-hitl-card__choice {
725
- width: 26px;
726
- height: 26px;
727
1517
  display: grid;
728
1518
  place-items: center;
729
- border-radius: 6px;
1519
+ width: 24px;
1520
+ height: 24px;
1521
+ border-radius: var(--agno-radius-sm);
730
1522
  border: 1px solid var(--agno-border);
731
- background: var(--agno-bg);
1523
+ background: transparent;
732
1524
  color: var(--agno-muted);
733
1525
  cursor: pointer;
734
- font-size: 12px;
735
1526
  }
736
1527
  .agno-hitl-card__choice:hover:not(:disabled) {
737
- border-color: var(--agno-border-strong);
738
- color: var(--agno-text);
1528
+ border-color: var(--agno-border-selected);
1529
+ color: var(--agno-primary);
739
1530
  }
740
1531
  .agno-hitl-card__choice.is-active.is-confirm {
741
1532
  border-color: var(--agno-positive);
742
1533
  color: var(--agno-positive);
743
- box-shadow: 0 0 0 1px var(--agno-positive);
744
1534
  }
745
1535
  .agno-hitl-card__choice.is-active.is-reject {
746
- border-color: var(--agno-error);
747
- color: var(--agno-error);
748
- box-shadow: 0 0 0 1px var(--agno-error);
1536
+ border-color: var(--agno-destructive);
1537
+ color: var(--agno-destructive);
749
1538
  }
750
1539
  .agno-hitl-card__args {
751
- border: 1px solid var(--agno-border);
752
1540
  border-radius: var(--agno-radius-sm);
753
1541
  background: var(--agno-bg);
754
1542
  }
@@ -757,60 +1545,69 @@
757
1545
  display: flex;
758
1546
  align-items: center;
759
1547
  justify-content: space-between;
760
- padding: 7px 10px;
1548
+ gap: 8px;
1549
+ padding: 8px 10px;
761
1550
  background: none;
762
1551
  border: none;
763
1552
  color: var(--agno-muted);
764
1553
  cursor: pointer;
765
- font: inherit;
766
- font-size: 11px;
1554
+ font-family: var(--agno-font-mono);
1555
+ font-size: 0.75rem;
1556
+ letter-spacing: 0.02em;
767
1557
  text-transform: uppercase;
768
- letter-spacing: 0.05em;
1558
+ }
1559
+ .agno-hitl-card__args-head[aria-expanded='true'] .agno-hitl-card__chev {
1560
+ transform: rotate(180deg);
769
1561
  }
770
1562
  .agno-hitl-card__chev {
771
- font-size: 8px;
1563
+ transition: transform 0.2s ease;
772
1564
  }
773
1565
  .agno-hitl-card__args-body {
774
- padding: 0 10px 9px;
1566
+ padding: 0 10px 10px;
775
1567
  display: flex;
776
1568
  flex-direction: column;
777
1569
  gap: 4px;
778
1570
  }
779
1571
  .agno-hitl-card__arg {
780
1572
  display: flex;
781
- gap: 6px;
782
- font-size: 12.5px;
1573
+ gap: 8px;
1574
+ font-size: 0.75rem;
1575
+ line-height: 1.0625rem;
783
1576
  }
784
1577
  .agno-hitl-card__arg-key {
785
1578
  color: var(--agno-muted);
786
- font-family: 'DM Mono', ui-monospace, monospace;
1579
+ font-family: var(--agno-font-mono);
787
1580
  }
788
1581
  .agno-hitl-card__arg-val {
789
- color: var(--agno-text);
790
1582
  word-break: break-word;
791
1583
  }
792
- .agno-hitl-card__reason {
1584
+ .agno-hitl-card__reason,
1585
+ .agno-hitl-card__input {
793
1586
  background: var(--agno-bg);
794
1587
  border: 1px solid var(--agno-border);
795
- border-radius: var(--agno-radius-sm);
796
- padding: 8px 10px;
797
- color: var(--agno-text);
1588
+ border-radius: var(--agno-radius-md);
1589
+ padding: 9px 11px;
1590
+ color: var(--agno-primary);
798
1591
  font: inherit;
1592
+ letter-spacing: -0.02em;
1593
+ }
1594
+ .agno-hitl-card__reason {
799
1595
  resize: vertical;
800
1596
  }
801
- .agno-hitl-card__reason:focus {
1597
+ .agno-hitl-card__reason:focus,
1598
+ .agno-hitl-card__input:focus {
802
1599
  outline: none;
803
- border-color: var(--agno-border-strong);
1600
+ border-color: var(--agno-border-selected);
804
1601
  }
805
1602
  .agno-hitl-card__fields {
806
1603
  display: flex;
807
1604
  flex-direction: column;
808
- gap: 10px;
1605
+ gap: 12px;
809
1606
  }
810
1607
  .agno-hitl-card__field {
811
1608
  display: flex;
812
1609
  flex-direction: column;
813
- gap: 4px;
1610
+ gap: 6px;
814
1611
  }
815
1612
  .agno-hitl-card__field.is-bool {
816
1613
  flex-direction: row;
@@ -818,32 +1615,26 @@
818
1615
  justify-content: space-between;
819
1616
  }
820
1617
  .agno-hitl-card__field-name {
821
- font-size: 11px;
822
- text-transform: uppercase;
823
- letter-spacing: 0.03em;
824
1618
  color: var(--agno-muted);
1619
+ font-family: var(--agno-font-mono);
1620
+ font-size: 0.75rem;
1621
+ letter-spacing: 0.02em;
1622
+ text-transform: uppercase;
825
1623
  }
826
- .agno-hitl-card__input {
827
- background: var(--agno-bg);
828
- border: 1px solid var(--agno-border);
829
- border-radius: var(--agno-radius-sm);
830
- padding: 9px 11px;
831
- color: var(--agno-text);
832
- font: inherit;
833
- }
834
- .agno-hitl-card__input:focus {
835
- outline: none;
836
- border-color: var(--agno-brand);
837
- }
838
1624
 
839
- /* Event log */
1625
+ /* ─────────────────────────────────────────────────────────────────────────
1626
+ Event log
1627
+ ───────────────────────────────────────────────────────────────────────── */
1628
+
840
1629
  .agno-eventlog {
841
1630
  overflow-y: auto;
842
1631
  display: flex;
843
1632
  flex-direction: column;
844
- gap: 3px;
845
- font-size: 12px;
846
- font-family: 'DM Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
1633
+ gap: 4px;
1634
+ font-family: var(--agno-font-mono);
1635
+ font-size: 0.75rem;
1636
+ line-height: 1.125rem;
1637
+ letter-spacing: -0.02em;
847
1638
  }
848
1639
  .agno-eventlog__empty {
849
1640
  color: var(--agno-muted);
@@ -852,20 +1643,16 @@
852
1643
  display: flex;
853
1644
  align-items: baseline;
854
1645
  gap: 8px;
855
- padding: 4px 8px;
856
- border-radius: 6px;
857
- background: var(--agno-surface);
858
- border: 1px solid var(--agno-border);
1646
+ padding: 5px 8px;
1647
+ border-radius: var(--agno-radius-sm);
1648
+ background: var(--agno-secondary-soft);
859
1649
  }
860
1650
  .agno-eventlog__name {
861
- color: var(--agno-brand);
1651
+ text-transform: uppercase;
1652
+ letter-spacing: 0.02em;
862
1653
  }
863
1654
  .agno-eventlog__count {
864
- color: var(--agno-text);
865
- background: var(--agno-surface-2);
866
- border-radius: 999px;
867
- padding: 0 6px;
868
- font-size: 11px;
1655
+ color: var(--agno-muted);
869
1656
  }
870
1657
  .agno-eventlog__source {
871
1658
  color: var(--agno-muted);
@@ -879,11 +1666,20 @@
879
1666
  white-space: nowrap;
880
1667
  }
881
1668
 
882
- /* Sessions */
1669
+ /* The per-run feed nested inside a behind-the-scenes step. */
1670
+ .agno-timeline__content .agno-eventlog {
1671
+ margin-top: 4px;
1672
+ padding-right: 4px;
1673
+ }
1674
+
1675
+ /* ─────────────────────────────────────────────────────────────────────────
1676
+ Sessions
1677
+ ───────────────────────────────────────────────────────────────────────── */
1678
+
883
1679
  .agno-sessions {
884
1680
  display: flex;
885
1681
  flex-direction: column;
886
- gap: 10px;
1682
+ gap: 12px;
887
1683
  height: 100%;
888
1684
  min-height: 0;
889
1685
  }
@@ -893,42 +1689,16 @@
893
1689
  justify-content: space-between;
894
1690
  }
895
1691
  .agno-sessions__title {
896
- font-size: 11px;
897
- text-transform: uppercase;
898
- letter-spacing: 0.06em;
899
1692
  color: var(--agno-muted);
900
- }
901
- .agno-sessions__new {
902
- display: flex;
903
- align-items: center;
904
- justify-content: center;
905
- gap: 8px;
906
- width: 100%;
907
- background: var(--agno-surface);
908
- border: 1px solid var(--agno-border);
909
- border-radius: var(--agno-radius);
910
- color: var(--agno-text);
911
- padding: 11px 12px;
912
- cursor: pointer;
913
- font: inherit;
914
- font-size: 12px;
915
- font-weight: 600;
1693
+ font-family: var(--agno-font-mono);
1694
+ font-size: 0.75rem;
1695
+ letter-spacing: 0.02em;
916
1696
  text-transform: uppercase;
917
- letter-spacing: 0.08em;
918
- transition: border-color 0.12s ease, background 0.12s ease;
919
- }
920
- .agno-sessions__new:hover {
921
- border-color: var(--agno-border-strong);
922
- background: var(--agno-surface-2);
923
- }
924
- .agno-sessions__new span {
925
- font-size: 15px;
926
- font-weight: 400;
927
1697
  }
928
1698
  .agno-sessions__empty {
929
1699
  color: var(--agno-muted);
930
- font-size: 13px;
931
- padding: 6px 2px;
1700
+ font-size: 0.75rem;
1701
+ line-height: 1.0625rem;
932
1702
  }
933
1703
  .agno-sessions__list {
934
1704
  list-style: none;
@@ -936,29 +1706,31 @@
936
1706
  padding: 0;
937
1707
  display: flex;
938
1708
  flex-direction: column;
939
- gap: 6px;
1709
+ gap: 8px;
940
1710
  overflow-y: auto;
941
1711
  }
942
1712
  .agno-sessions__item {
943
1713
  display: flex;
944
1714
  align-items: stretch;
945
- border-radius: var(--agno-radius);
946
- border: 1px solid var(--agno-border);
947
- background: var(--agno-surface);
948
- transition: border-color 0.12s ease, background 0.12s ease;
1715
+ /* The list scrolls, so a row must never be squeezed to make others fit —
1716
+ shrinking one cascades into the name's line box and clips its descenders. */
1717
+ flex-shrink: 0;
1718
+ min-height: 3.25rem;
1719
+ border-radius: var(--agno-radius-md);
1720
+ background: var(--agno-secondary-soft);
949
1721
  }
950
1722
  .agno-sessions__item:hover {
951
- border-color: var(--agno-border-strong);
1723
+ background: var(--agno-secondary);
952
1724
  }
953
1725
  .agno-sessions__item.is-active {
954
- background: var(--agno-surface-2);
955
- border-color: var(--agno-border-strong);
1726
+ background: var(--agno-secondary);
956
1727
  }
957
1728
  .agno-sessions__select {
958
1729
  flex: 1;
959
1730
  min-width: 0;
960
1731
  display: flex;
961
1732
  flex-direction: column;
1733
+ justify-content: center;
962
1734
  gap: 2px;
963
1735
  background: none;
964
1736
  border: none;
@@ -966,251 +1738,387 @@
966
1738
  cursor: pointer;
967
1739
  font: inherit;
968
1740
  text-align: left;
969
- padding: 9px 11px;
1741
+ padding: 10px 12px;
970
1742
  }
971
1743
  .agno-sessions__name {
972
1744
  white-space: nowrap;
973
1745
  overflow: hidden;
974
1746
  text-overflow: ellipsis;
975
- font-size: 13px;
1747
+ /* `overflow: hidden` clips vertically too, so keep the full line box. */
1748
+ flex-shrink: 0;
976
1749
  }
977
1750
  .agno-sessions__date {
978
- font-size: 11px;
979
1751
  color: var(--agno-muted);
1752
+ font-size: 0.75rem;
1753
+ line-height: 1.0625rem;
980
1754
  }
981
1755
  .agno-sessions__delete {
1756
+ display: grid;
1757
+ place-items: center;
982
1758
  background: none;
983
1759
  border: none;
984
1760
  color: var(--agno-muted);
985
1761
  cursor: pointer;
986
- padding: 0 10px;
987
- font-size: 13px;
1762
+ padding: 0 12px;
1763
+ opacity: 0;
1764
+ transition: opacity 0.15s ease;
1765
+ }
1766
+ .agno-sessions__item:hover .agno-sessions__delete,
1767
+ .agno-sessions__delete:focus-visible {
1768
+ opacity: 1;
988
1769
  }
989
1770
  .agno-sessions__delete:hover {
990
- color: var(--agno-error);
1771
+ color: var(--agno-destructive);
1772
+ }
1773
+ .agno-sessions__spinner {
1774
+ display: grid;
1775
+ place-items: center;
1776
+ padding: 0 12px;
1777
+ color: var(--agno-muted);
991
1778
  }
992
1779
 
993
- /* Banner */
1780
+ /* ─────────────────────────────────────────────────────────────────────────
1781
+ Banner + errors
1782
+ ───────────────────────────────────────────────────────────────────────── */
1783
+
994
1784
  .agno-banner {
995
- padding: 11px 16px;
1785
+ padding: 12px 16px;
996
1786
  background: var(--agno-brand-soft);
997
- border-bottom: 1px solid rgba(255, 64, 23, 0.3);
998
- color: var(--agno-text);
999
- font-size: 13px;
1787
+ border-bottom: 1px solid rgba(var(--color-brand-brand), 0.3);
1788
+ font-size: 0.75rem;
1789
+ line-height: 1.0625rem;
1000
1790
  }
1001
1791
  .agno-banner code {
1002
- background: var(--agno-surface-2);
1792
+ background: var(--agno-tint);
1003
1793
  padding: 1px 5px;
1004
- border-radius: 5px;
1005
- font-size: 0.9em;
1006
- font-family: 'DM Mono', ui-monospace, monospace;
1794
+ border-radius: var(--agno-radius-xs);
1795
+ font-family: var(--agno-font-mono);
1007
1796
  }
1797
+ .agno-chat__error {
1798
+ flex: 0 0 auto;
1799
+ width: 100%;
1800
+ max-width: 800px;
1801
+ max-height: 120px;
1802
+ overflow-y: auto;
1803
+ margin: 0 auto;
1804
+ padding: 0 24px 8px;
1805
+ color: var(--agno-destructive);
1806
+ font-size: 0.75rem;
1807
+ line-height: 1.0625rem;
1808
+ }
1809
+
1810
+ /* ─────────────────────────────────────────────────────────────────────────
1811
+ Chat input dock
1812
+ ───────────────────────────────────────────────────────────────────────── */
1008
1813
 
1009
- /* Input */
1010
1814
  .agno-input {
1011
- border-top: 1px solid var(--agno-border);
1012
- background: var(--agno-bg);
1013
- padding: 12px 14px;
1815
+ padding: 8px 24px 12px;
1816
+ }
1817
+ .agno-input__dock {
1818
+ width: 100%;
1819
+ max-width: 800px;
1820
+ margin: 0 auto;
1821
+ display: flex;
1822
+ flex-direction: column;
1823
+ gap: 8px;
1824
+ padding: 8px;
1825
+ border: 1px solid var(--agno-border);
1826
+ border-radius: var(--agno-radius-xl);
1827
+ background: var(--agno-accent);
1828
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
1829
+ }
1830
+ /* Attachment previews — the AgentOS upload banner: a count with "clear all",
1831
+ then a scrolling row of thumbnails and typed file cards. */
1832
+ .agno-files {
1014
1833
  display: flex;
1015
1834
  flex-direction: column;
1835
+ gap: 10px;
1836
+ padding: 4px 4px 2px;
1837
+ }
1838
+ .agno-files__head {
1839
+ display: flex;
1840
+ align-items: center;
1841
+ justify-content: space-between;
1842
+ gap: 8px;
1843
+ }
1844
+ .agno-files__count,
1845
+ .agno-files__clear {
1846
+ font-family: var(--agno-font-mono);
1847
+ font-size: 0.75rem;
1848
+ line-height: 1rem;
1849
+ letter-spacing: 0.02em;
1850
+ text-transform: uppercase;
1851
+ }
1852
+ .agno-files__count {
1853
+ color: var(--agno-muted);
1854
+ }
1855
+ .agno-files__clear {
1856
+ display: inline-flex;
1857
+ align-items: center;
1858
+ gap: 4px;
1859
+ border: none;
1860
+ background: none;
1861
+ padding: 0;
1862
+ color: var(--agno-primary);
1863
+ cursor: pointer;
1864
+ }
1865
+ .agno-files__row {
1866
+ display: flex;
1867
+ align-items: flex-start;
1868
+ gap: 8px;
1869
+ overflow-x: auto;
1870
+ scrollbar-width: none;
1871
+ }
1872
+ .agno-files__row::-webkit-scrollbar {
1873
+ display: none;
1874
+ }
1875
+ .agno-file {
1876
+ position: relative;
1877
+ flex: none;
1878
+ }
1879
+ .agno-file__remove {
1880
+ position: absolute;
1881
+ top: -5px;
1882
+ right: -6px;
1883
+ z-index: 1;
1884
+ display: grid;
1885
+ place-items: center;
1886
+ padding: 2px;
1887
+ border: none;
1888
+ border-radius: var(--agno-radius-full);
1889
+ background: rgba(var(--color-muted), 0.9);
1890
+ color: var(--agno-accent);
1891
+ cursor: pointer;
1892
+ }
1893
+ .agno-file__thumb {
1894
+ display: block;
1895
+ width: 69px;
1896
+ height: 54px;
1897
+ object-fit: cover;
1898
+ border-radius: var(--agno-radius-sm);
1899
+ }
1900
+ .agno-file__card {
1901
+ display: flex;
1902
+ align-items: center;
1016
1903
  gap: 8px;
1904
+ height: 54px;
1905
+ padding: 0 12px;
1906
+ border: 1px solid var(--agno-border);
1907
+ border-radius: var(--agno-radius-sm);
1908
+ background: var(--agno-bg);
1909
+ }
1910
+ .agno-file__mark {
1911
+ display: grid;
1912
+ place-items: center;
1913
+ flex: none;
1914
+ padding: 6px;
1915
+ border-radius: var(--agno-radius-sm);
1916
+ background: var(--agno-tint);
1917
+ color: var(--agno-primary);
1017
1918
  }
1018
- .agno-input__files {
1919
+ .agno-file__meta {
1019
1920
  display: flex;
1020
- flex-wrap: wrap;
1021
- gap: 6px;
1921
+ flex-direction: column;
1922
+ min-width: 0;
1022
1923
  }
1023
- .agno-input__file {
1024
- display: inline-flex;
1025
- align-items: center;
1026
- gap: 6px;
1027
- font-size: 12px;
1028
- background: var(--agno-surface-2);
1029
- border-radius: 999px;
1030
- padding: 2px 6px 2px 10px;
1924
+ .agno-file__name {
1925
+ max-width: 8rem;
1926
+ overflow: hidden;
1927
+ text-overflow: ellipsis;
1928
+ white-space: nowrap;
1929
+ font-size: 0.875rem;
1930
+ line-height: 1.25rem;
1931
+ color: var(--agno-primary);
1031
1932
  }
1032
- .agno-input__file button {
1033
- border: none;
1034
- background: none;
1035
- color: var(--agno-muted);
1036
- cursor: pointer;
1037
- font-size: 14px;
1933
+ .agno-file__type {
1934
+ max-width: 8rem;
1935
+ overflow: hidden;
1936
+ text-overflow: ellipsis;
1937
+ white-space: nowrap;
1938
+ font-family: var(--agno-font-mono);
1939
+ font-size: 0.6875rem;
1940
+ line-height: 1rem;
1941
+ letter-spacing: 0.02em;
1942
+ text-transform: uppercase;
1943
+ color: rgba(var(--color-primary), 0.5);
1038
1944
  }
1039
- .agno-input__row {
1945
+ .agno-input__field {
1040
1946
  display: flex;
1041
- align-items: flex-end;
1042
- gap: 8px;
1043
- background: var(--agno-surface);
1044
- border: 1px solid var(--agno-border);
1947
+ align-items: flex-start;
1045
1948
  border-radius: var(--agno-radius-lg);
1046
- padding: 7px 8px 7px 10px;
1047
- }
1048
- .agno-input__row:focus-within {
1049
- border-color: var(--agno-border-strong);
1949
+ background: var(--agno-secondary);
1050
1950
  }
1051
1951
  .agno-input__textarea {
1052
1952
  flex: 1;
1953
+ min-width: 0;
1954
+ min-height: 31px;
1955
+ max-height: 213px;
1053
1956
  resize: none;
1054
- max-height: 160px;
1957
+ overflow-y: auto;
1055
1958
  background: transparent;
1056
1959
  border: none;
1057
- padding: 6px 8px;
1058
- color: var(--agno-text);
1960
+ padding: 12px;
1961
+ color: var(--agno-primary);
1059
1962
  font: inherit;
1963
+ letter-spacing: -0.02em;
1060
1964
  }
1061
1965
  .agno-input__textarea::placeholder {
1062
- color: var(--agno-muted);
1966
+ color: rgba(var(--color-muted), 0.5);
1063
1967
  }
1064
1968
  .agno-input__textarea:focus {
1065
1969
  outline: none;
1066
1970
  }
1067
- .agno-input__attach {
1068
- background: none;
1069
- border: none;
1070
- border-radius: var(--agno-radius-sm);
1071
- width: 34px;
1072
- height: 34px;
1073
- cursor: pointer;
1074
- color: var(--agno-muted);
1075
- font-size: 15px;
1971
+ .agno-input__textarea:disabled {
1972
+ cursor: not-allowed;
1973
+ opacity: 0.5;
1974
+ }
1975
+ .agno-input__row {
1976
+ display: flex;
1977
+ align-items: center;
1978
+ justify-content: space-between;
1979
+ gap: 8px;
1076
1980
  }
1077
- .agno-input__attach:hover {
1078
- color: var(--agno-text);
1079
- background: var(--agno-surface-2);
1981
+ .agno-input__actions {
1982
+ display: flex;
1983
+ align-items: center;
1984
+ gap: 8px;
1080
1985
  }
1081
1986
 
1082
- /* Buttons */
1987
+ /* ─────────────────────────────────────────────────────────────────────────
1988
+ Buttons — Agno OS `Button` (DM Mono, uppercase, rounded-md)
1989
+ ───────────────────────────────────────────────────────────────────────── */
1990
+
1083
1991
  .agno-btn {
1084
- border: 1px solid var(--agno-border);
1085
- background: var(--agno-surface-2);
1086
- color: var(--agno-text);
1087
- border-radius: var(--agno-radius-sm);
1088
- padding: 8px 14px;
1992
+ display: inline-flex;
1993
+ align-items: center;
1994
+ justify-content: center;
1995
+ gap: 8px;
1996
+ height: 36px;
1997
+ padding: 0 16px;
1998
+ border: 1px solid transparent;
1999
+ border-radius: var(--agno-radius-md);
2000
+ background: var(--agno-primary);
2001
+ color: var(--agno-accent);
1089
2002
  cursor: pointer;
1090
- font: inherit;
1091
- font-weight: 500;
1092
- transition: opacity 0.12s ease, border-color 0.12s ease;
2003
+ user-select: none;
2004
+ white-space: nowrap;
2005
+ font-family: var(--agno-font-mono);
2006
+ font-size: 0.75rem;
2007
+ font-weight: 400;
2008
+ line-height: 1rem;
2009
+ letter-spacing: 0.24px;
2010
+ text-transform: uppercase;
2011
+ box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
2012
+ transition: background 0.12s ease, opacity 0.12s ease, border-color 0.12s ease;
1093
2013
  }
1094
2014
  .agno-btn:hover:not(:disabled) {
1095
- border-color: var(--agno-border-strong);
2015
+ background: rgba(var(--color-primary), 0.8);
1096
2016
  }
1097
2017
  .agno-btn:disabled {
1098
- opacity: 0.45;
2018
+ opacity: 0.5;
1099
2019
  cursor: not-allowed;
2020
+ pointer-events: none;
1100
2021
  }
1101
- .agno-btn--primary {
1102
- background: var(--agno-primary-bg);
1103
- border-color: var(--agno-primary-bg);
1104
- color: var(--agno-primary-fg);
2022
+ .agno-btn--secondary {
2023
+ background: var(--agno-secondary);
2024
+ color: var(--agno-primary);
1105
2025
  }
1106
- .agno-btn--primary:hover:not(:disabled) {
1107
- opacity: 0.9;
1108
- border-color: var(--agno-primary-bg);
2026
+ .agno-btn--secondary:hover:not(:disabled) {
2027
+ background: var(--agno-secondary-soft);
1109
2028
  }
1110
- .agno-btn--stop {
1111
- background: var(--agno-error);
1112
- border-color: var(--agno-error);
1113
- color: #fff;
2029
+ .agno-btn--outline {
2030
+ background: transparent;
2031
+ border-color: var(--agno-border);
2032
+ color: var(--agno-primary);
2033
+ }
2034
+ .agno-btn--outline:hover:not(:disabled) {
2035
+ background: var(--agno-tint);
1114
2036
  }
1115
2037
  .agno-btn--ghost {
1116
- background: none;
1117
- color: var(--agno-muted);
1118
- font-size: 12px;
1119
- font-weight: 600;
1120
- text-transform: uppercase;
1121
- letter-spacing: 0.08em;
1122
- padding: 7px 12px;
2038
+ background: transparent;
2039
+ color: var(--agno-primary);
2040
+ box-shadow: none;
1123
2041
  }
1124
2042
  .agno-btn--ghost:hover:not(:disabled) {
1125
- color: var(--agno-text);
1126
- background: var(--agno-surface);
2043
+ background: var(--agno-tint);
1127
2044
  }
1128
2045
  .agno-btn--ghost.is-active {
1129
- background: var(--agno-surface-2);
1130
- color: var(--agno-text);
1131
- border-color: var(--agno-border-strong);
2046
+ background: var(--agno-tint-strong);
1132
2047
  }
1133
- /* Circular icon send button (paper-plane), brand-styled. */
1134
- .agno-input__send {
1135
- flex: 0 0 auto;
1136
- display: grid;
1137
- place-items: center;
1138
- width: 36px;
1139
- height: 36px;
1140
- border-radius: var(--agno-radius);
1141
- border: 1px solid transparent;
1142
- background: var(--agno-primary-bg);
1143
- color: var(--agno-primary-fg);
1144
- cursor: pointer;
1145
- font-size: 14px;
1146
- transition: opacity 0.12s ease, background 0.12s ease;
2048
+ .agno-btn--destructive {
2049
+ background: var(--agno-destructive);
2050
+ color: #fff;
1147
2051
  }
1148
- .agno-input__send span {
1149
- display: block;
1150
- transform: translateX(1px);
2052
+ .agno-btn--destructive:hover:not(:disabled) {
2053
+ background: rgba(var(--color-destructive), 0.8);
1151
2054
  }
1152
- .agno-input__send:hover:not(:disabled) {
1153
- opacity: 0.9;
2055
+ .agno-btn--sm {
2056
+ height: 32px;
2057
+ padding: 0 12px;
1154
2058
  }
1155
- .agno-input__send:disabled {
1156
- opacity: 0.4;
1157
- cursor: not-allowed;
2059
+ /* Square icon buttons: `iconSm` (32px) and `iconXs` (24px) in Agno OS. */
2060
+ .agno-btn--icon {
2061
+ width: 32px;
2062
+ height: 32px;
2063
+ padding: 0;
2064
+ border-radius: var(--agno-radius-sm);
1158
2065
  }
1159
- .agno-input__send--stop {
1160
- background: var(--agno-error);
1161
- color: #fff;
2066
+ .agno-btn--icon-xs {
2067
+ width: 24px;
2068
+ height: 24px;
2069
+ padding: 0;
2070
+ border-radius: var(--agno-radius-sm);
1162
2071
  }
1163
- .agno-input__send--stop span {
1164
- transform: none;
1165
- font-size: 11px;
2072
+ .agno-btn--block {
2073
+ width: 100%;
1166
2074
  }
1167
2075
 
1168
- .agno-chat__error {
1169
- color: var(--agno-error);
1170
- font-size: 13px;
1171
- padding: 6px 14px;
1172
- }
2076
+ /* ─────────────────────────────────────────────────────────────────────────
2077
+ Entity selector
2078
+ ───────────────────────────────────────────────────────────────────────── */
1173
2079
 
1174
- /* Entity selector — Agno OS style popover */
1175
2080
  .agno-select {
1176
2081
  position: relative;
2082
+ min-width: 0;
1177
2083
  }
1178
2084
  .agno-select__trigger {
1179
2085
  display: flex;
1180
2086
  align-items: center;
1181
2087
  justify-content: space-between;
1182
2088
  gap: 8px;
1183
- height: 34px;
1184
- min-width: 190px;
2089
+ height: 32px;
2090
+ /* Comfortable 190px when there is room, but never wider than what the header
2091
+ can spare — a hard floor here starves the title in a narrow launcher
2092
+ panel. `.agno-select__value` ellipses once it shrinks. */
2093
+ min-width: min(190px, 100%);
1185
2094
  max-width: 280px;
1186
2095
  padding: 0 10px;
1187
- background: var(--agno-surface);
2096
+ background: transparent;
1188
2097
  border: 1px solid var(--agno-border);
1189
- border-radius: var(--agno-radius-sm);
1190
- color: var(--agno-text);
2098
+ border-radius: var(--agno-radius-md);
2099
+ color: var(--agno-primary);
1191
2100
  cursor: pointer;
1192
- font: inherit;
2101
+ font-family: var(--agno-font-mono);
2102
+ font-size: 0.75rem;
2103
+ letter-spacing: 0.02em;
2104
+ text-transform: uppercase;
1193
2105
  }
1194
2106
  .agno-select__trigger:hover:not(:disabled) {
1195
- border-color: var(--agno-border-strong);
2107
+ background: var(--agno-tint);
1196
2108
  }
1197
2109
  .agno-select__trigger:disabled {
1198
2110
  opacity: 0.5;
1199
2111
  cursor: not-allowed;
1200
2112
  }
1201
2113
  .agno-select__value {
1202
- font-family: 'DM Mono', ui-monospace, monospace;
1203
- font-size: 12px;
1204
- letter-spacing: 0.02em;
1205
- text-transform: uppercase;
1206
2114
  white-space: nowrap;
1207
2115
  overflow: hidden;
1208
2116
  text-overflow: ellipsis;
1209
2117
  }
1210
2118
  .agno-select__chev {
2119
+ flex: 0 0 16px;
1211
2120
  color: var(--agno-muted);
1212
- font-size: 13px;
1213
- transition: transform 0.15s ease;
2121
+ transition: transform 0.2s ease;
1214
2122
  }
1215
2123
  .agno-select__chev.is-open {
1216
2124
  transform: rotate(180deg);
@@ -1225,27 +2133,25 @@
1225
2133
  max-height: 360px;
1226
2134
  overflow-y: auto;
1227
2135
  padding: 6px;
1228
- background: var(--agno-surface);
1229
- border: 1px solid var(--agno-border);
1230
- border-radius: var(--agno-radius);
1231
- box-shadow:
1232
- 0 0 0 1px rgba(0, 0, 0, 0.3),
1233
- 0 12px 32px -8px rgba(0, 0, 0, 0.6);
2136
+ background: var(--agno-bg);
2137
+ border-radius: var(--agno-radius-lg);
2138
+ box-shadow: var(--agno-shadow-panel);
1234
2139
  }
1235
2140
  .agno-select__empty {
1236
2141
  padding: 8px 10px;
1237
2142
  color: var(--agno-muted);
1238
- font-size: 13px;
2143
+ font-size: 0.75rem;
1239
2144
  }
1240
2145
  .agno-select__group + .agno-select__group {
1241
2146
  margin-top: 4px;
1242
2147
  }
1243
2148
  .agno-select__group-label {
1244
2149
  padding: 6px 10px 4px;
1245
- font-size: 11px;
1246
2150
  color: var(--agno-muted);
2151
+ font-family: var(--agno-font-mono);
2152
+ font-size: 0.75rem;
2153
+ letter-spacing: 0.02em;
1247
2154
  text-transform: uppercase;
1248
- letter-spacing: 0.05em;
1249
2155
  }
1250
2156
  .agno-select__option {
1251
2157
  width: 100%;
@@ -1256,22 +2162,19 @@
1256
2162
  background: none;
1257
2163
  border: none;
1258
2164
  border-radius: var(--agno-radius-sm);
1259
- color: var(--agno-text);
2165
+ color: var(--agno-primary);
1260
2166
  cursor: pointer;
1261
2167
  font: inherit;
1262
2168
  text-align: left;
1263
2169
  }
1264
- .agno-select__option:hover {
1265
- background: var(--agno-surface-2);
1266
- }
2170
+ .agno-select__option:hover,
1267
2171
  .agno-select__option.is-selected {
1268
- background: var(--agno-surface-2);
2172
+ background: var(--agno-secondary-soft);
1269
2173
  }
1270
2174
  .agno-select__check {
1271
- width: 14px;
1272
2175
  flex: 0 0 14px;
1273
- color: var(--agno-brand);
1274
- font-size: 12px;
2176
+ width: 14px;
2177
+ color: var(--agno-primary);
1275
2178
  }
1276
2179
  .agno-select__label {
1277
2180
  flex: 1;
@@ -1279,15 +2182,348 @@
1279
2182
  white-space: nowrap;
1280
2183
  overflow: hidden;
1281
2184
  text-overflow: ellipsis;
1282
- font-size: 14px;
1283
2185
  }
1284
2186
  .agno-select__model {
1285
- font-family: 'DM Mono', ui-monospace, monospace;
1286
- font-size: 10.5px;
1287
2187
  color: var(--agno-muted);
1288
- background: var(--agno-bg);
2188
+ font-family: var(--agno-font-mono);
2189
+ font-size: 0.75rem;
2190
+ letter-spacing: 0.02em;
2191
+ white-space: nowrap;
2192
+ }
2193
+
2194
+ /* ─────────────────────────────────────────────────────────────────────────
2195
+ Quick prompts — suggested chips on an empty transcript
2196
+ ───────────────────────────────────────────────────────────────────────── */
2197
+
2198
+ .agno-empty {
2199
+ display: flex;
2200
+ flex-direction: column;
2201
+ align-items: center;
2202
+ gap: 16px;
2203
+ max-width: 480px;
2204
+ }
2205
+
2206
+ /* AgentOS stacks the suggestions above the dock as left-aligned cards, sharing
2207
+ the dock's 800px column and inner padding so their left edges line up. */
2208
+ .agno-prompts {
2209
+ display: flex;
2210
+ flex-direction: column;
2211
+ align-items: flex-start;
2212
+ gap: 8px;
2213
+ width: 100%;
2214
+ /* Line the cards up with the dock's inner block: the dock is an 800px box
2215
+ inside `.agno-input`'s 24px padding, then 8px of its own. Matching that
2216
+ total here keeps the left edges flush at every width. */
2217
+ max-width: calc(800px + 48px);
2218
+ margin: 0 auto;
2219
+ padding: 0 32px 8px;
2220
+ max-height: 45vh;
2221
+ overflow-y: auto;
2222
+ }
2223
+ .agno-prompt {
2224
+ display: flex;
2225
+ align-items: center;
2226
+ width: 400px;
2227
+ max-width: 100%;
2228
+ padding: 8px 12px;
2229
+ border: 1px solid rgba(var(--color-primary), 0.15);
2230
+ border-radius: var(--agno-radius-sm);
2231
+ background: var(--agno-secondary-soft);
2232
+ backdrop-filter: blur(40px);
2233
+ color: rgba(var(--color-primary), 0.8);
2234
+ font-family: inherit;
2235
+ font-size: 0.875rem;
2236
+ line-height: 21px;
2237
+ letter-spacing: -0.02em;
2238
+ text-align: left;
2239
+ cursor: pointer;
2240
+ /* Long prompts clamp rather than growing the stack out of the viewport. */
2241
+ display: -webkit-box;
2242
+ -webkit-line-clamp: 2;
2243
+ -webkit-box-orient: vertical;
2244
+ overflow: hidden;
2245
+ transition: border-color 0.15s ease;
2246
+ }
2247
+ .agno-prompt:hover:not(:disabled) {
2248
+ border-color: var(--agno-primary);
2249
+ }
2250
+ .agno-prompt:disabled {
2251
+ opacity: 0.5;
2252
+ cursor: not-allowed;
2253
+ }
2254
+
2255
+ /* ─────────────────────────────────────────────────────────────────────────
2256
+ Floating launcher — the support-widget layout
2257
+ ───────────────────────────────────────────────────────────────────────── */
2258
+
2259
+ .agno-launcher {
2260
+ --agno-launcher-offset: 24px;
2261
+ --agno-launcher-width: 400px;
2262
+ --agno-launcher-height: 620px;
2263
+
2264
+ position: fixed;
2265
+ z-index: 2147483000;
2266
+ display: flex;
2267
+ flex-direction: column;
2268
+ gap: 12px;
2269
+ font-family: var(--agno-font);
2270
+ }
2271
+
2272
+ /* Bottom corners stack panel-then-bubble; top corners flip the order. */
2273
+ .agno-launcher--bottom-right {
2274
+ bottom: var(--agno-launcher-offset);
2275
+ right: var(--agno-launcher-offset);
2276
+ align-items: flex-end;
2277
+ }
2278
+ .agno-launcher--bottom-left {
2279
+ bottom: var(--agno-launcher-offset);
2280
+ left: var(--agno-launcher-offset);
2281
+ align-items: flex-start;
2282
+ }
2283
+ .agno-launcher--top-right {
2284
+ top: var(--agno-launcher-offset);
2285
+ right: var(--agno-launcher-offset);
2286
+ align-items: flex-end;
2287
+ flex-direction: column-reverse;
2288
+ }
2289
+ .agno-launcher--top-left {
2290
+ top: var(--agno-launcher-offset);
2291
+ left: var(--agno-launcher-offset);
2292
+ align-items: flex-start;
2293
+ flex-direction: column-reverse;
2294
+ }
2295
+
2296
+ .agno-launcher__panel {
2297
+ display: flex;
2298
+ width: var(--agno-launcher-width);
2299
+ height: var(--agno-launcher-height);
2300
+ /* Never outgrow the viewport: leave the offsets plus room for the bubble. */
2301
+ max-width: calc(100vw - 2 * var(--agno-launcher-offset));
2302
+ max-height: calc(100vh - 2 * var(--agno-launcher-offset) - 68px);
2303
+ border-radius: var(--agno-radius-lg);
2304
+ box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.15), 0 24px 48px -12px rgba(0, 0, 0, 0.5);
2305
+ overflow: hidden;
2306
+ animation: agno-launcher-in 0.16s ease-out;
2307
+ }
2308
+ .agno-launcher__panel > * {
2309
+ flex: 1;
2310
+ min-width: 0;
2311
+ min-height: 0;
2312
+ }
2313
+ .agno-launcher__panel[hidden] {
2314
+ display: none;
2315
+ }
2316
+
2317
+ @keyframes agno-launcher-in {
2318
+ from {
2319
+ opacity: 0;
2320
+ transform: translateY(8px) scale(0.98);
2321
+ }
2322
+ to {
2323
+ opacity: 1;
2324
+ transform: none;
2325
+ }
2326
+ }
2327
+
2328
+ .agno-launcher__bubble {
2329
+ display: inline-flex;
2330
+ align-items: center;
2331
+ justify-content: center;
2332
+ gap: 8px;
2333
+ flex: 0 0 auto;
2334
+ width: 56px;
2335
+ height: 56px;
2336
+ padding: 0;
2337
+ border: none;
2338
+ border-radius: var(--agno-radius-full);
2339
+ background: var(--agno-brand);
2340
+ color: #fff;
2341
+ font-family: inherit;
2342
+ font-size: 0.875rem;
2343
+ font-weight: 500;
2344
+ letter-spacing: -0.02em;
2345
+ cursor: pointer;
2346
+ box-shadow: 0 8px 24px -8px rgba(0, 0, 0, 0.6);
2347
+ transition: transform 0.15s ease, filter 0.15s ease;
2348
+ }
2349
+ .agno-launcher__bubble.has-label {
2350
+ width: auto;
2351
+ padding: 0 20px;
2352
+ }
2353
+ .agno-launcher__bubble:hover {
2354
+ filter: brightness(1.08);
2355
+ transform: translateY(-1px);
2356
+ }
2357
+ .agno-launcher__label {
2358
+ white-space: nowrap;
2359
+ }
2360
+
2361
+ /* Full-screen panels take the viewport; the bubble becomes a corner close. */
2362
+ .agno-launcher.is-fullscreen.is-open {
2363
+ top: 0;
2364
+ right: 0;
2365
+ bottom: 0;
2366
+ left: 0;
2367
+ gap: 0;
2368
+ align-items: stretch;
2369
+ }
2370
+ .agno-launcher.is-fullscreen.is-open .agno-launcher__panel {
2371
+ width: 100%;
2372
+ height: 100%;
2373
+ max-width: none;
2374
+ max-height: none;
2375
+ border-radius: 0;
2376
+ }
2377
+ .agno-launcher.is-fullscreen.is-open .agno-launcher__bubble {
2378
+ position: absolute;
2379
+ top: var(--agno-launcher-offset);
2380
+ width: 40px;
2381
+ height: 40px;
2382
+ }
2383
+ .agno-launcher.is-fullscreen.is-open.agno-launcher--bottom-right .agno-launcher__bubble,
2384
+ .agno-launcher.is-fullscreen.is-open.agno-launcher--top-right .agno-launcher__bubble {
2385
+ right: var(--agno-launcher-offset);
2386
+ }
2387
+ .agno-launcher.is-fullscreen.is-open.agno-launcher--bottom-left .agno-launcher__bubble,
2388
+ .agno-launcher.is-fullscreen.is-open.agno-launcher--top-left .agno-launcher__bubble {
2389
+ left: var(--agno-launcher-offset);
2390
+ }
2391
+ .agno-launcher.is-fullscreen.is-open .agno-root {
2392
+ border: none;
2393
+ border-radius: 0;
2394
+ }
2395
+
2396
+ /* Below the popover width, a popover panel fills the screen too. */
2397
+ @media (max-width: 480px) {
2398
+ .agno-launcher.is-popover.is-open {
2399
+ top: 0;
2400
+ right: 0;
2401
+ bottom: 0;
2402
+ left: 0;
2403
+ gap: 0;
2404
+ align-items: stretch;
2405
+ }
2406
+ .agno-launcher.is-popover.is-open .agno-launcher__panel {
2407
+ width: 100%;
2408
+ height: 100%;
2409
+ max-width: none;
2410
+ max-height: none;
2411
+ border-radius: 0;
2412
+ }
2413
+ .agno-launcher.is-popover.is-open .agno-launcher__bubble {
2414
+ position: absolute;
2415
+ top: 12px;
2416
+ right: 12px;
2417
+ width: 40px;
2418
+ height: 40px;
2419
+ }
2420
+ .agno-launcher.is-popover.is-open .agno-root {
2421
+ border: none;
2422
+ border-radius: 0;
2423
+ }
2424
+ }
2425
+
2426
+ /* ─────────────────────────────────────────────────────────────────────────
2427
+ Header-less shell
2428
+ The embed ships without chrome of its own. Two rules pick up the pieces the
2429
+ old header used to hold.
2430
+ ───────────────────────────────────────────────────────────────────────── */
2431
+
2432
+ /* A full-screen launcher panel covers its own bubble, so it needs a way out.
2433
+ With no header to sit in, the close button floats over the surface. */
2434
+ .agno-close-floating {
2435
+ position: absolute;
2436
+ top: 12px;
2437
+ right: 12px;
2438
+ z-index: 2;
2439
+ }
2440
+ .agno-root {
2441
+ position: relative;
2442
+ }
2443
+
2444
+ /* The entity picker now lives in the composer's right action group, beside the
2445
+ send button — the AgentOS composer layout, where the left group holds attach
2446
+ and the right holds the component selector then send. */
2447
+ .agno-input__actions > .agno-select {
2448
+ flex: 0 1 auto;
2449
+ min-width: 0;
2450
+ }
2451
+ .agno-input__actions > .agno-select .agno-select__trigger {
2452
+ /* AgentOS sizes this h-8, max-w-[300px], px-3. Inside the dock it needs no
2453
+ border of its own — the dock already frames it — so it reads as part of
2454
+ the row until hovered. */
2455
+ height: 32px;
2456
+ min-width: 0;
2457
+ max-width: 300px;
2458
+ padding: 0 12px;
2459
+ border-color: transparent;
2460
+ }
2461
+ .agno-input__actions > .agno-select .agno-select__trigger:hover {
2462
+ border-color: var(--agno-border);
2463
+ }
2464
+ /* The dock sits at the bottom of the surface, so the popover opens upwards. */
2465
+ .agno-input__actions > .agno-select .agno-select__panel {
2466
+ top: auto;
2467
+ bottom: calc(100% + 6px);
2468
+ right: 0;
2469
+ left: auto;
2470
+ }
2471
+
2472
+ /* Rows must be allowed to shrink, or the transcript cannot scroll inside a
2473
+ fixed-height embed. */
2474
+ .agno-main,
2475
+ .agno-chat {
2476
+ min-height: 0;
2477
+ }
2478
+
2479
+ /* The read-only selection display in the composer row — AgentOS's
2480
+ `SelectComponentType`: h-8, capped width, mono uppercase, model chip. */
2481
+ .agno-entity {
2482
+ display: flex;
2483
+ align-items: center;
2484
+ justify-content: flex-end;
2485
+ gap: 8px;
2486
+ height: 32px;
2487
+ min-width: 0;
2488
+ max-width: 300px;
2489
+ padding: 0 4px;
2490
+ cursor: default;
2491
+ }
2492
+ .agno-entity__name {
2493
+ min-width: 0;
2494
+ overflow: hidden;
2495
+ text-overflow: ellipsis;
2496
+ white-space: nowrap;
2497
+ font-family: var(--agno-font-mono);
2498
+ font-size: 0.75rem;
2499
+ line-height: 1rem;
2500
+ letter-spacing: 0.02em;
2501
+ text-transform: uppercase;
2502
+ color: var(--agno-primary);
2503
+ }
2504
+ /* AgentOS frames the provider mark in a small bordered square. */
2505
+ .agno-entity__mark {
2506
+ display: grid;
2507
+ place-items: center;
2508
+ flex: none;
2509
+ width: 18px;
2510
+ height: 18px;
1289
2511
  border: 1px solid var(--agno-border);
1290
- border-radius: 999px;
1291
- padding: 1px 7px;
2512
+ border-radius: 6px;
2513
+ color: var(--agno-primary);
2514
+ }
2515
+ .agno-entity__model {
2516
+ flex: none;
2517
+ max-width: 120px;
2518
+ overflow: hidden;
2519
+ text-overflow: ellipsis;
1292
2520
  white-space: nowrap;
2521
+ padding: 2px 6px;
2522
+ border: 1px solid var(--agno-border);
2523
+ border-radius: 6px;
2524
+ font-family: var(--agno-font-mono);
2525
+ font-size: 0.6875rem;
2526
+ line-height: 1rem;
2527
+ letter-spacing: 0.02em;
2528
+ color: var(--agno-muted);
1293
2529
  }