@agno-hq/chat-react 0.1.1 → 0.3.1

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