@witqq/agent-sdk 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/README.md +539 -6
  2. package/dist/{types-BvwNzZCj.d.cts → agent-CW9XbmG_.d.ts} +148 -95
  3. package/dist/{types-BvwNzZCj.d.ts → agent-DxY68NZL.d.cts} +148 -95
  4. package/dist/auth/index.cjs +260 -2
  5. package/dist/auth/index.cjs.map +1 -1
  6. package/dist/auth/index.d.cts +21 -138
  7. package/dist/auth/index.d.ts +21 -138
  8. package/dist/auth/index.js +260 -3
  9. package/dist/auth/index.js.map +1 -1
  10. package/dist/backends/claude.cjs +653 -140
  11. package/dist/backends/claude.cjs.map +1 -1
  12. package/dist/backends/claude.d.cts +4 -1
  13. package/dist/backends/claude.d.ts +4 -1
  14. package/dist/backends/claude.js +653 -140
  15. package/dist/backends/claude.js.map +1 -1
  16. package/dist/backends/copilot.cjs +428 -88
  17. package/dist/backends/copilot.cjs.map +1 -1
  18. package/dist/backends/copilot.d.cts +13 -4
  19. package/dist/backends/copilot.d.ts +13 -4
  20. package/dist/backends/copilot.js +428 -88
  21. package/dist/backends/copilot.js.map +1 -1
  22. package/dist/backends/vercel-ai.cjs +349 -77
  23. package/dist/backends/vercel-ai.cjs.map +1 -1
  24. package/dist/backends/vercel-ai.d.cts +3 -1
  25. package/dist/backends/vercel-ai.d.ts +3 -1
  26. package/dist/backends/vercel-ai.js +349 -77
  27. package/dist/backends/vercel-ai.js.map +1 -1
  28. package/dist/backends-BSrsBYFn.d.cts +39 -0
  29. package/dist/backends-BSrsBYFn.d.ts +39 -0
  30. package/dist/chat/accumulator.cjs +147 -0
  31. package/dist/chat/accumulator.cjs.map +1 -0
  32. package/dist/chat/accumulator.d.cts +64 -0
  33. package/dist/chat/accumulator.d.ts +64 -0
  34. package/dist/chat/accumulator.js +145 -0
  35. package/dist/chat/accumulator.js.map +1 -0
  36. package/dist/chat/backends.cjs +3524 -0
  37. package/dist/chat/backends.cjs.map +1 -0
  38. package/dist/chat/backends.d.cts +66 -0
  39. package/dist/chat/backends.d.ts +66 -0
  40. package/dist/chat/backends.js +3512 -0
  41. package/dist/chat/backends.js.map +1 -0
  42. package/dist/chat/context.cjs +280 -0
  43. package/dist/chat/context.cjs.map +1 -0
  44. package/dist/chat/context.d.cts +191 -0
  45. package/dist/chat/context.d.ts +191 -0
  46. package/dist/chat/context.js +277 -0
  47. package/dist/chat/context.js.map +1 -0
  48. package/dist/chat/core.cjs +305 -0
  49. package/dist/chat/core.cjs.map +1 -0
  50. package/dist/chat/core.d.cts +84 -0
  51. package/dist/chat/core.d.ts +84 -0
  52. package/dist/chat/core.js +282 -0
  53. package/dist/chat/core.js.map +1 -0
  54. package/dist/chat/errors.cjs +273 -0
  55. package/dist/chat/errors.cjs.map +1 -0
  56. package/dist/chat/errors.d.cts +97 -0
  57. package/dist/chat/errors.d.ts +97 -0
  58. package/dist/chat/errors.js +266 -0
  59. package/dist/chat/errors.js.map +1 -0
  60. package/dist/chat/events.cjs +203 -0
  61. package/dist/chat/events.cjs.map +1 -0
  62. package/dist/chat/events.d.cts +245 -0
  63. package/dist/chat/events.d.ts +245 -0
  64. package/dist/chat/events.js +196 -0
  65. package/dist/chat/events.js.map +1 -0
  66. package/dist/chat/index.cjs +5550 -0
  67. package/dist/chat/index.cjs.map +1 -0
  68. package/dist/chat/index.d.cts +77 -0
  69. package/dist/chat/index.d.ts +77 -0
  70. package/dist/chat/index.js +5505 -0
  71. package/dist/chat/index.js.map +1 -0
  72. package/dist/chat/react/theme.css +2517 -0
  73. package/dist/chat/react.cjs +3589 -0
  74. package/dist/chat/react.cjs.map +1 -0
  75. package/dist/chat/react.d.cts +1088 -0
  76. package/dist/chat/react.d.ts +1088 -0
  77. package/dist/chat/react.js +3547 -0
  78. package/dist/chat/react.js.map +1 -0
  79. package/dist/chat/runtime.cjs +1245 -0
  80. package/dist/chat/runtime.cjs.map +1 -0
  81. package/dist/chat/runtime.d.cts +182 -0
  82. package/dist/chat/runtime.d.ts +182 -0
  83. package/dist/chat/runtime.js +1243 -0
  84. package/dist/chat/runtime.js.map +1 -0
  85. package/dist/chat/server.cjs +2668 -0
  86. package/dist/chat/server.cjs.map +1 -0
  87. package/dist/chat/server.d.cts +648 -0
  88. package/dist/chat/server.d.ts +648 -0
  89. package/dist/chat/server.js +2628 -0
  90. package/dist/chat/server.js.map +1 -0
  91. package/dist/chat/sessions.cjs +380 -0
  92. package/dist/chat/sessions.cjs.map +1 -0
  93. package/dist/chat/sessions.d.cts +158 -0
  94. package/dist/chat/sessions.d.ts +158 -0
  95. package/dist/chat/sessions.js +376 -0
  96. package/dist/chat/sessions.js.map +1 -0
  97. package/dist/chat/sqlite.cjs +441 -0
  98. package/dist/chat/sqlite.cjs.map +1 -0
  99. package/dist/chat/sqlite.d.cts +128 -0
  100. package/dist/chat/sqlite.d.ts +128 -0
  101. package/dist/chat/sqlite.js +435 -0
  102. package/dist/chat/sqlite.js.map +1 -0
  103. package/dist/chat/state.cjs +190 -0
  104. package/dist/chat/state.cjs.map +1 -0
  105. package/dist/chat/state.d.cts +95 -0
  106. package/dist/chat/state.d.ts +95 -0
  107. package/dist/chat/state.js +180 -0
  108. package/dist/chat/state.js.map +1 -0
  109. package/dist/chat/storage.cjs +249 -0
  110. package/dist/chat/storage.cjs.map +1 -0
  111. package/dist/chat/storage.d.cts +197 -0
  112. package/dist/chat/storage.d.ts +197 -0
  113. package/dist/chat/storage.js +245 -0
  114. package/dist/chat/storage.js.map +1 -0
  115. package/dist/errors-C-so0M4t.d.cts +33 -0
  116. package/dist/errors-C-so0M4t.d.ts +33 -0
  117. package/dist/errors-CmVvczxZ.d.cts +28 -0
  118. package/dist/errors-CmVvczxZ.d.ts +28 -0
  119. package/dist/in-process-transport-C1JnJGVR.d.ts +228 -0
  120. package/dist/in-process-transport-C7DSqPyX.d.cts +228 -0
  121. package/dist/index.cjs +365 -59
  122. package/dist/index.cjs.map +1 -1
  123. package/dist/index.d.cts +322 -125
  124. package/dist/index.d.ts +322 -125
  125. package/dist/index.js +359 -60
  126. package/dist/index.js.map +1 -1
  127. package/dist/provider-types-PTSlRPNB.d.cts +39 -0
  128. package/dist/provider-types-PTSlRPNB.d.ts +39 -0
  129. package/dist/refresh-manager-B81PpYBr.d.cts +153 -0
  130. package/dist/refresh-manager-Dlv_iNZi.d.ts +153 -0
  131. package/dist/testing.cjs +383 -0
  132. package/dist/testing.cjs.map +1 -0
  133. package/dist/testing.d.cts +132 -0
  134. package/dist/testing.d.ts +132 -0
  135. package/dist/testing.js +377 -0
  136. package/dist/testing.js.map +1 -0
  137. package/dist/token-store-CSUBgYwn.d.ts +48 -0
  138. package/dist/token-store-CuC4hB9Z.d.cts +48 -0
  139. package/dist/transport-Cdh3M0tS.d.cts +68 -0
  140. package/dist/transport-Ciap4PWK.d.ts +68 -0
  141. package/dist/types-4vbcmPTp.d.cts +143 -0
  142. package/dist/types-BxggH0Yh.d.ts +143 -0
  143. package/dist/types-DRgd_9R7.d.cts +363 -0
  144. package/dist/types-ajANVzf7.d.ts +363 -0
  145. package/package.json +178 -6
@@ -0,0 +1,2517 @@
1
+ /* =================================================================
2
+ @witqq/agent-sdk — Default Theme for Headless React Components
3
+
4
+ Usage:
5
+ import '@witqq/agent-sdk/chat/react/theme.css';
6
+
7
+ Customization:
8
+ Override --agent-sdk-* custom properties on :root or any ancestor.
9
+
10
+ Dark mode:
11
+ 1. Add data-theme="dark" to any ancestor element
12
+ 2. Or auto-detect via prefers-color-scheme (default when no data-theme set)
13
+ 3. Force light with data-theme="light"
14
+ ================================================================= */
15
+
16
+ /* ─── 1. Design Tokens (Light) ───────────────────────────────────── */
17
+
18
+ :root {
19
+ --agent-sdk-bg: #ffffff;
20
+ --agent-sdk-bg-secondary: #f4f4f5;
21
+ --agent-sdk-bg-tertiary: #e4e4e7;
22
+ --agent-sdk-fg: #18181b;
23
+ --agent-sdk-fg-muted: #71717a;
24
+ --agent-sdk-fg-subtle: #a1a1aa;
25
+ --agent-sdk-primary: #6366f1;
26
+ --agent-sdk-primary-fg: #ffffff;
27
+ --agent-sdk-primary-hover: #4f46e5;
28
+ --agent-sdk-border: rgba(0, 0, 0, 0.08);
29
+ --agent-sdk-border-strong: rgba(0, 0, 0, 0.14);
30
+ --agent-sdk-border-focus: #6366f1;
31
+ --agent-sdk-error: #ef4444;
32
+ --agent-sdk-error-bg: #fef2f2;
33
+ --agent-sdk-error-fg: #dc2626;
34
+ --agent-sdk-success: #10b981;
35
+ --agent-sdk-success-bg: #ecfdf5;
36
+ --agent-sdk-success-fg: #059669;
37
+ --agent-sdk-warning: #f59e0b;
38
+ --agent-sdk-warning-bg: #fffbeb;
39
+ --agent-sdk-warning-fg: #d97706;
40
+ --agent-sdk-info: #6366f1;
41
+ --agent-sdk-info-bg: #eef2ff;
42
+
43
+ --agent-sdk-sidebar-bg: #f8f8f9;
44
+ --agent-sdk-sidebar-border: rgba(0, 0, 0, 0.06);
45
+
46
+ --agent-sdk-user-bg: rgba(99, 102, 241, 0.06);
47
+ --agent-sdk-user-fg: var(--agent-sdk-fg);
48
+ --agent-sdk-assistant-bg: transparent;
49
+ --agent-sdk-assistant-fg: var(--agent-sdk-fg);
50
+
51
+ --agent-sdk-code-bg: #1e1e2e;
52
+ --agent-sdk-code-fg: #cdd6f4;
53
+ --agent-sdk-inline-code-bg: rgba(0, 0, 0, 0.06);
54
+ --agent-sdk-inline-code-fg: #c7254e;
55
+
56
+ --agent-sdk-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI",
57
+ Roboto, "Helvetica Neue", Arial, sans-serif;
58
+ --agent-sdk-font-mono: "SF Mono", SFMono-Regular, ui-monospace, Menlo,
59
+ Consolas, "Liberation Mono", monospace;
60
+ --agent-sdk-font-size: 14px;
61
+ --agent-sdk-font-sm: 13px;
62
+ --agent-sdk-font-xs: 11px;
63
+ --agent-sdk-line-height: 1.6;
64
+
65
+ --agent-sdk-radius: 8px;
66
+ --agent-sdk-radius-sm: 6px;
67
+ --agent-sdk-radius-lg: 12px;
68
+ --agent-sdk-radius-xl: 16px;
69
+ --agent-sdk-radius-full: 9999px;
70
+ --agent-sdk-spacing-xs: 4px;
71
+ --agent-sdk-spacing-sm: 8px;
72
+ --agent-sdk-spacing-md: 12px;
73
+ --agent-sdk-spacing-lg: 16px;
74
+ --agent-sdk-spacing-xl: 24px;
75
+ --agent-sdk-spacing-2xl: 32px;
76
+
77
+ --agent-sdk-content-width: 768px;
78
+
79
+ --agent-sdk-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.05);
80
+ --agent-sdk-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
81
+ --agent-sdk-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
82
+ --agent-sdk-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
83
+ --agent-sdk-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
84
+ --agent-sdk-transition: 150ms ease;
85
+ --agent-sdk-transition-fast: 100ms ease;
86
+ --agent-sdk-transition-slow: 250ms ease;
87
+ }
88
+
89
+ /* ─── 1b. Design Tokens (Dark — explicit) ────────────────────────── */
90
+
91
+ [data-theme="dark"] {
92
+ --agent-sdk-bg: #0a0a0b;
93
+ --agent-sdk-bg-secondary: #1a1a1e;
94
+ --agent-sdk-bg-tertiary: #27272a;
95
+ --agent-sdk-fg: #ececef;
96
+ --agent-sdk-fg-muted: #8b8b96;
97
+ --agent-sdk-fg-subtle: #5a5a66;
98
+ --agent-sdk-primary: #6366f1;
99
+ --agent-sdk-primary-fg: #ffffff;
100
+ --agent-sdk-primary-hover: #818cf8;
101
+ --agent-sdk-border: rgba(255, 255, 255, 0.08);
102
+ --agent-sdk-border-strong: rgba(255, 255, 255, 0.14);
103
+ --agent-sdk-border-focus: #6366f1;
104
+ --agent-sdk-error: #f87171;
105
+ --agent-sdk-error-bg: rgba(239, 68, 68, 0.12);
106
+ --agent-sdk-error-fg: #fca5a5;
107
+ --agent-sdk-success: #34d399;
108
+ --agent-sdk-success-bg: rgba(16, 185, 129, 0.12);
109
+ --agent-sdk-success-fg: #6ee7b7;
110
+ --agent-sdk-warning: #fbbf24;
111
+ --agent-sdk-warning-bg: rgba(245, 158, 11, 0.12);
112
+ --agent-sdk-warning-fg: #fcd34d;
113
+ --agent-sdk-info: #818cf8;
114
+ --agent-sdk-info-bg: rgba(99, 102, 241, 0.12);
115
+
116
+ --agent-sdk-sidebar-bg: #111113;
117
+ --agent-sdk-sidebar-border: rgba(255, 255, 255, 0.06);
118
+
119
+ --agent-sdk-user-bg: rgba(255, 255, 255, 0.05);
120
+ --agent-sdk-user-fg: var(--agent-sdk-fg);
121
+ --agent-sdk-assistant-bg: transparent;
122
+ --agent-sdk-assistant-fg: var(--agent-sdk-fg);
123
+
124
+ --agent-sdk-code-bg: #0d0d10;
125
+ --agent-sdk-code-fg: #cdd6f4;
126
+ --agent-sdk-inline-code-bg: rgba(255, 255, 255, 0.08);
127
+ --agent-sdk-inline-code-fg: #c4b5fd;
128
+
129
+ --agent-sdk-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
130
+ --agent-sdk-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
131
+ --agent-sdk-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
132
+ --agent-sdk-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -4px rgba(0, 0, 0, 0.4);
133
+ --agent-sdk-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.6), 0 8px 10px -6px rgba(0, 0, 0, 0.5);
134
+ }
135
+
136
+ /* ─── 1c. Design Tokens (Dark — auto via media query) ────────────── */
137
+
138
+ @media (prefers-color-scheme: dark) {
139
+ :root:not([data-theme]) {
140
+ --agent-sdk-bg: #0a0a0b;
141
+ --agent-sdk-bg-secondary: #1a1a1e;
142
+ --agent-sdk-bg-tertiary: #27272a;
143
+ --agent-sdk-fg: #ececef;
144
+ --agent-sdk-fg-muted: #8b8b96;
145
+ --agent-sdk-fg-subtle: #5a5a66;
146
+ --agent-sdk-primary: #6366f1;
147
+ --agent-sdk-primary-fg: #ffffff;
148
+ --agent-sdk-primary-hover: #818cf8;
149
+ --agent-sdk-border: rgba(255, 255, 255, 0.08);
150
+ --agent-sdk-border-strong: rgba(255, 255, 255, 0.14);
151
+ --agent-sdk-border-focus: #6366f1;
152
+ --agent-sdk-error: #f87171;
153
+ --agent-sdk-error-bg: rgba(239, 68, 68, 0.12);
154
+ --agent-sdk-error-fg: #fca5a5;
155
+ --agent-sdk-success: #34d399;
156
+ --agent-sdk-success-bg: rgba(16, 185, 129, 0.12);
157
+ --agent-sdk-success-fg: #6ee7b7;
158
+ --agent-sdk-warning: #fbbf24;
159
+ --agent-sdk-warning-bg: rgba(245, 158, 11, 0.12);
160
+ --agent-sdk-warning-fg: #fcd34d;
161
+ --agent-sdk-info: #818cf8;
162
+ --agent-sdk-info-bg: rgba(99, 102, 241, 0.12);
163
+
164
+ --agent-sdk-sidebar-bg: #111113;
165
+ --agent-sdk-sidebar-border: rgba(255, 255, 255, 0.06);
166
+
167
+ --agent-sdk-user-bg: rgba(255, 255, 255, 0.05);
168
+ --agent-sdk-user-fg: var(--agent-sdk-fg);
169
+ --agent-sdk-assistant-bg: transparent;
170
+ --agent-sdk-assistant-fg: var(--agent-sdk-fg);
171
+
172
+ --agent-sdk-code-bg: #0d0d10;
173
+ --agent-sdk-code-fg: #cdd6f4;
174
+ --agent-sdk-inline-code-bg: rgba(255, 255, 255, 0.08);
175
+ --agent-sdk-inline-code-fg: #c4b5fd;
176
+
177
+ --agent-sdk-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.3);
178
+ --agent-sdk-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
179
+ --agent-sdk-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
180
+ --agent-sdk-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5), 0 4px 6px -4px rgba(0, 0, 0, 0.4);
181
+ --agent-sdk-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.6), 0 8px 10px -6px rgba(0, 0, 0, 0.5);
182
+ }
183
+ }
184
+
185
+ /* ─── 2. Animations ──────────────────────────────────────────────── */
186
+
187
+ @keyframes agent-sdk-fade-in {
188
+ from { opacity: 0; transform: translateY(4px); }
189
+ to { opacity: 1; transform: translateY(0); }
190
+ }
191
+
192
+ @keyframes agent-sdk-blink {
193
+ 0%, 100% { opacity: 1; }
194
+ 50% { opacity: 0; }
195
+ }
196
+
197
+ @keyframes agent-sdk-spin {
198
+ to { transform: rotate(360deg); }
199
+ }
200
+
201
+ @keyframes agent-sdk-pulse {
202
+ 0%, 100% { opacity: 1; }
203
+ 50% { opacity: 0.5; }
204
+ }
205
+
206
+ @keyframes agent-sdk-slide-down {
207
+ from { opacity: 0; transform: translateY(-4px); }
208
+ to { opacity: 1; transform: translateY(0); }
209
+ }
210
+
211
+ @keyframes agent-sdk-scale-in {
212
+ from { opacity: 0; transform: scale(0.95); }
213
+ to { opacity: 1; transform: scale(1); }
214
+ }
215
+
216
+ @keyframes agent-sdk-fade-out {
217
+ from { opacity: 1; }
218
+ to { opacity: 0; }
219
+ }
220
+
221
+ @keyframes agent-sdk-scale-out {
222
+ from { opacity: 1; transform: scale(1); }
223
+ to { opacity: 0; transform: scale(0.95); }
224
+ }
225
+
226
+ @keyframes agent-sdk-shimmer {
227
+ 0% { background-position: -200% 0; }
228
+ 100% { background-position: 200% 0; }
229
+ }
230
+
231
+ /* ─── 3. Global box-sizing ───────────────────────────────────────── */
232
+
233
+ [data-thread],
234
+ [data-thread] *,
235
+ [data-composer],
236
+ [data-composer] *,
237
+ [data-thread-list],
238
+ [data-thread-list] *,
239
+ [data-model-selector],
240
+ [data-model-selector] *,
241
+ [data-auth-dialog],
242
+ [data-auth-dialog] *,
243
+ [data-md-root],
244
+ [data-md-root] *,
245
+ [data-chat-ui],
246
+ [data-chat-ui] *,
247
+ [data-provider-selector],
248
+ [data-provider-selector] *,
249
+ [data-provider-settings-overlay],
250
+ [data-provider-settings-overlay] *,
251
+ [data-chat-input-area],
252
+ [data-chat-input-area] *,
253
+ [data-chat-empty-state],
254
+ [data-chat-empty-state] *,
255
+ [data-backend-selector],
256
+ [data-backend-selector] *,
257
+ [data-provider-model-selector],
258
+ [data-provider-model-selector] * {
259
+ box-sizing: border-box;
260
+ margin: 0;
261
+ padding: 0;
262
+ }
263
+
264
+ /* ─── 4. Layout helpers ──────────────────────────────────────────── */
265
+
266
+ .agent-sdk-layout {
267
+ display: flex;
268
+ flex-direction: column;
269
+ height: 100%;
270
+ overflow: hidden;
271
+ background: var(--agent-sdk-bg);
272
+ color: var(--agent-sdk-fg);
273
+ font-family: var(--agent-sdk-font-family);
274
+ font-size: var(--agent-sdk-font-size);
275
+ line-height: var(--agent-sdk-line-height);
276
+ }
277
+
278
+ .agent-sdk-layout > [data-thread] {
279
+ flex: 1 1 0%;
280
+ min-height: 0;
281
+ overflow-y: auto;
282
+ }
283
+
284
+ .agent-sdk-layout > [data-composer] {
285
+ flex-shrink: 0;
286
+ }
287
+
288
+ .agent-sdk-app {
289
+ display: flex;
290
+ height: 100vh;
291
+ overflow: hidden;
292
+ background: var(--agent-sdk-bg);
293
+ color: var(--agent-sdk-fg);
294
+ font-family: var(--agent-sdk-font-family);
295
+ font-size: var(--agent-sdk-font-size);
296
+ line-height: var(--agent-sdk-line-height);
297
+ }
298
+
299
+ .agent-sdk-app > [data-thread-list] {
300
+ flex-shrink: 0;
301
+ width: 260px;
302
+ height: 100%;
303
+ overflow-y: auto;
304
+ }
305
+
306
+ .agent-sdk-app > [data-chat-ui] {
307
+ flex: 1;
308
+ min-width: 0;
309
+ height: 100%;
310
+ }
311
+
312
+ /* ChatUI root layout */
313
+ [data-chat-ui] {
314
+ display: flex;
315
+ height: 100vh;
316
+ height: 100dvh; /* override with dynamic viewport height where supported */
317
+ background: var(--agent-sdk-bg);
318
+ color: var(--agent-sdk-fg);
319
+ font-family: var(--agent-sdk-font-family);
320
+ font-size: var(--agent-sdk-font-size);
321
+ line-height: var(--agent-sdk-line-height);
322
+ position: relative;
323
+ }
324
+
325
+ [data-chat-ui] > [data-thread-list] {
326
+ flex-shrink: 0;
327
+ width: 260px;
328
+ height: 100%;
329
+ overflow-y: auto;
330
+ border-right: 1px solid var(--agent-sdk-sidebar-border);
331
+ }
332
+
333
+ [data-chat-ui] > [data-chat-main] {
334
+ flex: 1;
335
+ min-width: 0;
336
+ display: flex;
337
+ flex-direction: column;
338
+ height: 100%;
339
+ overflow: hidden;
340
+ }
341
+
342
+ [data-chat-ui] > [data-chat-main] > [data-chat-header] {
343
+ flex-shrink: 0;
344
+ display: flex;
345
+ align-items: center;
346
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-lg);
347
+ border-bottom: 1px solid var(--agent-sdk-border);
348
+ min-height: 48px;
349
+ }
350
+
351
+ [data-chat-ui] > [data-chat-main] > [data-thread] {
352
+ flex: 1;
353
+ overflow-y: auto;
354
+ }
355
+
356
+ [data-chat-ui] > [data-chat-main] > [data-composer],
357
+ [data-chat-ui] > [data-chat-main] > [data-chat-input-area] {
358
+ flex-shrink: 0;
359
+ }
360
+
361
+ @media (max-width: 640px) {
362
+ [data-chat-ui] > [data-thread-list] {
363
+ display: none;
364
+ }
365
+ }
366
+
367
+ /* ─── 5. Thread ──────────────────────────────────────────────────── */
368
+
369
+ [data-thread] {
370
+ display: flex;
371
+ flex-direction: column;
372
+ padding: var(--agent-sdk-spacing-xl) 0;
373
+ font-family: var(--agent-sdk-font-family);
374
+ font-size: var(--agent-sdk-font-size);
375
+ line-height: var(--agent-sdk-line-height);
376
+ color: var(--agent-sdk-fg);
377
+ overflow-y: auto;
378
+ scroll-behavior: smooth;
379
+ -webkit-overflow-scrolling: touch;
380
+ }
381
+
382
+ [data-thread]::-webkit-scrollbar {
383
+ width: 6px;
384
+ }
385
+
386
+ [data-thread]::-webkit-scrollbar-track {
387
+ background: transparent;
388
+ }
389
+
390
+ [data-thread]::-webkit-scrollbar-thumb {
391
+ background: var(--agent-sdk-border-strong);
392
+ border-radius: var(--agent-sdk-radius-full);
393
+ }
394
+
395
+ [data-thread-message] {
396
+ max-width: var(--agent-sdk-content-width);
397
+ width: 100%;
398
+ margin: 0 auto;
399
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl);
400
+ animation: agent-sdk-fade-in 200ms ease-out;
401
+ }
402
+
403
+ [data-thread-message] + [data-thread-message] {
404
+ margin-top: var(--agent-sdk-spacing-xs);
405
+ }
406
+
407
+ /* User messages: subtle bubble */
408
+ [data-thread-message][data-role="user"] > * {
409
+ background: var(--agent-sdk-user-bg);
410
+ color: var(--agent-sdk-user-fg);
411
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-lg);
412
+ border-radius: var(--agent-sdk-radius-lg);
413
+ display: inline-block;
414
+ max-width: 85%;
415
+ float: right;
416
+ clear: both;
417
+ }
418
+
419
+ [data-thread-message][data-role="user"] {
420
+ display: flex;
421
+ justify-content: flex-end;
422
+ }
423
+
424
+ /* Assistant messages: plain */
425
+ [data-thread-message][data-role="assistant"] > * {
426
+ color: var(--agent-sdk-assistant-fg);
427
+ }
428
+
429
+ /* Streaming cursor */
430
+ [data-thread-loading] [data-thread-message][data-role="assistant"]:last-of-type [data-part="text"]:last-of-type::after {
431
+ content: "▍";
432
+ display: inline;
433
+ color: var(--agent-sdk-primary);
434
+ animation: agent-sdk-blink 1s step-end infinite;
435
+ margin-left: 1px;
436
+ font-weight: 400;
437
+ }
438
+
439
+ /* Thinking indicator — shown when loading starts before any assistant text */
440
+ [data-thread-loading]::after {
441
+ content: "";
442
+ display: flex;
443
+ align-items: center;
444
+ gap: 4px;
445
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-lg);
446
+ }
447
+
448
+ @keyframes agent-sdk-bounce {
449
+ 0%, 80%, 100% { transform: scale(0); opacity: 0.4; }
450
+ 40% { transform: scale(1); opacity: 1; }
451
+ }
452
+
453
+ [data-thread-loading] [data-thread-loading-indicator] {
454
+ display: inline-flex;
455
+ align-items: center;
456
+ gap: 6px;
457
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-lg);
458
+ max-width: var(--agent-sdk-content-width);
459
+ position: relative;
460
+ margin: 0 auto;
461
+ width: 100%;
462
+ box-sizing: border-box;
463
+ }
464
+
465
+ [data-thread-loading] [data-thread-loading-indicator] span {
466
+ width: 10px;
467
+ height: 10px;
468
+ border-radius: 50%;
469
+ background: var(--agent-sdk-primary);
470
+ animation: agent-sdk-bounce 1.4s infinite ease-in-out both;
471
+ }
472
+
473
+ [data-thread-loading] [data-thread-loading-indicator] span:nth-child(1) { animation-delay: -0.32s; }
474
+ [data-thread-loading] [data-thread-loading-indicator] span:nth-child(2) { animation-delay: -0.16s; }
475
+ [data-thread-loading] [data-thread-loading-indicator] span:nth-child(3) { animation-delay: 0s; }
476
+
477
+ /* Shimmer overlay on loading indicator container */
478
+ [data-thread-loading] [data-thread-loading-indicator]::after {
479
+ content: "";
480
+ position: absolute;
481
+ top: 0;
482
+ left: 0;
483
+ right: 0;
484
+ bottom: 0;
485
+ background: linear-gradient(
486
+ 90deg,
487
+ transparent 0%,
488
+ rgba(99, 102, 241, 0.06) 50%,
489
+ transparent 100%
490
+ );
491
+ background-size: 200% 100%;
492
+ animation: agent-sdk-shimmer 2s infinite linear;
493
+ border-radius: inherit;
494
+ pointer-events: none;
495
+ }
496
+
497
+ /* Empty state — shown when thread has no messages */
498
+ [data-thread-empty] {
499
+ display: flex;
500
+ align-items: center;
501
+ justify-content: center;
502
+ flex: 1;
503
+ color: var(--agent-sdk-fg-muted);
504
+ font-size: var(--agent-sdk-font-lg);
505
+ padding: var(--agent-sdk-spacing-xl);
506
+ text-align: center;
507
+ user-select: none;
508
+ }
509
+
510
+ /* Scroll-to-bottom floating button */
511
+ [data-thread] > button[data-action="scroll-to-bottom"] {
512
+ position: sticky;
513
+ bottom: var(--agent-sdk-spacing-md);
514
+ width: 36px;
515
+ height: 36px;
516
+ border-radius: var(--agent-sdk-radius-full);
517
+ border: 1px solid var(--agent-sdk-border);
518
+ background: var(--agent-sdk-bg);
519
+ color: var(--agent-sdk-fg-muted);
520
+ cursor: pointer;
521
+ display: flex;
522
+ align-items: center;
523
+ justify-content: center;
524
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
525
+ transition: all var(--agent-sdk-transition-fast);
526
+ z-index: 1;
527
+ font-size: 0;
528
+ animation: agent-sdk-fade-in 150ms ease-out;
529
+ align-self: center;
530
+ margin: 0 auto;
531
+ }
532
+
533
+ [data-thread] > button[data-action="scroll-to-bottom"]::before {
534
+ content: "";
535
+ display: block;
536
+ width: 0;
537
+ height: 0;
538
+ border-style: solid;
539
+ border-width: 6px 5px 0 5px;
540
+ border-color: var(--agent-sdk-fg-muted) transparent transparent transparent;
541
+ }
542
+
543
+ [data-thread] > button[data-action="scroll-to-bottom"]:hover {
544
+ background: var(--agent-sdk-bg-secondary);
545
+ border-color: var(--agent-sdk-primary);
546
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
547
+ }
548
+
549
+ /* ─── 6. Message parts ───────────────────────────────────────────── */
550
+
551
+ [data-part="text"] {
552
+ color: inherit;
553
+ word-break: break-word;
554
+ overflow-wrap: break-word;
555
+ }
556
+
557
+ [data-part="reasoning"] {
558
+ display: block;
559
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
560
+ margin: var(--agent-sdk-spacing-sm) 0;
561
+ border-left: 2px solid var(--agent-sdk-border-strong);
562
+ color: var(--agent-sdk-fg-muted);
563
+ font-size: var(--agent-sdk-font-sm);
564
+ font-style: italic;
565
+ white-space: pre-wrap;
566
+ opacity: 0.85;
567
+ }
568
+
569
+ [data-part="tool_call"] {
570
+ display: block;
571
+ margin: var(--agent-sdk-spacing-sm) 0;
572
+ }
573
+
574
+ [data-part="source"] {
575
+ display: inline-flex;
576
+ align-items: center;
577
+ gap: var(--agent-sdk-spacing-xs);
578
+ padding: 2px var(--agent-sdk-spacing-sm);
579
+ font-size: var(--agent-sdk-font-xs);
580
+ color: var(--agent-sdk-primary);
581
+ background: var(--agent-sdk-info-bg);
582
+ border-radius: var(--agent-sdk-radius-sm);
583
+ text-decoration: none;
584
+ transition: opacity var(--agent-sdk-transition-fast);
585
+ cursor: pointer;
586
+ }
587
+
588
+ [data-part="source"]:hover {
589
+ opacity: 0.8;
590
+ }
591
+
592
+ [data-part="file"] {
593
+ display: block;
594
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
595
+ margin: var(--agent-sdk-spacing-sm) 0;
596
+ background: var(--agent-sdk-bg-secondary);
597
+ border: 1px solid var(--agent-sdk-border);
598
+ border-radius: var(--agent-sdk-radius);
599
+ font-size: var(--agent-sdk-font-sm);
600
+ color: var(--agent-sdk-fg-muted);
601
+ }
602
+
603
+ [data-part="file"]::before {
604
+ content: "📎 ";
605
+ font-size: var(--agent-sdk-font-sm);
606
+ }
607
+
608
+ /* ─── 7. Composer ────────────────────────────────────────────────── */
609
+
610
+ [data-composer] {
611
+ display: flex;
612
+ align-items: flex-end;
613
+ gap: var(--agent-sdk-spacing-sm);
614
+ max-width: var(--agent-sdk-content-width);
615
+ width: 100%;
616
+ margin: 0 auto;
617
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl) var(--agent-sdk-spacing-lg);
618
+ position: relative;
619
+ }
620
+
621
+ [data-composer]::before {
622
+ content: "";
623
+ position: absolute;
624
+ top: -24px;
625
+ left: var(--agent-sdk-spacing-xl);
626
+ right: var(--agent-sdk-spacing-xl);
627
+ height: 24px;
628
+ background: linear-gradient(to top, var(--agent-sdk-bg), transparent);
629
+ pointer-events: none;
630
+ }
631
+
632
+ [data-composer]:focus-within [data-input] {
633
+ border-color: var(--agent-sdk-border-focus);
634
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
635
+ }
636
+
637
+ /* Input wrapper */
638
+ [data-input] {
639
+ flex: 1;
640
+ display: flex;
641
+ align-items: flex-end;
642
+ gap: var(--agent-sdk-spacing-sm);
643
+ background: var(--agent-sdk-bg-secondary);
644
+ border: 1px solid var(--agent-sdk-border);
645
+ border-radius: var(--agent-sdk-radius-xl);
646
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-lg);
647
+ transition: border-color var(--agent-sdk-transition), box-shadow var(--agent-sdk-transition);
648
+ }
649
+
650
+ [data-composer] textarea {
651
+ flex: 1;
652
+ border: none;
653
+ outline: none;
654
+ background: transparent;
655
+ color: var(--agent-sdk-fg);
656
+ font-family: var(--agent-sdk-font-family);
657
+ font-size: var(--agent-sdk-font-size);
658
+ line-height: var(--agent-sdk-line-height);
659
+ resize: none;
660
+ padding: var(--agent-sdk-spacing-sm) 0;
661
+ max-height: 160px;
662
+ min-height: 24px;
663
+ overflow: hidden;
664
+ }
665
+
666
+ [data-composer] textarea::placeholder {
667
+ color: var(--agent-sdk-fg-subtle);
668
+ }
669
+
670
+ /* Send button */
671
+ [data-composer] button[data-action="send"] {
672
+ flex-shrink: 0;
673
+ width: 36px;
674
+ height: 36px;
675
+ border-radius: var(--agent-sdk-radius-full);
676
+ border: none;
677
+ background: var(--agent-sdk-primary);
678
+ color: var(--agent-sdk-primary-fg);
679
+ cursor: pointer;
680
+ display: flex;
681
+ align-items: center;
682
+ justify-content: center;
683
+ transition: background var(--agent-sdk-transition), transform var(--agent-sdk-transition-fast);
684
+ font-size: 0;
685
+ position: relative;
686
+ }
687
+
688
+ [data-composer] button[data-action="send"]::before {
689
+ content: "";
690
+ display: block;
691
+ width: 0;
692
+ height: 0;
693
+ border-style: solid;
694
+ border-width: 5px 0 5px 9px;
695
+ border-color: transparent transparent transparent var(--agent-sdk-primary-fg);
696
+ margin-left: 2px;
697
+ }
698
+
699
+ [data-composer] button[data-action="send"]:hover:not(:disabled) {
700
+ background: var(--agent-sdk-primary-hover);
701
+ transform: scale(1.05);
702
+ }
703
+
704
+ [data-composer] button[data-action="send"]:active:not(:disabled) {
705
+ transform: scale(0.95);
706
+ }
707
+
708
+ [data-composer] button[data-action="send"]:disabled {
709
+ opacity: 0.3;
710
+ cursor: not-allowed;
711
+ }
712
+
713
+ /* Stop button */
714
+ [data-composer] button[data-action="stop"] {
715
+ flex-shrink: 0;
716
+ width: 36px;
717
+ height: 36px;
718
+ border-radius: var(--agent-sdk-radius-full);
719
+ border: none;
720
+ background: var(--agent-sdk-error);
721
+ color: var(--agent-sdk-primary-fg);
722
+ cursor: pointer;
723
+ display: flex;
724
+ align-items: center;
725
+ justify-content: center;
726
+ transition: background var(--agent-sdk-transition), transform var(--agent-sdk-transition-fast);
727
+ font-size: 0;
728
+ position: relative;
729
+ }
730
+
731
+ [data-composer] button[data-action="stop"]::before {
732
+ content: "";
733
+ display: block;
734
+ width: 10px;
735
+ height: 10px;
736
+ background: var(--agent-sdk-primary-fg);
737
+ border-radius: 2px;
738
+ }
739
+
740
+ [data-composer] button[data-action="stop"]:hover {
741
+ background: var(--agent-sdk-error-fg);
742
+ transform: scale(1.05);
743
+ }
744
+
745
+ /* ─── 8. Thinking block ──────────────────────────────────────────── */
746
+
747
+ [data-thinking] {
748
+ margin: var(--agent-sdk-spacing-sm) 0;
749
+ border: 1px solid var(--agent-sdk-border);
750
+ border-radius: var(--agent-sdk-radius);
751
+ background: var(--agent-sdk-bg-secondary);
752
+ overflow: hidden;
753
+ }
754
+
755
+ [data-thinking] > summary {
756
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
757
+ cursor: pointer;
758
+ user-select: none;
759
+ font-size: var(--agent-sdk-font-sm);
760
+ color: var(--agent-sdk-fg-muted);
761
+ display: flex;
762
+ align-items: center;
763
+ gap: var(--agent-sdk-spacing-sm);
764
+ list-style: none;
765
+ transition: color var(--agent-sdk-transition);
766
+ }
767
+
768
+ [data-thinking] > summary:hover {
769
+ color: var(--agent-sdk-fg);
770
+ }
771
+
772
+ [data-thinking] > summary::-webkit-details-marker {
773
+ display: none;
774
+ }
775
+
776
+ [data-thinking] > summary::before {
777
+ content: "▸";
778
+ font-size: 12px;
779
+ transition: transform var(--agent-sdk-transition);
780
+ color: var(--agent-sdk-fg-subtle);
781
+ }
782
+
783
+ [data-thinking][open] > summary::before {
784
+ transform: rotate(90deg);
785
+ }
786
+
787
+ [data-thinking] > div {
788
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-md);
789
+ font-size: var(--agent-sdk-font-sm);
790
+ color: var(--agent-sdk-fg-muted);
791
+ white-space: pre-wrap;
792
+ border-top: 1px solid var(--agent-sdk-border);
793
+ line-height: 1.5;
794
+ }
795
+
796
+ [data-thinking][data-streaming] > summary {
797
+ color: var(--agent-sdk-info);
798
+ }
799
+
800
+ [data-thinking][data-streaming] > summary::after {
801
+ content: "";
802
+ width: 6px;
803
+ height: 6px;
804
+ border-radius: var(--agent-sdk-radius-full);
805
+ background: var(--agent-sdk-info);
806
+ animation: agent-sdk-pulse 1.5s ease-in-out infinite;
807
+ margin-left: auto;
808
+ }
809
+
810
+ /* ─── 9. Tool call view ──────────────────────────────────────────── */
811
+
812
+ [data-tool-status] {
813
+ border: 1px solid var(--agent-sdk-border);
814
+ border-radius: var(--agent-sdk-radius);
815
+ background: var(--agent-sdk-bg-secondary);
816
+ margin: var(--agent-sdk-spacing-sm) 0;
817
+ overflow: hidden;
818
+ border-left-width: 3px;
819
+ animation: agent-sdk-fade-in 150ms ease-out;
820
+ }
821
+
822
+ /* Status-colored left border */
823
+ [data-tool-status="pending"] {
824
+ border-left-color: var(--agent-sdk-fg-subtle);
825
+ }
826
+
827
+ [data-tool-status="running"] {
828
+ border-left-color: var(--agent-sdk-info);
829
+ }
830
+
831
+ [data-tool-status="complete"] {
832
+ border-left-color: var(--agent-sdk-success);
833
+ }
834
+
835
+ [data-tool-status="error"] {
836
+ border-left-color: var(--agent-sdk-error);
837
+ }
838
+
839
+ [data-tool-status="requires_approval"] {
840
+ border-left-color: var(--agent-sdk-warning);
841
+ }
842
+
843
+ /* Tool header row */
844
+ [data-tool-header] {
845
+ display: flex;
846
+ align-items: center;
847
+ gap: var(--agent-sdk-spacing-sm);
848
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
849
+ }
850
+
851
+ [data-tool-label="name"] {
852
+ font-family: var(--agent-sdk-font-mono);
853
+ font-size: var(--agent-sdk-font-sm);
854
+ font-weight: 600;
855
+ color: var(--agent-sdk-fg);
856
+ display: flex;
857
+ align-items: center;
858
+ gap: var(--agent-sdk-spacing-xs);
859
+ }
860
+
861
+ [data-tool-label="name"]::before {
862
+ content: "⚙";
863
+ font-size: 12px;
864
+ opacity: 0.6;
865
+ }
866
+
867
+ /* Status badge */
868
+ [data-tool-label="status"] {
869
+ font-size: var(--agent-sdk-font-xs);
870
+ font-weight: 500;
871
+ padding: 1px var(--agent-sdk-spacing-sm);
872
+ border-radius: var(--agent-sdk-radius-full);
873
+ display: inline-flex;
874
+ align-items: center;
875
+ gap: 4px;
876
+ margin-left: auto;
877
+ }
878
+
879
+ [data-tool-status="pending"] [data-tool-label="status"] {
880
+ background: var(--agent-sdk-bg-tertiary);
881
+ color: var(--agent-sdk-fg-muted);
882
+ }
883
+
884
+ [data-tool-status="running"] [data-tool-label="status"] {
885
+ background: var(--agent-sdk-info-bg);
886
+ color: var(--agent-sdk-info);
887
+ }
888
+
889
+ [data-tool-status="running"] [data-tool-label="status"]::before {
890
+ content: "";
891
+ display: inline-block;
892
+ width: 10px;
893
+ height: 10px;
894
+ border: 1.5px solid currentColor;
895
+ border-top-color: transparent;
896
+ border-radius: var(--agent-sdk-radius-full);
897
+ animation: agent-sdk-spin 0.8s linear infinite;
898
+ }
899
+
900
+ [data-tool-status="complete"] [data-tool-label="status"] {
901
+ background: var(--agent-sdk-success-bg);
902
+ color: var(--agent-sdk-success);
903
+ }
904
+
905
+ [data-tool-status="error"] [data-tool-label="status"] {
906
+ background: var(--agent-sdk-error-bg);
907
+ color: var(--agent-sdk-error);
908
+ }
909
+
910
+ [data-tool-status="requires_approval"] [data-tool-label="status"] {
911
+ background: var(--agent-sdk-warning-bg);
912
+ color: var(--agent-sdk-warning);
913
+ }
914
+
915
+ /* Tool details (collapsible args/result) */
916
+ [data-tool-details] {
917
+ border-top: 1px solid var(--agent-sdk-border);
918
+ }
919
+
920
+ [data-tool-details] > summary {
921
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-md);
922
+ cursor: pointer;
923
+ user-select: none;
924
+ font-size: var(--agent-sdk-font-xs);
925
+ color: var(--agent-sdk-fg-muted);
926
+ display: flex;
927
+ align-items: center;
928
+ gap: var(--agent-sdk-spacing-xs);
929
+ list-style: none;
930
+ transition: color var(--agent-sdk-transition), background var(--agent-sdk-transition);
931
+ }
932
+
933
+ [data-tool-details] > summary:hover {
934
+ background: rgba(255, 255, 255, 0.02);
935
+ color: var(--agent-sdk-fg);
936
+ }
937
+
938
+ [data-tool-details] > summary::-webkit-details-marker {
939
+ display: none;
940
+ }
941
+
942
+ [data-tool-details] > summary::before {
943
+ content: "▸";
944
+ font-size: 10px;
945
+ transition: transform var(--agent-sdk-transition);
946
+ color: var(--agent-sdk-fg-subtle);
947
+ }
948
+
949
+ [data-tool-details][open] > summary::before {
950
+ transform: rotate(90deg);
951
+ }
952
+
953
+ [data-tool-details] pre[data-tool-label] {
954
+ margin: 0;
955
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
956
+ font-family: var(--agent-sdk-font-mono);
957
+ font-size: var(--agent-sdk-font-xs);
958
+ line-height: 1.5;
959
+ white-space: pre-wrap;
960
+ word-break: break-all;
961
+ overflow-x: auto;
962
+ color: var(--agent-sdk-code-fg);
963
+ background: var(--agent-sdk-code-bg);
964
+ max-height: 300px;
965
+ overflow-y: auto;
966
+ }
967
+
968
+ /* Legacy args/result labels (non-details fallback) */
969
+ [data-tool-label="args"],
970
+ [data-tool-label="result"] {
971
+ font-family: var(--agent-sdk-font-mono);
972
+ font-size: var(--agent-sdk-font-xs);
973
+ white-space: pre-wrap;
974
+ word-break: break-all;
975
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
976
+ background: var(--agent-sdk-code-bg);
977
+ color: var(--agent-sdk-code-fg);
978
+ border-top: 1px solid var(--agent-sdk-border);
979
+ overflow-x: auto;
980
+ max-height: 300px;
981
+ overflow-y: auto;
982
+ }
983
+
984
+ /* Error label */
985
+ [data-tool-label="error"] {
986
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
987
+ color: var(--agent-sdk-error);
988
+ font-size: var(--agent-sdk-font-sm);
989
+ border-top: 1px solid var(--agent-sdk-border);
990
+ }
991
+
992
+ [data-tool-label="error"]::before {
993
+ content: "✕ ";
994
+ font-weight: 600;
995
+ }
996
+
997
+ /* Tool action buttons */
998
+ [data-tool-actions] {
999
+ display: flex;
1000
+ gap: var(--agent-sdk-spacing-sm);
1001
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1002
+ border-top: 1px solid var(--agent-sdk-border);
1003
+ }
1004
+
1005
+ [data-tool-status] button[data-action="approve"],
1006
+ [data-tool-status] button[data-action="deny"] {
1007
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-md);
1008
+ border-radius: var(--agent-sdk-radius-sm);
1009
+ border: 1px solid var(--agent-sdk-border);
1010
+ font-size: var(--agent-sdk-font-sm);
1011
+ font-weight: 500;
1012
+ cursor: pointer;
1013
+ transition: all var(--agent-sdk-transition);
1014
+ font-family: var(--agent-sdk-font-family);
1015
+ background: transparent;
1016
+ color: var(--agent-sdk-fg);
1017
+ }
1018
+
1019
+ [data-tool-status] button[data-action="approve"] {
1020
+ background: var(--agent-sdk-success-bg);
1021
+ color: var(--agent-sdk-success);
1022
+ border-color: var(--agent-sdk-success);
1023
+ }
1024
+
1025
+ [data-tool-status] button[data-action="approve"]:hover {
1026
+ background: var(--agent-sdk-success);
1027
+ color: var(--agent-sdk-primary-fg);
1028
+ }
1029
+
1030
+ [data-tool-status] button[data-action="deny"] {
1031
+ background: var(--agent-sdk-error-bg);
1032
+ color: var(--agent-sdk-error);
1033
+ border-color: var(--agent-sdk-error);
1034
+ }
1035
+
1036
+ [data-tool-status] button[data-action="deny"]:hover {
1037
+ background: var(--agent-sdk-error);
1038
+ color: var(--agent-sdk-primary-fg);
1039
+ }
1040
+
1041
+ /* ─── 10. Thread list (sidebar) ──────────────────────────────────── */
1042
+
1043
+ [data-thread-list] {
1044
+ display: flex;
1045
+ flex-direction: column;
1046
+ height: 100%;
1047
+ background: var(--agent-sdk-sidebar-bg);
1048
+ font-family: var(--agent-sdk-font-family);
1049
+ font-size: var(--agent-sdk-font-size);
1050
+ color: var(--agent-sdk-fg);
1051
+ overflow: hidden;
1052
+ }
1053
+
1054
+ /* Header row: search + create button */
1055
+ [data-thread-list-header] {
1056
+ display: flex;
1057
+ align-items: center;
1058
+ gap: var(--agent-sdk-spacing-sm);
1059
+ padding: var(--agent-sdk-spacing-md);
1060
+ flex-shrink: 0;
1061
+ border-bottom: 1px solid var(--agent-sdk-sidebar-border);
1062
+ }
1063
+
1064
+ [data-thread-list-search] {
1065
+ flex: 1;
1066
+ background: transparent;
1067
+ border: 1px solid transparent;
1068
+ border-radius: var(--agent-sdk-radius-sm);
1069
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-sm);
1070
+ color: var(--agent-sdk-fg);
1071
+ font-family: var(--agent-sdk-font-family);
1072
+ font-size: var(--agent-sdk-font-sm);
1073
+ outline: none;
1074
+ transition: border-color var(--agent-sdk-transition), background var(--agent-sdk-transition);
1075
+ }
1076
+
1077
+ [data-thread-list-search]::placeholder {
1078
+ color: var(--agent-sdk-fg-subtle);
1079
+ }
1080
+
1081
+ [data-thread-list-search]:focus {
1082
+ border-color: var(--agent-sdk-border-strong);
1083
+ background: var(--agent-sdk-bg-secondary);
1084
+ }
1085
+
1086
+ [data-thread-list] button[data-action="create-session"] {
1087
+ flex-shrink: 0;
1088
+ width: 28px;
1089
+ height: 28px;
1090
+ border: 1px solid var(--agent-sdk-border);
1091
+ border-radius: var(--agent-sdk-radius-sm);
1092
+ background: transparent;
1093
+ color: var(--agent-sdk-fg-muted);
1094
+ font-size: 16px;
1095
+ font-weight: 300;
1096
+ cursor: pointer;
1097
+ display: flex;
1098
+ align-items: center;
1099
+ justify-content: center;
1100
+ transition: all var(--agent-sdk-transition);
1101
+ }
1102
+
1103
+ [data-thread-list] button[data-action="create-session"]:hover {
1104
+ background: var(--agent-sdk-bg-tertiary);
1105
+ color: var(--agent-sdk-fg);
1106
+ border-color: var(--agent-sdk-border-strong);
1107
+ }
1108
+
1109
+ /* Session list items container */
1110
+ [data-thread-list-items] {
1111
+ flex: 1;
1112
+ overflow-y: auto;
1113
+ padding: var(--agent-sdk-spacing-xs) 0;
1114
+ }
1115
+
1116
+ [data-thread-list-items]::-webkit-scrollbar {
1117
+ width: 4px;
1118
+ }
1119
+
1120
+ [data-thread-list-items]::-webkit-scrollbar-track {
1121
+ background: transparent;
1122
+ }
1123
+
1124
+ [data-thread-list-items]::-webkit-scrollbar-thumb {
1125
+ background: var(--agent-sdk-border-strong);
1126
+ border-radius: var(--agent-sdk-radius-full);
1127
+ }
1128
+
1129
+ /* Individual session item */
1130
+ [data-session-item] {
1131
+ display: flex;
1132
+ align-items: center;
1133
+ gap: var(--agent-sdk-spacing-sm);
1134
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1135
+ cursor: pointer;
1136
+ transition: background var(--agent-sdk-transition-fast);
1137
+ position: relative;
1138
+ min-height: 36px;
1139
+ border-left: 2px solid transparent;
1140
+ }
1141
+
1142
+ [data-session-item]:hover {
1143
+ background: var(--agent-sdk-bg-secondary);
1144
+ }
1145
+
1146
+ [data-session-title] {
1147
+ flex: 1;
1148
+ min-width: 0;
1149
+ overflow: hidden;
1150
+ text-overflow: ellipsis;
1151
+ white-space: nowrap;
1152
+ font-size: var(--agent-sdk-font-sm);
1153
+ color: var(--agent-sdk-fg);
1154
+ }
1155
+
1156
+ [data-session-time] {
1157
+ flex-shrink: 0;
1158
+ font-size: var(--agent-sdk-font-xs);
1159
+ color: var(--agent-sdk-fg-subtle);
1160
+ transition: opacity var(--agent-sdk-transition-fast);
1161
+ }
1162
+
1163
+ /* Active session */
1164
+ [data-session-active="true"] {
1165
+ background: var(--agent-sdk-bg-secondary);
1166
+ border-left-color: var(--agent-sdk-primary);
1167
+ }
1168
+
1169
+ [data-session-active="true"] [data-session-title] {
1170
+ font-weight: 500;
1171
+ }
1172
+
1173
+ /* Delete button: hidden until hover */
1174
+ [data-session-item] button[data-action="delete-session"] {
1175
+ opacity: 0;
1176
+ position: absolute;
1177
+ top: 50%;
1178
+ transform: translateY(-50%);
1179
+ right: var(--agent-sdk-spacing-sm);
1180
+ width: 20px;
1181
+ height: 20px;
1182
+ border: none;
1183
+ border-radius: var(--agent-sdk-radius-sm);
1184
+ background: transparent;
1185
+ color: var(--agent-sdk-fg-subtle);
1186
+ cursor: pointer;
1187
+ display: flex;
1188
+ align-items: center;
1189
+ justify-content: center;
1190
+ font-size: 13px;
1191
+ transition: all var(--agent-sdk-transition-fast);
1192
+ }
1193
+
1194
+ [data-session-item]:hover button[data-action="delete-session"] {
1195
+ opacity: 1;
1196
+ }
1197
+
1198
+ /* Hide time on hover to make room for action buttons */
1199
+ [data-session-item]:hover [data-session-time] {
1200
+ opacity: 0;
1201
+ }
1202
+
1203
+ [data-session-item] button[data-action="delete-session"]:hover {
1204
+ background: var(--agent-sdk-error-bg);
1205
+ color: var(--agent-sdk-error);
1206
+ }
1207
+
1208
+ /* ─── 11. Model selector ─────────────────────────────────────────── */
1209
+
1210
+ [data-model-selector] {
1211
+ position: relative;
1212
+ display: inline-flex;
1213
+ font-family: var(--agent-sdk-font-family);
1214
+ font-size: var(--agent-sdk-font-size);
1215
+ }
1216
+
1217
+ [data-model-selector-trigger] {
1218
+ display: inline-flex;
1219
+ align-items: center;
1220
+ gap: var(--agent-sdk-spacing-sm);
1221
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-md);
1222
+ border: 1px solid var(--agent-sdk-border);
1223
+ border-radius: var(--agent-sdk-radius-sm);
1224
+ background: transparent;
1225
+ color: var(--agent-sdk-fg-muted);
1226
+ font-size: var(--agent-sdk-font-sm);
1227
+ font-family: var(--agent-sdk-font-family);
1228
+ cursor: pointer;
1229
+ transition: all var(--agent-sdk-transition);
1230
+ white-space: nowrap;
1231
+ }
1232
+
1233
+ [data-model-selector-trigger]:hover {
1234
+ background: var(--agent-sdk-bg-secondary);
1235
+ color: var(--agent-sdk-fg);
1236
+ }
1237
+
1238
+ [data-model-selector-trigger]::after {
1239
+ content: "▾";
1240
+ font-size: 10px;
1241
+ opacity: 0.5;
1242
+ }
1243
+
1244
+ [data-model-selector-dropdown] {
1245
+ position: absolute;
1246
+ top: calc(100% + 4px);
1247
+ left: 0;
1248
+ min-width: 260px;
1249
+ max-height: 320px;
1250
+ overflow-y: auto;
1251
+ background: var(--agent-sdk-bg-secondary);
1252
+ border: 1px solid var(--agent-sdk-border-strong);
1253
+ border-radius: var(--agent-sdk-radius);
1254
+ box-shadow: var(--agent-sdk-shadow-lg);
1255
+ z-index: 100;
1256
+ animation: agent-sdk-scale-in 100ms ease-out;
1257
+ display: flex;
1258
+ flex-direction: column;
1259
+ }
1260
+
1261
+ [data-model-selector-search] {
1262
+ width: 100%;
1263
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1264
+ border: none;
1265
+ border-bottom: 1px solid var(--agent-sdk-border);
1266
+ background: transparent;
1267
+ color: var(--agent-sdk-fg);
1268
+ font-family: var(--agent-sdk-font-family);
1269
+ font-size: var(--agent-sdk-font-sm);
1270
+ outline: none;
1271
+ }
1272
+
1273
+ [data-model-selector-search]::placeholder {
1274
+ color: var(--agent-sdk-fg-subtle);
1275
+ }
1276
+
1277
+ [data-model-option] {
1278
+ display: flex;
1279
+ align-items: center;
1280
+ gap: var(--agent-sdk-spacing-sm);
1281
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1282
+ cursor: pointer;
1283
+ transition: background var(--agent-sdk-transition-fast);
1284
+ font-size: var(--agent-sdk-font-sm);
1285
+ color: var(--agent-sdk-fg);
1286
+ border: none;
1287
+ background: none;
1288
+ width: 100%;
1289
+ text-align: left;
1290
+ font-family: var(--agent-sdk-font-family);
1291
+ }
1292
+
1293
+ [data-model-option]:hover,
1294
+ [data-model-highlighted] {
1295
+ background: var(--agent-sdk-bg-tertiary);
1296
+ }
1297
+
1298
+ [data-model-selected] {
1299
+ font-weight: 500;
1300
+ color: var(--agent-sdk-primary);
1301
+ }
1302
+
1303
+ /* Tier badges */
1304
+ [data-tier]::after {
1305
+ font-size: var(--agent-sdk-font-xs);
1306
+ padding: 0 6px;
1307
+ border-radius: var(--agent-sdk-radius-full);
1308
+ font-weight: 500;
1309
+ margin-left: auto;
1310
+ flex-shrink: 0;
1311
+ }
1312
+
1313
+ [data-tier="fast"]::after,
1314
+ [data-tier="fast/cheap"]::after {
1315
+ content: attr(data-tier);
1316
+ background: var(--agent-sdk-success-bg);
1317
+ color: var(--agent-sdk-success);
1318
+ }
1319
+
1320
+ [data-tier="standard"]::after {
1321
+ content: attr(data-tier);
1322
+ background: var(--agent-sdk-info-bg);
1323
+ color: var(--agent-sdk-info);
1324
+ }
1325
+
1326
+ [data-tier="premium"]::after {
1327
+ content: attr(data-tier);
1328
+ background: var(--agent-sdk-warning-bg);
1329
+ color: var(--agent-sdk-warning);
1330
+ }
1331
+
1332
+ [data-model-provider]::before {
1333
+ content: attr(data-model-provider);
1334
+ font-size: var(--agent-sdk-font-xs);
1335
+ color: var(--agent-sdk-fg-subtle);
1336
+ margin-right: var(--agent-sdk-spacing-xs);
1337
+ }
1338
+
1339
+ /* Free-text model input */
1340
+ [data-model-selector-freetext] {
1341
+ border-top: 1px solid var(--agent-sdk-border);
1342
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1343
+ display: flex;
1344
+ gap: var(--agent-sdk-spacing-sm);
1345
+ }
1346
+
1347
+ [data-model-input] {
1348
+ flex: 1;
1349
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-sm);
1350
+ border: 1px solid var(--agent-sdk-border);
1351
+ border-radius: var(--agent-sdk-radius-sm);
1352
+ background: var(--agent-sdk-bg);
1353
+ color: var(--agent-sdk-fg);
1354
+ font-family: var(--agent-sdk-font-mono);
1355
+ font-size: var(--agent-sdk-font-xs);
1356
+ outline: none;
1357
+ transition: border-color var(--agent-sdk-transition);
1358
+ }
1359
+
1360
+ [data-model-input]:focus {
1361
+ border-color: var(--agent-sdk-border-focus);
1362
+ }
1363
+
1364
+ [data-model-input]::placeholder {
1365
+ color: var(--agent-sdk-fg-subtle);
1366
+ }
1367
+
1368
+ [data-action="apply-model"] {
1369
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-sm);
1370
+ border: none;
1371
+ border-radius: var(--agent-sdk-radius-sm);
1372
+ background: var(--agent-sdk-primary);
1373
+ color: var(--agent-sdk-primary-fg);
1374
+ font-size: var(--agent-sdk-font-xs);
1375
+ font-weight: 500;
1376
+ cursor: pointer;
1377
+ transition: background var(--agent-sdk-transition);
1378
+ font-family: var(--agent-sdk-font-family);
1379
+ }
1380
+
1381
+ [data-action="apply-model"]:hover {
1382
+ background: var(--agent-sdk-primary-hover);
1383
+ }
1384
+
1385
+ /* ─── 12. Auth dialog ────────────────────────────────────────────── */
1386
+
1387
+ [data-auth-dialog] {
1388
+ max-width: 440px;
1389
+ margin: var(--agent-sdk-spacing-2xl) auto;
1390
+ padding: var(--agent-sdk-spacing-xl);
1391
+ background: var(--agent-sdk-bg-secondary);
1392
+ border: 1px solid var(--agent-sdk-border);
1393
+ border-radius: var(--agent-sdk-radius-lg);
1394
+ box-shadow: var(--agent-sdk-shadow-xl);
1395
+ font-family: var(--agent-sdk-font-family);
1396
+ font-size: var(--agent-sdk-font-size);
1397
+ color: var(--agent-sdk-fg);
1398
+ animation: agent-sdk-scale-in 200ms ease-out;
1399
+ }
1400
+
1401
+ /* Backend selector tabs */
1402
+ [data-auth-selector] {
1403
+ display: flex;
1404
+ gap: 2px;
1405
+ margin-bottom: var(--agent-sdk-spacing-lg);
1406
+ background: var(--agent-sdk-bg-tertiary);
1407
+ border-radius: var(--agent-sdk-radius-sm);
1408
+ padding: 2px;
1409
+ }
1410
+
1411
+ [data-auth-selector] button[data-auth-backend] {
1412
+ flex: 1;
1413
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1414
+ border: none;
1415
+ border-radius: var(--agent-sdk-radius-sm);
1416
+ background: transparent;
1417
+ color: var(--agent-sdk-fg-muted);
1418
+ font-size: var(--agent-sdk-font-sm);
1419
+ font-weight: 500;
1420
+ cursor: pointer;
1421
+ transition: all var(--agent-sdk-transition);
1422
+ font-family: var(--agent-sdk-font-family);
1423
+ position: relative;
1424
+ }
1425
+
1426
+ [data-auth-selector] button[data-auth-backend]:hover {
1427
+ color: var(--agent-sdk-fg);
1428
+ }
1429
+
1430
+ [data-auth-selector] button[data-auth-selected="true"] {
1431
+ background: var(--agent-sdk-bg);
1432
+ color: var(--agent-sdk-fg);
1433
+ box-shadow: var(--agent-sdk-shadow-xs);
1434
+ }
1435
+
1436
+ [data-auth-selector] button[data-auth-authenticated="true"] {
1437
+ color: var(--agent-sdk-success);
1438
+ }
1439
+
1440
+ [data-auth-selector] button[data-auth-authenticated="true"]::after {
1441
+ content: "✓";
1442
+ position: absolute;
1443
+ top: 2px;
1444
+ right: 4px;
1445
+ font-size: var(--agent-sdk-font-xs);
1446
+ color: var(--agent-sdk-success);
1447
+ }
1448
+
1449
+ /* Auth content area */
1450
+ [data-auth-content] {
1451
+ min-height: 120px;
1452
+ }
1453
+
1454
+ [data-auth-flow] {
1455
+ display: flex;
1456
+ flex-direction: column;
1457
+ gap: var(--agent-sdk-spacing-md);
1458
+ }
1459
+
1460
+ [data-auth-flow] button {
1461
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-lg);
1462
+ border-radius: var(--agent-sdk-radius);
1463
+ border: none;
1464
+ background: var(--agent-sdk-primary);
1465
+ color: var(--agent-sdk-primary-fg);
1466
+ font-size: var(--agent-sdk-font-size);
1467
+ font-weight: 500;
1468
+ cursor: pointer;
1469
+ transition: background var(--agent-sdk-transition);
1470
+ font-family: var(--agent-sdk-font-family);
1471
+ }
1472
+
1473
+ [data-auth-flow] button:hover {
1474
+ background: var(--agent-sdk-primary-hover);
1475
+ }
1476
+
1477
+ [data-device-code] {
1478
+ display: flex;
1479
+ align-items: center;
1480
+ justify-content: center;
1481
+ padding: var(--agent-sdk-spacing-md);
1482
+ background: var(--agent-sdk-code-bg);
1483
+ color: var(--agent-sdk-code-fg);
1484
+ border-radius: var(--agent-sdk-radius);
1485
+ font-family: var(--agent-sdk-font-mono);
1486
+ font-size: 20px;
1487
+ font-weight: 600;
1488
+ letter-spacing: 4px;
1489
+ user-select: all;
1490
+ }
1491
+
1492
+ [data-verification-url],
1493
+ [data-authorize-url] {
1494
+ color: var(--agent-sdk-primary);
1495
+ text-decoration: none;
1496
+ font-size: var(--agent-sdk-font-sm);
1497
+ transition: opacity var(--agent-sdk-transition);
1498
+ }
1499
+
1500
+ [data-verification-url]:hover,
1501
+ [data-authorize-url]:hover {
1502
+ opacity: 0.8;
1503
+ text-decoration: underline;
1504
+ }
1505
+
1506
+ [data-auth-loading] {
1507
+ display: flex;
1508
+ align-items: center;
1509
+ gap: var(--agent-sdk-spacing-sm);
1510
+ color: var(--agent-sdk-fg-muted);
1511
+ font-size: var(--agent-sdk-font-sm);
1512
+ }
1513
+
1514
+ [data-auth-loading]::before {
1515
+ content: "";
1516
+ display: inline-block;
1517
+ width: 14px;
1518
+ height: 14px;
1519
+ border: 2px solid var(--agent-sdk-border-strong);
1520
+ border-top-color: var(--agent-sdk-primary);
1521
+ border-radius: var(--agent-sdk-radius-full);
1522
+ animation: agent-sdk-spin 0.8s linear infinite;
1523
+ }
1524
+
1525
+ [data-auth-error-display] {
1526
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1527
+ background: var(--agent-sdk-error-bg);
1528
+ color: var(--agent-sdk-error);
1529
+ border-radius: var(--agent-sdk-radius-sm);
1530
+ font-size: var(--agent-sdk-font-sm);
1531
+ }
1532
+
1533
+ [data-auth-status="authenticated"] [data-auth-flow]::before {
1534
+ content: "✓ Authenticated";
1535
+ display: block;
1536
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1537
+ background: var(--agent-sdk-success-bg);
1538
+ color: var(--agent-sdk-success);
1539
+ border-radius: var(--agent-sdk-radius-sm);
1540
+ font-weight: 500;
1541
+ font-size: var(--agent-sdk-font-sm);
1542
+ }
1543
+
1544
+ [data-auth-success] {
1545
+ color: var(--agent-sdk-success);
1546
+ font-weight: 500;
1547
+ display: flex;
1548
+ align-items: center;
1549
+ gap: var(--agent-sdk-spacing-sm);
1550
+ }
1551
+
1552
+ /* Auth flow inputs */
1553
+ [data-auth-flow] input {
1554
+ width: 100%;
1555
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1556
+ border: 1px solid var(--agent-sdk-border);
1557
+ border-radius: var(--agent-sdk-radius);
1558
+ background: var(--agent-sdk-bg);
1559
+ color: var(--agent-sdk-fg);
1560
+ font-family: var(--agent-sdk-font-family);
1561
+ font-size: var(--agent-sdk-font-size);
1562
+ outline: none;
1563
+ transition: border-color var(--agent-sdk-transition);
1564
+ }
1565
+
1566
+ [data-auth-flow] input:focus {
1567
+ border-color: var(--agent-sdk-border-focus);
1568
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
1569
+ }
1570
+
1571
+ [data-auth-flow] input::placeholder {
1572
+ color: var(--agent-sdk-fg-subtle);
1573
+ }
1574
+
1575
+ /* ─── 13. Markdown renderer ──────────────────────────────────────── */
1576
+
1577
+ [data-md-root] {
1578
+ color: var(--agent-sdk-fg);
1579
+ font-family: var(--agent-sdk-font-family);
1580
+ font-size: var(--agent-sdk-font-size);
1581
+ line-height: var(--agent-sdk-line-height);
1582
+ word-break: break-word;
1583
+ overflow-wrap: break-word;
1584
+ }
1585
+
1586
+ [data-md-root] > * + * {
1587
+ margin-top: 0.75em;
1588
+ }
1589
+
1590
+ [data-md-heading] {
1591
+ font-weight: 600;
1592
+ line-height: 1.3;
1593
+ color: var(--agent-sdk-fg);
1594
+ margin-top: 1.25em;
1595
+ margin-bottom: 0.5em;
1596
+ }
1597
+
1598
+ [data-md-root] > *:first-child {
1599
+ margin-top: 0;
1600
+ }
1601
+
1602
+ [data-md-root] h1[data-md-heading] { font-size: 1.5em; }
1603
+ [data-md-root] h2[data-md-heading] { font-size: 1.25em; }
1604
+ [data-md-root] h3[data-md-heading] { font-size: 1.125em; }
1605
+ [data-md-root] h4[data-md-heading],
1606
+ [data-md-root] h5[data-md-heading],
1607
+ [data-md-root] h6[data-md-heading] { font-size: 1em; }
1608
+
1609
+ [data-md-paragraph] {
1610
+ margin: 0;
1611
+ }
1612
+
1613
+ [data-md-code-block] {
1614
+ background: var(--agent-sdk-code-bg);
1615
+ border-radius: var(--agent-sdk-radius);
1616
+ overflow-x: auto;
1617
+ margin: 0.75em 0;
1618
+ border: 1px solid var(--agent-sdk-border);
1619
+ }
1620
+
1621
+ [data-md-code-block] code {
1622
+ display: block;
1623
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-lg);
1624
+ font-family: var(--agent-sdk-font-mono);
1625
+ font-size: var(--agent-sdk-font-sm);
1626
+ line-height: 1.5;
1627
+ color: var(--agent-sdk-code-fg);
1628
+ white-space: pre;
1629
+ tab-size: 2;
1630
+ }
1631
+
1632
+ [data-md-inline-code] {
1633
+ font-family: var(--agent-sdk-font-mono);
1634
+ font-size: 0.875em;
1635
+ padding: 1px 6px;
1636
+ border-radius: 4px;
1637
+ background: var(--agent-sdk-inline-code-bg);
1638
+ color: var(--agent-sdk-inline-code-fg);
1639
+ word-break: break-word;
1640
+ }
1641
+
1642
+ [data-md-blockquote] {
1643
+ border-left: 3px solid var(--agent-sdk-border-strong);
1644
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-lg);
1645
+ color: var(--agent-sdk-fg-muted);
1646
+ margin: 0.75em 0;
1647
+ font-style: italic;
1648
+ }
1649
+
1650
+ [data-md-list] {
1651
+ padding-left: 1.5em;
1652
+ margin: 0.5em 0;
1653
+ }
1654
+
1655
+ [data-md-list] li {
1656
+ margin: 0.25em 0;
1657
+ }
1658
+
1659
+ [data-md-list] li::marker {
1660
+ color: var(--agent-sdk-fg-subtle);
1661
+ }
1662
+
1663
+ [data-md-root] a {
1664
+ color: var(--agent-sdk-primary);
1665
+ text-decoration: none;
1666
+ font-weight: 500;
1667
+ transition: opacity var(--agent-sdk-transition-fast);
1668
+ }
1669
+
1670
+ [data-md-root] a:hover {
1671
+ opacity: 0.8;
1672
+ text-decoration: underline;
1673
+ }
1674
+
1675
+ [data-md-root] strong {
1676
+ font-weight: 600;
1677
+ color: var(--agent-sdk-fg);
1678
+ }
1679
+
1680
+ [data-md-root] em {
1681
+ font-style: italic;
1682
+ }
1683
+
1684
+ /* ─── 14. Backend selector ───────────────────────────────────────── */
1685
+
1686
+ [data-backend-selector] {
1687
+ display: flex;
1688
+ flex-direction: column;
1689
+ gap: var(--agent-sdk-spacing-sm);
1690
+ }
1691
+
1692
+ [data-backend-item] {
1693
+ display: flex;
1694
+ align-items: center;
1695
+ gap: var(--agent-sdk-spacing-md);
1696
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-lg);
1697
+ border: 1px solid var(--agent-sdk-border);
1698
+ border-radius: var(--agent-sdk-radius);
1699
+ background: transparent;
1700
+ color: var(--agent-sdk-fg);
1701
+ cursor: pointer;
1702
+ transition: all var(--agent-sdk-transition);
1703
+ font-family: var(--agent-sdk-font-family);
1704
+ font-size: var(--agent-sdk-font-size);
1705
+ text-align: left;
1706
+ width: 100%;
1707
+ }
1708
+
1709
+ [data-backend-item]:hover {
1710
+ background: var(--agent-sdk-bg-tertiary);
1711
+ border-color: var(--agent-sdk-border-strong);
1712
+ }
1713
+
1714
+ [data-backend-item][data-backend-active="true"] {
1715
+ border-color: var(--agent-sdk-primary);
1716
+ background: var(--agent-sdk-info-bg);
1717
+ }
1718
+
1719
+ /* ─── 15. Provider selector ──────────────────────────────────────── */
1720
+
1721
+ [data-provider-selector] {
1722
+ position: relative;
1723
+ display: inline-flex;
1724
+ font-family: var(--agent-sdk-font-family);
1725
+ font-size: var(--agent-sdk-font-size);
1726
+ }
1727
+
1728
+ [data-provider-trigger] {
1729
+ display: inline-flex;
1730
+ align-items: center;
1731
+ gap: var(--agent-sdk-spacing-xs);
1732
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-sm);
1733
+ border: 1px solid var(--agent-sdk-border);
1734
+ border-radius: var(--agent-sdk-radius-sm);
1735
+ background: transparent;
1736
+ color: var(--agent-sdk-fg-muted);
1737
+ font-size: var(--agent-sdk-font-sm);
1738
+ cursor: pointer;
1739
+ transition: all var(--agent-sdk-transition);
1740
+ font-family: var(--agent-sdk-font-family);
1741
+ white-space: nowrap;
1742
+ }
1743
+
1744
+ [data-provider-trigger]:hover {
1745
+ background: var(--agent-sdk-bg-secondary);
1746
+ color: var(--agent-sdk-fg);
1747
+ }
1748
+
1749
+ [data-provider-dropdown] {
1750
+ position: absolute;
1751
+ bottom: calc(100% + 4px);
1752
+ left: 0;
1753
+ min-width: 220px;
1754
+ background: var(--agent-sdk-bg-secondary);
1755
+ border: 1px solid var(--agent-sdk-border-strong);
1756
+ border-radius: var(--agent-sdk-radius);
1757
+ box-shadow: var(--agent-sdk-shadow-lg);
1758
+ z-index: 100;
1759
+ animation: agent-sdk-slide-down 100ms ease-out;
1760
+ display: flex;
1761
+ flex-direction: column;
1762
+ overflow: hidden;
1763
+ }
1764
+
1765
+ [data-provider-item] {
1766
+ display: flex;
1767
+ align-items: center;
1768
+ gap: var(--agent-sdk-spacing-sm);
1769
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1770
+ cursor: pointer;
1771
+ transition: background var(--agent-sdk-transition-fast);
1772
+ font-size: var(--agent-sdk-font-sm);
1773
+ color: var(--agent-sdk-fg);
1774
+ border: none;
1775
+ background: none;
1776
+ width: 100%;
1777
+ text-align: left;
1778
+ font-family: var(--agent-sdk-font-family);
1779
+ }
1780
+
1781
+ [data-provider-item]:hover,
1782
+ [data-provider-highlighted="true"] {
1783
+ background: var(--agent-sdk-bg-tertiary);
1784
+ }
1785
+
1786
+ [data-provider-active="true"] {
1787
+ font-weight: 500;
1788
+ color: var(--agent-sdk-primary);
1789
+ }
1790
+
1791
+ [data-provider-label] {
1792
+ font-weight: 500;
1793
+ }
1794
+
1795
+ [data-provider-model] {
1796
+ font-size: var(--agent-sdk-font-xs);
1797
+ color: var(--agent-sdk-fg-muted);
1798
+ margin-left: auto;
1799
+ }
1800
+
1801
+ /* Settings button at bottom of provider dropdown */
1802
+ [data-provider-settings-btn] {
1803
+ display: flex;
1804
+ align-items: center;
1805
+ gap: var(--agent-sdk-spacing-sm);
1806
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
1807
+ border: none;
1808
+ border-top: 1px solid var(--agent-sdk-border);
1809
+ background: transparent;
1810
+ color: var(--agent-sdk-fg-muted);
1811
+ font-size: var(--agent-sdk-font-sm);
1812
+ cursor: pointer;
1813
+ transition: all var(--agent-sdk-transition);
1814
+ font-family: var(--agent-sdk-font-family);
1815
+ width: 100%;
1816
+ text-align: left;
1817
+ }
1818
+
1819
+ [data-provider-settings-btn]:hover {
1820
+ background: var(--agent-sdk-bg-tertiary);
1821
+ color: var(--agent-sdk-fg);
1822
+ }
1823
+
1824
+ /* ─── 16. Provider settings (modal) ──────────────────────────────── */
1825
+
1826
+ [data-provider-settings-overlay] {
1827
+ position: fixed;
1828
+ inset: 0;
1829
+ background: rgba(0, 0, 0, 0.6);
1830
+ display: flex;
1831
+ align-items: center;
1832
+ justify-content: center;
1833
+ z-index: 200;
1834
+ animation: agent-sdk-fade-in 150ms ease-out;
1835
+ backdrop-filter: blur(4px);
1836
+ }
1837
+
1838
+ [data-provider-settings-content] {
1839
+ animation: agent-sdk-scale-in 200ms ease-out;
1840
+ }
1841
+
1842
+ [data-provider-settings-overlay][data-closing] {
1843
+ animation: agent-sdk-fade-out 150ms ease-in forwards;
1844
+ }
1845
+
1846
+ [data-provider-settings-content][data-closing] {
1847
+ animation: agent-sdk-scale-out 150ms ease-in forwards;
1848
+ }
1849
+
1850
+ [data-provider-settings] {
1851
+ background: var(--agent-sdk-bg-secondary);
1852
+ border: 1px solid var(--agent-sdk-border-strong);
1853
+ border-radius: var(--agent-sdk-radius-lg);
1854
+ box-shadow: var(--agent-sdk-shadow-xl);
1855
+ width: 480px;
1856
+ max-width: 90vw;
1857
+ max-height: 80vh;
1858
+ overflow-y: auto;
1859
+ }
1860
+
1861
+ [data-provider-settings-header] {
1862
+ display: flex;
1863
+ align-items: center;
1864
+ justify-content: space-between;
1865
+ padding: var(--agent-sdk-spacing-lg) var(--agent-sdk-spacing-xl);
1866
+ border-bottom: 1px solid var(--agent-sdk-border);
1867
+ font-weight: 600;
1868
+ font-size: 16px;
1869
+ }
1870
+
1871
+ [data-provider-settings-close] {
1872
+ width: 28px;
1873
+ height: 28px;
1874
+ border: none;
1875
+ border-radius: var(--agent-sdk-radius-sm);
1876
+ background: transparent;
1877
+ color: var(--agent-sdk-fg-muted);
1878
+ cursor: pointer;
1879
+ display: flex;
1880
+ align-items: center;
1881
+ justify-content: center;
1882
+ font-size: 16px;
1883
+ transition: all var(--agent-sdk-transition);
1884
+ }
1885
+
1886
+ [data-provider-settings-close]:hover {
1887
+ background: var(--agent-sdk-bg-tertiary);
1888
+ color: var(--agent-sdk-fg);
1889
+ }
1890
+
1891
+ [data-provider-settings-list] {
1892
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl);
1893
+ display: flex;
1894
+ flex-direction: column;
1895
+ gap: var(--agent-sdk-spacing-sm);
1896
+ }
1897
+
1898
+ [data-provider-settings-item] {
1899
+ display: flex;
1900
+ align-items: center;
1901
+ gap: var(--agent-sdk-spacing-md);
1902
+ padding: var(--agent-sdk-spacing-md);
1903
+ border: 1px solid var(--agent-sdk-border);
1904
+ border-radius: var(--agent-sdk-radius);
1905
+ transition: border-color var(--agent-sdk-transition);
1906
+ }
1907
+
1908
+ [data-provider-settings-item]:hover {
1909
+ border-color: var(--agent-sdk-border-strong);
1910
+ }
1911
+
1912
+ [data-provider-settings-label] {
1913
+ font-weight: 500;
1914
+ font-size: var(--agent-sdk-font-size);
1915
+ }
1916
+
1917
+ [data-provider-settings-model] {
1918
+ font-size: var(--agent-sdk-font-sm);
1919
+ color: var(--agent-sdk-fg-muted);
1920
+ font-family: var(--agent-sdk-font-mono);
1921
+ }
1922
+
1923
+ [data-provider-settings-actions] {
1924
+ display: flex;
1925
+ gap: var(--agent-sdk-spacing-sm);
1926
+ margin-left: auto;
1927
+ }
1928
+
1929
+ [data-provider-settings-actions] button {
1930
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-sm);
1931
+ border: 1px solid var(--agent-sdk-border);
1932
+ border-radius: var(--agent-sdk-radius-sm);
1933
+ background: transparent;
1934
+ color: var(--agent-sdk-fg-muted);
1935
+ font-size: var(--agent-sdk-font-xs);
1936
+ cursor: pointer;
1937
+ transition: all var(--agent-sdk-transition);
1938
+ font-family: var(--agent-sdk-font-family);
1939
+ }
1940
+
1941
+ [data-provider-settings-actions] button:hover {
1942
+ background: var(--agent-sdk-bg-tertiary);
1943
+ color: var(--agent-sdk-fg);
1944
+ }
1945
+
1946
+ [data-action="delete-provider"]:hover {
1947
+ background: var(--agent-sdk-error-bg) !important;
1948
+ color: var(--agent-sdk-error) !important;
1949
+ border-color: var(--agent-sdk-error) !important;
1950
+ }
1951
+
1952
+ [data-provider-settings-empty] {
1953
+ padding: var(--agent-sdk-spacing-xl);
1954
+ text-align: center;
1955
+ color: var(--agent-sdk-fg-subtle);
1956
+ font-size: var(--agent-sdk-font-sm);
1957
+ }
1958
+
1959
+ [data-action="add-provider"] {
1960
+ margin: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl);
1961
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-lg);
1962
+ border: 1px dashed var(--agent-sdk-border-strong);
1963
+ border-radius: var(--agent-sdk-radius);
1964
+ background: transparent;
1965
+ color: var(--agent-sdk-fg-muted);
1966
+ font-size: var(--agent-sdk-font-sm);
1967
+ cursor: pointer;
1968
+ transition: all var(--agent-sdk-transition);
1969
+ font-family: var(--agent-sdk-font-family);
1970
+ display: flex;
1971
+ align-items: center;
1972
+ justify-content: center;
1973
+ gap: var(--agent-sdk-spacing-sm);
1974
+ }
1975
+
1976
+ [data-action="add-provider"]:hover {
1977
+ background: var(--agent-sdk-bg-tertiary);
1978
+ color: var(--agent-sdk-fg);
1979
+ border-color: var(--agent-sdk-primary);
1980
+ }
1981
+
1982
+ /* Backend options in provider settings */
1983
+ [data-provider-settings-backends] {
1984
+ display: flex;
1985
+ flex-direction: column;
1986
+ gap: var(--agent-sdk-spacing-sm);
1987
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl);
1988
+ }
1989
+
1990
+ [data-provider-backend-option] {
1991
+ display: flex;
1992
+ align-items: center;
1993
+ gap: var(--agent-sdk-spacing-md);
1994
+ padding: var(--agent-sdk-spacing-md);
1995
+ border: 1px solid var(--agent-sdk-border);
1996
+ border-radius: var(--agent-sdk-radius);
1997
+ background: transparent;
1998
+ color: var(--agent-sdk-fg);
1999
+ cursor: pointer;
2000
+ transition: all var(--agent-sdk-transition);
2001
+ font-family: var(--agent-sdk-font-family);
2002
+ font-size: var(--agent-sdk-font-size);
2003
+ text-align: left;
2004
+ width: 100%;
2005
+ }
2006
+
2007
+ [data-provider-backend-option]:hover {
2008
+ background: var(--agent-sdk-bg-tertiary);
2009
+ border-color: var(--agent-sdk-border-strong);
2010
+ }
2011
+
2012
+ /* Auth section in provider settings */
2013
+ [data-provider-settings-auth] {
2014
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl);
2015
+ display: flex;
2016
+ flex-direction: column;
2017
+ gap: var(--agent-sdk-spacing-md);
2018
+ }
2019
+
2020
+ [data-provider-settings-auth] a {
2021
+ color: var(--agent-sdk-primary);
2022
+ text-decoration: none;
2023
+ font-size: var(--agent-sdk-font-sm);
2024
+ }
2025
+
2026
+ [data-provider-settings-auth] a:hover {
2027
+ text-decoration: underline;
2028
+ }
2029
+
2030
+ [data-provider-settings-form] {
2031
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl);
2032
+ display: flex;
2033
+ flex-direction: column;
2034
+ gap: var(--agent-sdk-spacing-md);
2035
+ }
2036
+
2037
+ [data-provider-settings-form] input,
2038
+ [data-provider-settings-form] select,
2039
+ [data-provider-settings-auth] input {
2040
+ width: 100%;
2041
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
2042
+ border: 1px solid var(--agent-sdk-border);
2043
+ border-radius: var(--agent-sdk-radius);
2044
+ background: var(--agent-sdk-bg);
2045
+ color: var(--agent-sdk-fg);
2046
+ font-family: var(--agent-sdk-font-family);
2047
+ font-size: var(--agent-sdk-font-size);
2048
+ outline: none;
2049
+ transition: border-color var(--agent-sdk-transition);
2050
+ }
2051
+
2052
+ [data-provider-settings-form] input:focus,
2053
+ [data-provider-settings-form] select:focus,
2054
+ [data-provider-settings-auth] input:focus {
2055
+ border-color: var(--agent-sdk-border-focus);
2056
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
2057
+ }
2058
+
2059
+ /* Action buttons in provider settings forms */
2060
+ [data-action="start-auth"],
2061
+ [data-action="complete-auth"] button,
2062
+ [data-action="submit-apikey"],
2063
+ [data-action="save-provider"],
2064
+ [data-action="update-provider"],
2065
+ [data-action="continue"] {
2066
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-lg);
2067
+ border-radius: var(--agent-sdk-radius);
2068
+ border: none;
2069
+ background: var(--agent-sdk-primary);
2070
+ color: var(--agent-sdk-primary-fg);
2071
+ font-size: var(--agent-sdk-font-size);
2072
+ font-weight: 500;
2073
+ cursor: pointer;
2074
+ transition: background var(--agent-sdk-transition);
2075
+ font-family: var(--agent-sdk-font-family);
2076
+ }
2077
+
2078
+ [data-action="start-auth"]:hover,
2079
+ [data-action="save-provider"]:hover,
2080
+ [data-action="update-provider"]:hover,
2081
+ [data-action="continue"]:hover {
2082
+ background: var(--agent-sdk-primary-hover);
2083
+ }
2084
+
2085
+ /* ─── 17. Chat input area (composer + provider selector) ─────────── */
2086
+
2087
+ [data-chat-input-area] {
2088
+ display: flex;
2089
+ flex-direction: column;
2090
+ max-width: var(--agent-sdk-content-width);
2091
+ width: 100%;
2092
+ margin: 0 auto;
2093
+ padding: var(--agent-sdk-spacing-md) var(--agent-sdk-spacing-xl) var(--agent-sdk-spacing-lg);
2094
+ }
2095
+
2096
+ /* Unified bordered container: controls + composer inside one border */
2097
+ [data-chat-input-container] {
2098
+ display: flex;
2099
+ flex-direction: column;
2100
+ background: var(--agent-sdk-bg-secondary);
2101
+ border: 1px solid var(--agent-sdk-border);
2102
+ border-radius: var(--agent-sdk-radius-xl);
2103
+ transition: border-color var(--agent-sdk-transition), box-shadow var(--agent-sdk-transition);
2104
+ overflow: visible;
2105
+ }
2106
+
2107
+ [data-chat-input-container]:focus-within {
2108
+ border-color: var(--agent-sdk-border-focus);
2109
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
2110
+ }
2111
+
2112
+ [data-chat-input-controls] {
2113
+ display: flex;
2114
+ align-items: center;
2115
+ gap: var(--agent-sdk-spacing-sm);
2116
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md) 0 var(--agent-sdk-spacing-md);
2117
+ }
2118
+
2119
+ /* Composer inside container: strip standalone styles */
2120
+ [data-chat-input-container] > [data-composer] {
2121
+ padding: 0;
2122
+ margin: 0;
2123
+ max-width: none;
2124
+ }
2125
+
2126
+ /* Hide gradient overlay inside unified container */
2127
+ [data-chat-input-container] > [data-composer]::before {
2128
+ display: none;
2129
+ }
2130
+
2131
+ /* Input wrapper inside container: remove own border/bg (container provides them) */
2132
+ [data-chat-input-container] [data-input] {
2133
+ border: none;
2134
+ background: transparent;
2135
+ border-radius: 0;
2136
+ box-shadow: none;
2137
+ }
2138
+
2139
+ /* Focus-within on nested input should not show its own ring */
2140
+ [data-chat-input-container] > [data-composer]:focus-within [data-input] {
2141
+ border-color: transparent;
2142
+ box-shadow: none;
2143
+ }
2144
+
2145
+ /* ─── 18. Empty state ────────────────────────────────────────────── */
2146
+
2147
+ [data-chat-empty-state] {
2148
+ flex: 1;
2149
+ display: flex;
2150
+ flex-direction: column;
2151
+ align-items: center;
2152
+ justify-content: center;
2153
+ gap: var(--agent-sdk-spacing-lg);
2154
+ padding: var(--agent-sdk-spacing-2xl);
2155
+ }
2156
+
2157
+ [data-chat-empty-title] {
2158
+ font-size: 16px;
2159
+ font-weight: 500;
2160
+ color: var(--agent-sdk-fg-muted);
2161
+ }
2162
+
2163
+ [data-chat-empty-state] > [data-action="open-settings"] {
2164
+ background: var(--agent-sdk-primary);
2165
+ color: var(--agent-sdk-primary-fg);
2166
+ border: none;
2167
+ border-radius: var(--agent-sdk-radius);
2168
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-lg);
2169
+ font-size: var(--agent-sdk-font-size);
2170
+ font-family: var(--agent-sdk-font-family);
2171
+ cursor: pointer;
2172
+ transition: background 150ms;
2173
+ }
2174
+
2175
+ [data-chat-empty-state] > [data-action="open-settings"]:hover {
2176
+ background: var(--agent-sdk-primary-hover);
2177
+ }
2178
+
2179
+ /* ─── Error Banner ──────────────────────────────────────────── */
2180
+
2181
+ [data-chat-error] {
2182
+ display: flex;
2183
+ flex-wrap: wrap;
2184
+ align-items: center;
2185
+ gap: var(--agent-sdk-spacing-sm);
2186
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
2187
+ margin: 0 var(--agent-sdk-spacing-md);
2188
+ background: #fef2f2;
2189
+ border: 1px solid #fecaca;
2190
+ border-radius: var(--agent-sdk-radius);
2191
+ color: #991b1b;
2192
+ font-size: var(--agent-sdk-font-size-sm, 13px);
2193
+ animation: agent-sdk-slide-down 200ms ease-out;
2194
+ }
2195
+
2196
+ [data-theme="dark"] [data-chat-error],
2197
+ @media (prefers-color-scheme: dark) {
2198
+ [data-chat-error]:not([data-theme="light"] *) {
2199
+ background: rgba(220, 38, 38, 0.1);
2200
+ border-color: rgba(220, 38, 38, 0.3);
2201
+ color: #fca5a5;
2202
+ }
2203
+ }
2204
+
2205
+ [data-chat-error-text] {
2206
+ flex: 1;
2207
+ overflow: hidden;
2208
+ text-overflow: ellipsis;
2209
+ white-space: nowrap;
2210
+ }
2211
+
2212
+ [data-chat-error-actions] {
2213
+ display: flex;
2214
+ align-items: center;
2215
+ gap: 4px;
2216
+ flex-shrink: 0;
2217
+ }
2218
+
2219
+ [data-chat-error] [data-action="retry"] {
2220
+ background: none;
2221
+ border: 1px solid currentColor;
2222
+ color: inherit;
2223
+ cursor: pointer;
2224
+ padding: 2px 8px;
2225
+ font-size: 12px;
2226
+ border-radius: var(--agent-sdk-radius, 6px);
2227
+ opacity: 0.8;
2228
+ }
2229
+
2230
+ [data-chat-error] [data-action="retry"]:hover {
2231
+ opacity: 1;
2232
+ }
2233
+
2234
+ [data-chat-error] [data-action="dismiss-error"] {
2235
+ background: none;
2236
+ border: none;
2237
+ color: inherit;
2238
+ cursor: pointer;
2239
+ padding: 2px 6px;
2240
+ font-size: 14px;
2241
+ opacity: 0.7;
2242
+ flex-shrink: 0;
2243
+ }
2244
+
2245
+ [data-chat-error] [data-action="dismiss-error"]:hover {
2246
+ opacity: 1;
2247
+ }
2248
+
2249
+ [data-chat-error-details] {
2250
+ width: 100%;
2251
+ margin-top: var(--agent-sdk-spacing-xs, 4px);
2252
+ font-size: 11px;
2253
+ opacity: 0.8;
2254
+ }
2255
+
2256
+ [data-chat-error-details] summary {
2257
+ cursor: pointer;
2258
+ user-select: none;
2259
+ }
2260
+
2261
+ [data-chat-error-details] pre {
2262
+ margin: var(--agent-sdk-spacing-xs, 4px) 0 0;
2263
+ padding: var(--agent-sdk-spacing-sm);
2264
+ background: rgba(0, 0, 0, 0.05);
2265
+ border-radius: var(--agent-sdk-radius, 6px);
2266
+ overflow-x: auto;
2267
+ white-space: pre-wrap;
2268
+ word-break: break-word;
2269
+ max-height: 120px;
2270
+ overflow-y: auto;
2271
+ }
2272
+
2273
+ /* ─── 19. Provider–Model Selector (unified) ──────────────────────── */
2274
+
2275
+ [data-provider-model-selector] {
2276
+ position: relative;
2277
+ display: inline-flex;
2278
+ font-family: var(--agent-sdk-font-family);
2279
+ font-size: var(--agent-sdk-font-size);
2280
+ flex-shrink: 0;
2281
+ align-self: flex-end;
2282
+ margin-bottom: 2px;
2283
+ }
2284
+
2285
+ [data-pms-trigger] {
2286
+ display: inline-flex;
2287
+ align-items: center;
2288
+ gap: var(--agent-sdk-spacing-sm);
2289
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-md);
2290
+ border: 1px solid var(--agent-sdk-border);
2291
+ border-radius: var(--agent-sdk-radius-sm);
2292
+ background: transparent;
2293
+ color: var(--agent-sdk-fg-muted);
2294
+ font-size: var(--agent-sdk-font-sm);
2295
+ font-family: var(--agent-sdk-font-family);
2296
+ cursor: pointer;
2297
+ transition: all var(--agent-sdk-transition);
2298
+ white-space: nowrap;
2299
+ }
2300
+
2301
+ [data-pms-trigger]:hover {
2302
+ background: var(--agent-sdk-bg-secondary);
2303
+ color: var(--agent-sdk-fg);
2304
+ }
2305
+
2306
+ [data-pms-trigger]::after {
2307
+ content: "▾";
2308
+ font-size: 10px;
2309
+ opacity: 0.5;
2310
+ }
2311
+
2312
+ [data-pms-dropdown] {
2313
+ position: absolute;
2314
+ bottom: calc(100% + 4px);
2315
+ left: 0;
2316
+ min-width: 260px;
2317
+ max-height: 320px;
2318
+ overflow-y: auto;
2319
+ background: var(--agent-sdk-bg-secondary);
2320
+ border: 1px solid var(--agent-sdk-border-strong);
2321
+ border-radius: var(--agent-sdk-radius);
2322
+ box-shadow: var(--agent-sdk-shadow-lg);
2323
+ z-index: 100;
2324
+ animation: agent-sdk-scale-in 100ms ease-out;
2325
+ display: flex;
2326
+ flex-direction: column;
2327
+ }
2328
+
2329
+ [data-pms-search] {
2330
+ width: 100%;
2331
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
2332
+ border: none;
2333
+ border-bottom: 1px solid var(--agent-sdk-border);
2334
+ background: transparent;
2335
+ color: var(--agent-sdk-fg);
2336
+ font-family: var(--agent-sdk-font-family);
2337
+ font-size: var(--agent-sdk-font-sm);
2338
+ outline: none;
2339
+ }
2340
+
2341
+ [data-pms-search]::placeholder {
2342
+ color: var(--agent-sdk-fg-subtle);
2343
+ }
2344
+
2345
+ [data-pms-item] {
2346
+ display: flex;
2347
+ flex-direction: row;
2348
+ align-items: center;
2349
+ gap: var(--agent-sdk-spacing-sm);
2350
+ padding: 6px var(--agent-sdk-spacing-md);
2351
+ cursor: pointer;
2352
+ transition: background var(--agent-sdk-transition-fast);
2353
+ font-size: var(--agent-sdk-font-sm);
2354
+ color: var(--agent-sdk-fg);
2355
+ border: none;
2356
+ background: none;
2357
+ width: 100%;
2358
+ text-align: left;
2359
+ font-family: var(--agent-sdk-font-family);
2360
+ }
2361
+
2362
+ [data-pms-item]:hover,
2363
+ [data-pms-highlighted] {
2364
+ background: var(--agent-sdk-bg-tertiary);
2365
+ }
2366
+
2367
+ [data-pms-active] {
2368
+ font-weight: 500;
2369
+ color: var(--agent-sdk-primary);
2370
+ background: var(--agent-sdk-bg-tertiary);
2371
+ }
2372
+
2373
+ [data-pms-label] {
2374
+ font-size: var(--agent-sdk-font-sm);
2375
+ }
2376
+
2377
+ [data-pms-sublabel] {
2378
+ font-size: var(--agent-sdk-font-xs);
2379
+ color: var(--agent-sdk-fg-subtle);
2380
+ }
2381
+
2382
+ [data-pms-settings] {
2383
+ display: flex;
2384
+ align-items: center;
2385
+ justify-content: center;
2386
+ width: 100%;
2387
+ padding: var(--agent-sdk-spacing-sm) var(--agent-sdk-spacing-md);
2388
+ border: none;
2389
+ border-top: 1px solid var(--agent-sdk-border);
2390
+ background: transparent;
2391
+ color: var(--agent-sdk-fg-muted);
2392
+ font-size: var(--agent-sdk-font-sm);
2393
+ font-family: var(--agent-sdk-font-family);
2394
+ cursor: pointer;
2395
+ transition: all var(--agent-sdk-transition-fast);
2396
+ }
2397
+
2398
+ [data-pms-settings]:hover {
2399
+ background: var(--agent-sdk-bg-tertiary);
2400
+ color: var(--agent-sdk-fg);
2401
+ }
2402
+
2403
+ /* ─── Usage Badge ─────────────────────────────────────────── */
2404
+
2405
+ [data-usage-badge] {
2406
+ display: inline-flex;
2407
+ align-items: center;
2408
+ gap: var(--agent-sdk-spacing-xs);
2409
+ font-size: var(--agent-sdk-font-xs);
2410
+ color: var(--agent-sdk-fg-muted);
2411
+ font-family: var(--agent-sdk-font-mono);
2412
+ line-height: 1;
2413
+ }
2414
+
2415
+ [data-usage-tokens] {
2416
+ padding: 2px var(--agent-sdk-spacing-xs);
2417
+ border-radius: var(--agent-sdk-radius-sm);
2418
+ background: var(--agent-sdk-bg-tertiary);
2419
+ }
2420
+
2421
+ /* ── ContextStatsDisplay ────────────────────────────────────── */
2422
+
2423
+ [data-context-stats] {
2424
+ display: inline-flex;
2425
+ align-items: center;
2426
+ gap: var(--agent-sdk-spacing-sm);
2427
+ font-size: var(--agent-sdk-font-xs);
2428
+ color: var(--agent-sdk-fg-muted);
2429
+ font-family: var(--agent-sdk-font-mono);
2430
+ line-height: 1;
2431
+ padding: var(--agent-sdk-spacing-xs) var(--agent-sdk-spacing-sm);
2432
+ border-radius: var(--agent-sdk-radius-sm);
2433
+ background: var(--agent-sdk-bg-tertiary);
2434
+ }
2435
+
2436
+ [data-context-stats][data-context-truncated="true"] {
2437
+ border-left: 2px solid var(--agent-sdk-warning, #d97706);
2438
+ }
2439
+
2440
+ [data-context-tokens],
2441
+ [data-context-budget],
2442
+ [data-context-usage],
2443
+ [data-context-removed] {
2444
+ white-space: nowrap;
2445
+ }
2446
+
2447
+ [data-context-tokens]::before {
2448
+ content: "📊 ";
2449
+ }
2450
+
2451
+ [data-context-usage] {
2452
+ padding: 1px var(--agent-sdk-spacing-xs);
2453
+ border-radius: var(--agent-sdk-radius-sm);
2454
+ font-weight: 600;
2455
+ }
2456
+
2457
+ [data-context-usage][data-usage-percent] {
2458
+ background: color-mix(in srgb, var(--agent-sdk-success, #16a34a) 15%, transparent);
2459
+ color: var(--agent-sdk-success, #16a34a);
2460
+ }
2461
+
2462
+ /* Medium usage: 50–79% */
2463
+ [data-context-usage][data-usage-percent^="5"],
2464
+ [data-context-usage][data-usage-percent^="6"],
2465
+ [data-context-usage][data-usage-percent^="7"] {
2466
+ background: color-mix(in srgb, var(--agent-sdk-warning, #d97706) 15%, transparent);
2467
+ color: var(--agent-sdk-warning, #d97706);
2468
+ }
2469
+
2470
+ /* High usage: 80–99% */
2471
+ [data-context-usage][data-usage-percent^="8"],
2472
+ [data-context-usage][data-usage-percent^="9"] {
2473
+ background: color-mix(in srgb, var(--agent-sdk-error, #dc2626) 15%, transparent);
2474
+ color: var(--agent-sdk-error, #dc2626);
2475
+ }
2476
+
2477
+ /* Full: 100% */
2478
+ [data-context-usage][data-usage-percent="100"] {
2479
+ background: color-mix(in srgb, var(--agent-sdk-error, #dc2626) 25%, transparent);
2480
+ color: var(--agent-sdk-error, #dc2626);
2481
+ font-weight: 700;
2482
+ }
2483
+
2484
+ /* Single-digit values (5-9) are low usage — override ^= false positives */
2485
+ [data-context-usage][data-usage-percent="5"],
2486
+ [data-context-usage][data-usage-percent="6"],
2487
+ [data-context-usage][data-usage-percent="7"],
2488
+ [data-context-usage][data-usage-percent="8"],
2489
+ [data-context-usage][data-usage-percent="9"] {
2490
+ background: color-mix(in srgb, var(--agent-sdk-success, #16a34a) 15%, transparent);
2491
+ color: var(--agent-sdk-success, #16a34a);
2492
+ }
2493
+
2494
+ [data-context-removed] {
2495
+ color: var(--agent-sdk-warning, #d97706);
2496
+ }
2497
+
2498
+ [data-context-budget] {
2499
+ opacity: 0.7;
2500
+ }
2501
+
2502
+ /* Separator dots between stats */
2503
+ [data-context-stats] > span + span::before {
2504
+ content: "·";
2505
+ margin-right: var(--agent-sdk-spacing-sm);
2506
+ color: var(--agent-sdk-border);
2507
+ }
2508
+
2509
+ /* Dark mode adjustments */
2510
+ [data-theme="dark"] [data-context-stats] {
2511
+ background: var(--agent-sdk-bg-tertiary);
2512
+ }
2513
+ @media (prefers-color-scheme: dark) {
2514
+ [data-context-stats] {
2515
+ background: var(--agent-sdk-bg-tertiary);
2516
+ }
2517
+ }